Introduction
IBM® Key Protect for IBM Cloud™ helps you provision encrypted keys for apps across IBM Cloud. As you manage the lifecycle of your keys, you can benefit from knowing that your keys are secured by cloud-based FIPS 140-2 Level 3 hardware security modules (HSMs) that protect against the theft of information.
Key Protect provides a REST API that you can use with any programming language to store, retrieve, and generate encryption keys. For details about using Key Protect, see the IBM Cloud docs.
API endpoint
https://<region>.kms.cloud.ibm.com
Replace <region> with the prefix that represents the geographic area where
your Key Protect service instance resides.
For more information, see
Regions and locations.
The code examples on this tab use the client library that is provided for Go.
go get -u github.com/IBM/keyprotect-go-client
GitHub:
The code examples on this tab use the client library that is provided for NodeJS.
npm install @ibm-cloud/ibm-key-protect
GitHub:
The code examples on this tab use the client library that is provided for Python.
pip install -U keyprotect
GitHub:
The code examples on this tab use the client library that is provided for Java.
git clone https://github.com/IBM/keyprotect-java-client
cd keyprotect-java-client
mvn install
GitHub:
Authentication
To call each method, you'll need to be assigned a role that includes the required IAM actions. Each method lists the associated action. For more information about IAM actions and how they map to roles, see Managing access for Key Protect.
To work with the API, authenticate your app or service by including your IBM Cloud IAM access token and instance ID in API requests.
You can build your API request by pairing a
service endpoint
with your authentication credentials. For example, if you created a
Key Protect service instance for the
us-south region, use the following endpoint and API headers to browse keys in
your service:
curl -X GET \
https://us-south.kms.cloud.ibm.com/api/v2/keys \
-H "accept: application/vnd.ibm.collection+json" \
-H "authorization: Bearer <access_token>" \
-H "bluemix-instance: <instance_ID>"
Replace <access_token> with your Cloud IAM token, and <instance_ID> with the
IBM Cloud instance ID that identifies your
Key Protect service instance.
You can retrieve an access token by first creating an API key, and then exchanging your API key for a Cloud IAM token. For more information, see Retrieving an access token programmatically.
To find out more about setting up the Key Protect API, see Accessing the API.
IBM Cloud Identity and Access Management (IAM) is the primary method to
authenticate to the Key Protect API. The SDK
provides client config initialization method in which you will need to replace
Key Protect endpoint URL with a service endpoint, the API_KEY with the API
key associated with your application, the TokenURL with your Cloud IAM token,
and InstanceID with the IBM Cloud instance ID that identifies your
Key Protect service instance.
The value kp.DefaultTokenURL for TokenURL defaults to IAM production URL.
Use the client config options in the method to create a new
Key Protect client. The method handles the
authentication procedure with the provided API_KEY.
IBM Cloud Identity and Access Management (IAM) is the primary method to authenticate to the Key Protect API. The SDK provides a client config setup in which you will need to export environment variables to match the IBMCLOUD_API_KEY term with the API key associated with your service credentials, another term, IAM_AUTH_URL with the appropriate URL like 'https://iam.cloud.ibm.com/identity/token', another term, KP_SERVICE_URL with the endpoint, including the region, such as https://us-south.kms.cloud.ibm.com, and KP_INSTANCE_ID with the IBM Cloud instance ID that identifies your Key Protect service instance.
To retrieve your instance ID:
ibmcloud resource service-instance <instance_name> --output JSON
IBM Cloud Identity and Access Management (IAM) is the primary method to
authenticate to the Key Protect API. The SDK
provides a client config setup in which you will need to replace the
IBMCLOUD_API_KEY with the API key associated with your application, and
KP_INSTANCE_ID with the IBM Cloud instance ID that identifies your
Key Protect service instance.
IBM Cloud Identity and Access Management (IAM) is the primary method to
authenticate to the Key Protect API. The SDK
provides a client config setup in which you will need to replace the
IBMCLOUD_API_KEY with the API key associated with your application, and
KP_INSTANCE_ID with the IBM Cloud instance ID that identifies your
Key Protect service instance.
IBM Cloud Identity and Access Management (IAM) is the primary method to
authenticate to the Key Protect API.
The SDK provides a client config setup in which you will need to replace the
IAM_API_KEY with the API key associated with your application, IAM_AUTH_URL
with your Cloud IAM token,KEY_PROTECT_URL with a service endpoint, and
INSTANCE_ID with the IBM Cloud instance ID that identifies your
Key Protect service instance.
To retrieve your access token:
curl -X POST https://iam.cloud.ibm.com/identity/token -H "accept: application/json" -H "content-type: application/x-www-form-urlencoded" -d "grant_type=urn%3Aibm%3Aparams%3Aoauth%3Agrant-type%3Aapikey&apikey=<API_KEY>" > token.json
Replace <API_KEY> with your
service credentials.
Then use the full access_token value, prefixed by the _Bearer_token type, to
authenticate your API requests.
To retrieve your instance ID:
ibmcloud resource service-instance <instance_name> --output JSON
Replace <instance_name> with the unique alias that you assigned to your
Key Protect service instance. The GUID
value in the JSON output represents the instance ID for the service.
To authenticate to Key Protect API:
import (
"context"
"encoding/json"
"fmt"
"github.com/IBM/keyprotect-go-client"
)
func getConfigAPIKey() kp.ClientConfig {
return kp.ClientConfig{
BaseURL: <key_protect_url>,
APIKey: <api_key>,
TokenURL: kp.DefaultTokenURL,
InstanceID: <instance_ID>,
Verbose: kp.VerboseFailOnly,
}
}
func main() {
options := getConfigAPIKey()
api, err := kp.New(options, kp.DefaultTransport())
if err != nil {
fmt.Println("Error creating kp client")
return
}
}
Replace the key_protect_url with the API endpoint.
API endpoint
https://<region>.kms.cloud.ibm.com
Replace <region> with the prefix that represents the geographic area where
your Key Protect service instance resides.
For more informaton, see
Regions and locations.
Replace <api_key> with your
service credentials.
Replace the <instance_ID> with the
Key Protect service instance ID.
To retrieve your instance ID:
ibmcloud resource service-instance <instance_name> --output JSON
Replace <instance_name> with the unique alias that you assigned to your
Key Protect service instance. The GUID
value in the JSON output represents the instance ID for the service.
To authenticate to Key Protect API:
const KeyProtectV2 = require('@ibm-cloud/ibm-key-protect/ibm-key-protect-api/v2');
const { IamAuthenticator } = require('@ibm-cloud/ibm-key-protect/auth');
// using external configuration of environment variables
const envConfigs = {
apiKey: process.env.IBMCLOUD_API_KEY,
iamAuthUrl: process.env.IAM_AUTH_URL,
serviceUrl: process.env.KP_SERVICE_URL,
bluemixInstance: process.env.KP_INSTANCE_ID,
};
// Create an IAM authenticator.
const authenticator = new IamAuthenticator({
apikey: envConfigs.apiKey,
url: envConfigs.iamAuthUrl,
});
// Construct the service client.
const keyProtectClient = new KeyProtectV2({
authenticator,
serviceUrl: envConfigs.serviceUrl,
});
For more information on the regional endpoint where your data can be accessed, see Regions and locations.
To authenticate to Key Protect API:
import os
import keyprotect
from keyprotect import bxauth
tm = bxauth.TokenManager(api_key=os.getenv("<IBMCLOUD_API_KEY>"))
kp = keyprotect.Client(
credentials=tm,
region="<region>",
service_instance_id=os.getenv("<KP_INSTANCE_ID>")
)
Replace <IBMCLOUD_API_KEY> with your
service credentials.
Replace <KP_INSTANCE_ID> with the UUID that identifies your
Key Protect instance.
To retrieve your instance ID:
ibmcloud resource service-instance <instance_name> --output JSON
Replace <region> with the prefix that represents the geographic area where
your Key Protect service instance resides.
For more information, see
Regions and locations.
To authenticate to Key Protect API:
import com.ibm.cloud.ibm_key_protect_api.v2.IbmKeyProtectApi;
import com.ibm.cloud.ibm_key_protect_api.v2.model.*;
import com.ibm.cloud.sdk.core.http.Response;
import com.ibm.cloud.sdk.core.security.*;
public class KPClient {
private static IbmKeyProtectApi testClient;
public static void main(String[] args) {
IamAuthenticator authenticator = new IamAuthenticator("<IAM_API_KEY>");
authenticator.setURL("<IAM_AUTH_URL>");
authenticator.validate();
testClient = new IbmKeyProtectApi("<INSTANCE_ID>", authenticator);
testClient.setServiceUrl("<KEY_PROTECT_URL>");
}
}
Replace <INSTANCE_ID> with the UUID that identifies your Key Protect instance.
Replace <IAM_API_KEY> with your service credentials.
Replace <IAM_AUTH_URL> with https://iam.cloud.ibm.com/identity/token.
Replace <KEY_PROTECT_URL> with the service endpoint for your instance that handles your requests.
To retrieve your instance ID, replace <instance_name> in the command as shown:
ibmcloud resource service-instance <instance_name> --output JSON
Your endpoint is specific to the geographic area where your Key Protect service instance resides. For more information, see Regions and locations.
Event tracking
You can monitor API activity within your account by using the IBM Cloud Activity Tracker with LogDNA service. Whenever an API method is called, an event is generated that you can then track and audit from within Activity Tracker with LogDNA.
The specific event type is listed for each individual method. For more information about how to track Certificate Manager activity, see Auditing Events for Key Protect.
Error handling
The Key Protect service uses standard HTTP
response codes to indicate whether a method completed successfully. A 200
response always indicates success. A 400 type response is some sort of
failure, and a 500 type response usually indicates an internal system error.
| Status code | Description |
|---|---|
| 200 OK | Everything worked as expected. |
| 201 OK | Everything worked as expected. No content |
| 400 Bad Request | The request was unsuccessful, often due to a missing required parameter. |
| 401 Unauthorized | The parameters were valid but the request failed due insufficient permissions. |
| 404 Not Found | The requested resource doesn't exist. |
| 410 Gone | The requested resource was deleted and no longer exists. |
| 429 Too Many Requests | Too many requests hit the API too quickly. |
| 500 Server Error | Something went wrong on Key Protect's end. |
Metadata
When you create or store keys in Key Protect, you can attach key-value data to your resources for easy identification of your keys.
The name, description, and tag parameters are useful for storing
information on your resources. For example, you can store corresponding unique
identifiers from your app or system on a
Key Protect key.
To protect your privacy, do not store any personally identifiable information, such as your name or location, as metadata for your keys.
Pagination
Some API requests might return a large number of results. By specifying the
limit and offset parameters at query time, you can retrieve a subset of your
keys, starting with the offset value that you specify.
For more information, see Retrieving a subset of keys.
Methods
Create a key
Creates a new key with specified key material.
Key Protect designates the resource as either a root key or a standard
key based on the extractable value that you specify. A successful
POST /keys operation adds the key to the service and returns the
details of the request in the response entity-body, if the Prefer header
is set to return=representation.
POST /api/v2/keys
Auditing
Calling this method generates the following auditing event.
kms.secrets.create
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]The ID of the key ring that the specified key belongs to. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Default:
default
The base request for creating a new key.
A collection of resources.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "name": "Root-key", "description": "...", "extractable": false } ] }'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication rootkey, err := api.CreateKey(context.Background(), <key_name>, <expiration_date>, <extractable>) if err != nil { fmt.Println("Error while creating key: ", err) return } b, _ := json.MarshalIndent(rootkey, "", " ") fmt.Println(string(b)) }
// Initialize the Key Protect client as specified in Authentication // Define the key parameters const body = { metadata: { collectionType: 'application/vnd.ibm.kms.key+json', collectionTotal: 1, }, resources: [ { type: 'application/vnd.ibm.kms.key+json', name: 'nodejsKey', extractable: false, }, ], }; const createParams = Object.assign({}, envConfigs); createParams.body = body; const response = keyProtectClient.createKey(createParams); const keyId = response.result.resources[0].id; console.log('Key created, id is: ' + keyId);
import os import keyprotect from keyprotect import bxauth # Initialize the Key Protect client as specified in Authentication key = kp.create(name="<key_name>") print("Created key '%s'" % key["id"])
// payload is null if not an imported key // payload should be base64 encoded string // notRootKey is false if this is a root key public static String createKey(String keyName, String keyDescription, String payload, boolean notRootKey) { InputStream inputstream = null; CreateKeyOptions createKeyOptionsModel = null; try { // build json format input stream JsonObjectBuilder resourceObjectBuilder = Json.createObjectBuilder() .add("name", keyName) .add("extractable", notRootKey) .add("description", keyDescription); // imported key if (payload != null) { resourceObjectBuilder.add("payload", payload); } JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder() .add("metadata", Json.createObjectBuilder() .add("collectionType", "application/vnd.ibm.kms.key+json") .add("collectionTotal", 1)) .add("resources", Json.createArrayBuilder() .add(resourceObjectBuilder)); JsonObject jsonObject = jsonObjectBuilder.build(); inputstream = new ByteArrayInputStream(jsonObject.toString().getBytes()); createKeyOptionsModel = new CreateKeyOptions.Builder() .bluemixInstance("<instance_id>") .createKeyOneOf(inputstream) .prefer("return=representation") .build(); } catch(ClassCastException e) { System.out.println("Error: " + e.toString()); return "failed to create key"; } Response<Key> response = testClient.createKey(createKeyOptionsModel).execute(); List<KeyWithPayload> key = response.getResult().getResources(); return key.toString(); }
Response
Properties associated with a key response.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key was successfully created.
The key is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The import token that was used to encrypt this key has reached its
maxAllowedRetrievalsorexpirationDate, and it is no longer available for operations. To create a new import token, usePOST /import_token.In very rare cases, the import token may expire before its expiration time. Ensure that your client application is configured with a retry mechanism for catching and responding to
409conflict exceptions.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 1, "extractable": false, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: The key is missing a required field." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: The import token that was used to encrypt this key has reached its 'maxAllowedRetrievals' or 'expirationDate', and it is no longer available for key operations. To create a new import token, use 'POST /import_token'." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List keys
Retrieves a list of keys that are stored in your Key Protect service instance.
Note: GET /keys will not return the key material in the response
body. You can retrieve the key material for a standard key with a
subsequent GET /keys/{id} request.
GET /api/v2/keys
Auditing
Calling this method generates the following auditing event.
kms.secrets.list
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the target key ring. If unspecified, all resources in the instance that the caller has access to will be returned. When the header is specified, only resources within the specified key ring, that the caller has access to, will be returned. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Query Parameters
The number of keys to retrieve. By default,
GET /keysreturns the first 200 keys. To retrieve a different set of keys, uselimitwithoffsetto page through your available resources. The maximum value forlimitis 5,000.Usage: If you have 20 keys in your instance, and you want to retrieve only the first 5 keys, use
../keys?limit=5.Possible values: 1 ≤ value ≤ 5000
Default:
200The number of keys to skip. By specifying
offset, you retrieve a subset of keys that starts with theoffsetvalue. Useoffsetwithlimitto page through your available resources.Usage: If you have 100 keys in your instance, and you want to retrieve keys 26 through 50, use
../keys?offset=25&limit=25.Possible values: value ≥ 0
Default:
0The state of the keys to be retrieved. States must be a list of integers from 0 to 5 delimited by commas with no whitespace or trailing commas. Valid states are based on NIST SP 800-57. States are integers and correspond to the Pre-activation = 0, Active = 1, Suspended = 2, Deactivated = 3, and Destroyed = 5 values.
Usage: If you want to retrieve active and deleted keys, use
../keys?state=1,5.Allowable values: [
0,1,2,3,5]Default:
[0,1,2,3]The type of keys to be retrieved. Filters keys based on the
extractableproperty. You can use this query parameter to search for keys whose material can leave the service. If set totrue, standard keys will be retrieved. If set tofalse, root keys will be retrieved. If omitted, both root and standard keys will be retrieved.Usage: If you want to retrieve standard keys, use
../keys?extractable=true.
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication keys, err := api.GetKeys(context.Background(), <limit>, <offset>) if err != nil { fmt.Println("Get Keys failed with error: ", err) return } b, _ := json.MarshalIndent(keys, "", " ") fmt.Println(string(b)) }
import os import keyprotect from keyprotect import bxauth # Initialize the Key Protect client as specified in Authentication keys = kp.keys() for key in kp.keys(): print("%s\t%s" % (key["id"], key["name"]))
// Initialize the Key Protect client as specified in Authentication const response = keyProtectClient.getKeys(envConfigs); console.log('Get keys result:'); for (let resource of response.result.resources){ console.log(resource); }
public static List<KeyRepresentation> getKeys() { GetKeysOptions getKeysOptionsModel = new GetKeysOptions.Builder() .bluemixInstance("<instance_id>") .build(); Response<ListKeys> response = testClient.getKeys(getKeysOptionsModel).execute(); List<KeyRepresentation> keys = response.getResult().getResources(); return keys; }
Response
The base schema for listing keys.
The metadata that describes the resource array.
A collection of resources.
Status Code
The list of keys was successfully retrieved.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 2 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 1, "extractable": true, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "lastRotateDate": "YYYY-MM-DDTHH:MM:SSZ", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false }, { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Standard-key", "description": "...", "state": 1, "extractable": true, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false }, { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Deleted-Standard-key", "description": "...", "state": 5, "extractable": true, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": true, "deletionDate": "YYYY-MM-DDTHH:MM:SSZ", "restoreAllowed": true, "restoreExpirationDate": "YYYY-MM-DDTHH:MM:SSZ", "purgeAllowed": false, "purgeAllowedFrom": "YYYY-MM-DDTHH:MM:SSZ", "purgeScheduledOn": "YYYY-MM-DDTHH:MM:SSZ" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Retrieve key total
Returns the same HTTP headers as a GET request without returning the entity-body. This operation returns the number of keys in your instance in a header called Key-Total.
HEAD /api/v2/keys
Auditing
Calling this method generates the following auditing event.
kms.secrets.head
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the target key ring. If unspecified, all resources in the instance that the caller has access to will be returned. When the header is specified, only resources within the specified key ring, that the caller has access to, will be returned. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Query Parameters
The state of the keys to be retrieved. States must be a list of integers from 0 to 5 delimited by commas with no whitespace or trailing commas. Valid states are based on NIST SP 800-57. States are integers and correspond to the Pre-activation = 0, Active = 1, Suspended = 2, Deactivated = 3, and Destroyed = 5 values.
Usage: If you want to retrieve active and deleted keys, use
../keys?state=1,5.Allowable values: [
0,1,2,3,5]Default:
[0,1,2,3]The type of keys to be retrieved. Filters keys based on the
extractableproperty. You can use this query parameter to search for keys whose material can leave the service. If set totrue, standard keys will be retrieved. If set tofalse, root keys will be retrieved. If omitted, both root and standard keys will be retrieved.Usage: If you want to retrieve standard keys, use
../keys?extractable=true.
curl -I HEAD https://<region>.kms.cloud.ibm.com/api/v2/keys -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Response Headers
The number of keys in your service instance.
Status Code
The metadata was successfully retrieved.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
Retrieve a key
Retrieves a key and its details by specifying the ID or alias of the key.
GET /api/v2/keys/{id}Auditing
Calling this method generates the following auditing event.
kms.secrets.read
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID or alias that uniquely identifies the key
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID_or_alias> -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication key, err := api.GetKey(context.Background(), <key_ID_or_alias>) if err != nil { fmt.Println("Get Key failed with error: ", err) return } b, _ := json.MarshalIndent(key, "", " ") fmt.Println(string(b)) }
// Initialize the Key Protect client as specified in Authentication const getKeyParams = Object.assign({}, envConfigs); getKeyParams.id = "<key_id>"; const response = keyProtectClient.getKey(getKeyParams); console.log('Get key result: '); console.log(response.result.resources[0]);
import os import keyprotect from keyprotect import bxauth # Initialize the Key Protect client as specified in Authentication key = kp.get("<key_id>") print("%s\t%s" % (key["id"], key["name"]))
public static List<KeyWithPayload> getKey(String keyId) { GetKeyOptions getKeyOptionsModel = new GetKeyOptions.Builder() .bluemixInstance("<instance_id>") .id(keyId) .build(); Response<GetKey> response = testClient.getKey(getKeyOptionsModel).execute(); List<KeyWithPayload> key = response.getResult().getResources(); return key; }
Response
The base schema for retrieving keys.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key was successfully retrieved. If the key was previously deleted,
keyVersion.creationDateis omitted from the request response.The key could not be retrieved due to a malformed, invalid, or missing ID.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found. Verify that the key ID specified is valid.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Standard-key", "description": "...", "state": 1, "extractable": true, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false, "payload": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: The key could not be retrieved due to a malformed, invalid, or missing ID." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found. Verify that the key ID specified is valid." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Invoke an action on a key
Note: This API has been deprecated and transitioned to
individual request paths. Existing actions using this API will continue
to be supported, but new actions will no longer be added to it. We
recommend, if possible, aligning your request URLs to the new API path.
The generic format of actions is now the following:
/api/v2/keys/<key_ID>/actions/<action> where key_ID is the key you
want to operate on/with and action is the same action that was passed
as a query parameter previously.
Invokes an action on a specified key. This method supports the following actions:
disable: Disable operations for a keyenable: Enable operations for a keyrestore: Restore a root keyrewrap: Use a root key to rewrap or reencrypt a data encryption keyrotate: Create a new version of a root keysetKeyForDeletion: Authorize deletion for a key with a dual authorization policyunsetKeyForDeletion: [Remove an authorization]((/docs/key-protect?topic=key-protect-delete-dual-auth-keys#unset-key-deletion-api) for a key with a dual authorization policyunwrap: Use a root key to unwrap or decrypt a data encryption keywrap: Use a root key to wrap or encrypt a data encryption key
Note: When you unwrap a wrapped data encryption key (WDEK) by using
a rotated root key, the service returns a new ciphertext in the response
entity-body. Each ciphertext remains available for unwrap actions. If
you unwrap a DEK with a previous ciphertext, the service also returns
the latest ciphertext and latest key version in the response. Use the
latest ciphertext for future unwrap operations.
POST /api/v2/keys/{id}Auditing
Calling this method generates the following auditing events.
kms.secrets.disablekms.secrets.enablekms.secrets.restorekms.secrets.rewrapkms.secrets.rotatekms.secrets.setkeyfordeletionkms.secrets.unsetkeyfordeletionkms.secrets.unwrapkms.secrets.wrap
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The action to perform on the specified key.
Allowable values: [
disable,enable,restore,rewrap,rotate,setKeyForDeletion,unsetKeyForDeletion,unwrap,wrap]
The base request for key actions.
The data encryption key (DEK) used in wrap actions when the query parameter is set to
wrap. The system returns a base64 encoded plaintext in the response entity-body when you perform anunwrapaction on a key.To wrap an existing DEK, provide a base64 encoded plaintext during a
wrapaction. To generate a new DEK, omit theplaintextproperty. Key Protect generates a random plaintext (32 bytes) that is rooted in an HSM and then wraps that value.Note: When you unwrap a wrapped data encryption key (WDEK) by using a rotated root key, the service returns a new ciphertext in the response entity-body. Each ciphertext remains available for
unwrapactions. If you unwrap a DEK with a previous ciphertext, the service also returns the latest ciphertext in the response. Use the latest ciphertext for future unwrap operations.Possible values: length ≤ 4096
The additional authentication data (AAD) used to further secure the key.
If you supply AAD when you make a
wrapcall, you must specify the same AAD during a subsequentunwrapcall.Possible values: 0 ≤ number of items ≤ 126, 0 ≤ length ≤ 255
Response
Properties that are associated with the response body of a wrap action.
The wrapped data encryption key (WDEK) that you can export to your app or service. The value is base64 encoded.
The data encryption key (DEK) used in wrap actions when the query parameter is set to
wrap. The system returns a base64 encoded plaintext in the response entity-body when you perform anunwrapaction on a key.To wrap an existing DEK, provide a base64 encoded plaintext during a
wrapaction. To generate a new DEK, omit theplaintextproperty. Key Protect generates a random plaintext (32 bytes) that is rooted in an HSM and then wraps that value.Note: When you unwrap a wrapped data encryption key (WDEK) by using a rotated root key, the service returns a new ciphertext in the response entity-body. Each ciphertext remains available for
unwrapactions. If you unwrap a DEK with a previous ciphertext, the service also returns the latest ciphertext in the response. Use the latest ciphertext for future unwrap operations.Possible values: length ≤ 4096
The key version that was used to wrap the DEK. This key version is associated with the
ciphertextvalue that was used in the request.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
keyVersion
Status Code
Successful key operation.
The imported key was successfully restored.
Successful key operation.
Your authentication data or key is invalid, or the entity-body is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found.
The key is not in an appropriate state, so the KeyAction has failed.
The requested key was previously deleted and is no longer available. Please delete references to this key.
The ciphertext provided for the unwrap operation was not wrapped by this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "plaintext": "tF9ss0W9HQUVkddcjSeGg/MqZFs2CVh/FFKLPLLnOwY=", "ciphertext": "eyJjaXBoZXJ0ZXh0Ijoic1ZZRnZVcjdQanZXQ0tFakMwRFFWZktqQ3AyRmtiOFJOSDJSTkpZRzVmU1hWNDJScD\\ RDVythU0h3Y009IiwiaGFzaCI6IjVWNzNBbm9XdUxxM1BvZEZpd1AxQTdQMUZrTkZOajVPMmtmMkNxdVBxL0NRdFlOZnBvemp\\ iYUxjRDNCSWhxOGpKZ2JNR0xhMHB4dDA4cTYyc0RJMGRBPT0iLCJpdiI6Ilc1T2tNWFZuWDFCTERDUk51M05EUlE9PSIsInZl\\ cnNpb24iOiIzLjAuMCIsImhhbmRsZSI6IjRkZjg5ZGVlLWU3OTMtNGY5Ny05MGNjLTc1ZWQ5YjZlNWM4MiJ9", "keyVersion": { "id": "..." } }{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 1, "extractable": false, "keyRingID": "default", "crn": "...", "imported": true, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Your authentication data or key is invalid, or the entity-body is missing a required field." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: The key is not in an appropriate state, so the KeyAction has failed." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unprocessable Entity: The ciphertext provided for the unwrap operation was not wrapped by this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Update (patch) a key
Update attributes of a key. Currently only the following attributes are applicable for update: - keyRingID Note: If provided, the X-Kms-Key-Ring header should specify the key's current key ring. To change the key ring of the key, specify the new key ring in the request body.
PATCH /api/v2/keys/{id}Auditing
Calling this method generates the following auditing event.
kms.secrets.patch
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request for patch key.
The target key ring to move the targeted key to.
curl -X PATCH https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID> -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key+json' -d '{ "keyRingID": "new-key-ring" }'
Response
The base schema for patch key response body.
The metadata that describes the resource array.
An array of resources.
Status Code
Successful key update.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The requested key was previously deleted and is no longer available. Please delete references to this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 1, "extractable": false, "keyRingID": "new-key-ring-id", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Delete a key
Deletes a key by specifying the ID of the key.
By default, Key Protect requires a single authorization to delete keys. For added protection, you can enable a dual authorization policy to safely delete keys from your service instance.
Important: When you delete a key, you permanently shred its contents and associated data. The action cannot be reversed.
Note: By default, Key Protect blocks the deletion of a key that's
protecting a cloud resource, such as a Cloud Object Storage bucket. Use
GET keys/{id}/registrations to verify if the key has an active
registration to a resource. To delete the key and its associated
registrations, set the optional force parameter to true.
DELETE /api/v2/keys/{id}Auditing
Calling this method generates the following auditing event.
kms.secrets.delete
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
If set to
true, Key Protect forces deletion on a key that is protecting a cloud resource, such as a Cloud Object Storage bucket. The action removes any registrations that are associated with the key.Note: If a key is protecting a cloud resource that has a retention policy, Key Protect cannot delete the key. Use
GET keys/{id}/registrationsto review registrations between the key and its associated cloud resources. To enable deletion, contact an account owner to remove the retention policy on each resource that is associated with this key.Default:
false
curl -X DELETE https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID> -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication delKey, err := api.DeleteKey(context.Background(), <key_ID>, kp.ReturnRepresentation) if err != nil { fmt.Println("Error while deleting: ", err) return } b, _ := json.MarshalIndent(delKey, "", " ") fmt.Println(string(b)) }
// Initialize the Key Protect client as specified in Authentication const deleteKeyParams = Object.assign({}, envConfigs); deleteKeyParams.id = "<key_ID>"; deleteKeyParams.prefer = 'return=representation'; const response = keyProtectClient.deleteKey(deleteKeyParams); console.log('Delete key response status: ' + response.status);
import os import keyprotect from keyprotect import bxauth # Initialize the Key Protect client as specified in Authentication deletedKey = kp.delete("<key_id>") print("Deleted key '%s'" % key_id)
public static DeleteKey deleteKey(String keyId, Boolean forceDelete) { Boolean deleteForceParam = false; if (forceDelete != null) { deleteForceParam = forceDelete; } DeleteKeyOptions deleteKeyOptionsModel = new DeleteKeyOptions.Builder() .bluemixInstance("<instance_id>") .id(keyId) .force(deleteForceParam) .build(); Response<DeleteKey> response = testClient.deleteKey(deleteKeyOptionsModel).execute(); DeleteKey result = response.getResult(); return result; // null result on success }
Response
The base schema for deleting keys.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key was successfully deleted.
The key was successfully deleted. No content.
The key cannot be deleted due to a malformed, invalid, or missing ID.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found.
There are three possible causes for HTTP 409 while trying to delete a key, specifying a reason code (resouces[0].reasons[0].code) as follows:
AUTHORIZATIONS_NOT_MET: The key cannot be deleted because it failed the dual authorization request. Before you delete this key, make sure dual authorization procedures are followed. See the topic, Deleting keys using dual authorization.
PROTECTED_RESOURCE_ERR: The key cannot be deleted because the key has one or more associated resources. See the topic, Considerations before deleting and purging a key.
PREV_KEY_DEL_ERR: The key cannot be deleted because it's protecting a cloud resource that has a retention policy. Before you delete this key, contact an account owner to remove the retention policy on each resource that is associated with the key. See the topic, Considerations before deleting and purging a key.
The requested key was previously deleted and is no longer available. Please delete references to this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 5, "extractable": false, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "lastRotateDate": "YYYY-MM-DDTHH:MM:SSZ", "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": true, "deletionDate": "YYYY-MM-DDTHH:MM:SSZ", "deletedBy": "...", "restoreAllowed": true, "restoreExpirationDate": "YYYY-MM-DDTHH:MM:SSZ", "purgeAllowed": false, "purgeAllowedFrom": "YYYY-MM-DDTHH:MM:SSZ", "purgeScheduledOn": "YYYY-MM-DDTHH:MM:SSZ" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: The key cannot be deleted due to a malformed, invalid, or missing ID." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key could not be deleted. Please 'reasons' for more details", "reasons": [ { "code": "PREV_KEY_DEL_ERR", "message": "The key cannot be deleted because it's protecting a cloud resource that has a retention policy. Before you delete this key, contact an account owner to remove the retention policy on each resource that is associated with the key", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Retrieve key metadata
Retrieves the details of a key by specifying the ID of the key.
GET /api/v2/keys/{id}/metadataAuditing
Calling this method generates the following auditing event.
kms.secrets.readmetadata
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID or alias that uniquely identifies the key
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID_or_alias>/metadata -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
public static GetKeyMetadata getKeyMetadata(String keyId) { GetKeyMetadataOptions getKeyMetadataOptionsModel = new GetKeyMetadataOptions.Builder() .id(keyId) .bluemixInstance("<instance_id>") .build(); Response<GetKeyMetadata> response = testClient.getKeyMetadata(getKeyMetadataOptionsModel).execute(); GetKeyMetadata metadata = response.getResult(); return metadata; }
Response
The base schema for retrieving key metadata.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key metadata was successfully retrieved.
The key metadata could not be retrieved due to a malformed, invalid, or missing ID or alias.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key metadata for key with specified ID could not be found.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Standard-key", "description": "...", "state": 1, "extractable": true, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: The key metadata could not be retrieved due to a malformed, invalid, or missing ID." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key metadata could not be retrieved. Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Purge a deleted key
Purge all key metadata and registrations associated with the specified key. Purge key can only be applied to a key in the Destroyed (5) state. After a key is deleted, there is a wait period of up to four hours before purge key operation is allowed. Important: When you purge a key, you permanently shred its contents and associated data. The action cannot be reversed.
DELETE /api/v2/keys/{id}/purgeAuditing
Calling this method generates the following auditing event.
kms.secrets.purge
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X DELETE https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/purge -H 'accept: application/vnd.ibm.kms.key+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
The base schema for purged key.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key was successfully purged.
The key was successfully purged. No content.
The key cannot be purged due to a malformed ID.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found.
The key could not be purged because it is not in the Destroyed (5) state or purge is not allowed due to wait period of four hours has not been reached.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 5, "extractable": false, "keyRingID": "default", "crn": "...", "imported": false, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "lastRotateDate": "YYYY-MM-DDTHH:MM:SSZ", "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": true, "deletionDate": "YYYY-MM-DDTHH:MM:SSZ", "deletedBy": "...", "purgeAllowed": true, "purgeAllowedFrom": "YYYY-MM-DDTHH:MM:SSZ", "purgeScheduledOn": "YYYY-MM-DDTHH:MM:SSZ" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: The key cannot be purged due to a malformed ID." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key could not be purged. Please 'reasons' for more details", "reasons": [ { "code": "KEY_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Restore a key
POST /api/v2/keys/{id}/restoreAuditing
Calling this method generates the following auditing event.
kms.secrets.restore
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request parameters for restore key action.
A collection of resources.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/restore -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_restore+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.key_action_restore+json", "collectionTotal": 1 }, "resources": [ { "payload": "<key_material>" } ] }'curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/restore -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_restore+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.key_action_restore+json", "collectionTotal": 1 }, "resources": [ { "payload": "<encrypted_key_material>", "encryptedNonce": "<encrypted_nonce>", "iv": "<iv>", "encryptionAlgorithm": "RSAES_OAEP_SHA_256" } ] }'
public static KeyActionOneOfResponse restoreKey(String keyId) { InputStream inputStream = null; ActionOnKeyOptions restoreKeyOptionsModel = null; Response<KeyActionOneOfResponse> response = null; KeyActionOneOfResponse responseObj = null; try { // Only imported root keys can be restored; if the file conforms to the // SecureRestoreKeyRequestBody format, include the encryption method, // encrypted payload, encrypted nonce, and initialization vector. inputStream = new FileInputStream("/path/to/file.txt"); restoreKeyOptionsModel = new ActionOnKeyOptions.Builder() .id(keyId) .bluemixInstance("<INSTANCE_ID>") .action("restore") .keyActionOneOf(inputStream) .prefer("return=minimal") .build(); } catch(FileNotFoundException e) { System.out.println("File not found: " + e.toString()); return responseObj; } response = testClient.actionOnKey(restoreKeyOptionsModel).execute(); responseObj = response.getResult(); return responseObj; }
Response
Properties associated with a key response.
The metadata that describes the resource array.
A collection of resources.
Status Code
The key was successfully restored.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The requested key is not in the
Destroyed(5) state or the state of the key has changed within the last 30 seconds.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.key+json", "id": "...", "name": "Root-key", "description": "...", "state": 1, "extractable": false, "keyRingID": "default", "crn": "...", "imported": true, "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "...", "algorithmType": "AES", "algorithmMetadata": { "bitLength": 256, "mode": "CBC_PAD" }, "algorithmBitSize": 256, "algorithmMode": "CBC_PAD", "lastUpdateDate": "YYYY-MM-DDTHH:MM:SSZ", "keyVersion": { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, "dualAuthDelete": { "enabled": true, "keySetForDeletion": true, "authExpiration": "YYYY-MM-DDTHH:MM:SSZ" }, "deleted": false } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key could not be restored: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key could not be restored: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List key versions
Retrieves all versions of a root key by specifying the ID of the key.
When you rotate a root key, you generate a new version of the key. If you're using the root key to protect resources across IBM Cloud, the stered cloud services that you associate with the key use the latest key version to wrap your data. Learn more
GET /api/v2/keys/{id}/versionsAuditing
Calling this method generates the following auditing event.
kms.secrets.listkeyversions
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The number of key versions to retrieve. By default,
GET /versionsreturns the first 200 key versions. To retrieve a different set of key versions, uselimitwithoffsetto page through your available resources. The maximum value forlimitis 5,000.Usage: If you have a key with 20 versions in your instance, and you want to retrieve only the first 5 versions, use
../versions?limit=5.Possible values: 1 ≤ value ≤ 5000
Default:
200The number of key versions to skip. By specifying
offset, you retrieve a subset of key versions that starts with theoffsetvalue. Useoffsetwithlimitto page through your available resources.Usage: If you have a key with 100 versions in your instance, and you want to retrieve versions 26 through 50, use
../versions?offset=25&limit=25.Possible values: value ≥ 0
Default:
0
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/versions -H 'accept: application/vnd.ibm.kms.key.version+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
public static List<KeyVersion> getKeyVersions(String keyId) { GetKeyVersionsOptions getKeyVersionsOptionsModel = new GetKeyVersionsOptions.Builder() .id(keyId) .bluemixInstance("<instance_id>") .build(); Response<ListKeyVersions> response = testClient.getKeyVersions(getKeyVersionsOptionsModel ).execute(); List<KeyVersion> details = response.getResult().getResources(); return details; }
Response
Properties associated with a registration response.
The metadata that describes the resource array.
An array of resources.
Status Code
The list of key versions was successfully retrieved.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key is not in an active state.
The requested key was previously deleted and is no longer available. Please delete references to this key.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key+json", "collectionTotal": 2 }, "resources": [ { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" }, { "id": "...", "creationDate": "YYYY-MM-DDTHH:MM:SSZ" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: The key is not in an active state." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }
Wrap a key
Use a root key to wrap or encrypt a data encryption key.
POST /api/v2/keys/{id}/actions/wrapAuditing
Calling this method generates the following auditing event.
kms.secrets.wrap
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request for wrap key action.
The data encryption key (DEK) used in wrap actions when the query parameter is set to
wrap. The system returns a base64 encoded plaintext in the response entity-body when you perform anunwrapaction on a key.To wrap an existing DEK, provide a base64 encoded plaintext during a
wrapaction. To generate a new DEK, omit theplaintextproperty. Key Protect generates a random plaintext (32 bytes) that is rooted in an HSM and then wraps that value.Note: When you unwrap a wrapped data encryption key (WDEK) by using a rotated root key, the service returns a new ciphertext in the response entity-body. Each ciphertext remains available for
unwrapactions. If you unwrap a DEK with a previous ciphertext, the service also returns the latest ciphertext in the response. Use the latest ciphertext for future unwrap operations.Possible values: length ≤ 4096
The additional authentication data (AAD) used to further secure the key.
If you supply AAD when you make a
wrapcall, you must specify the same AAD during a subsequentunwrapcall.Possible values: 0 ≤ number of items ≤ 126, 0 ≤ length ≤ 255
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/wrap -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_wrap+json'curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/wrap -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_wrap+json' -d '{ "plaintext": "<data_key>", "aad": ["<additional_data>", "<additional_data>"] }'
package main import ( "context" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication aad := []string{"<additional_data>", "<additional_data>"} plaintext := []byte(<data_key>) ciphertext, err := api.Wrap(context.Background(), <key_ID>, plaintext, &aad) if err != nil { fmt.Println("Error wrapping the key: ", err) return } fmt.Println(string(ciphertext)) }
// Initialize the Key Protect client as specified in Authentication // Wrap and unwrap base64 encoded plaintext using key const samplePlaintext = 'dGhpcyBpcyBhIGJhc2U2NCBzdHJpbmcK'; // base64 encoded plaintext const wrapKeyParams = Object.assign({}, envConfigs); wrapKeyParams.id = "<key_id>"; wrapKeyParams.keyActionWrapBody = { plaintext: samplePlaintext, }; const response = keyProtectClient.wrapKey(wrapKeyParams); console.log('Wrap key response cipher: ' + response.result.ciphertext); const ciphertextResult = response.result.ciphertext; // saved for the unwrap example
import os import keyprotect from keyprotect import bxauth # Initialize the Key Protect client as specified in Authentication key = kp.create(name="MyRootKey", root=True) # payload should be a bytestring message = b'This is an important test message.' wrapped = kp.wrap(key.get('id'), message) ciphertext = wrapped.get("ciphertext")
Response
Properties that are associated with the response body of a wrap action.
The wrapped data encryption key (WDEK) that you can export to your app or service. The value is base64 encoded.
The data encryption key (DEK) used in wrap actions when the query parameter is set to
wrap. The system returns a base64 encoded plaintext in the response entity-body when you perform anunwrapaction on a key.To wrap an existing DEK, provide a base64 encoded plaintext during a
wrapaction. To generate a new DEK, omit theplaintextproperty. Key Protect generates a random plaintext (32 bytes) that is rooted in an HSM and then wraps that value.Note: When you unwrap a wrapped data encryption key (WDEK) by using a rotated root key, the service returns a new ciphertext in the response entity-body. Each ciphertext remains available for
unwrapactions. If you unwrap a DEK with a previous ciphertext, the service also returns the latest ciphertext in the response. Use the latest ciphertext for future unwrap operations.Possible values: length ≤ 4096
The key version that was used to wrap the DEK. This key version is associated with the
ciphertextvalue that was used in the request.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
keyVersion
Status Code
The key was successfully wrapped.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key is not in the
Active(1) state.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "plaintext": "tF9ss0W9HQUVkddcjSeGg/MqZFs2CVh/FFKLPLLnOwY=", "ciphertext": "eyJjaXBoZXJ0ZXh0Ijoic1ZZRnZVcjdQanZXQ0tFakMwRFFWZktqQ3AyRmtiOFJOSDJSTkpZRzVmU1hWNDJScD\\ RDVythU0h3Y009IiwiaGFzaCI6IjVWNzNBbm9XdUxxM1BvZEZpd1AxQTdQMUZrTkZOajVPMmtmMkNxdVBxL0NRdFlOZnBvemp\\ iYUxjRDNCSWhxOGpKZ2JNR0xhMHB4dDA4cTYyc0RJMGRBPT0iLCJpdiI6Ilc1T2tNWFZuWDFCTERDUk51M05EUlE9PSIsInZl\\ cnNpb24iOiIzLjAuMCIsImhhbmRsZSI6IjRkZjg5ZGVlLWU3OTMtNGY5Ny05MGNjLTc1ZWQ5YjZlNWM4MiJ9", "keyVersion": { "id": "...", "creationDate": "2010-01-12T05:23:19+0000" } }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Wrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_FIELD_ERR", "message": "The field 'plaintext' must be: a base64 encoded key material", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "field", "name": "plaintext" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Wrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Wrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Wrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Unwrap a key
Use a root key to unwrap or decrypt a data encryption key.
Note: When you unwrap a wrapped data encryption key (WDEK) by using
a rotated root key, the service returns a new ciphertext in the response
entity-body. Each ciphertext remains available for unwrap actions. If
you unwrap a DEK with a previous ciphertext, the service also returns
the latest ciphertext and latest key version in the response. Use the
latest ciphertext for future unwrap operations.
POST /api/v2/keys/{id}/actions/unwrapAuditing
Calling this method generates the following auditing event.
kms.secrets.unwrap
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request for unwrap key action.
The wrapped data encryption key (WDEK) that you can export to your app or service. The value is base64 encoded.
The additional authentication data (AAD) used to further secure the key.
If you supply AAD when you make a
wrapcall, you must specify the same AAD during a subsequentunwrapcall.Possible values: 0 ≤ number of items ≤ 126, 0 ≤ length ≤ 255
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/unwrap -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_unwrap+json' -d '{ "ciphertext": "<encrypted_data_key>", "aad": ["<additional_data>", "<additional_data>"] }'
package main import ( "context" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication aad := []string{"<additional_data>", "<additional_data>"} ciphertext := []byte(<encrypted_data_key>) pt2, err := api.Unwrap(context.Background(), <key_ID>, ciphertext, &aad) if err != nil { fmt.Println("Error while unwrapping DEK: ", err) return } b, _ := json.MarshalIndent(pt2, "", " ") fmt.Println(string(b)) }
// Initialize the Key Protect client as specified in Authentication const unwrapKeyParams = Object.assign({}, envConfigs); unwrapKeyParams.id = "<key_id>"; unwrapKeyParams.keyActionUnwrapBody = { ciphertext: ciphertextResult, // encrypted result from wrap key response }; const response = keyProtectClient.unwrapKey(unwrapKeyParams); console.log('Unwrap key response result: ' + response.result.plaintext); // validate that result is same as above
import os import keyprotect from keyprotect import bxauth # Continue from example for wrap key # key = kp.create(name="MyRootKey", root=True) # message = b'This is a really important message.' unwrapped = kp.unwrap(key.get('id'), ciphertext) assert message == unwrapped
Response
Properties that are associated with the response body of an unwrap action.
The data encryption key (DEK) used in wrap actions when the query parameter is set to
wrap. The system returns a base64 encoded plaintext in the response entity-body when you perform anunwrapaction on a key.To wrap an existing DEK, provide a base64 encoded plaintext during a
wrapaction. To generate a new DEK, omit theplaintextproperty. Key Protect generates a random plaintext (32 bytes) that is rooted in an HSM and then wraps that value.Note: When you unwrap a wrapped data encryption key (WDEK) by using a rotated root key, the service returns a new ciphertext in the response entity-body. Each ciphertext remains available for
unwrapactions. If you unwrap a DEK with a previous ciphertext, the service also returns the latest ciphertext in the response. Use the latest ciphertext for future unwrap operations.Possible values: length ≤ 4096
The wrapped data encryption key (WDEK) that you can export to your app or service. The value is base64 encoded.
The key version that was used to wrap the DEK. This key version is associated with the
ciphertextvalue that was used in the request.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
keyVersion
The latest key version that was used to rewrap the DEK. This key version is associated with the
ciphertextvalue that's returned in the response.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
rewrappedKeyVersion
Status Code
Successfully unwrapped key.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key is not in the
Active(1) orDeactivated(3) state.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.The ciphertext provided was not wrapped by this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "plaintext": "tF9ss0W9HQUVkddcjSeGg/MqZFs2CVh/FFKLPLLnOwY=", "keyVersion": { "id": "...", "creationDate": "2010-01-12T05:23:19+0000" } }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Unwrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "MISSING_FIELD_ERR", "message": "The field 'ciphertext' is required", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "field", "name": "name" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Unwrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Wrap action could not be performed with the key: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Unwrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unprocessable Entity: Unwrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "UNPROCESSABLE_CIPHERTEXT_ERR", "message": "The provided ciphertext is invalid or corrupted", "status": 422, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Rewrap a key
Use a root key to rewrap or reencrypt a data encryption key.
POST /api/v2/keys/{id}/actions/rewrapAuditing
Calling this method generates the following auditing event.
kms.secrets.rewrap
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request for rewrap key action.
The wrapped data encryption key (WDEK) that you want to re-encrypt by using the latest key version. The value must be base64 encoded.
The additional authentication data (AAD) used to further secure the key.
If you supply AAD when you make a
wrapcall, you must specify the same AAD during a subsequentunwrapcall.Possible values: 0 ≤ number of items ≤ 126, 0 ≤ length ≤ 255
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/rewrap -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_rewrap+json' -d '{ "ciphertext": "<encrypted_data_key>", "aad": ["<additional_data>", "<additional_data>"] }'
Response
Properties that are associated with the response body of an rewrap action.
The wrapped data encryption key (WDEK) that you can export to your app or service. The value is base64 encoded.
The key version that was used to wrap the DEK. This key version is associated with the
ciphertextvalue that was used in the request.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
keyVersion
The latest key version that was used to rewrap the DEK. This key version is associated with the
ciphertextvalue that's returned in the response.The ID of the key version.
Example:
4a0225e9-17a0-46c1-ace7-f25bcf4237d4The date that the version of the key was created.
Example:
2010-01-12T05:23:19+0000
rewrappedKeyVersion
Status Code
The key was successfully rewrapped.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key is not in the
Active(1) orDeactivated(3) state.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.The ciphertext provided was not wrapped by this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "ciphertext": "eyJjaXBoZXJ0ZXh0Ijoic1ZZRnZVcjdQanZXQ0tFakMwRFFWZktqQ3AyRmtiOFJOSDJSTkpZRzVmU1hWNDJScD\\ RDVythU0h3Y009IiwiaGFzaCI6IjVWNzNBbm9XdUxxM1BvZEZpd1AxQTdQMUZrTkZOajVPMmtmMkNxdVBxL0NRdFlOZnBvemp\\ iYUxjRDNCSWhxOGpKZ2JNR0xhMHB4dDA4cTYyc0RJMGRBPT0iLCJpdiI6Ilc1T2tNWFZuWDFCTERDUk51M05EUlE9PSIsInZl\\ cnNpb24iOiIzLjAuMCIsImhhbmRsZSI6IjRkZjg5ZGVlLWU3OTMtNGY5Ny05MGNjLTc1ZWQ5YjZlNWM4MiJ9", "keyVersion": { "id": "...", "creationDate": "2010-01-12T05:23:19+0000" }, "rewrappedKeyVersion": { "id": "...", "creationDate": "2010-01-12T05:23:19+0000" } }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Rewrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_FIELD_ERR", "message": "The field 'ciphertext' must be: the original base64 encoded ciphertext from the wrap operation", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "field", "name": "ciphertext" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Rewrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Rewrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Rewrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unprocessable Entity: Rewrap with key could not be performed: Please see 'reasons' for more details", "reasons": [ { "code": "UNPROCESSABLE_CIPHERTEXT_ERR", "message": "The provided ciphertext is invalid or corrupted", "status": 422, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Rotate a key
Create a new version of a root key.
POST /api/v2/keys/{id}/actions/rotateAuditing
Calling this method generates the following auditing event.
kms.secrets.rotate
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
The base request for rotate key action.
The key material that you want to import into the service for rotating an existing root key. This value is required for a
rotateaction if you initially imported the key material when you created the key.To rotate an imported root key, provide a base64 encoded payload in the request entity-body. To rotate a root key that was initially generated by Key Protect, omit the
payloadproperty and pass in an empty request entity-body.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/rotate -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/rotate -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_rotate+json' -d '{ "payload": "<new_key_material>" }'curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/rotate -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.key_action_rotate+json' -d '{ "payload": "<encrypted_new_key_material>", "encryptedNonce": "<encrypted_nonce>", "iv": "<iv>", "encryptionAlgorithm": "RSAES_OAEP_SHA_256" }'
package main import ( "context" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication // Set the payload to a base64 encoded string if your key is an imported root key // Skip setting payload if your key is a generated root key payload := "<new_key_material>" err = api.Rotate(context.Background(), <key_ID> , payload) if err != nil { fmt.Println("Error rotating the key: ", err) return } fmt.Println("Key successfully rotated") }
Response
Status Code
The key was successfully rotated. No content.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The requested key is not in the
Active(1) orDeactivated(3) state or has been rotated within the last hour.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Key could not be rotated: Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_FIELD_ERR", "message": "The field 'payload' must be: a base64 encoded value", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "field", "name": "payload" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key could not be rotated: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key could not be rotated: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Key could not be rotated: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Set a key for deletion
Authorize deletion for a key with a dual authorization policy.
POST /api/v2/keys/{id}/actions/setKeyForDeletionAuditing
Calling this method generates the following auditing event.
kms.secrets.setkeyfordeletion
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/setKeyForDeletion -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Status Code
The key was successfully set for deletion. No content.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key does not have a dual-authorization delete policy.
The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key deletion could not be scheduled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key deletion could not be scheduled: Please see 'reasons' for more details", "reasons": [ { "code": "NOT_DUAL_AUTH_ERR", "message": "The key is not dual auth enabled and cannot be set for deletion", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Key deletion could not be scheduled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Unset a key for deletion
Remove an authorization for a key with a dual authorization policy.
POST /api/v2/keys/{id}/actions/unsetKeyForDeletionAuditing
Calling this method generates the following auditing event.
kms.secrets.unsetkeyfordeletion
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/unsetKeyForDeletion -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Status Code
The key was successfully unset for deletion. No content.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key does not have a dual-authorization delete policy.
The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key deletion could not be cancelled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key deletion could not be cancelled: Please see 'reasons' for more details", "reasons": [ { "code": "NOT_DUAL_AUTH_ERR", "message": "The key is not dual auth enabled and cannot be set for deletion", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Key deletion could not be cancelled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Enable a key
Enable operations for a key.
POST /api/v2/keys/{id}/actions/enableAuditing
Calling this method generates the following auditing event.
kms.secrets.enable
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/enable -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Status Code
The key was successfully enabled. No content.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The requested key is not in the
Suspended(2) state or the state of the key has changed within the last 30 seconds.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Key could not be enabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ROOT_REQ_ERR", "message": "Requested action can only be completed with a root key", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key could not be enabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key could not be enabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Key could not be enabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Disable a key
Disable operations for a key.
POST /api/v2/keys/{id}/actions/disableAuditing
Calling this method generates the following auditing event.
kms.secrets.disable
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/disable -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Status Code
The key was successfully disabled. No content.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The requested key is not in the
Active(1) state.The requested key was previously deleted and is no longer available. The key may be restored within thirty (30) days of deletion using
POST /keys/{id}/restore.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Key could not be disabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ROOT_REQ_ERR", "message": "Requested action can only be completed with a root key", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Key could not be disabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Key could not be disabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ACTION_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: Key could not be disabled: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_DELETED_ERR", "message": "Key has already been deleted. Please delete references to this key", "status": 410, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Sync associated resources
Initiate a manual data synchronization request to the associated
resources of a key. Regular key lifecycle events automatically notify
integrated services of the change, however, in the case a service does
not respond to a key lifecycle event notification, the sync API may be
used to initiate a renotification to the integrated services that manage
the associated resources linked to the key.
Note: The services that manage the associated resources linked to
the key are responsible for maintaining up-to-date records of the key
state and version. Key Protect does not have the ability to force data
synchronization for other services. The sync API is purely to
initiate a request for all associated resources to synchronize their
key records with what the Key Protect API returns.
POST /api/v2/keys/{id}/actions/syncAuditing
Calling this method generates the following auditing event.
kms.secrets.sync
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/actions/sync -H 'accept: application/json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Status Code
The sync of associate resources for a key has been initiated. No content.
The request is malformed or illegal.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key could not be found.
The key has been synced or updated (i.e. rotated, restored, disabled, enabled, deleted) within the last hour.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Bad Request: Associated resources could not be synced: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ROOT_REQ_ERR", "message": "Requested action can only be completed with a root key", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Associated resources could not be synced: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND_ERR", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: Associated resources could not be synced: Please see 'reasons' for more details", "reasons": [ { "code": "REQ_TOO_EARLY_ERR", "message": "The key was updated recently: Please wait and try again", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Set key policies
Creates or updates one or more policies for the specified key.
You can set policies for a key, such as an
automatic rotation policy
or a
dual authorization policy
to protect against the accidental deletion of keys. Use
PUT /keys/{id}/policies to create new policies for a key or update an
existing policy.
PUT /api/v2/keys/{id}/policiesAuditing
Calling this method generates the following auditing event.
kms.policies.write
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The type of policy that is associated with the specified key.
Allowable values: [
dualAuthDelete,rotation]
The base request for key policy create or update.
A collection of resources.
curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 2 }, "resources": [ { "type": "application/vnd.ibm.kms.policy+json", "rotation": { "interval_month": <rotation_interval> } }, { "type": "application/vnd.ibm.kms.policy+json", "dualAuthDelete": { "enabled": <true|false> } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies?policy=dualAuthDelete -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.policy+json", "dualAuthDelete": { "enabled": <true|false> } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies?policy=rotation -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "type": "application/vnd.ibm.kms.policy+json", "rotation": { "interval_month": <rotation_interval> } } ] }'
package main import ( "context" "encoding/json" "fmt" kp "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication policy, err := api.SetPolicy(context.Background(), <key_ID>, kp.ReturnRepresentation, <rotation_interval>) if err != nil { fmt.Println("Error while creating policies: ", err) return } b, _ := json.MarshalIndent(policy, "", " ") fmt.Println(string(b)) }
Response
The base schema for retrieving a dual authorization key policy.
A collection of resources.
The v4 UUID used to uniquely identify the policy resource, as specified by RFC 4122.
Specifies the MIME type that represents the policy resource. Currently, only the default is supported.
Possible values: [
application/vnd.ibm.kms.policy+json]Example:
application/vnd.ibm.kms.policy+jsonData associated with the dual authorization delete policy.
If set to
true, Key Protect enables a dual authorization policy on a single key.After you enable the policy, Key Protect requires an authorization from two users to delete this key. For example, you can authorize the deletion first by using the SetKeyForDeletion action. Then, a different user provides a second authorization implicitly by calling
DELETE /keysto delete the key.Note: Once the dual authorization policy is set on the key, it cannot be reverted.
Example:
true
dualAuthDelete
The Cloud Resource Name (CRN) that uniquely identifies your cloud resources.
Example:
crn:v1:bluemix:public:kms:<region>:a/<account-id>:<service-instance:policy:<policy-id>The date the policy was created. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000The unique identifier for the resource that created the policy.
Updates when the policy is replaced or modified. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000The unique identifier for the resource that updated the policy.
resources
Status Code
The policy or policies were successfully created or updated.
The policy or policies were successfully created or updated. No content.
The policy or policies cannot be created or updated due to a malformed, invalid, or missing ID.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The requested key was previously deleted and is no longer available. Please delete references to this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 2 }, "resources": [ { "id": "...", "crn": "...", "rotation": { "interval_month": 3 }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." }, { "id": "...", "crn": "...", "dualAuthDelete": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "id": "...", "crn": "...", "dualAuthDelete": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "id": "...", "crn": "...", "rotation": { "interval_month": 3 }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List key policies
Retrieves a list of policies that are associated with a specified key.
You can set policies for a key, such as an
automatic rotation policy
or a
dual authorization policy
to protect against the accidental deletion of keys. Use
GET /keys/{id}/policies to browse the policies that exist for a
specified key.
GET /api/v2/keys/{id}/policiesAuditing
Calling this method generates the following auditing event.
kms.policies.read
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The type of policy that is associated with the specified key.
Allowable values: [
dualAuthDelete,rotation]
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies?policy=dualAuthDelete -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/policies?policy=rotation -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
package main import ( "context" "encoding/json" "fmt" kp "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication policy, err := api.GetPolicy(context.Background(), <key_ID>) if err != nil { fmt.Println("Error while getting policies: ", err) return } b, _ := json.MarshalIndent(policy, "", " ") fmt.Println(string(b)) }
Response
The base schema for retrieving a dual authorization key policy.
A collection of resources.
The v4 UUID used to uniquely identify the policy resource, as specified by RFC 4122.
Specifies the MIME type that represents the policy resource. Currently, only the default is supported.
Possible values: [
application/vnd.ibm.kms.policy+json]Example:
application/vnd.ibm.kms.policy+jsonData associated with the dual authorization delete policy.
If set to
true, Key Protect enables a dual authorization policy on a single key.After you enable the policy, Key Protect requires an authorization from two users to delete this key. For example, you can authorize the deletion first by using the SetKeyForDeletion action. Then, a different user provides a second authorization implicitly by calling
DELETE /keysto delete the key.Note: Once the dual authorization policy is set on the key, it cannot be reverted.
Example:
true
dualAuthDelete
The Cloud Resource Name (CRN) that uniquely identifies your cloud resources.
Example:
crn:v1:bluemix:public:kms:<region>:a/<account-id>:<service-instance:policy:<policy-id>The date the policy was created. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000The unique identifier for the resource that created the policy.
Updates when the policy is replaced or modified. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000The unique identifier for the resource that updated the policy.
resources
Status Code
The policy resources were successfully retrieved.
The request is missing a required field or contains invalid values.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 2 }, "resources": [ { "id": "...", "crn": "...", "rotation": { "interval_month": 3 }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." }, { "id": "...", "crn": "...", "dualAuthDelete": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "id": "...", "crn": "...", "dualAuthDelete": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "id": "...", "crn": "...", "rotation": { "interval_month": 3 }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdateDate": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Set instance policies
Creates or updates one or more policies for the specified service instance.
Note: When you set an instance policy, Key Protect associates the policy information with keys that you add to the instance after the policy is updated. This operation does not affect existing keys in the instance.
PUT /api/v2/instance/policies
Auditing
Calling this method generates the following auditing event.
kms.instancepolicies.write
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
Query Parameters
The type of policy that is associated with the specified instance.
Allowable values: [
allowedNetwork,dualAuthDelete,allowedIP,keyCreateImportAccess,metrics]
The base request for the create or update of instance level policies.
A collection of resources.
The type of policy to be set.
Allowable values: [
allowedNetwork]Example:
allowedNetwork
resources
curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 4 }, "resources": [ { "policy_type": "allowedNetwork", "policy_data": { "enabled": <true|false>, "attributes": { "allowed_network": "<public-and-private|private-only>" } } }, { "policy_type": "dualAuthDelete", "policy_data": { "enabled": <true|false> } }, { "policy_type": "allowedIP", "policy_data": { "enabled": <true|false>, "attributes": { "allowed_ip": ["X.X.X.X/N", "X.X.X.X/N"] } } }, { "policy_type": "keyCreateImportAccess", "policy_data": { "enabled": <true|false>, "attributes": { "create_root_key" : <true|false>, "create_standard_key" : <true|false>, "import_root_key": <true|false>, "import_standard_key": <true|false>, "enforce_token": <true|false> } } }, { "policy_type": "metrics", "policy_data": { "enabled": <true|false> } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=allowedNetwork -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "allowedNetwork", "policy_data": { "enabled": <true|false>, "attributes": { "allowed_network": "<public-and-private|private-only>" } } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=dualAuthDelete -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "dualAuthDelete", "policy_data": { "enabled": <true|false> } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=metrics -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "metrics", "policy_data": { "enabled": <true|false> } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=allowedIP -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "allowedIP", "policy_data": { "enabled": <true|false>, "attributes": { "allowed_ip": ["X.X.X.X/N", "X.X.X.X/N"] } } } ] }'curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=keyCreateImportAccess -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.policy+json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "keyCreateImportAccess", "policy_data": { "enabled": <true|false>, "attributes": { "create_root_key" : <true|false>, "create_standard_key" : <true|false>, "import_root_key": <true|false>, "import_standard_key": <true|false>, "enforce_token": <true|false> } } } ] }'
package main import ( "context" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication err = api.SetInstancePolicies(context.Background(), <true|false>) if err != nil { fmt.Println("Error while creating policies: ", err) return } fmt.Println("Instance policy set successfully") }
Response
Status Code
The policy or policies were successfully created or updated. No content.
The policy or policies cannot be created or updated due to a malformed or invalid request.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The requested key was previously deleted and is no longer available. Please delete references to this key.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Gone: The requested key was previously deleted and is no longer available. Please delete references to this key." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List instance policies
Retrieves a list of policies that are associated with a specified service instance.
You can manage advanced preferences for keys in your service instance by
creating instance-level policies. Use GET /instance/policies to browse
the policies that are associated with the specified instance. Currently,
dual authorization policies are supported.
GET /api/v2/instance/policies
Auditing
Calling this method generates the following auditing event.
kms.instancepolicies.read
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
Query Parameters
The type of policy that is associated with the specified instance.
Allowable values: [
allowedNetwork,dualAuthDelete,allowedIP,keyCreateImportAccess,metrics]
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=allowedNetwork -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=dualAuthDelete -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=allowedIP -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=keyCreateImportAccess -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/policies?policy=metrics -H 'accept: application/vnd.ibm.kms.policy+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication policies, err := api.GetInstancePolicies(context.Background()) if err != nil { fmt.Println("Error while getting policies: ", err) return } b, _ := json.MarshalIndent(policies, "", " ") fmt.Println(string(b)) }
Response
Properties that are associated with retrieving an instance level allowed network policy.
A collection of resources.
The type of policy to be retrieved.
User defined metadata that is associated with the
allowedNetworkinstance policy type.If set to
true, Key Protect enables the specified policy for your service instance. If set tofalse, Key Protect disables the specified policy for your service instance, and the policy will no longer affect Key Protect actions.Note: If a policy with attributes is disabled, all attributes are reset and are not retained.
Example:
trueData associated with the policy type
allowed_network.If set to
public-and-private, Key Protect allows the instance to be accessible through public and private endpoints. If set toprivate-only, Key Protect restricts the instance to only be accessible through a private endpoint.Possible values: [
public-and-private,private-only]
attributes
policy_data
The date the policy was created. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000The unique identifier for the resource that created the policy.
The unique identifier for the resource that updated the policy.
Updates when the policy is replaced or modified. The date format follows RFC 3339.
Example:
2010-01-12T05:23:19+0000
resources
Status Code
The policy resources were successfully retrieved.
The request is missing a required field or contains invalid values.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
The key could not be found.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 4 }, "resources": [ { "policy_type": "allowedNetwork", "policy_data": { "enabled": "<true|false>", "attributes": { "allowed_network": "<public-and-private|private-only>" } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." }, { "policy_type": "dualAuthDelete", "policy_data": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." }, { "policy_type": "metrics", "policy_data": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." }, { "policy_type": "allowedIP", "policy_data": { "enabled": "<true|false>", "attributes": { "allowed_ip": [ "X.X.X.X/N", "..." ] } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." }, { "policy_type": "keyCreateImportAccess", "policy_data": { "enabled": "<true|false>", "attributes": { "create_root_key": "<true|false>", "create_standard_key": "<true|false>", "import_root_key": "<true|false>", "import_standard_key": "<true|false>", "enforce_token": "<true|false>" } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "allowedNetwork", "policy_data": { "enabled": "<true|false>", "attributes": { "allowed_network": "<public-and-private|private-only>" } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "dualAuthDelete", "policy_data": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "allowedIP", "policy_data": { "enabled": "<true|false>", "attributes": { "allowed_ip": [ "X.X.X.X/N", "..." ] } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "keyCreateImportAccess", "policy_data": { "enabled": "<true|false>", "attributes": { "create_root_key": "<true|false>", "create_standard_key": "<true|false>", "import_root_key": "<true|false>", "import_standard_key": "<true|false>", "enforce_token": "<true|false>" } }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.policy+json", "collectionTotal": 1 }, "resources": [ { "policy_type": "metrics", "policy_data": { "enabled": "<true|false>" }, "createdBy": "...", "creationDate": "...", "updatedBy": "...", "lastUpdated": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: The key could not be found." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Retrieve allowed IP port
Retrieves the private endpoint port associated with your service instance's active allowed IP policy. If the instance does not contain an active allowed IP policy, no information will be returned.
GET /api/v2/instance/allowed_ip_port
Auditing
Calling this method generates the following auditing event.
kms.policies.readallowedipport
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/instance/allowed_ip_port -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.allowed_ip_port+json'
Response
Properties associated with the port associated with an instance with an allowed IP policy
The metadata that describes the resource array.
A collection of resources.
Status Code
The allowed IP port information was successfully retrieved.
The request is missing a required field or contains invalid values.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.allowed_ip_metadata+json", "collectionTotal": 1 }, "resources": [ { "private_endpoint_port": 8888 } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Create an import token
Creates an import token that you can use to encrypt and import root keys into the service. Learn more
When you call POST /import_token, Key Protect creates an RSA key-pair
from its HSMs. The service encrypts and stores the private key in the
HSM, and returns the corresponding public key when you call
GET /import_token. You can create only one import token per service
instance.
POST /api/v2/import_token
Auditing
Calling this method generates the following auditing event.
kms.importtoken.create
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key belongs to. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Default:
default
The base request to create an import token.
The time in seconds from the creation of an import token that determines how long its associated public key remains valid.
The minimum value is
300seconds (5 minutes), and the maximum value is86400(24 hours). The default value is600(10 minutes).Possible values: 300 ≤ value ≤ 86400
Default:
600The number of times that an import token can be retrieved within its expiration time before it is no longer accessible.
Possible values: 1 ≤ value ≤ 500
Default:
1
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/import_token -H 'accept: application/vnd.ibm.collection+json' -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "expiration": "<expiration_time>", "maxAllowedRetrievals": <use_count> }'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication importToken, err := api.CreateImportToken(context.Background(), <expiration_time>, <use_count>) if err != nil { fmt.Println("Error while creating import token: ", err) return } b, _ := json.MarshalIndent(importToken, "", " ") fmt.Println(string(b)) }
Response
Properties that are associated with import tokens.
The time in seconds from the creation of an import token that determines how long its associated public key remains valid.
The minimum value is
300seconds (5 minutes), and the maximum value is86400(24 hours). The default value is600(10 minutes).Possible values: 300 ≤ value ≤ 86400
The number of times that an import token can be retrieved within its expiration time before it is no longer accessible.
Possible values: 1 ≤ value ≤ 500
The date the import token was created. The date format follows RFC 3339.
Example:
2018-04-12T23:20:50.52ZThe date the import token expires. The date format follows RFC 3339.
Example:
2018-12-01T23:20:50.52ZThe number of retrievals that are available for the import token before it is no longer accessible.
Possible values: value ≥ 1
Status Code
The import token was successfully created.
The import token cannot be created due to a malformed or invalid request.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "expirationDate": "YYYY-MM-DDTHH:MM:SSZ", "maxAllowedRetrievals": 10, "remainingRetrievals": 10 }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Retrieve an import token
Retrieves the import token that is associated with your service instance.
When you call GET /import_token, Key Protect returns the public key
that you can use to encrypt and import key material to the service,
along with details about the key.
Note: After you reach the maxAllowedRetrievals or expirationDate
for the import token, the import token and its associated public key can
no longer be used for key operations. To create a new import token, use
POST /import_token.
GET /api/v2/import_token
Auditing
Calling this method generates the following auditing event.
kms.importtoken.read
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key belongs to. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Default:
default
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/import_token -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/vnd.ibm.kms.import_token+json'
package main import ( "context" "encoding/json" "fmt" "github.com/IBM/keyprotect-go-client" ) func main() { // Initialize the Key Protect client as specified in Authentication importToken, err := api.GetImportTokenTransportKey(context.Background()) if err != nil { fmt.Println("Error while getting import token: ", err) return } b, _ := json.MarshalIndent(importToken, "", " ") fmt.Println(string(b)) }
Response
The base schema for retrieving an import token.
The time in seconds from the creation of an import token that determines how long its associated public key remains valid.
The minimum value is
300seconds (5 minutes), and the maximum value is86400(24 hours). The default value is600(10 minutes).Possible values: 300 ≤ value ≤ 86400
The number of times that an import token can be retrieved within its expiration time before it is no longer accessible.
Possible values: 1 ≤ value ≤ 500
The date the import token was created. The date format follows RFC 3339.
Example:
2018-04-12T23:20:50.52ZThe date the import token expires. The date format follows RFC 3339.
Example:
2018-12-01T23:20:50.52ZThe number of retrievals that are available for the import token before it is no longer accessible.
Possible values: value ≥ 1
The public encryption key that you can use to encrypt key material before you import it into the service.
This value is a PEM-encoded public key in PKIX format. Because PEM encoding is a byte format, the value is base64 encoded.
Possible values: length ≤ 4096
The nonce value that is used to verify a key import request. Encrypt and provide the encrypted nonce value when you use
POST /keysto securely import a key to the service.
Status Code
The import token was successfully retrieved.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. Learn more
An import token was not found in the specified service instance. To create an import token, use
POST /import_tokenThe import token has reached its
maxAllowedRetrievalsorexpirationDate, and it is no longer available for use. To create a new import token, usePOST /import_token.In very rare cases, the import token may expire before its expiration time. Ensure that your client application is configured with a retry mechanism for catching and responding to
409conflict exceptions.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "expirationDate": "YYYY-MM-DDTHH:MM:SSZ", "maxAllowedRetrievals": 10, "remainingRetrievals": 9, "payload": "...", "nonce": "..." }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Your service is not authorized to make this request. Ensure that an authorization exists between your service and Key Protect. [Learn more](/docs/key-protect?topic=key-protect-integrate-services#grant-access)" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not found: An import token was not found in the specified service instance. To create an import token, use 'POST /import_token'" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Conflict: The import token has reached its 'maxAllowedRetrievals' or 'expirationDate'. To create a new import token, use 'POST /import_token'." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Create a registration
Service to service calls only. Creates a registration between a root key and a cloud resource, such as a Cloud Object Storage bucket. The key is identified by its ID, and the cloud resource is identified by its Cloud Resource Name (CRN).
POST /api/v2/keys/{id}/registrations/{urlEncodedResourceCRN}Auditing
Calling this method generates the following auditing event.
kms.registrations.create
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The URL encoded Cloud Resource Name (CRN) that uniquely identifies the cloud resource. At minimum, provide a CRN that includes the
service-instancesegment.Example:
crn%3av1%3abluemix%3apublic%3acloud-object-storage%3aglobal%3aa%2f59bcbfa6ea2f006b4ed7094c1a08dcdd%3a1a0ec336-f391-4091-a6fb-5e084a4c56f4%3a%3abucket
The base request for creating a registration.
The metadata that describes the resource array.
A collection of resources.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations/<url_encoded_CRN> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration_input+json", "collectionTotal": 1 }, "resources": [ { "preventKeyDeletion": true, "description": "..." } ] }'
Response
Properties associated with a registration response.
The metadata that describes the resource array.
A collection of resources.
Status Code
A registration with identical properties (
keyId,resourceCrn,preventKeyDeletion,description, andregistrationMetadata) was previously created between the specified key and cloud resource.A new registration was successfully created.
The registration could not be created due to a malformed
urlEncodedResourceCRN, an invalid or missing request body, or an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The key with specified ID could not be found.
A registration with different properties already exists between the specified key and cloud resource.
The key with specified ID is invalid for use with registrations.
A key must be a root key (non-extractable) in the Activated (1) state.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 1 }, "resources": [ { "keyId": "string", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "string", "creationDate": "2010-01-12T05:23:19+0000", "updatedBy": "string", "lastUpdated": "2010-01-12T05:23:19+0000", "description": "string", "preventKeyDeletion": true, "keyVersion": { "id": "string", "creationDate": "2010-01-12T05:23:19+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRN' must be: specified to no more than 10 segments", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRN" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "REGISTRATION_DUP_ERR", "message": "Registration already exists", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "KEY_INVALID_STATE_ERR", "message": "Key is not in a valid state", "status": 422, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Update a registration
Service to service calls only. Updates an existing registration based on the properties that you specify.
When you call PATCH /registrations, Key Protect updates only the
properties that you specify in the request entity-body. To replace the
registration, use PUT /registrations.
PATCH /api/v2/keys/{id}/registrations/{urlEncodedResourceCRN}Auditing
Calling this method generates the following auditing event.
kms.registrations.merge
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The URL encoded Cloud Resource Name (CRN) that uniquely identifies the cloud resource. At minimum, provide a CRN that includes the
service-instancesegment.Example:
crn%3av1%3abluemix%3apublic%3acloud-object-storage%3aglobal%3aa%2f59bcbfa6ea2f006b4ed7094c1a08dcdd%3a1a0ec336-f391-4091-a6fb-5e084a4c56f4%3a%3abucket
The base request for updating a registration.
The metadata that describes the resource array.
A collection of resources.
curl -X PATCH https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations/<url_encoded_CRN> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration_input+json", "collectionTotal": 1 }, "resources": [ { "preventKeyDeletion": true } ] }'
Response
Properties associated with a registration response.
The metadata that describes the resource array.
A collection of resources.
Status Code
The registration was successfully updated.
The registration could not be updated due to a malformed
urlEncodedResourceCRN, an invalid or missing request body, or an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The registration or key could not be found. Verify that the specified key ID and CRN are valid.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 1 }, "resources": [ { "keyId": "string", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "string", "creationDate": "2010-01-12T05:23:19+0000", "updatedBy": "string", "lastUpdated": "2010-01-12T05:23:19+0000", "description": "string", "preventKeyDeletion": true, "keyVersion": { "id": "string", "creationDate": "2010-01-12T05:23:19+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be updated. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRN' must be: specified to no more than 10 segments", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRN" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be updated. Please see 'reasons' for more details", "reasons": [ { "code": "REGISTRATION_NOT_FOUND_ERR", "message": "Registration does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Replace a registration
Service to service calls only. Replace an existing registration between a root key and a cloud resource. The key is identified by its ID, and the cloud resource is identified by its Cloud Resource Name (CRN).
When you call PUT /registrations, Key Protect replaces the existing
registration with the properties that you provide in the request
entity-body.
PUT /api/v2/keys/{id}/registrations/{urlEncodedResourceCRN}Auditing
Calling this method generates the following auditing event.
kms.registrations.write
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
The URL encoded Cloud Resource Name (CRN) that uniquely identifies the cloud resource. At minimum, provide a CRN that includes the
service-instancesegment.Example:
crn%3av1%3abluemix%3apublic%3acloud-object-storage%3aglobal%3aa%2f59bcbfa6ea2f006b4ed7094c1a08dcdd%3a1a0ec336-f391-4091-a6fb-5e084a4c56f4%3a%3abucket
The base request for replacing a registration.
The metadata that describes the resource array.
A collection of resources.
curl -X PUT https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations/<url_encoded_CRN> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration_input+json", "collectionTotal": 1 }, "resources": [ { "preventKeyDeletion": true, "description": "...", "keyVersionId": "<key version ID>" } ] }'
Response
Properties associated with a registration response.
The metadata that describes the resource array.
A collection of resources.
Status Code
The registration was successfully replaced.
The registration could not be replaced due to a malformed
urlEncodedResourceCRN, an invalid or missing request body, or an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The registration or key could not be found. Verify that the specified key ID and CRN are valid.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 1 }, "resources": [ { "keyId": "string", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "string", "creationDate": "2010-01-12T05:23:19+0000", "updatedBy": "string", "lastUpdated": "2010-01-12T05:23:19+0000", "description": "string", "preventKeyDeletion": true, "keyVersion": { "id": "string", "creationDate": "2010-01-12T05:23:19+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be replaced. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRN' must be: specified to no more than 10 segments", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRN" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be replaced. Please see 'reasons' for more details", "reasons": [ { "code": "REGISTRATION_NOT_FOUND_ERR", "message": "Registration does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Delete a registration
Service to service calls only. Deletes an existing registration between a root key and a cloud resource.
This action permanently removes the registration from the Key Protect database.
DELETE /api/v2/keys/{id}/registrations/{urlEncodedResourceCRN}Auditing
Calling this method generates the following auditing event.
kms.registrations.delete
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
The URL encoded Cloud Resource Name (CRN) that uniquely identifies the cloud resource. At minimum, provide a CRN that includes the
service-instancesegment.Example:
crn%3av1%3abluemix%3apublic%3acloud-object-storage%3aglobal%3aa%2f59bcbfa6ea2f006b4ed7094c1a08dcdd%3a1a0ec336-f391-4091-a6fb-5e084a4c56f4%3a%3abucket
curl -X DELETE https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations/<url_encoded_CRN> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Properties associated with a registration response.
The metadata that describes the resource array.
A collection of resources.
Status Code
The registration was successfully deleted.
The registration was successfully deleted. No content.
The registration could not be deleted due to a malformed
urlEncodedResourceCRN, an invalid or missing request body, or an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The registration or key could not be found. Verify that the specified key ID and CRN are valid.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 1 }, "resources": [ { "keyId": "string", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "string", "creationDate": "2010-01-12T05:23:19+0000", "updatedBy": "string", "lastUpdated": "2010-01-12T05:23:19+0000", "description": "string", "preventKeyDeletion": true, "keyVersion": { "id": "string", "creationDate": "2010-01-12T05:23:19+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRN' must be: specified to no more than 10 segments", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRN" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "REGISTRATION_NOT_FOUND_ERR", "message": "Registration does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Deactivate a registration
Deprecated. Invokes an action, such as a deactivate operation, on a registration with the specified key ID and CRN.
When a customer deletes a root key that is associated with a cloud
resource, the registration between the resources moves to the
Suspended state. As an integrated service, use
POST /keys/{id}/registrations?action=deactivate to acknowledge the
deletion. This action moves the registration to a Deactivated state.
POST /api/v2/keys/{id}/registrationsRequest
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Alters server behavior for POST or DELETE operations. A header with
return=minimalcauses the service to return only the key identifier, or metadata. A header containingreturn=representationreturns both the key material and metadata in the response entity-body. If the key has been designated as a root key, the system cannot return the key material.Note: During POST operations, Key Protect may not immediately return the key material due to key generation time. To retrieve the key material, you can perform a subsequent
GET /keys/{id}request.Allowable values: [
return=representation,return=minimal]
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The action to perform on the specified key.
Allowable values: [
deactivate]
The base request for registration actions.
A collection of resources.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations?action=deactivate -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.crn+json", "collectionTotal": 1 }, "resources": [ { "resourceCrn": "<CRN that is associated with the specified deleted key ID to deactivate>" } ] }'
Response
The base schema for the request body of deactivate registration.
The metadata that describes the resource array.
A collection of resources.
Status Code
The requested action was successfully performed on the registration.
The requested action was successfully performed on the registration. No content.
The requested action could not be performed due to an invalid or missing request body, or invalid key ID.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The registration or key could not be found. Verify that the specified key ID and CRN are valid.
The action could not be performed on the registration because it is in an invalid state.
For action
deactivate, the registration must be in theSuspended(2) state.Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.resource_crn+json", "collectionTotal": 1 }, "resources": [ { "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/684b6eb4-33b6-42e7-9b82-ca6cb8b59dac:b016015c-95b3-4ffd-b5ab-8316ee83ba79:bucket:mybucket" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Action could not be performed on registration. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_FIELD_ERR", "message": "The field 'resourceCrn' must be:", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRNQuery" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Action could not be performed on registration. Please see 'reasons' for more details", "reasons": [ { "code": "REGISTRATION_NOT_FOUND_ERR", "message": "Registration does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resource": [ { "errorMsg": "Action could not be performed on registration. Please see 'reasons' for more details", "reasons": [ { "code": "REG_INVALID_STATE_ERR", "message": "Request action cannot be performed on the registration in its current state", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List registrations for a key
Retrieves a list of registrations that are associated with a specified root key.
When you use a root key to protect an IBM Cloud resource, such as a
Cloud Object Storage bucket, Key Protect creates a registration between
the resource and root key. You can use GET /keys/{id}/registrations to
understand which cloud resources are protected by the key that you
specify.
GET /api/v2/keys/{id}/registrationsAuditing
Calling this method generates the following auditing event.
kms.registrations.list
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
Query Parameters
The number of registrations to retrieve. By default returns the first 200 registrations. To retrieve a different set of registrations, use
limitwithoffsetto page through your available resources. The maximum value forlimitis 5,000.Usage: If you have 20 registrations that are associated with a key, and you want to retrieve only the first 5 registrations, use
../registrations?limit=5.Possible values: 1 ≤ value ≤ 5000
Default:
200The number of registrations to skip. By specifying
offset, you retrieve a subset of registrations that starts with theoffsetvalue. Useoffsetwithlimitto page through your available resources.Usage: If you have 100 registrations that are associated with a key, and you want to retrieve registrations 26 through 50, use
../registrations?offset=25&limit=25.Possible values: value ≥ 0
Default:
0Filters for resources that are associated with a specified Cloud Resource Name (CRN) by using URL encoded wildcard characters (
*). The parameter should contain all CRN segments and must be URL encoded. Supports a prefix search when you specify*on the last CRN segment.Usage: To list registrations that are associated with all resources in
<service-instance>, use a URL encoded version of the following string:crn:v1:bluemix:public:<service-name>:<location>:a/<account>:<service-instance>:*:*. To search for subresources, use the following CRN format:crn:v1:bluemix:public:<service-name>:<location>:a/<account>:<service-instance>:<resource-type>:<resource>/<subresource>.For more examples, see CRN query examples.
Example:
crn%3Av1%3Abluemix%3Apublic%3Adatabases-for-postgresql%3Aus-south%3Aa%2F274074dce64e9c423ffc238516c755e1%3A29caf0e7-120f-4da8-9551-3abf57ebcfc7%3A*%3A*Filters registrations based on the
preventKeyDeletionproperty. You can use this query parameter to search for registered cloud resources that are non-erasable due to a retention policy.Usage: To search for registered cloud resources that have a retention policy, use
../registrations?preventKeyDeletion=true.If set to
true, returnstotalCountin the response metadata for use with pagination. ThetotalCountvalue returned specifies the total number of registrations that match the request, disregarding limit and offset.Usage: To return the
totalCountvalue for use with pagination, use../registrations?totalCount=true.
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/registrations -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Properties associated with a list registration response which may include total registration count.
The metadata that describes the resource array.
A collection of resources.
Status Code
The list of registrations was successfully retrieved.
The list of registrations could not be retrieved due to a malformed
urlEncodedResourceCRN, an invalid or missing request body, or an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
The key with specified ID could not be found.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 2, "totalCount": 4 }, "resources": [ { "keyId": "7f19bee1-4fdf-4646-866e-111c80f94478", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "IBMid-203BRNKPR5", "creationDate": "2019-12-03T05:23:19+0000", "updatedBy": "IBMid-203BRNKPR5", "lastUpdated": "2019-12-03T05:23:19+0000", "description": "Registration between a bucket and root key", "preventKeyDeletion": true, "keyVersion": { "id": "4a0225e9-17a0-46c1-ace7-f25bcf4237d4", "creationDate": "2019-12-03T05:23:19+0000" } }, { "keyId": "7f19bee1-4fdf-4646-866e-111c80f94478", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<other-bucket-name>", "createdBy": "IBMid-203BRNKPR5", "creationDate": "2019-12-02T06:15:00+0000", "updatedBy": "IBMid-203BRNKPR5", "lastUpdated": "2019-12-02T06:15:00+0000", "description": "Registration between the root key and a different bucket", "preventKeyDeletion": true, "keyVersion": { "id": "4a0225e9-17a0-46c1-ace7-f25bcf4237d4", "creationDate": "2019-12-02T06:15:00+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRNQuery' must be: specified to at least the service instance", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRNQuery" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List registrations for any key
Retrieves a list of registrations that match the Cloud Resource Name (CRN) query that you specify.
When you use a root key to protect an IBM Cloud resource, such as a
Cloud Object Storage bucket, Key Protect creates a registration between
the resource and root key. You can use GET /keys/registrations to
understand which cloud resources are protected by keys in your Key
Protect service instance.
GET /api/v2/keys/registrations
Auditing
Calling this method generates the following auditing event.
kms.registrations.list
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the target key ring. If unspecified, all resources in the instance that the caller has access to will be returned. When the header is specified, only resources within the specified key ring, that the caller has access to, will be returned. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Query Parameters
Filters for resources that are associated with a specified Cloud Resource Name (CRN) by using URL encoded wildcard characters (
*). The parameter should contain all CRN segments and must be URL encoded.If provided, the parameter should not contain (
*) in the first eight segments. If this parameter is not provided, registrations for all keys in the requested Key Protect instance are returned.Example:
crn%3Av1%3Abluemix%3Apublic%3Adatabases-for-postgresql%3Aus-south%3Aa%2F274074dce64e9c423ffc238516c755e1%3A29caf0e7-120f-4da8-9551-3abf57ebcfc7%3A*%3A*The number of registrations to retrieve. By default returns the first 200 registrations. To retrieve a different set of registrations, use
limitwithoffsetto page through your available resources. The maximum value forlimitis 5,000.Usage: If you have 20 registrations that are associated with a key, and you want to retrieve only the first 5 registrations, use
../registrations?limit=5.Possible values: 1 ≤ value ≤ 5000
Default:
200The number of registrations to skip. By specifying
offset, you retrieve a subset of registrations that starts with theoffsetvalue. Useoffsetwithlimitto page through your available resources.Usage: If you have 100 registrations that are associated with a key, and you want to retrieve registrations 26 through 50, use
../registrations?offset=25&limit=25.Possible values: value ≥ 0
Default:
0Filters registrations based on the
preventKeyDeletionproperty. You can use this query parameter to search for registered cloud resources that are non-erasable due to a retention policy.Usage: To search for registered cloud resources that have a retention policy, use
../registrations?preventKeyDeletion=true.If set to
true, returnstotalCountin the response metadata for use with pagination. ThetotalCountvalue returned specifies the total number of registrations that match the request, disregarding limit and offset.Usage: To return the
totalCountvalue for use with pagination, use../registrations?totalCount=true.
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/keys/registrations?urlEncodedResourceCRNQuery=<url_encoded_resource_CRN_query> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
Response
Properties associated with a list registration response which may include total registration count.
The metadata that describes the resource array.
A collection of resources.
Status Code
The list of registrations was successfully retrieved.
The list of registrations could not be retrieved due to a malformed
urlEncodedResourceCRNQuery, an invalid or missing request body, or a mismatch between the cloud service CRN and the resource CRN.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
You are not authorized to make this request due to missing authorization between the service instance and Key Protect instance, requiring a service-to-service call, or a mismatch between the cloud service CRN and the resource CRN.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.registration+json", "collectionTotal": 2, "totalCount": 4 }, "resources": [ { "keyId": "7f19bee1-4fdf-4646-866e-111c80f94478", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<bucket-name>", "createdBy": "IBMid-203BRNKPR5", "creationDate": "2019-12-03T05:23:19+0000", "updatedBy": "IBMid-203BRNKPR5", "lastUpdated": "2019-12-03T05:23:19+0000", "description": "Registration between a bucket and root key", "preventKeyDeletion": true, "keyVersion": { "id": "4a0225e9-17a0-46c1-ace7-f25bcf4237d4", "creationDate": "2019-12-03T05:23:19+0000" } }, { "keyId": "fcc3567c-793e-455f-b576-e2989e2bb170", "resourceCrn": "crn:v1:bluemix:public:cloud-object-storage:global:a/<account-id>:<service-instance>:bucket:<other-bucket-name>", "createdBy": "IBMid-203BRNKPR5", "creationDate": "2019-12-02T06:15:00+0000", "updatedBy": "IBMid-203BRNKPR5", "lastUpdated": "2019-12-02T06:15:00+0000", "description": "Registration between a bucket and root key", "preventKeyDeletion": true, "keyVersion": { "id": "f58a7cfb-2b8d-4bba-b388-cfb90c3fbf31", "creationDate": "2019-12-02T06:15:00+0000" } } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Registration could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PARAM_ERR", "message": "The param 'urlEncodedResourceCRNQuery' must be: specified to at least the service instance", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "urlEncodedResourceCRNQuery" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Caller is not authorized to make this request.", "reasons": [ { "code": "RESOURCE_OWNER_ERR", "message": "The resource queried does not belong to the service.", "status": 403, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Acknowledge key events
Service to service calls only. Acknowledges a key lifecycle event.
When a customer performs an action on a root key, Key Protect uses
Hyperwarp to notify the cloud services that are registered with the key.
To acknowledge the Hyperwarp event, registered services must call
POST /api/v2/event_ack.
POST /api/v2/event_ack
Auditing
Calling this method generates the following auditing event.
kms.secrets.eventack
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key belongs to. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.Default:
default
The base request for acknowledging a key action events.
The metadata that describes the resource array.
A collection of resources.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/event_ack -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json' -d '{ "metadata": { "collectionType": "application/vnd.ibm.kms.event_acknowledge+json", "collectionTotal": 1 }, "resources": [ { "eventId": "<event_ID>", "adopterKeyState": "DEK_ENABLED", "timestamp": "2018-04-12T23:20:50.52Z", "keyStateData": { "keyVersion": "<key_version>" } } ] }'
Response
Status Code
The acknowledgement for the list of key events was performed successfully. No content.
The event acknowledgement could not be performed due to an invalid or missing request body.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The specified event could not be found.
Too many requests. Please wait a few minutes and try again.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Event acknowledgement could not be performed for this service. Please see 'reasons' for more details", "reasons": [ { "code": "MISSING_FIELD_ERR", "message": "The field 'timestamp' must be: a valid RFC3339 timestamp", "status": 400, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect", "target": { "type": "field", "name": "timestamp" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Not Found: Event acknowledgement could not be performed for this service. Please see 'reasons' for more details", "reasons": [ { "code": "EVENT_NOT_FOUND", "message": "Event does not exist", "status": 404, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }
Create an alias
Creates an alias for the specified key.
POST /api/v2/keys/{id}/aliases/{alias}Auditing
Calling this method generates the following auditing event.
kms.secrets.createalias
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
An alias that identifies a key. Each alias is unique only within the given instance and is not reserved across the Key Protect service. Each key can have up to five aliases. There is a limit of 1000 aliases per instance. Alias must be alphanumeric and cannot contain spaces or special characters other than '-' or '_'.
The alias cannot be a version 4 UUID and must not be a Key Protect reserved name:
allowed_ip,key,keys,metadata,policy,policies,registration,registrations,ring,rings,rotate,wrap,unwrap,rewrap,version,versions. Alias size can be between 2 - 90 characters.
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/aliases/<alias> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json'
public static List<KeyAliasResource> createKeyAlias(String keyId, String keyAlias) { List<KeyAliasResource> responseObj = null; try { // Construct an instance of the CreateKeyAliasOptions model CreateKeyAliasOptions createKeyAliasOptionsModel = new CreateKeyAliasOptions.Builder() .id(keyId) .alias(keyAlias) .bluemixInstance("<instance_id>") .build(); // Invoke operation with valid options model Response<KeyAlias> response = testClient.createKeyAlias(createKeyAliasOptionsModel).execute(); responseObj = response.getResult().getResources(); } catch (ClassCastException e) { System.out.println("Error: " + e.toString()); return responseObj; // null if error } return responseObj; // key alias resource }
Response
Properties associated with a specific key alias.
The metadata that describes the resource array.
A collection of resources.
Status Code
An identical alias was previously created for the specified key.
A new alias was successfully created.
The alias could not be created due to a malformed
aliasor an invalid key IDYour credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The key with specified ID could not be found.
The alias is already associated with a key in the kms.
The alias quota for this key or instance has been reached and alias can not be created.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Alias could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PATH_PARAM_ERR", "message": "The path_param 'alias' must be: alphanumeric, and no spaces or special characters other than '-' or '_', and can not be a version 4 UUID", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "path_param", "name": "aliases" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Alias could not be created. Please see 'reasons' for more details", "reasons": [ { "code": "KEY_NOT_FOUND", "message": "Key does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key alias could not be created: Please see 'reasons' for more details", "reasons": [ { "code": "KEY_ALIAS_NOT_UNIQUE_ERR", "message": "One or more aliases are already associated with a key in the instance", "status": 409, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Delete an alias
Deletes an alias from the associated key.
Delete alias does not delete the key.
DELETE /api/v2/keys/{id}/aliases/{alias}Auditing
Calling this method generates the following auditing event.
kms.secrets.deletealias
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
The ID of the key ring that the specified key is a part of. When the header is not specified, Key Protect will perform a key ring lookup. For a more optimized request, specify the key ring on every call. The key ring ID of keys that are created without an
X-Kms-Key-Ringheader is:default.
Path Parameters
The v4 UUID that uniquely identifies the key.
An alias that identifies a key. Each alias is unique only within the given instance and is not reserved across the Key Protect service. Each key can have up to five aliases. There is a limit of 1000 aliases per instance. Alias must be alphanumeric and cannot contain spaces or special characters other than '-' or '_'.
The alias cannot be a version 4 UUID and must not be a Key Protect reserved name:
allowed_ip,key,keys,metadata,policy,policies,registration,registrations,ring,rings,rotate,wrap,unwrap,rewrap,version,versions. Alias size can be between 2 - 90 characters.
curl -X DELETE https://<region>.kms.cloud.ibm.com/api/v2/keys/<key_ID>/aliases/<alias> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>' -H 'content-type: application/json'
public static String deleteKeyAlias (String keyId, String keyAlias) { // Construct an instance of the DeleteKeyAliasOptions model DeleteKeyAliasOptions deleteKeyAliasOptionsModel = new DeleteKeyAliasOptions.Builder() .id(keyId) .alias(keyAlias) .bluemixInstance("<instance_id>") .build(); // Invoke operation with valid options model try { return testClient.deleteKeyAlias(deleteKeyAliasOptionsModel).execute().toString() + " success"; } catch (ClassCastException e){ return e.toString(); } }
Response
Status Code
An alias was successfully deleted. No content.
The alias could not be deleted due to a malformed
aliasor an invalid key ID.Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The alias with specified key ID could not be found.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Alias could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "INVALID_PATH_PARAM_ERR", "message": "The param 'alias' must be: alphanumeric, and no spaces or special characters other than '-' or '_', and can not be a version 4 UUID", "status": 400, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect", "target": { "type": "param", "name": "aliases" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Alias could not be deleted. Please see 'reasons' for more details", "reasons": [ { "code": "ALIAS_NOT_FOUND", "message": "Alias does not exist", "status": 404, "moreInfo": "https://cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
List Key Rings
List all key rings in the instance.
GET /api/v2/key_rings
Auditing
Calling this method generates the following auditing event.
kms.keyrings.list
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
curl -X GET https://<region>.kms.cloud.ibm.com/api/v2/key_rings -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
public static ListKeyRings getKeyRings () { ListKeyRings result = null; // Construct an instance of the ListKeyRingsOptions model ListKeyRingsOptions listKeyRingsOptionsModel = new ListKeyRingsOptions.Builder() .bluemixInstance("<instance_id>") .build(); try { // Invoke operation with valid options model Response<ListKeyRings> response = testClient.listKeyRings(listKeyRingsOptionsModel).execute(); return response.getResult(); } catch (ClassCastException e) { return result; } }
Response
The base schema for listing key rings.
The metadata that describes the resource array.
A collection of resources.
Status Code
The list of key rings was successfully retrieved.
The request is missing a required field.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.key_ring+json", "collectionTotal": 3 }, "resources": [ { "id": "default" }, { "id": "example-key-ring", "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "..." }, { "id": "key-ring-name-2", "creationDate": "YYYY-MM-DDTHH:MM:SSZ", "createdBy": "..." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Create Key Ring
Create a key ring in the instance with the specified name. The key ring ID default is a reserved key ring ID and cannot be created nor destroyed. The default key ring is initial key ring that is generated with each newly created instance. All keys not associated with an otherwise specified key ring exist within the default key ring.
POST /api/v2/key_rings/{key-ring-id}Auditing
Calling this method generates the following auditing event.
kms.keyrings.create
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
Path Parameters
The ID that identifies the key ring. Each ID is unique only within the given instance and is not reserved across the Key Protect service.
Possible values: 2 ≤ length ≤ 100, Value must match regular expression
^[a-zA-Z0-9-]*$
curl -X POST https://<region>.kms.cloud.ibm.com/api/v2/key_rings/<key_ring_id> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
public static KeyRing createKeyRing (String keyRingId) { KeyRing result = null; // Construct an instance of the CreateKeyRingOptions model CreateKeyRingOptions createKeyRingOptionsModel = new CreateKeyRingOptions.Builder() .keyRingId(keyRingId) .bluemixInstance("<instance_id>") .build(); try { // Invoke operation with valid options model Response<KeyRing> response = testClient.createKeyRing(createKeyRingOptionsModel).execute(); System.out.println("Prelim: " + response.toString()); result = response.getResult(); return result; } catch (ClassCastException e) { return result; } }
Response
Status Code
The key ring was successfully created.
The key ring already exists. No content.
The key ring could not be created due to invalid request data.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
Key ring resource quota has been reached.
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key ring could not be created. Please see `reasons` for more details.", "reasons": [ { "code": "INVALID_PATH_PARAM_ERR", "message": "The path_param `id` must be: a string matching pattern `^[a-zA-Z0-9-]*$`", "status": 400, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect", "target": { "type": "path_param`", "name": "key-ring-id" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key ring could not be created. Please see `reasons` for more details.", "reasons": [ { "code": "KEY_RING_RESOURCE_QUOTA_ERR", "message": "The resource quota for key rings in this instance has been reached/exceeded and key rings cannot be created", "status": 409, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }
Delete Key Ring
Delete the key ring from the instance. key ring ID default cannot be destroyed. Currently, only key rings with 0 (zero) keys, in any state [Active (1), Suspended (2), Deactivated (3), Destroyed (5)], may be deleted.
DELETE /api/v2/key_rings/{key-ring-id}Auditing
Calling this method generates the following auditing event.
kms.keyrings.delete
Request
Custom Headers
The IBM Cloud instance ID that identifies your Key Protect service instance.
The v4 UUID used to correlate and track transactions.
Path Parameters
The ID that identifies the key ring. Each ID is unique only within the given instance and is not reserved across the Key Protect service.
Possible values: 2 ≤ length ≤ 100, Value must match regular expression
^[a-zA-Z0-9-]*$
curl -X DELETE https://<region>.kms.cloud.ibm.com/api/v2/key_rings/<key_ring_id> -H 'authorization: Bearer <IAM_token>' -H 'bluemix-instance: <instance_ID>'
public static String deleteKeyRing (String keyRingId) { // Construct an instance of the DeleteKeyRingOptions model DeleteKeyRingOptions deleteKeyRingOptionsModel = new DeleteKeyRingOptions.Builder() .keyRingId(keyRingId) .bluemixInstance("<instance_id>") .build(); try { // Invoke operation with valid options model return testClient.deleteKeyRing(deleteKeyRingOptionsModel).execute().toString() + " success"; } catch (ClassCastException e) { return e.toString(); } }
Response
Status Code
The key ring was successfully deleted. No content.
The key ring could not be deleted due to invalid request data.
Your credentials are invalid or do not have the necessary permissions to make this request. Verify that the given IBM Cloud access token and instance ID are correct. If the error persists, contact the account owner to check your permissions.
The specified key ring contains at least one key (in any state)
Too many requests. Please wait a few minutes and try again.
IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later.
If the problem persists, note the
correlation-IDin the response header and contact IBM Cloud support.
{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key ring could not be created. Please see `reasons` for more details.", "reasons": [ { "code": "INVALID_PATH_PARAM_ERR", "message": "The path_param `id` must be: a string matching pattern `^[a-zA-Z0-9-]*$`", "status": 400, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect", "target": { "type": "path_param`", "name": "key-ring-id" } } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Unauthorized: The user does not have access to the specified resource" } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Key ring could not be created. Please see `reasons` for more details.", "reasons": [ { "code": "KEY_RING_NOT_EMPTY_ERR", "message": "The specified key ring contains at least one key (in any state)", "status": 409, "moreInfo": "https://test.cloud.ibm.com/apidocs/key-protect" } ] } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Too Many Requests: Please wait a few minutes and try again." } ] }{ "metadata": { "collectionType": "application/vnd.ibm.kms.error+json", "collectionTotal": 1 }, "resources": [ { "errorMsg": "Internal Server Error: IBM Key Protect is currently unavailable. Your request could not be processed. Please try again later." } ] }