From dfe65b955195e0d1396055ea691b8298f610cfcf Mon Sep 17 00:00:00 2001 From: "Li, Qiao" Date: Tue, 2 Apr 2024 13:42:22 +0000 Subject: [PATCH] KMS API 20230817 version. Reviewed-by: Belejkanic, Lukas Co-authored-by: Li, Qiao Co-committed-by: Li, Qiao --- docs/kms/api-ref/ALL_META.TXT.json | 920 +++++++++++++++-- docs/kms/api-ref/CLASS.TXT.json | 341 +++++-- docs/kms/api-ref/Sign.html | 554 ++++++++++ docs/kms/api-ref/ValidateSignature.html | 548 ++++++++++ docs/kms/api-ref/en-us_image_0218769431.png | Bin 0 -> 51740 bytes docs/kms/api-ref/en-us_image_0264400728.png | Bin 0 -> 48594 bytes docs/kms/api-ref/en-us_topic_00384375969.html | 8 - docs/kms/api-ref/kms_02_0001.html | 70 ++ docs/kms/api-ref/kms_02_0002.html | 15 + docs/kms/api-ref/kms_02_0003.html | 12 + docs/kms/api-ref/kms_02_0010.html | 72 +- docs/kms/api-ref/kms_02_0011.html | 97 ++ docs/kms/api-ref/kms_02_0012.html | 22 +- docs/kms/api-ref/kms_02_0013.html | 2 +- docs/kms/api-ref/kms_02_0014.html | 2 +- docs/kms/api-ref/kms_02_0015.html | 2 +- docs/kms/api-ref/kms_02_0016.html | 2 +- docs/kms/api-ref/kms_02_0017.html | 2 +- docs/kms/api-ref/kms_02_0018.html | 2 +- docs/kms/api-ref/kms_02_0019.html | 4 +- docs/kms/api-ref/kms_02_0020.html | 4 +- docs/kms/api-ref/kms_02_0021.html | 8 +- docs/kms/api-ref/kms_02_0022.html | 8 +- docs/kms/api-ref/kms_02_0023.html | 8 +- docs/kms/api-ref/kms_02_0024.html | 2 +- docs/kms/api-ref/kms_02_0025.html | 2 +- docs/kms/api-ref/kms_02_0026.html | 2 +- docs/kms/api-ref/kms_02_0027.html | 2 +- docs/kms/api-ref/kms_02_0028.html | 20 +- docs/kms/api-ref/kms_02_0029.html | 2 +- docs/kms/api-ref/kms_02_0030.html | 2 +- docs/kms/api-ref/kms_02_0031.html | 2 +- docs/kms/api-ref/kms_02_0032.html | 2 +- docs/kms/api-ref/kms_02_0033.html | 169 ++++ docs/kms/api-ref/kms_02_0034.html | 157 +++ docs/kms/api-ref/kms_02_0035.html | 10 +- docs/kms/api-ref/kms_02_0036.html | 2 +- docs/kms/api-ref/kms_02_0037.html | 2 +- docs/kms/api-ref/kms_02_0038.html | 2 +- docs/kms/api-ref/kms_02_0039.html | 2 +- docs/kms/api-ref/kms_02_0040.html | 2 +- docs/kms/api-ref/kms_02_0041.html | 2 +- docs/kms/api-ref/kms_02_0042.html | 2 +- docs/kms/api-ref/kms_02_0043.html | 2 +- docs/kms/api-ref/kms_02_0044.html | 2 +- docs/kms/api-ref/kms_02_0045.html | 2 +- docs/kms/api-ref/kms_02_0046.html | 2 +- docs/kms/api-ref/kms_02_0047.html | 2 +- docs/kms/api-ref/kms_02_0048.html | 2 +- docs/kms/api-ref/kms_02_0049.html | 2 +- docs/kms/api-ref/kms_02_0050.html | 19 + docs/kms/api-ref/kms_02_0051.html | 11 + docs/kms/api-ref/kms_02_0052.html | 11 + docs/kms/api-ref/kms_02_0053.html | 12 + docs/kms/api-ref/kms_02_0054.html | 25 + docs/kms/api-ref/kms_02_0056.html | 48 + docs/kms/api-ref/kms_02_0057.html | 177 ++++ docs/kms/api-ref/kms_02_0058.html | 13 + docs/kms/api-ref/kms_02_0200.html | 8 + docs/kms/api-ref/kms_02_0300.html | 2 - docs/kms/api-ref/kms_02_0304.html | 22 +- .../{dew_02_0307.html => kms_02_0307.html} | 6 +- .../{dew_02_0308.html => kms_02_0308.html} | 22 +- .../{dew_02_0309.html => kms_02_0309.html} | 454 ++++----- docs/kms/api-ref/kms_02_8888.html | 950 ------------------ .../public_sys-resources/icon-arrowdn.gif | Bin 68 -> 1887 bytes .../public_sys-resources/icon-arrowrt.gif | Bin 70 -> 1890 bytes 67 files changed, 3351 insertions(+), 1532 deletions(-) create mode 100644 docs/kms/api-ref/Sign.html create mode 100644 docs/kms/api-ref/ValidateSignature.html create mode 100644 docs/kms/api-ref/en-us_image_0218769431.png create mode 100644 docs/kms/api-ref/en-us_image_0264400728.png delete mode 100644 docs/kms/api-ref/en-us_topic_00384375969.html create mode 100644 docs/kms/api-ref/kms_02_0001.html create mode 100644 docs/kms/api-ref/kms_02_0002.html create mode 100644 docs/kms/api-ref/kms_02_0003.html create mode 100644 docs/kms/api-ref/kms_02_0011.html create mode 100644 docs/kms/api-ref/kms_02_0033.html create mode 100644 docs/kms/api-ref/kms_02_0034.html create mode 100644 docs/kms/api-ref/kms_02_0050.html create mode 100644 docs/kms/api-ref/kms_02_0051.html create mode 100644 docs/kms/api-ref/kms_02_0052.html create mode 100644 docs/kms/api-ref/kms_02_0053.html create mode 100644 docs/kms/api-ref/kms_02_0054.html create mode 100644 docs/kms/api-ref/kms_02_0056.html create mode 100644 docs/kms/api-ref/kms_02_0057.html create mode 100644 docs/kms/api-ref/kms_02_0058.html create mode 100644 docs/kms/api-ref/kms_02_0200.html rename docs/kms/api-ref/{dew_02_0307.html => kms_02_0307.html} (54%) rename docs/kms/api-ref/{dew_02_0308.html => kms_02_0308.html} (59%) rename docs/kms/api-ref/{dew_02_0309.html => kms_02_0309.html} (59%) delete mode 100644 docs/kms/api-ref/kms_02_8888.html diff --git a/docs/kms/api-ref/ALL_META.TXT.json b/docs/kms/api-ref/ALL_META.TXT.json index 0ed2b96e..e621abf6 100644 --- a/docs/kms/api-ref/ALL_META.TXT.json +++ b/docs/kms/api-ref/ALL_META.TXT.json @@ -1,481 +1,1201 @@ [ { - "uri":"en-us_topic_00384375969.html", + "dockw":"API Reference" + }, + { + "uri":"kms_02_0200.html", + "node_id":"kms_02_0200.xml", "product_code":"kms", "code":"1", - "des":"Public cloud APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform ", + "des":"Cloud service APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform", "doc_type":"api", "kw":"API Usage Guidelines,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"API Usage Guidelines", "githuburl":"" }, { - "uri":"kms_02_0010.html", + "uri":"kms_02_0050.html", + "node_id":"kms_02_0050.xml", "product_code":"kms", "code":"2", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", + "kw":"Before You Start", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Before You Start", + "githuburl":"" + }, + { + "uri":"kms_02_0058.html", + "node_id":"kms_02_0058.xml", + "product_code":"kms", + "code":"3", + "des":"Key Management Service (KMS) is a secure, reliable, and easy-to-use service for managing your keys on the cloud. It helps you easily create, manage, and protect keys.You ", + "doc_type":"api", + "kw":"Overview,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Overview", + "githuburl":"" + }, + { + "uri":"kms_02_0051.html", + "node_id":"kms_02_0051.xml", + "product_code":"kms", + "code":"4", + "des":"KMS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS requests. For details about API calling, see Calling APIs.", + "doc_type":"api", + "kw":"API Calling,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"API Calling", + "githuburl":"" + }, + { + "uri":"kms_02_0052.html", + "node_id":"kms_02_0052.xml", + "product_code":"kms", + "code":"5", + "des":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "doc_type":"api", + "kw":"Endpoints,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Endpoints", + "githuburl":"" + }, + { + "uri":"kms_02_0053.html", + "node_id":"kms_02_0053.xml", + "product_code":"kms", + "code":"6", + "des":"For more constraints, see the descriptions of specific APIs.", + "doc_type":"api", + "kw":"Constraints,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Constraints", + "githuburl":"" + }, + { + "uri":"kms_02_0054.html", + "node_id":"kms_02_0054.xml", + "product_code":"kms", + "code":"7", + "des":"AccountAn account has full access permissions for all the resources and cloud services under it. It can reset user passwords and grant users permissions. The account is a", + "doc_type":"api", + "kw":"Concepts,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Concepts", + "githuburl":"" + }, + { + "uri":"kms_02_0002.html", + "node_id":"kms_02_0002.xml", + "product_code":"kms", + "code":"8", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Calling APIs", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Calling APIs", + "githuburl":"" + }, + { + "uri":"kms_02_0001.html", + "node_id":"kms_02_0001.xml", + "product_code":"kms", + "code":"9", + "des":"This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained ", + "doc_type":"api", + "kw":"Making an API Request,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Making an API Request", + "githuburl":"" + }, + { + "uri":"kms_02_0003.html", + "node_id":"kms_02_0003.xml", + "product_code":"kms", + "code":"10", + "des":"Requests for calling an API can be authenticated using either of the following methods:Token-based authentication: Requests are authenticated using a token.AK/SK-based au", + "doc_type":"api", + "kw":"Authentication,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Authentication", + "githuburl":"" + }, + { + "uri":"kms_02_0056.html", + "node_id":"kms_02_0056.xml", + "product_code":"kms", + "code":"11", + "des":"After sending a request, you will receive a response containing the status code, response header, and response body.A status code is a group of digits ranging from 1xx to", + "doc_type":"api", + "kw":"Returned Values,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Returned Values", + "githuburl":"" + }, + { + "uri":"kms_02_0057.html", + "node_id":"kms_02_0057.xml", + "product_code":"kms", + "code":"12", + "des":"You can use all functions of by calling its APIs.", + "doc_type":"api", + "kw":"API Overview,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"API Overview", + "githuburl":"" + }, + { + "uri":"kms_02_0010.html", + "node_id":"kms_02_0010.xml", + "product_code":"kms", + "code":"13", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", "kw":"APIs", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"APIs", "githuburl":"" }, { - "uri":"kms_02_0012.html", + "uri":"kms_02_0011.html", + "node_id":"kms_02_0011.xml", "product_code":"kms", - "code":"3", + "code":"14", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"CMK Management", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"CMK Management", + "githuburl":"" + }, + { + "uri":"kms_02_0012.html", + "node_id":"kms_02_0012.xml", + "product_code":"kms", + "code":"15", "des":"This API is used to create customer master keys (CMKs) used to encrypt data encryption keys (DEKs).Default Master Keys are created by services integrated with KMS. Names ", "doc_type":"api", - "kw":"Creating a CMK,APIs,API Reference", + "kw":"Creating a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Creating a CMK", "githuburl":"" }, { "uri":"kms_02_0013.html", + "node_id":"kms_02_0013.xml", "product_code":"kms", - "code":"4", + "code":"16", "des":"This API allows you to enable a CMK. Only an enabled CMK can be used.Only a disabled CMK can be enabled.URI formatPOST /v1.0/{project_id}/kms/enable-keyPOST /v1.0/{projec", "doc_type":"api", - "kw":"Enabling a CMK,APIs,API Reference", + "kw":"Enabling a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Enabling a CMK", "githuburl":"" }, { "uri":"kms_02_0014.html", + "node_id":"kms_02_0014.xml", "product_code":"kms", - "code":"5", + "code":"17", "des":"This API allows you to disable a CMK. A disabled CMK cannot be used.Only an enabled CMK can be disabled.URI formatPOST /v1.0/{project_id}/kms/disable-keyPOST /v1.0/{proje", "doc_type":"api", - "kw":"Disabling a CMK,APIs,API Reference", + "kw":"Disabling a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Disabling a CMK", "githuburl":"" }, { "uri":"kms_02_0015.html", + "node_id":"kms_02_0015.xml", "product_code":"kms", - "code":"6", + "code":"18", "des":"This API enables you to schedule the deletion of a CMK. A CMK can be scheduled to be deleted after 7 to 1096 days.URI formatPOST /v1.0/{project_id}/kms/schedule-key-delet", "doc_type":"api", - "kw":"Scheduling the Deletion of a CMK,APIs,API Reference", + "kw":"Scheduling the Deletion of a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Scheduling the Deletion of a CMK", "githuburl":"" }, { "uri":"kms_02_0016.html", + "node_id":"kms_02_0016.xml", "product_code":"kms", - "code":"7", + "code":"19", "des":"This API enables you to cancel the scheduled deletion of a CMK.You can cancel the scheduled deletion for a CMK only when the CMK's status is Scheduled deletion.URI format", "doc_type":"api", - "kw":"Canceling the Scheduled Deletion of a CMK,APIs,API Reference", + "kw":"Canceling the Scheduled Deletion of a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Canceling the Scheduled Deletion of a CMK", "githuburl":"" }, { "uri":"kms_02_0017.html", + "node_id":"kms_02_0017.xml", "product_code":"kms", - "code":"8", + "code":"20", "des":"This API allows you to query the list of all CMKs.URI formatPOST /v1.0/{project_id}/kms/list-keysPOST /v1.0/{project_id}/kms/list-keysParameter descriptionParametersParam", "doc_type":"api", - "kw":"Querying the List of CMKs,APIs,API Reference", + "kw":"Querying the List of CMKs,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying the List of CMKs", "githuburl":"" }, { "uri":"kms_02_0018.html", + "node_id":"kms_02_0018.xml", "product_code":"kms", - "code":"9", + "code":"21", "des":"This API allows you to query the details about a CMK.By default, the performance threshold for querying CMK details is 1000 TPS per customer. To apply for higher performa", "doc_type":"api", - "kw":"Querying the Information About a CMK,APIs,API Reference", + "kw":"Querying the Information About a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying the Information About a CMK", "githuburl":"" }, { "uri":"kms_02_0019.html", + "node_id":"kms_02_0019.xml", "product_code":"kms", - "code":"10", + "code":"22", "des":"This API generates a 512-bit random number.URI formatPOST /v1.0/{project_id}/kms/gen-randomPOST /v1.0/{project_id}/kms/gen-randomParameter descriptionParameter descriptio", "doc_type":"api", - "kw":"Creating a Random Number,APIs,API Reference", + "kw":"Creating a Random Number,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Creating a Random Number", "githuburl":"" }, { "uri":"kms_02_0020.html", + "node_id":"kms_02_0020.xml", "product_code":"kms", - "code":"11", + "code":"23", "des":"This API allows you to create a DEK. A returned result includes the plaintext and the ciphertext of a DEK.By default, the performance threshold for creating DEKs is 1000 ", "doc_type":"api", - "kw":"Creating a DEK,APIs,API Reference", + "kw":"Creating a DEK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Creating a DEK", "githuburl":"" }, { "uri":"kms_02_0021.html", + "node_id":"kms_02_0021.xml", "product_code":"kms", - "code":"12", + "code":"24", "des":"This API allows you to create a plaintext-free DEK, that is, the returned result of this API includes only the ciphertext of the DEK.By default, the performance threshold", "doc_type":"api", - "kw":"Creating a Plaintext-Free DEK,APIs,API Reference", + "kw":"Creating a Plaintext-Free DEK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Creating a Plaintext-Free DEK", "githuburl":"" }, { "uri":"kms_02_0022.html", + "node_id":"kms_02_0022.xml", "product_code":"kms", - "code":"13", + "code":"25", "des":"This API enables you to encrypt a DEK using a specified CMK.By default, the performance threshold for encrypting DEKs is 1000 TPS per customer. To apply for higher perfor", "doc_type":"api", - "kw":"Encrypting a DEK,APIs,API Reference", + "kw":"Encrypting a DEK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Encrypting a DEK", "githuburl":"" }, { "uri":"kms_02_0023.html", + "node_id":"kms_02_0023.xml", "product_code":"kms", - "code":"14", + "code":"26", "des":"This API enables you to decrypt a DEK using a specified CMK.Data encryption results are used for decryption.By default, the performance threshold for decrypting DEKs is 1", "doc_type":"api", - "kw":"Decrypting a DEK,APIs,API Reference", + "kw":"Decrypting a DEK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Decrypting a DEK", "githuburl":"" }, { "uri":"kms_02_0024.html", + "node_id":"kms_02_0024.xml", "product_code":"kms", - "code":"15", + "code":"27", "des":"This API is used to query the number of instances, that is, the number of CMKs created.Default Master Keys are automatically created by services and are not included in t", "doc_type":"api", - "kw":"Querying the Number of Instances,APIs,API Reference", + "kw":"Querying the Number of Instances,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying the Number of Instances", "githuburl":"" }, { "uri":"kms_02_0025.html", + "node_id":"kms_02_0025.xml", "product_code":"kms", - "code":"16", + "code":"28", "des":"This API is used to query the quota of a user, that is, the allocated total number of CMKs that can be created by a user and the number of CMKs that has been created by t", "doc_type":"api", - "kw":"Querying the Quota of a User,APIs,API Reference", + "kw":"Querying the Quota of a User,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying the Quota of a User", "githuburl":"" }, { "uri":"kms_02_0026.html", + "node_id":"kms_02_0026.xml", "product_code":"kms", - "code":"17", + "code":"29", "des":"This API enables you to change the alias of a CMK.A Default Master Key (the alias suffix of which is /default) does not allow alias changes.A CMK in Scheduled deletion st", "doc_type":"api", - "kw":"Changing the Alias of a CMK,APIs,API Reference", + "kw":"Changing the Alias of a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Changing the Alias of a CMK", "githuburl":"" }, { "uri":"kms_02_0027.html", + "node_id":"kms_02_0027.xml", "product_code":"kms", - "code":"18", + "code":"30", "des":"This API enables you to change the description of a CMK.A Default Master Key (the alias suffix of which is /default) does not allow alias changes.A CMK in Scheduled delet", "doc_type":"api", - "kw":"Changing the Description of a CMK,APIs,API Reference", + "kw":"Changing the Description of a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Changing the Description of a CMK", "githuburl":"" }, { "uri":"kms_02_0028.html", + "node_id":"kms_02_0028.xml", "product_code":"kms", - "code":"19", + "code":"31", "des":"This API enables you to create a grant to grant permissions on a CMK to a user so that the user can perform operations on the CMK.A Default Master Key (the alias suffix o", "doc_type":"api", - "kw":"Creating a Grant,APIs,API Reference", + "kw":"Creating a Grant,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Creating a Grant", "githuburl":"" }, { "uri":"kms_02_0029.html", + "node_id":"kms_02_0029.xml", "product_code":"kms", - "code":"20", + "code":"32", "des":"This API allows you to revoke a grant.Only the user who created the CMK can revoke a grant.URI formatPOST /v1.0/{project_id}/kms/revoke-grantPOST /v1.0/{project_id}/kms/r", "doc_type":"api", - "kw":"Revoking a Grant,APIs,API Reference", + "kw":"Revoking a Grant,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Revoking a Grant", "githuburl":"" }, { "uri":"kms_02_0030.html", + "node_id":"kms_02_0030.xml", "product_code":"kms", - "code":"21", + "code":"33", "des":"This API enables users to retire a grant.For example, user A grants operation permissions on CMK A/key to user B and authorizes user C to retire the grant. By doing this,", "doc_type":"api", - "kw":"Retiring a Grant,APIs,API Reference", + "kw":"Retiring a Grant,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Retiring a Grant", "githuburl":"" }, { "uri":"kms_02_0031.html", + "node_id":"kms_02_0031.xml", "product_code":"kms", - "code":"22", + "code":"34", "des":"This API enables you to query grants on a CMK.URI formatPOST /v1.0/{project_id}/kms/list-grantsPOST /v1.0/{project_id}/kms/list-grantsParameter descriptionParameter descr", "doc_type":"api", - "kw":"Querying Grants on a CMK,APIs,API Reference", + "kw":"Querying Grants on a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying Grants on a CMK", "githuburl":"" }, { "uri":"kms_02_0032.html", + "node_id":"kms_02_0032.xml", "product_code":"kms", - "code":"23", + "code":"35", "des":"This API enables you to query grants that can be retired.URI formatPOST /v1.0/{project_id}/kms/list-retirable-grantsPOST /v1.0/{project_id}/kms/list-retirable-grantsParam", "doc_type":"api", - "kw":"Querying Grants That Can Be Retired,APIs,API Reference", + "kw":"Querying Grants That Can Be Retired,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying Grants That Can Be Retired", "githuburl":"" }, { - "uri":"kms_02_0035.html", + "uri":"kms_02_0033.html", + "node_id":"kms_02_0033.xml", "product_code":"kms", - "code":"24", + "code":"36", + "des":"This API enables you to encrypt data using a specified CMK.By default, the performance threshold for encrypting data is 1000 TPS per customer. To apply for higher perform", + "doc_type":"api", + "kw":"Encrypting Data,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Encrypting Data", + "githuburl":"" + }, + { + "uri":"kms_02_0034.html", + "node_id":"kms_02_0034.xml", + "product_code":"kms", + "code":"37", + "des":"This API enables you to decrypt data.By default, the performance threshold for decrypting data is 1000 TPS per customer. To apply for higher performance, submit a service", + "doc_type":"api", + "kw":"Decrypting Data,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Decrypting Data", + "githuburl":"" + }, + { + "uri":"Sign.html", + "node_id":"sign.xml", + "product_code":"kms", + "code":"38", + "des":"This API is used to use the private key of an asymmetric key to digitally sign a message or digest.Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for ", + "doc_type":"api", + "kw":"Signing Data,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Signing Data", + "githuburl":"" + }, + { + "uri":"ValidateSignature.html", + "node_id":"validatesignature.xml", + "product_code":"kms", + "code":"39", + "des":"This API uses the private key of an asymmetric key to verify a signature.Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for signature verification.SM2", + "doc_type":"api", + "kw":"Authenticating a Signature,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], + "title":"Authenticating a Signature", + "githuburl":"" + }, + { + "uri":"kms_02_0035.html", + "node_id":"kms_02_0035.xml", + "product_code":"kms", + "code":"40", "des":"This API enables you to obtain necessary parameters to import a CMK, including a CMK import token and a CMK encryption public key.The returned public key type is RSA_2048", "doc_type":"api", - "kw":"Obtaining CMK Import Parameters,APIs,API Reference", + "kw":"Obtaining CMK Import Parameters,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Obtaining CMK Import Parameters", "githuburl":"" }, { "uri":"kms_02_0036.html", + "node_id":"kms_02_0036.xml", "product_code":"kms", - "code":"25", + "code":"41", "des":"This API allows you to import CMK material.URI formatPOST /v1.0/{project_id}/kms/import-key-materialPOST /v1.0/{project_id}/kms/import-key-materialParameter descriptionPa", "doc_type":"api", - "kw":"Importing CMK Material,APIs,API Reference", + "kw":"Importing CMK Material,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Importing CMK Material", "githuburl":"" }, { "uri":"kms_02_0037.html", + "node_id":"kms_02_0037.xml", "product_code":"kms", - "code":"26", + "code":"42", "des":"This API allows you to delete CMK material.URI formatPOST /v1.0/{project_id}/kms/delete-imported-key-materialPOST /v1.0/{project_id}/kms/delete-imported-key-materialParam", "doc_type":"api", - "kw":"Deleting CMK Material,APIs,API Reference", + "kw":"Deleting CMK Material,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Deleting CMK Material", "githuburl":"" }, { "uri":"kms_02_0038.html", + "node_id":"kms_02_0038.xml", "product_code":"kms", - "code":"27", + "code":"43", "des":"This API allows you to enable rotation for a CMK.The default rotation interval is 365 days.CMKs created using imported key materials and Default Master Keys do not suppor", "doc_type":"api", - "kw":"Enabling Rotation for a CMK,APIs,API Reference", + "kw":"Enabling Rotation for a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Enabling Rotation for a CMK", "githuburl":"" }, { "uri":"kms_02_0039.html", + "node_id":"kms_02_0039.xml", "product_code":"kms", - "code":"28", + "code":"44", "des":"This API enables you to change the rotation interval for a CMK.URI formatPOST /v1.0/{project_id}/kms/update-key-rotation-intervalPOST /v1.0/{project_id}/kms/update-key-ro", "doc_type":"api", - "kw":"Changing the Rotation Interval for a CMK,APIs,API Reference", + "kw":"Changing the Rotation Interval for a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Changing the Rotation Interval for a CMK", "githuburl":"" }, { "uri":"kms_02_0040.html", + "node_id":"kms_02_0040.xml", "product_code":"kms", - "code":"29", + "code":"45", "des":"This API allows you to disable rotation for a CMK.URI formatPOST /v1.0/{project_id}/kms/disable-key-rotationPOST /v1.0/{project_id}/kms/disable-key-rotationParameter desc", "doc_type":"api", - "kw":"Disabling Rotation for a CMK,APIs,API Reference", + "kw":"Disabling Rotation for a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Disabling Rotation for a CMK", "githuburl":"" }, { "uri":"kms_02_0041.html", + "node_id":"kms_02_0041.xml", "product_code":"kms", - "code":"30", + "code":"46", "des":"This API enables you to query the rotation status of a CMK.URI formatPOST /v1.0/{project_id}/kms/get-key-rotation-statusPOST /v1.0/{project_id}/kms/get-key-rotation-statu", "doc_type":"api", - "kw":"Querying the Rotation Status of a CMK,APIs,API Reference", + "kw":"Querying the Rotation Status of a CMK,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying the Rotation Status of a CMK", "githuburl":"" }, { "uri":"kms_02_0042.html", + "node_id":"kms_02_0042.xml", "product_code":"kms", - "code":"31", + "code":"47", "des":"This API allows you to query CMK instances.You can use the tag filtering function to query the detailed information about a specified CMK.URI formatPOST /v1.0/{project_id", "doc_type":"api", - "kw":"Querying CMK Instances,APIs,API Reference", + "kw":"Querying CMK Instances,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying CMK Instances", "githuburl":"" }, { "uri":"kms_02_0043.html", + "node_id":"kms_02_0043.xml", "product_code":"kms", - "code":"32", + "code":"48", "des":"This API allows you to query tags of a specified CMK.TMS may use this API to query all tags of a specified CMK.URI formatGET /v1.0/{project_id}/kms/{key_id}/tagsGET /v1.0", "doc_type":"api", - "kw":"Querying CMK Tags,APIs,API Reference", + "kw":"Querying CMK Tags,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying CMK Tags", "githuburl":"" }, { "uri":"kms_02_0044.html", + "node_id":"kms_02_0044.xml", "product_code":"kms", - "code":"33", + "code":"49", "des":"This API enables you to query all tag sets of a specified project.URI formatGET /v1.0/{project_id}/kms/tagsGET /v1.0/{project_id}/kms/tagsParameter descriptionParameter d", "doc_type":"api", - "kw":"Querying Project Tags,APIs,API Reference", + "kw":"Querying Project Tags,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying Project Tags", "githuburl":"" }, { "uri":"kms_02_0045.html", + "node_id":"kms_02_0045.xml", "product_code":"kms", - "code":"34", + "code":"50", "des":"This API enables you to add or delete CMK tags in batches.URI formatPOST /v1.0/{project_id}/kms/{key_id}/tags/actionPOST /v1.0/{project_id}/kms/{key_id}/tags/actionParame", "doc_type":"api", - "kw":"Adding or Deleting CMK Tags in Batches,APIs,API Reference", + "kw":"Adding or Deleting CMK Tags in Batches,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Adding or Deleting CMK Tags in Batches", "githuburl":"" }, { "uri":"kms_02_0046.html", + "node_id":"kms_02_0046.xml", "product_code":"kms", - "code":"35", + "code":"51", "des":"This API allows you to add a CMK tag.URI formatPOST /v1.0/{project_id}/kms/{key_id}/tagsPOST /v1.0/{project_id}/kms/{key_id}/tagsParameter descriptionParameter descriptio", "doc_type":"api", - "kw":"Adding a CMK Tag,APIs,API Reference", + "kw":"Adding a CMK Tag,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Adding a CMK Tag", "githuburl":"" }, { "uri":"kms_02_0047.html", + "node_id":"kms_02_0047.xml", "product_code":"kms", - "code":"36", + "code":"52", "des":"This API enables you to delete a CMK tag.URI formatDELETE /v1.0/{project_id}/kms/{key_id}/tags/{key}DELETE /v1.0/{project_id}/kms/{key_id}/tags/{key}Parameter description", "doc_type":"api", - "kw":"Deleting a CMK Tag,APIs,API Reference", + "kw":"Deleting a CMK Tag,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Deleting a CMK Tag", "githuburl":"" }, { "uri":"kms_02_0048.html", + "node_id":"kms_02_0048.xml", "product_code":"kms", - "code":"37", + "code":"53", "des":"This API is used to query the API versions.URI formatGET /GET /Parameter descriptionNoneNoneNoneThe following describes how to query the version information.Example reque", "doc_type":"api", - "kw":"Querying All API Versions,APIs,API Reference", + "kw":"Querying All API Versions,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying All API Versions", "githuburl":"" }, { "uri":"kms_02_0049.html", + "node_id":"kms_02_0049.xml", "product_code":"kms", - "code":"38", + "code":"54", "des":"This API is used to query the version of an API.URI formatGET /{version_id}GET /{version_id}Parameter descriptionParameter descriptionParameterMandatoryTypeDescriptionver", "doc_type":"api", - "kw":"Querying a Specified API Version,APIs,API Reference", + "kw":"Querying a Specified API Version,CMK Management,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Querying a Specified API Version", "githuburl":"" }, { - "uri":"dew_02_0307.html", + "uri":"kms_02_0307.html", + "node_id":"kms_02_0307.xml", "product_code":"kms", - "code":"39", + "code":"55", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Permissions Policies and Supported Actions", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Permissions Policies and Supported Actions", "githuburl":"" }, { - "uri":"dew_02_0308.html", + "uri":"kms_02_0308.html", + "node_id":"kms_02_0308.xml", "product_code":"kms", - "code":"40", - "des":"This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, then you may skip over this chapter.By defaul", + "code":"56", + "des":"This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, you may skip over this chapter.By default, ne", "doc_type":"api", "kw":"Introduction,Permissions Policies and Supported Actions,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Introduction", "githuburl":"" }, { - "uri":"dew_02_0309.html", + "uri":"kms_02_0309.html", + "node_id":"kms_02_0309.xml", "product_code":"kms", - "code":"41", + "code":"57", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Encryption Key Management,Permissions Policies and Supported Actions,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Encryption Key Management", "githuburl":"" }, { "uri":"kms_02_0300.html", + "node_id":"kms_02_0300.xml", "product_code":"kms", - "code":"42", + "code":"58", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Appendix", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Appendix", "githuburl":"" }, { "uri":"kms_02_0301.html", + "node_id":"kms_02_0301.xml", "product_code":"kms", - "code":"43", + "code":"59", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Status Codes,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Status Codes", "githuburl":"" }, - { - "uri":"kms_02_8888.html", - "product_code":"kms", - "code":"44", - "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", - "doc_type":"api", - "kw":"Error Code,Appendix,API Reference", - "title":"Error Code", - "githuburl":"" - }, { "uri":"kms_02_0009.html", + "node_id":"kms_02_0009.xml", "product_code":"kms", - "code":"45", + "code":"60", "des":"A project ID is required for some URLs when an API is called. To obtain a project ID, perform the following operations:Log in to the management console.Click the username", "doc_type":"api", "kw":"Obtaining a Project ID,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Obtaining a Project ID", "githuburl":"" }, { "uri":"kms_02_0305.html", + "node_id":"kms_02_0305.xml", "product_code":"kms", - "code":"46", + "code":"61", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"API Permissions", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"API Permissions", "githuburl":"" }, { "uri":"kms_02_0306.html", + "node_id":"kms_02_0306.xml", "product_code":"kms", - "code":"47", + "code":"62", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Encryption Key Management,API Permissions,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Encryption Key Management", "githuburl":"" }, { "uri":"kms_02_0304.html", + "node_id":"kms_02_0304.xml", "product_code":"kms", - "code":"48", + "code":"63", "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "doc_type":"api", "kw":"Change History,API Reference", + "search_title":"", + "metedata":[ + { + "opensource":"true", + "IsBot":"Yes", + "IsMulti":"Yes", + "documenttype":"api", + "prodname":"kms" + } + ], "title":"Change History", "githuburl":"" } diff --git a/docs/kms/api-ref/CLASS.TXT.json b/docs/kms/api-ref/CLASS.TXT.json index 34f31c1f..bd5ff664 100644 --- a/docs/kms/api-ref/CLASS.TXT.json +++ b/docs/kms/api-ref/CLASS.TXT.json @@ -1,13 +1,112 @@ [ { - "desc":"Public cloud APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform ", + "desc":"Cloud service APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform", "product_code":"kms", "title":"API Usage Guidelines", - "uri":"en-us_topic_00384375969.html", + "uri":"kms_02_0200.html", "doc_type":"api", "p_code":"", "code":"1" }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"kms", + "title":"Before You Start", + "uri":"kms_02_0050.html", + "doc_type":"api", + "p_code":"", + "code":"2" + }, + { + "desc":"Key Management Service (KMS) is a secure, reliable, and easy-to-use service for managing your keys on the cloud. It helps you easily create, manage, and protect keys.You ", + "product_code":"kms", + "title":"Overview", + "uri":"kms_02_0058.html", + "doc_type":"api", + "p_code":"2", + "code":"3" + }, + { + "desc":"KMS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS requests. For details about API calling, see Calling APIs.", + "product_code":"kms", + "title":"API Calling", + "uri":"kms_02_0051.html", + "doc_type":"api", + "p_code":"2", + "code":"4" + }, + { + "desc":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "product_code":"kms", + "title":"Endpoints", + "uri":"kms_02_0052.html", + "doc_type":"api", + "p_code":"2", + "code":"5" + }, + { + "desc":"For more constraints, see the descriptions of specific APIs.", + "product_code":"kms", + "title":"Constraints", + "uri":"kms_02_0053.html", + "doc_type":"api", + "p_code":"2", + "code":"6" + }, + { + "desc":"AccountAn account has full access permissions for all the resources and cloud services under it. It can reset user passwords and grant users permissions. The account is a", + "product_code":"kms", + "title":"Concepts", + "uri":"kms_02_0054.html", + "doc_type":"api", + "p_code":"2", + "code":"7" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"kms", + "title":"Calling APIs", + "uri":"kms_02_0002.html", + "doc_type":"api", + "p_code":"", + "code":"8" + }, + { + "desc":"This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained ", + "product_code":"kms", + "title":"Making an API Request", + "uri":"kms_02_0001.html", + "doc_type":"api", + "p_code":"8", + "code":"9" + }, + { + "desc":"Requests for calling an API can be authenticated using either of the following methods:Token-based authentication: Requests are authenticated using a token.AK/SK-based au", + "product_code":"kms", + "title":"Authentication", + "uri":"kms_02_0003.html", + "doc_type":"api", + "p_code":"8", + "code":"10" + }, + { + "desc":"After sending a request, you will receive a response containing the status code, response header, and response body.A status code is a group of digits ranging from 1xx to", + "product_code":"kms", + "title":"Returned Values", + "uri":"kms_02_0056.html", + "doc_type":"api", + "p_code":"8", + "code":"11" + }, + { + "desc":"You can use all functions of by calling its APIs.", + "product_code":"kms", + "title":"API Overview", + "uri":"kms_02_0057.html", + "doc_type":"api", + "p_code":"", + "code":"12" + }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "product_code":"kms", @@ -15,7 +114,16 @@ "uri":"kms_02_0010.html", "doc_type":"api", "p_code":"", - "code":"2" + "code":"13" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"kms", + "title":"CMK Management", + "uri":"kms_02_0011.html", + "doc_type":"api", + "p_code":"13", + "code":"14" }, { "desc":"This API is used to create customer master keys (CMKs) used to encrypt data encryption keys (DEKs).Default Master Keys are created by services integrated with KMS. Names ", @@ -23,8 +131,8 @@ "title":"Creating a CMK", "uri":"kms_02_0012.html", "doc_type":"api", - "p_code":"2", - "code":"3" + "p_code":"14", + "code":"15" }, { "desc":"This API allows you to enable a CMK. Only an enabled CMK can be used.Only a disabled CMK can be enabled.URI formatPOST /v1.0/{project_id}/kms/enable-keyPOST /v1.0/{projec", @@ -32,8 +140,8 @@ "title":"Enabling a CMK", "uri":"kms_02_0013.html", "doc_type":"api", - "p_code":"2", - "code":"4" + "p_code":"14", + "code":"16" }, { "desc":"This API allows you to disable a CMK. A disabled CMK cannot be used.Only an enabled CMK can be disabled.URI formatPOST /v1.0/{project_id}/kms/disable-keyPOST /v1.0/{proje", @@ -41,8 +149,8 @@ "title":"Disabling a CMK", "uri":"kms_02_0014.html", "doc_type":"api", - "p_code":"2", - "code":"5" + "p_code":"14", + "code":"17" }, { "desc":"This API enables you to schedule the deletion of a CMK. A CMK can be scheduled to be deleted after 7 to 1096 days.URI formatPOST /v1.0/{project_id}/kms/schedule-key-delet", @@ -50,8 +158,8 @@ "title":"Scheduling the Deletion of a CMK", "uri":"kms_02_0015.html", "doc_type":"api", - "p_code":"2", - "code":"6" + "p_code":"14", + "code":"18" }, { "desc":"This API enables you to cancel the scheduled deletion of a CMK.You can cancel the scheduled deletion for a CMK only when the CMK's status is Scheduled deletion.URI format", @@ -59,8 +167,8 @@ "title":"Canceling the Scheduled Deletion of a CMK", "uri":"kms_02_0016.html", "doc_type":"api", - "p_code":"2", - "code":"7" + "p_code":"14", + "code":"19" }, { "desc":"This API allows you to query the list of all CMKs.URI formatPOST /v1.0/{project_id}/kms/list-keysPOST /v1.0/{project_id}/kms/list-keysParameter descriptionParametersParam", @@ -68,8 +176,8 @@ "title":"Querying the List of CMKs", "uri":"kms_02_0017.html", "doc_type":"api", - "p_code":"2", - "code":"8" + "p_code":"14", + "code":"20" }, { "desc":"This API allows you to query the details about a CMK.By default, the performance threshold for querying CMK details is 1000 TPS per customer. To apply for higher performa", @@ -77,8 +185,8 @@ "title":"Querying the Information About a CMK", "uri":"kms_02_0018.html", "doc_type":"api", - "p_code":"2", - "code":"9" + "p_code":"14", + "code":"21" }, { "desc":"This API generates a 512-bit random number.URI formatPOST /v1.0/{project_id}/kms/gen-randomPOST /v1.0/{project_id}/kms/gen-randomParameter descriptionParameter descriptio", @@ -86,8 +194,8 @@ "title":"Creating a Random Number", "uri":"kms_02_0019.html", "doc_type":"api", - "p_code":"2", - "code":"10" + "p_code":"14", + "code":"22" }, { "desc":"This API allows you to create a DEK. A returned result includes the plaintext and the ciphertext of a DEK.By default, the performance threshold for creating DEKs is 1000 ", @@ -95,8 +203,8 @@ "title":"Creating a DEK", "uri":"kms_02_0020.html", "doc_type":"api", - "p_code":"2", - "code":"11" + "p_code":"14", + "code":"23" }, { "desc":"This API allows you to create a plaintext-free DEK, that is, the returned result of this API includes only the ciphertext of the DEK.By default, the performance threshold", @@ -104,8 +212,8 @@ "title":"Creating a Plaintext-Free DEK", "uri":"kms_02_0021.html", "doc_type":"api", - "p_code":"2", - "code":"12" + "p_code":"14", + "code":"24" }, { "desc":"This API enables you to encrypt a DEK using a specified CMK.By default, the performance threshold for encrypting DEKs is 1000 TPS per customer. To apply for higher perfor", @@ -113,8 +221,8 @@ "title":"Encrypting a DEK", "uri":"kms_02_0022.html", "doc_type":"api", - "p_code":"2", - "code":"13" + "p_code":"14", + "code":"25" }, { "desc":"This API enables you to decrypt a DEK using a specified CMK.Data encryption results are used for decryption.By default, the performance threshold for decrypting DEKs is 1", @@ -122,8 +230,8 @@ "title":"Decrypting a DEK", "uri":"kms_02_0023.html", "doc_type":"api", - "p_code":"2", - "code":"14" + "p_code":"14", + "code":"26" }, { "desc":"This API is used to query the number of instances, that is, the number of CMKs created.Default Master Keys are automatically created by services and are not included in t", @@ -131,8 +239,8 @@ "title":"Querying the Number of Instances", "uri":"kms_02_0024.html", "doc_type":"api", - "p_code":"2", - "code":"15" + "p_code":"14", + "code":"27" }, { "desc":"This API is used to query the quota of a user, that is, the allocated total number of CMKs that can be created by a user and the number of CMKs that has been created by t", @@ -140,8 +248,8 @@ "title":"Querying the Quota of a User", "uri":"kms_02_0025.html", "doc_type":"api", - "p_code":"2", - "code":"16" + "p_code":"14", + "code":"28" }, { "desc":"This API enables you to change the alias of a CMK.A Default Master Key (the alias suffix of which is /default) does not allow alias changes.A CMK in Scheduled deletion st", @@ -149,8 +257,8 @@ "title":"Changing the Alias of a CMK", "uri":"kms_02_0026.html", "doc_type":"api", - "p_code":"2", - "code":"17" + "p_code":"14", + "code":"29" }, { "desc":"This API enables you to change the description of a CMK.A Default Master Key (the alias suffix of which is /default) does not allow alias changes.A CMK in Scheduled delet", @@ -158,8 +266,8 @@ "title":"Changing the Description of a CMK", "uri":"kms_02_0027.html", "doc_type":"api", - "p_code":"2", - "code":"18" + "p_code":"14", + "code":"30" }, { "desc":"This API enables you to create a grant to grant permissions on a CMK to a user so that the user can perform operations on the CMK.A Default Master Key (the alias suffix o", @@ -167,8 +275,8 @@ "title":"Creating a Grant", "uri":"kms_02_0028.html", "doc_type":"api", - "p_code":"2", - "code":"19" + "p_code":"14", + "code":"31" }, { "desc":"This API allows you to revoke a grant.Only the user who created the CMK can revoke a grant.URI formatPOST /v1.0/{project_id}/kms/revoke-grantPOST /v1.0/{project_id}/kms/r", @@ -176,8 +284,8 @@ "title":"Revoking a Grant", "uri":"kms_02_0029.html", "doc_type":"api", - "p_code":"2", - "code":"20" + "p_code":"14", + "code":"32" }, { "desc":"This API enables users to retire a grant.For example, user A grants operation permissions on CMK A/key to user B and authorizes user C to retire the grant. By doing this,", @@ -185,8 +293,8 @@ "title":"Retiring a Grant", "uri":"kms_02_0030.html", "doc_type":"api", - "p_code":"2", - "code":"21" + "p_code":"14", + "code":"33" }, { "desc":"This API enables you to query grants on a CMK.URI formatPOST /v1.0/{project_id}/kms/list-grantsPOST /v1.0/{project_id}/kms/list-grantsParameter descriptionParameter descr", @@ -194,8 +302,8 @@ "title":"Querying Grants on a CMK", "uri":"kms_02_0031.html", "doc_type":"api", - "p_code":"2", - "code":"22" + "p_code":"14", + "code":"34" }, { "desc":"This API enables you to query grants that can be retired.URI formatPOST /v1.0/{project_id}/kms/list-retirable-grantsPOST /v1.0/{project_id}/kms/list-retirable-grantsParam", @@ -203,8 +311,44 @@ "title":"Querying Grants That Can Be Retired", "uri":"kms_02_0032.html", "doc_type":"api", - "p_code":"2", - "code":"23" + "p_code":"14", + "code":"35" + }, + { + "desc":"This API enables you to encrypt data using a specified CMK.By default, the performance threshold for encrypting data is 1000 TPS per customer. To apply for higher perform", + "product_code":"kms", + "title":"Encrypting Data", + "uri":"kms_02_0033.html", + "doc_type":"api", + "p_code":"14", + "code":"36" + }, + { + "desc":"This API enables you to decrypt data.By default, the performance threshold for decrypting data is 1000 TPS per customer. To apply for higher performance, submit a service", + "product_code":"kms", + "title":"Decrypting Data", + "uri":"kms_02_0034.html", + "doc_type":"api", + "p_code":"14", + "code":"37" + }, + { + "desc":"This API is used to use the private key of an asymmetric key to digitally sign a message or digest.Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for ", + "product_code":"kms", + "title":"Signing Data", + "uri":"Sign.html", + "doc_type":"api", + "p_code":"14", + "code":"38" + }, + { + "desc":"This API uses the private key of an asymmetric key to verify a signature.Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for signature verification.SM2", + "product_code":"kms", + "title":"Authenticating a Signature", + "uri":"ValidateSignature.html", + "doc_type":"api", + "p_code":"14", + "code":"39" }, { "desc":"This API enables you to obtain necessary parameters to import a CMK, including a CMK import token and a CMK encryption public key.The returned public key type is RSA_2048", @@ -212,8 +356,8 @@ "title":"Obtaining CMK Import Parameters", "uri":"kms_02_0035.html", "doc_type":"api", - "p_code":"2", - "code":"24" + "p_code":"14", + "code":"40" }, { "desc":"This API allows you to import CMK material.URI formatPOST /v1.0/{project_id}/kms/import-key-materialPOST /v1.0/{project_id}/kms/import-key-materialParameter descriptionPa", @@ -221,8 +365,8 @@ "title":"Importing CMK Material", "uri":"kms_02_0036.html", "doc_type":"api", - "p_code":"2", - "code":"25" + "p_code":"14", + "code":"41" }, { "desc":"This API allows you to delete CMK material.URI formatPOST /v1.0/{project_id}/kms/delete-imported-key-materialPOST /v1.0/{project_id}/kms/delete-imported-key-materialParam", @@ -230,8 +374,8 @@ "title":"Deleting CMK Material", "uri":"kms_02_0037.html", "doc_type":"api", - "p_code":"2", - "code":"26" + "p_code":"14", + "code":"42" }, { "desc":"This API allows you to enable rotation for a CMK.The default rotation interval is 365 days.CMKs created using imported key materials and Default Master Keys do not suppor", @@ -239,8 +383,8 @@ "title":"Enabling Rotation for a CMK", "uri":"kms_02_0038.html", "doc_type":"api", - "p_code":"2", - "code":"27" + "p_code":"14", + "code":"43" }, { "desc":"This API enables you to change the rotation interval for a CMK.URI formatPOST /v1.0/{project_id}/kms/update-key-rotation-intervalPOST /v1.0/{project_id}/kms/update-key-ro", @@ -248,8 +392,8 @@ "title":"Changing the Rotation Interval for a CMK", "uri":"kms_02_0039.html", "doc_type":"api", - "p_code":"2", - "code":"28" + "p_code":"14", + "code":"44" }, { "desc":"This API allows you to disable rotation for a CMK.URI formatPOST /v1.0/{project_id}/kms/disable-key-rotationPOST /v1.0/{project_id}/kms/disable-key-rotationParameter desc", @@ -257,8 +401,8 @@ "title":"Disabling Rotation for a CMK", "uri":"kms_02_0040.html", "doc_type":"api", - "p_code":"2", - "code":"29" + "p_code":"14", + "code":"45" }, { "desc":"This API enables you to query the rotation status of a CMK.URI formatPOST /v1.0/{project_id}/kms/get-key-rotation-statusPOST /v1.0/{project_id}/kms/get-key-rotation-statu", @@ -266,8 +410,8 @@ "title":"Querying the Rotation Status of a CMK", "uri":"kms_02_0041.html", "doc_type":"api", - "p_code":"2", - "code":"30" + "p_code":"14", + "code":"46" }, { "desc":"This API allows you to query CMK instances.You can use the tag filtering function to query the detailed information about a specified CMK.URI formatPOST /v1.0/{project_id", @@ -275,8 +419,8 @@ "title":"Querying CMK Instances", "uri":"kms_02_0042.html", "doc_type":"api", - "p_code":"2", - "code":"31" + "p_code":"14", + "code":"47" }, { "desc":"This API allows you to query tags of a specified CMK.TMS may use this API to query all tags of a specified CMK.URI formatGET /v1.0/{project_id}/kms/{key_id}/tagsGET /v1.0", @@ -284,8 +428,8 @@ "title":"Querying CMK Tags", "uri":"kms_02_0043.html", "doc_type":"api", - "p_code":"2", - "code":"32" + "p_code":"14", + "code":"48" }, { "desc":"This API enables you to query all tag sets of a specified project.URI formatGET /v1.0/{project_id}/kms/tagsGET /v1.0/{project_id}/kms/tagsParameter descriptionParameter d", @@ -293,8 +437,8 @@ "title":"Querying Project Tags", "uri":"kms_02_0044.html", "doc_type":"api", - "p_code":"2", - "code":"33" + "p_code":"14", + "code":"49" }, { "desc":"This API enables you to add or delete CMK tags in batches.URI formatPOST /v1.0/{project_id}/kms/{key_id}/tags/actionPOST /v1.0/{project_id}/kms/{key_id}/tags/actionParame", @@ -302,8 +446,8 @@ "title":"Adding or Deleting CMK Tags in Batches", "uri":"kms_02_0045.html", "doc_type":"api", - "p_code":"2", - "code":"34" + "p_code":"14", + "code":"50" }, { "desc":"This API allows you to add a CMK tag.URI formatPOST /v1.0/{project_id}/kms/{key_id}/tagsPOST /v1.0/{project_id}/kms/{key_id}/tagsParameter descriptionParameter descriptio", @@ -311,8 +455,8 @@ "title":"Adding a CMK Tag", "uri":"kms_02_0046.html", "doc_type":"api", - "p_code":"2", - "code":"35" + "p_code":"14", + "code":"51" }, { "desc":"This API enables you to delete a CMK tag.URI formatDELETE /v1.0/{project_id}/kms/{key_id}/tags/{key}DELETE /v1.0/{project_id}/kms/{key_id}/tags/{key}Parameter description", @@ -320,8 +464,8 @@ "title":"Deleting a CMK Tag", "uri":"kms_02_0047.html", "doc_type":"api", - "p_code":"2", - "code":"36" + "p_code":"14", + "code":"52" }, { "desc":"This API is used to query the API versions.URI formatGET /GET /Parameter descriptionNoneNoneNoneThe following describes how to query the version information.Example reque", @@ -329,8 +473,8 @@ "title":"Querying All API Versions", "uri":"kms_02_0048.html", "doc_type":"api", - "p_code":"2", - "code":"37" + "p_code":"14", + "code":"53" }, { "desc":"This API is used to query the version of an API.URI formatGET /{version_id}GET /{version_id}Parameter descriptionParameter descriptionParameterMandatoryTypeDescriptionver", @@ -338,35 +482,35 @@ "title":"Querying a Specified API Version", "uri":"kms_02_0049.html", "doc_type":"api", - "p_code":"2", - "code":"38" + "p_code":"14", + "code":"54" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "product_code":"kms", "title":"Permissions Policies and Supported Actions", - "uri":"dew_02_0307.html", + "uri":"kms_02_0307.html", "doc_type":"api", "p_code":"", - "code":"39" + "code":"55" }, { - "desc":"This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, then you may skip over this chapter.By defaul", + "desc":"This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, you may skip over this chapter.By default, ne", "product_code":"kms", "title":"Introduction", - "uri":"dew_02_0308.html", + "uri":"kms_02_0308.html", "doc_type":"api", - "p_code":"39", - "code":"40" + "p_code":"55", + "code":"56" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", "product_code":"kms", "title":"Encryption Key Management", - "uri":"dew_02_0309.html", + "uri":"kms_02_0309.html", "doc_type":"api", - "p_code":"39", - "code":"41" + "p_code":"55", + "code":"57" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", @@ -375,7 +519,7 @@ "uri":"kms_02_0300.html", "doc_type":"api", "p_code":"", - "code":"42" + "code":"58" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", @@ -383,17 +527,8 @@ "title":"Status Codes", "uri":"kms_02_0301.html", "doc_type":"api", - "p_code":"42", - "code":"43" - }, - { - "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", - "product_code":"kms", - "title":"Error Code", - "uri":"kms_02_8888.html", - "doc_type":"api", - "p_code":"42", - "code":"44" + "p_code":"58", + "code":"59" }, { "desc":"A project ID is required for some URLs when an API is called. To obtain a project ID, perform the following operations:Log in to the management console.Click the username", @@ -401,8 +536,8 @@ "title":"Obtaining a Project ID", "uri":"kms_02_0009.html", "doc_type":"api", - "p_code":"42", - "code":"45" + "p_code":"58", + "code":"60" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", @@ -410,8 +545,8 @@ "title":"API Permissions", "uri":"kms_02_0305.html", "doc_type":"api", - "p_code":"42", - "code":"46" + "p_code":"58", + "code":"61" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", @@ -419,8 +554,8 @@ "title":"Encryption Key Management", "uri":"kms_02_0306.html", "doc_type":"api", - "p_code":"46", - "code":"47" + "p_code":"61", + "code":"62" }, { "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", @@ -429,6 +564,6 @@ "uri":"kms_02_0304.html", "doc_type":"api", "p_code":"", - "code":"48" + "code":"63" } ] \ No newline at end of file diff --git a/docs/kms/api-ref/Sign.html b/docs/kms/api-ref/Sign.html new file mode 100644 index 00000000..9ec10af5 --- /dev/null +++ b/docs/kms/api-ref/Sign.html @@ -0,0 +1,554 @@ + + +

Signing Data

+

Function

  • This API is used to use the private key of an asymmetric key to digitally sign a message or digest.
+
+

Constraints

  • Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for signature.
+
+

URI

POST /v1.0/{project_id}/kms/sign

+ +
+ + + + + + + + + + + +
Table 1 URI parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameter

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token. The token can be obtained by calling the IAM API. (The token is the value of X-Subject-Token in the response header.)

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameter

Parameter

+

Mandatory

+

Type

+

Description

+

key_id

+

Yes

+

String

+

36-byte ID of a CMK that matches the regular expression ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ Example: 0d0466b0-e727-4d9c-b35d-f84bb474a37f

+

message

+

Yes

+

String

+

Message digest or message to be signed. The message must be encoded using Base64 and be less than 4096 bytes.

+

signing_algorithm

+

Yes

+

String

+

Signature algorithm. Its value can be:

+
  • RSASSA_PSS_SHA_256
  • RSASSA_PSS_SHA_384
  • RSASSA_PSS_SHA_512
  • RSASSA_PKCS1_V1_5_SHA_256
  • RSASSA_PKCS1_V1_5_SHA_384
  • RSASSA_PKCS1_V1_5_SHA_512
  • ECDSA_SHA_256
  • ECDSA_SHA_384
  • ECDSA_SHA_512
  • SM2DSA_SM3
+

message_type

+

No

+

String

+

Message type. The default value is DIGEST. Its value can be:

+
  • DIGEST (message digest)
  • RAW (original message)
+

sequence

+

No

+

String

+

36-byte serial number of a request message. Example: 919c82d4-8046-4722-9094-35c3c6524cff

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

key_id

+

String

+

CMK ID

+

signature

+

String

+

Signature value, which is encoded using Base64

+
+
+

Status code: 400

+ +
+ + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 401

+ +
+ + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 403

+ +
+ + + + + + + + + +
Table 9 Response body parameter

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 10 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 404

+ +
+ + + + + + + + + +
Table 11 Response body parameter

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 12 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 500

+ +
+ + + + + + + + + +
Table 13 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 14 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 502

+ +
+ + + + + + + + + +
Table 15 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 16 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 504

+ +
+ + + + + + + + + +
Table 17 Response body parameter

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 18 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+
+

Example Request

The following uses the RSASSA_PKCS1_V1_5_SHA_256 signature algorithm to sign the raw message.

+
{
+ "key_id": "968d6cf0-feb6-42c6-bb30-d69f74f2d5f9",
+ "message": "aGVsbG8g",
+ "signing_algorithm": "RSASSA_PSS_SHA_256",
+ "message_type": "RAW"
+}
+
+

+

The following uses the RSASSA_PKCS1_V1_5_SHA_256 signature algorithm to sign the digest message.

+
{
+ "key_id": "968d6cf0-feb6-42c6-bb30-d69f74f2d5f9",
+ "message": "iNQmb9TmM40TuEX88olXnSCciXgjuSF9o+Fhk28DFYK=",
+ "signing_algorithm": "RSASSA_PSS_SHA_256",
+ "message_type": "DIGEST"
+}
+

Example Response

Status code: 200

+

The following shows that the request for signing the raw message using the RSASSA_PKCS1_V1_5_SHA_256 signature algorithm is successful.

+
{
+ "key_id": "968d6cf0-feb6-42c6-bb30-d69f74f2d5f9",
+ "signature": "BqhL4PFPMNIXyEld3qviF7uqqnqlm9TcVCUN9FTRCr6KGreHIvwE4YuAc+eLWVSCGRd3bQHhDOQ9GlWjixGengwBix1RPP0qxtn2p7kQxkC2j76VjKCwqAsAy4MyxjN8RNOdnVCpOObDGoLxPHxUwNvSqZ6GxQKZ4cHPXVH0r/jH9csgk6IUr6ATyto+IcNWSvD03LfaNRQ+Rvc5tOzNFpFrMnVl319UG9ANscq1ne67VW2uQIf74Osg9DYzbJTf/xqW5GFi3ZoeQUu+gMxwgQp3pkuYhygjw6a8Qy9ZNMHmWnY199SzHrxgIq3ymQzUU5zrikKMColX2goPXf5fxQ=="
+}
+
+

+

The following shows that the request for signing the digest message using the RSASSA_PKCS1_V1_5_SHA_256 signature algorithm is successful.

+
{
+ "key_id": "968d6cf0-feb6-42c6-bb30-d69f74f2d5f9",
+ "signature": "M8Gqrm7EyyCPckMs90D7IOlUPCMHhoBh+nz9ySvdbOi7JMrl0ei+2lb+CQ2ZJN+pu7mftotq7/sHt0wWsDl8IOywYSBtWEmLW6AHnEPMykG/A9/Dp3kRuuKFoouCzWXeZyhIrzRUunAK5j5njcY/yTf6T8M+zBy1nAApb8WcHUen9/j7+X348iOnsSuWNVfXxy3NX41v9kLn6x115UDA/798VLSoMbsjcXKgdf/3GoZRYjcHxiX6s71/RWsQYme68qQN2B0q8Y9lk6rQxrw/AXHFoeaphYb7PriURRx0GxhOEEHb/9Tcr39Zlh3bbl/2aF3ytJORWIqatLtqgJ4uEA=="
+}
+

Status Code

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

The request has succeeded.

+

400

+

Invalid request parameters.

+

401

+

Username and password are required to access the page requested.

+

403

+

Authentication failed.

+

404

+

The requested resource does not exist or is not found.

+

500

+

Internal service error.

+

502

+

Failed to complete the request. The server receives an invalid response from the upstream server.

+

504

+

Gateway timed out.

+
+
+
+
+
+ +
+ diff --git a/docs/kms/api-ref/ValidateSignature.html b/docs/kms/api-ref/ValidateSignature.html new file mode 100644 index 00000000..3c1e6988 --- /dev/null +++ b/docs/kms/api-ref/ValidateSignature.html @@ -0,0 +1,548 @@ + + +

Authenticating a Signature

+

Function

  • This API uses the private key of an asymmetric key to verify a signature.
+
+

Constraints

  • Only the asymmetric key whose key_usage is SIGN_VERIFY can be used for signature verification.
  • SM2 keys can only be used to sign message digests. According to the GBT32918 standard, in SM2 signature value calculation, the message digest is not an SM3 digest calculated based on the original message. Instead, it is a digest of the concatenation of Z(A) and M. Here M indicates the original message to be signed, and Z(A) indicates the hash value of user A defined in GBT32918.
+
+

URI

POST /v1.0/{project_id}/kms/verify

+ +
+ + + + + + + + + + + +
Table 1 URI parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameter

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token. The token can be obtained by calling the IAM API. (The token is the value of X-Subject-Token in the response header.)

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

key_id

+

Yes

+

String

+

36-byte ID of a CMK that matches the regular expression ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ Example: 0d0466b0-e727-4d9c-b35d-f84bb474a37f

+

message

+

Yes

+

String

+

Message digest or message to be signed. The message must be encoded using Base64 and be less than 4096 bytes.

+

signature

+

Yes

+

String

+

Signature value to be verified, which is encoded using Base64.

+

signing_algorithm

+

Yes

+

String

+

Signature algorithm. Its value can be:

+
  • RSASSA_PSS_SHA_256
  • RSASSA_PSS_SHA_384
  • RSASSA_PSS_SHA_512
  • RSASSA_PKCS1_V1_5_SHA_256
  • RSASSA_PKCS1_V1_5_SHA_384
  • RSASSA_PKCS1_V1_5_SHA_512
  • ECDSA_SHA_256
  • ECDSA_SHA_384
  • ECDSA_SHA_512
  • SM2DSA_SM3
+

message_type

+

No

+

String

+

Message type. The default value is DIGEST. Its value can be:

+
  • DIGEST (message digest)
  • RAW (original message)
+

sequence

+

No

+

String

+

36-byte serial number of a request message Example: 919c82d4-8046-4722-9094-35c3c6524cff

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

key_id

+

String

+

CMK ID

+

signature_valid

+

String

+

Whether the signature is valid. Its value can be true (valid) or false (invalid).

+
+
+

Status code: 400

+ +
+ + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 401

+ +
+ + + + + + + + + +
Table 7 Response body parameter

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 403

+ +
+ + + + + + + + + +
Table 9 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 10 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 404

+ +
+ + + + + + + + + +
Table 11 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 12 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 500

+ +
+ + + + + + + + + +
Table 13 Response body parameter

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 14 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 502

+ +
+ + + + + + + + + +
Table 15 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 16 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+

Status code: 504

+ +
+ + + + + + + + + +
Table 17 Response body parameters

Parameter

+

Type

+

Description

+

error

+

Object

+

Error message.

+
+
+ +
+ + + + + + + + + + + + + +
Table 18 ErrorDetail

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code

+

error_msg

+

String

+

Error information

+
+
+
+

Example Request

{
+  "key_id" : "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
+  "signing_algorithm" : "RSASSA_PKCS1_V1_5_SHA_256",
+  "signature" : "jFUqQESGBc0j6k9BozzrP9YL4qk8/W9DZRvK6XXX...",
+  "message" : "MmFiZWE0ZjI3ZGIxYTkzY2RmYmEzM2YwMTA1YmJjYw=="
+}
+
+

Example Response

Status code: 200

+

The request has succeeded.

+
{
+  "key_id" : "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
+  "signature_valid" : "true"
+}
+
+

Status Code

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

The request has succeeded.

+

400

+

Invalid request parameters.

+

401

+

Username and password are required to access the page requested.

+

403

+

Authentication failed.

+

404

+

The requested resource does not exist or is not found.

+

500

+

Internal service error.

+

502

+

Failed to complete the request. The server receives an invalid response from the upstream server.

+

504

+

Gateway timed out.

+
+
+
+
+
+ +
+ diff --git a/docs/kms/api-ref/en-us_image_0218769431.png b/docs/kms/api-ref/en-us_image_0218769431.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a37a976d4576d256107faeb20bd06794b51b43 GIT binary patch literal 51740 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%0AZD@BjI{u{Gzp=uHI(1CKApP%TB6 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μMKUP;j3tZz2lr=fW<}VJLdca4MNKQ^pP%GM| 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 F`X8pCF)085 literal 0 HcmV?d00001 diff --git a/docs/kms/api-ref/en-us_topic_00384375969.html b/docs/kms/api-ref/en-us_topic_00384375969.html deleted file mode 100644 index 3e778c8f..00000000 --- a/docs/kms/api-ref/en-us_topic_00384375969.html +++ /dev/null @@ -1,8 +0,0 @@ - - -

API Usage Guidelines

-

Public cloud APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform Resource Identifiers (URIs). An application accesses a resource based on the resource's Unified Resource Locator (URL). A URL is usually in the following format: https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the API access path.

-

Public cloud APIs use HTTPS as the transmission protocol. Requests/Responses are transmitted by using JSON messages, with media type represented by Application/json.

-

For details about how to use APIs, see API Usage Guidelines.

-
- diff --git a/docs/kms/api-ref/kms_02_0001.html b/docs/kms/api-ref/kms_02_0001.html new file mode 100644 index 00000000..a5550105 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0001.html @@ -0,0 +1,70 @@ + + +

Making an API Request

+

This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained token can then be used to authenticate the calling of other APIs.

+

Request URI

A request URI is in the following format:

+

{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string}

+

Although a request URI is included in the request header, most programming languages or frameworks require the request URI to be transmitted separately.

+
  • URI-scheme:

    Protocol used to transmit requests. All APIs use HTTPS.

    +
  • Endpoint:

    Domain name or IP address of the server bearing the REST service. The endpoint varies between services in different regions. It can be obtained from the administrator.

    +
  • resource-path:

    Access path of an API for performing a specified operation. Obtain the path from the URI of an API. For example, the resource-path of the API used to obtain a user token is /v3/auth/tokens.

    +
  • query-string:

    Query parameter, which is optional. Ensure that a question mark (?) is included before each query parameter that is in the format of "Parameter name=Parameter value". For example, ?limit=10 indicates that a maximum of 10 data records will be displayed.

    +
+

To simplify the URI display in this document, each API is provided only with a resource-path and a request method. The URI-scheme of all APIs is HTTPS, and the endpoints of all APIs in the same region are identical.

+
+
+

Request Methods

The HTTP protocol defines the following request methods that can be used to send a request to the server:

+
  • GET: requests the server to return specified resources.
  • PUT: requests the server to update specified resources.
  • POST: requests the server to add resources or perform special operations.
  • DELETE: requests the server to delete specified resources, for example, an object.
  • HEAD: same as GET except that the server must return only the response header.
  • PATCH: requests the server to update partial content of a specified resource. If the resource does not exist, a new resource will be created.
+

For example, in the case of the API used to obtain a user token, the request method is POST. The request is as follows:

+
POST https://{{endpoint}}/v3/auth/tokens
+
+

Request Header

You can also add additional header fields to a request, such as the fields required by a specified URI or HTTP method. For example, to request for the authentication information, add Content-Type, which specifies the request body type.

+

Common request header fields are as follows:

+
  • Content-Type: specifies the request body type or format. This field is mandatory and its default value is application/json. Other values of this field will be provided for specific APIs if any.
  • X-Auth-Token: specifies a user token only for token-based API authentication. The user token is a response to the API used to obtain a user token. This API is the only one that does not require authentication.

    In addition to supporting token-based authentication, APIs also support authentication using access key ID/secret access key (AK/SK). During AK/SK-based authentication, an SDK is used to sign the request, and the Authorization (signature information) and X-Sdk-Date (time when the request is sent) header fields are automatically added to the request.

    +

    For more information, see .

    +
    +
+

The API used to obtain a user token does not require authentication. Therefore, only the Content-Type field needs to be added to requests for calling the API. An example of such requests is as follows:

+
POST https://{{endpoint}}/v3/auth/tokens
+Content-Type: application/json
+
+

Request Body

The body of a request is often sent in a structured format as specified in the Content-Type header field. The request body transfers content except the request header.

+

The request body varies between APIs. Some APIs do not require the request body, such as the APIs requested using the GET and DELETE methods.

+

In the case of the API used to obtain a user token, the request parameters and parameter description can be obtained from the API request. The following provides an example request with a body included. Set username to the name of a user, domainname to the name of the account that the user belongs to, ******** to the user's login password, and xxxxxxxxxxxxxxxxxx to the project name. You can learn more information about projects from .

+

The scope parameter specifies where a token takes effect. You can set scope to an account or a project under an account. In the following example, the token takes effect only for the resources in a specified project. For more information about this API, see Obtaining a User Token.

+
+
+POST https://{{endpoint}}/v3/auth/tokens
+Content-Type: application/json
+{
+    "auth": {
+        "identity": {
+            "methods": [
+                "password"
+            ],
+            "password": {
+                "user": {
+                    "name": "username",
+                    "password": "********",
+                    "domain": {
+                        "name": "domainname"
+                    }
+                }
+            }
+        },
+        "scope": {
+            "project": {
+                "name": "xxxxxxxxxxxxxxxxxx"
+            }
+        }
+    }
+}
+

If all data required for the API request is available, you can send the request to call the API through curl, Postman, or coding. In the response to the API used to obtain a user token, x-subject-token is the desired user token. This token can then be used to authenticate the calling of other APIs.

+
+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0002.html b/docs/kms/api-ref/kms_02_0002.html new file mode 100644 index 00000000..a247efd9 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0002.html @@ -0,0 +1,15 @@ + + +

Calling APIs

+
+ + diff --git a/docs/kms/api-ref/kms_02_0003.html b/docs/kms/api-ref/kms_02_0003.html new file mode 100644 index 00000000..6ede47ac --- /dev/null +++ b/docs/kms/api-ref/kms_02_0003.html @@ -0,0 +1,12 @@ + + +

Authentication

+
Requests for calling an API can be authenticated using either of the following methods:
  • Token-based authentication: Requests are authenticated using a token.
  • AK/SK-based authentication: Requests are authenticated by encrypting the request body using an AK/SK pair. This method is recommended because it provides higher security than token-based authentication.
+
+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0010.html b/docs/kms/api-ref/kms_02_0010.html index dc200bc6..de22ed87 100644 --- a/docs/kms/api-ref/kms_02_0010.html +++ b/docs/kms/api-ref/kms_02_0010.html @@ -4,77 +4,7 @@
diff --git a/docs/kms/api-ref/kms_02_0011.html b/docs/kms/api-ref/kms_02_0011.html new file mode 100644 index 00000000..2edec35a --- /dev/null +++ b/docs/kms/api-ref/kms_02_0011.html @@ -0,0 +1,97 @@ + + + +

CMK Management

+ +

+
+ +
+ + + +
+ diff --git a/docs/kms/api-ref/kms_02_0012.html b/docs/kms/api-ref/kms_02_0012.html index 292c38a2..c6777be7 100644 --- a/docs/kms/api-ref/kms_02_0012.html +++ b/docs/kms/api-ref/kms_02_0012.html @@ -51,6 +51,26 @@

Alias of a non-default master key (The alias's length ranges from 1 to 255 characters and matches the regular expression ^[a-zA-Z0-9:/_-]{1,255}$. In addition, it must be different from the alias of a Default Master Key created by the system.)

+

key_spec

+ +

No

+ +

String

+ +

Key generation algorithm. The default value is AES_256. Its value can be:

+
  • AES_256
  • RSA_2048
  • RSA_3072
  • RSA_4096
  • EC_P256
  • EC_P384
+ + +

key_usage

+ +

No

+ +

String

+ +

Key usage. The default value is ENCRYPT_DECRYPT for a symmetric key and SIGN_VERIFY for an asymmetric key. Its value can be:

+
  • For AES_256 symmetric keys, the default value is ENCRYPT_DECRYPT.
  • For RSA asymmetric keys, select ENCRYPT_DECRYPT or SIGN_VERIFY. The default value is SIGN_VERIFY.
  • For ECC asymmetric keys, the default value is SIGN_VERIFY.
+ +

key_description

No

@@ -184,7 +204,7 @@
diff --git a/docs/kms/api-ref/kms_02_0013.html b/docs/kms/api-ref/kms_02_0013.html index 612b1796..e90daf4a 100644 --- a/docs/kms/api-ref/kms_02_0013.html +++ b/docs/kms/api-ref/kms_02_0013.html @@ -168,7 +168,7 @@
diff --git a/docs/kms/api-ref/kms_02_0014.html b/docs/kms/api-ref/kms_02_0014.html index c82b4206..dd1dc625 100644 --- a/docs/kms/api-ref/kms_02_0014.html +++ b/docs/kms/api-ref/kms_02_0014.html @@ -167,7 +167,7 @@
diff --git a/docs/kms/api-ref/kms_02_0015.html b/docs/kms/api-ref/kms_02_0015.html index e7fd6dd5..bfea36fc 100644 --- a/docs/kms/api-ref/kms_02_0015.html +++ b/docs/kms/api-ref/kms_02_0015.html @@ -150,7 +150,7 @@
diff --git a/docs/kms/api-ref/kms_02_0016.html b/docs/kms/api-ref/kms_02_0016.html index fbdf65b0..543083ac 100644 --- a/docs/kms/api-ref/kms_02_0016.html +++ b/docs/kms/api-ref/kms_02_0016.html @@ -143,7 +143,7 @@
diff --git a/docs/kms/api-ref/kms_02_0017.html b/docs/kms/api-ref/kms_02_0017.html index f7a564c5..ad32feec 100644 --- a/docs/kms/api-ref/kms_02_0017.html +++ b/docs/kms/api-ref/kms_02_0017.html @@ -221,7 +221,7 @@
diff --git a/docs/kms/api-ref/kms_02_0018.html b/docs/kms/api-ref/kms_02_0018.html index 4ca732da..8f76b583 100644 --- a/docs/kms/api-ref/kms_02_0018.html +++ b/docs/kms/api-ref/kms_02_0018.html @@ -269,7 +269,7 @@
diff --git a/docs/kms/api-ref/kms_02_0019.html b/docs/kms/api-ref/kms_02_0019.html index 69ba02fe..d11b5836 100644 --- a/docs/kms/api-ref/kms_02_0019.html +++ b/docs/kms/api-ref/kms_02_0019.html @@ -1,7 +1,7 @@

Creating a Random Number

-

Function

This API generates a 512-bit random number.

+

Function

This API generates a 512-bit random number.

URI

  • URI format

    POST /v1.0/{project_id}/kms/gen-random

  • Parameter description @@ -128,7 +128,7 @@
diff --git a/docs/kms/api-ref/kms_02_0020.html b/docs/kms/api-ref/kms_02_0020.html index 8e0a6770..6ece4b90 100644 --- a/docs/kms/api-ref/kms_02_0020.html +++ b/docs/kms/api-ref/kms_02_0020.html @@ -59,7 +59,7 @@

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

If this parameter is specified during encryption, it is also required for decryption.

-

Example: {"Key1":"Value1","Key2":"Value2"}

+

Example: {"Key1":"Value1","Key2":"Value2"}

datakey_length

@@ -171,7 +171,7 @@
diff --git a/docs/kms/api-ref/kms_02_0021.html b/docs/kms/api-ref/kms_02_0021.html index 6b273e55..9d80c167 100644 --- a/docs/kms/api-ref/kms_02_0021.html +++ b/docs/kms/api-ref/kms_02_0021.html @@ -32,7 +32,7 @@

Requests

-
Table 2 Request parameters

Parameter

+
@@ -60,7 +60,7 @@
Table 2 Request parameters

Parameter

Mandatory

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

If this parameter is specified during encryption, it is also required for decryption.

-

Example: {"Key1":"Value1","Key2":"Value2"}

+

Example: {"Key1":"Value1","Key2":"Value2"}

datakey_length

@@ -87,7 +87,7 @@

Responses

-
Table 3 Response parameters

Parameter

+
@@ -162,7 +162,7 @@
diff --git a/docs/kms/api-ref/kms_02_0022.html b/docs/kms/api-ref/kms_02_0022.html index 1b134023..7f35e2fb 100644 --- a/docs/kms/api-ref/kms_02_0022.html +++ b/docs/kms/api-ref/kms_02_0022.html @@ -32,7 +32,7 @@

Requests

-
Table 3 Response parameters

Parameter

Mandatory

Table 2 Request parameters

Parameter

+
@@ -60,7 +60,7 @@
Table 2 Request parameters

Parameter

Mandatory

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

If this parameter is specified during encryption, it is also required for decryption.

-

Example: {"Key1":"Value1","Key2":"Value2"}

+

Example: {"Key1":"Value1","Key2":"Value2"}

plain_text

@@ -97,7 +97,7 @@

Responses

-
Table 3 Response parameters

Parameter

+
@@ -201,7 +201,7 @@ public static String bytesToHexString(byte[] digest) {
diff --git a/docs/kms/api-ref/kms_02_0023.html b/docs/kms/api-ref/kms_02_0023.html index d6b67f49..30c6f05f 100644 --- a/docs/kms/api-ref/kms_02_0023.html +++ b/docs/kms/api-ref/kms_02_0023.html @@ -33,7 +33,7 @@

Requests

-
Table 3 Response parameters

Parameter

Mandatory

Table 2 Request parameters

Parameter

+
@@ -61,7 +61,7 @@
Table 2 Request parameters

Parameter

Mandatory

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

If this parameter is specified during encryption, it is also required for decryption.

-

Example: {"Key1":"Value1","Key2":"Value2"}

+

Example: {"Key1":"Value1","Key2":"Value2"}

cipher_text

@@ -97,7 +97,7 @@

Responses

-
Table 3 Response parameters

Parameter

+
@@ -184,7 +184,7 @@
diff --git a/docs/kms/api-ref/kms_02_0024.html b/docs/kms/api-ref/kms_02_0024.html index 4b7f6a45..83bbefce 100644 --- a/docs/kms/api-ref/kms_02_0024.html +++ b/docs/kms/api-ref/kms_02_0024.html @@ -95,7 +95,7 @@
diff --git a/docs/kms/api-ref/kms_02_0025.html b/docs/kms/api-ref/kms_02_0025.html index 7abab325..d295c9c9 100644 --- a/docs/kms/api-ref/kms_02_0025.html +++ b/docs/kms/api-ref/kms_02_0025.html @@ -175,7 +175,7 @@
diff --git a/docs/kms/api-ref/kms_02_0026.html b/docs/kms/api-ref/kms_02_0026.html index c02624dd..8e1e0ea3 100644 --- a/docs/kms/api-ref/kms_02_0026.html +++ b/docs/kms/api-ref/kms_02_0026.html @@ -176,7 +176,7 @@
diff --git a/docs/kms/api-ref/kms_02_0027.html b/docs/kms/api-ref/kms_02_0027.html index 81e8680c..bf02a748 100644 --- a/docs/kms/api-ref/kms_02_0027.html +++ b/docs/kms/api-ref/kms_02_0027.html @@ -176,7 +176,7 @@
diff --git a/docs/kms/api-ref/kms_02_0028.html b/docs/kms/api-ref/kms_02_0028.html index 9e1f94f4..1a76da2e 100644 --- a/docs/kms/api-ref/kms_02_0028.html +++ b/docs/kms/api-ref/kms_02_0028.html @@ -32,9 +32,9 @@

Requests

-
Table 3 Response parameters

Parameter

Mandatory

Table 2 Request parameters

Parameter

+
- @@ -92,6 +92,16 @@

Example: 0d0466b00d0466b00d0466b00d0466b0

+ + + + +
Table 2 Request parameters

Parameter

Mandatory

+

Mandatory

Type

grantee_principal_type

+

No

+

String

+

Authorization type

+

Values: user, domain. The default value is user.

+

sequence

No

@@ -107,9 +117,9 @@

Responses

-
Table 3 Response parameters

Parameter

+
- @@ -179,7 +189,7 @@
diff --git a/docs/kms/api-ref/kms_02_0029.html b/docs/kms/api-ref/kms_02_0029.html index aa22324f..7d295523 100644 --- a/docs/kms/api-ref/kms_02_0029.html +++ b/docs/kms/api-ref/kms_02_0029.html @@ -119,7 +119,7 @@
diff --git a/docs/kms/api-ref/kms_02_0030.html b/docs/kms/api-ref/kms_02_0030.html index b2be476f..dc788b64 100644 --- a/docs/kms/api-ref/kms_02_0030.html +++ b/docs/kms/api-ref/kms_02_0030.html @@ -121,7 +121,7 @@
diff --git a/docs/kms/api-ref/kms_02_0031.html b/docs/kms/api-ref/kms_02_0031.html index 9c716de7..79b9aade 100644 --- a/docs/kms/api-ref/kms_02_0031.html +++ b/docs/kms/api-ref/kms_02_0031.html @@ -286,7 +286,7 @@
diff --git a/docs/kms/api-ref/kms_02_0032.html b/docs/kms/api-ref/kms_02_0032.html index d47aad4d..28c2c270 100644 --- a/docs/kms/api-ref/kms_02_0032.html +++ b/docs/kms/api-ref/kms_02_0032.html @@ -182,7 +182,7 @@
diff --git a/docs/kms/api-ref/kms_02_0033.html b/docs/kms/api-ref/kms_02_0033.html new file mode 100644 index 00000000..0664d3bb --- /dev/null +++ b/docs/kms/api-ref/kms_02_0033.html @@ -0,0 +1,169 @@ + + +

Encrypting Data

+

Function

This API enables you to encrypt data using a specified CMK.

+

By default, the performance threshold for encrypting data is 1000 TPS per customer. To apply for higher performance, submit a service ticket.

+
+
+

URI

  • URI format

    POST /v1.0/{project_id}/kms/encrypt-data

    +
  • Parameter description +
Table 3 Response parameters

Parameter

Mandatory

+

Mandatory

Type

+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+
+
+ + +

Requests

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Request parameters

Parameter

+

Mandatory

+

Type

+

Description

+

key_id

+

Yes

+

String

+

36-byte ID of a CMK that matches the regular expression ^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$

+

Example: 0d0466b0-e727-4d9c-b35d-f84bb474a37f

+

encryption_context

+

No

+

Object

+

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

+

If this parameter is specified during encryption, it is also required for decryption.

+

Example: {"Key1":"Value1","Key2":"Value2"}

+

plain_text

+

Yes

+

String

+

Plaintext data which is 1 to 4096 bytes in length and matches the regular expression ^.{1,4096}$. After being converted into a byte array, it is still 1 to 4096 bytes in length.

+

sequence

+

No

+

String

+

36-byte serial number of a request message

+

Example: 919c82d4-8046-4722-9094-35c3c6524cff

+
+
+
+

Responses

+
+ + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Mandatory

+

Type

+

Description

+

key_id

+

Yes

+

String

+

CMK ID

+

cipher_text

+

Yes

+

String

+

Ciphertext data in Base64 format

+
+
+
+

Examples

The following example describes how to use a CMK (ID: 0d0466b0-e727-4d9c-b35d-f84bb474a37f) to encrypt data (plaintext: 12345678).

+
  • Example request
    {
    +    "key_id": "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
    +    "plain_text": "12345678"
    +}
    +
+
  • Example response
    {
    +    "key_id": "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
    +    "cipher_text": "AgDoAG7EsEc2OHpQxz4gDFDH54CqwaelpTdEl+RFPjbKn5klPTvOywYIeZX60kPbFsYOpXJwkL32HUM50MY22Eb1fOSpZK7WJpYjx66EWOkJvO+Ey3r1dLdNAjrZrYzQlxRwNS05CaNKoX5rr3NoDnmv+UNobaiS25muLLiqOt6UrStaWow9AUyOHSzl+BrX2Vu0whv74djK+3COO6cXT2CBO6WajTJsOgYdxMfv24KWSKw0TqvHe8XDKASQGKdgfI74hzI1YWJlNjlmLWFlMTAtNDRjZC1iYzg3LTFiZGExZGUzYjdkNwAAAACdcfNpLXwDUPH3023MvZK8RPHe129k6VdNIi3zNb0eFQ=="
    +}
    +

    or

    +
    {
    +    "error": {
    +        "error_code": "KMS.XXXX",
    +        "error_msg": "XXX"
    +    }
    +}
    +
+
+

Status Codes

Table 4 lists the normal status code returned by the response. +
+ + + + + + + + + +
Table 4 Status codes

Status Code

+

Status

+

Description

+

200

+

OK

+

Request processed successfully.

+
+
+
+

Exception status code. For details, see Status Codes.

+
+ +
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0034.html b/docs/kms/api-ref/kms_02_0034.html new file mode 100644 index 00000000..290a6a75 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0034.html @@ -0,0 +1,157 @@ + + +

Decrypting Data

+

Function

This API enables you to decrypt data.

+

By default, the performance threshold for decrypting data is 1000 TPS per customer. To apply for higher performance, submit a service ticket.

+
+
+

URI

  • URI format

    POST /v1.0/{project_id}/kms/decrypt-data

    +
  • Parameter description +
    + + + + + + + + + + + +
    Table 1 Parameter description

    Parameter

    +

    Mandatory

    +

    Type

    +

    Description

    +

    project_id

    +

    Yes

    +

    String

    +

    Project ID

    +
    +
    +
+
+

Requests

+
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Request parameters

Parameter

+

Mandatory

+

Type

+

Description

+

cipher_text

+

Yes

+

String

+

Ciphertext of encrypted data. The value is the cipher_text value in the data encryption result that matches the regular expression ^[0-9a-zA-Z+/=]{188,5648}$.

+

encryption_context

+

No

+

Object

+

Key-value pairs with a maximum length of 8192 characters. This parameter is used to record resource context information, excluding sensitive information, to ensure data integrity.

+

If this parameter is specified during encryption, it is also required for decryption.

+

Example: {"Key1":"Value1","Key2":"Value2"}

+

sequence

+

No

+

String

+

36-byte serial number of a request message

+

Example: 919c82d4-8046-4722-9094-35c3c6524cff

+
+
+
+

Responses

+
+ + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Mandatory

+

Type

+

Description

+

key_id

+

Yes

+

String

+

CMK ID

+

plain_text

+

Yes

+

String

+

Plaintext

+
+
+
+

Examples

The following example describes how to decrypt data (ciphertext: AgDoAG7EsEc2OHpQxz4gDFDH54CqwaelpTdEl+RFPjbKn5klPTvOywYIeZX60kPbFsYOpXJwkL32HUM50MY22Eb1fOSpZK7WJpYjx66EWOkJvO+Ey3r1dLdNAjrZrYzQlxRwNS05CaNKoX5rr3NoDnmv+UNobaiS25muLLiqOt6UrStaWow9AUyOHSzl+BrX2Vu0whv74djK+3COO6cXT2CBO6WajTJsOgYdxMfv24KWSKw0TqvHe8XDKASQGKdgfI74hzI1YWJlNjlmLWFlMTAtNDRjZC1iYzg3LTFiZGExZGUzYjdkNwAAAACdcfNpLXwDUPH3023MvZK8RPHe129k6VdNIi3zNb0eFQ==).

+
  • Example request
    {
    +     "cipher_text": "AgDoAG7EsEc2OHpQxz4gDFDH54CqwaelpTdEl+RFPjbKn5klPTvOywYIeZX60kPbFsYOpXJwkL32HUM50MY22Eb1fOSpZK7WJpYjx66EWOkJvO+Ey3r1dLdNAjrZrYzQlxRwNS05CaNKoX5rr3NoDnmv+UNobaiS25muLLiqOt6UrStaWow9AUyOHSzl+BrX2Vu0whv74djK+3COO6cXT2CBO6WajTJsOgYdxMfv24KWSKw0TqvHe8XDKASQGKdgfI74hzI1YWJlNjlmLWFlMTAtNDRjZC1iYzg3LTFiZGExZGUzYjdkNwAAAACdcfNpLXwDUPH3023MvZK8RPHe129k6VdNIi3zNb0eFQ=="
    +}
    +
  • Example response
    {
    +    "key_id": "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
    +    "plain_text": "12345678"
    +}
    +

    or

    +
    {
    +    "error": {
    +        "error_code": "KMS.XXXX",
    +        "error_msg": "XXX"
    +    }
    +}
    +
+
+

Status Codes

Table 4 lists the normal status code returned by the response. +
+ + + + + + + + + +
Table 4 Status codes

Status Code

+

Status

+

Description

+

200

+

OK

+

Request processed successfully.

+
+
+
+

Exception status code. For details, see Status Codes.

+
+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0035.html b/docs/kms/api-ref/kms_02_0035.html index 1be6068c..fa93b4fd 100644 --- a/docs/kms/api-ref/kms_02_0035.html +++ b/docs/kms/api-ref/kms_02_0035.html @@ -32,7 +32,7 @@

Requests

-
Table 2 Request parameters

Parameter

+
@@ -58,7 +58,7 @@ - @@ -77,7 +77,7 @@

Responses

-
Table 2 Request parameters

Parameter

Mandatory

String

Encryption algorithm for CMK material. The following values are enumerated:
  • RSAES_PKCS1_V1_5
  • RSAES_OAEP_SHA_1
  • RSAES_OAEP_SHA_256
+
Cryptographic algorithm for CMK material. The following values are enumerated:
  • RSAES_PKCS1_V1_5
  • RSAES_OAEP_SHA_1
  • RSAES_OAEP_SHA_256
- + + + + + + + + + diff --git a/docs/kms/api-ref/dew_02_0307.html b/docs/kms/api-ref/kms_02_0307.html similarity index 54% rename from docs/kms/api-ref/dew_02_0307.html rename to docs/kms/api-ref/kms_02_0307.html index 94f0572b..5b97f02f 100644 --- a/docs/kms/api-ref/dew_02_0307.html +++ b/docs/kms/api-ref/kms_02_0307.html @@ -1,12 +1,12 @@ - +

Permissions Policies and Supported Actions

diff --git a/docs/kms/api-ref/dew_02_0308.html b/docs/kms/api-ref/kms_02_0308.html similarity index 59% rename from docs/kms/api-ref/dew_02_0308.html rename to docs/kms/api-ref/kms_02_0308.html index b22a2ebf..3a02d9a6 100644 --- a/docs/kms/api-ref/dew_02_0308.html +++ b/docs/kms/api-ref/kms_02_0308.html @@ -1,23 +1,23 @@ - +

Introduction

-

This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, then you may skip over this chapter.

-

By default, new IAM users do not have permissions assigned. You need to add a user to one or more groups, and attach permissions policies or roles to these groups. Users inherit permissions from the groups to which they are added and can perform specified operations on cloud services based on the permissions.

-

You can grant users permissions by using roles and policies. Roles are a type of coarse-grained authorization mechanism that defines permissions related to user responsibilities. Policies define API-based permissions for operations on specific resources under certain conditions, allowing for more fine-grained, secure access control of cloud resources.

-

Policy-based authorization is useful if you want to allow or deny the access to an API.

+

This chapter describes fine-grained permissions management for your KMS. If your account does not need individual IAM users, you may skip over this chapter.

+

By default, new IAM users do not have permissions assigned. You need to add a user to one or more groups, and attach permissions policies or roles to these groups. Users inherit permissions from the groups to which they are added and can perform specified operations on cloud services based on the permissions.

+

You can grant permissions to users by using roles and policies. Roles are a type of coarse-grained authorization mechanism that defines permissions related to user responsibilities. Policies define API-based permissions for operations on specific resources under certain conditions, allowing for more fine-grained, secure access control of cloud resources.

+

Policy-based authorization is useful if you want to allow or deny the access to an API.

-

An account has all of the permissions required to call all APIs, but IAM users must have the required permissions specifically assigned. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions allowing the actions can call the API successfully.

-

Supported Actions

You can use system-defined policies provided in IAM, or create custom policies to supplement the system-defined policies, implementing refined access control. Operations supported by policies are specific to APIs. The following are common concepts related to policies:

-
  • Permission: A statement in a policy that allows or denies certain operations.
  • APIs: REST APIs that can be called in a custom policy.
  • Actions: Added to a custom policy to control permissions for specific operations.
  • Dependent actions: When assigning an action to users, you also need to assign dependent permissions for that action to take effect.
  • IAM projects or enterprise project: Scope of users a permission is granted to. Policies that contain actions supporting both IAM and enterprise projects can be assigned to user groups and take effect in both IAM and Enterprise Management. Policies that only contain actions supporting IAM projects can be assigned to user groups and only take effect in IAM. Such policies will not take effect if they are assigned to user groups in Enterprise Project.

    √: supported; x: not supported

    +

    An account has all of the permissions required to call all APIs, but IAM users must have the required permissions specifically assigned. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions allowing the actions can call the API successfully.

    +

    Supported Actions

    You can use system-defined policies provided in IAM, or create custom policies to supplement the system-defined policies, implementing refined access control. Operations supported by policies are specific to APIs. The following are common concepts related to policies:

    +
    • Permission: A statement in a policy that allows or denies certain operations.
    • APIs: REST APIs that can be called in a custom policy.
    • Actions: Added to a custom policy to control permissions for specific operations.
    • Dependent actions: When assigning an action to users, you also need to assign dependent permissions for that action to take effect.
    • IAM projects or enterprise project: Scope of users a permission is granted to. Policies that contain actions supporting both IAM and enterprise projects can be assigned to user groups and take effect in both IAM and Enterprise Management. Policies that only contain actions supporting IAM projects can be assigned to user groups and only take effect in IAM. Such policies will not take effect if they are assigned to user groups in Enterprise Project.

      √: supported; x: not supported

    -

    KMS supports the following actions that can be defined in custom policies:

    -

    Manage keys, such as creating keys and querying keys.

    +

    KMS supports the following actions that can be defined in custom policies:

    +

    Manage keys, such as creating keys and querying keys.

    diff --git a/docs/kms/api-ref/dew_02_0309.html b/docs/kms/api-ref/kms_02_0309.html similarity index 59% rename from docs/kms/api-ref/dew_02_0309.html rename to docs/kms/api-ref/kms_02_0309.html index c552d939..76f78675 100644 --- a/docs/kms/api-ref/dew_02_0309.html +++ b/docs/kms/api-ref/kms_02_0309.html @@ -1,490 +1,490 @@ - +

    Encryption Key Management

    -
Table 3 Response parameters

Parameter

+
@@ -127,7 +127,7 @@
Table 3 Response parameters

Parameter

Mandatory

-

Examples

The following example describes how to obtain the imported parameter of a CMK (ID: bb6a3d22-dc93-47ac-b5bd-88df7ad35f1e; encryption algorithm: RSAES_OAEP_SHA_1).

+

Examples

The following example describes how to obtain the imported parameter of a CMK (ID: bb6a3d22-dc93-47ac-b5bd-88df7ad35f1e; algorithm: RSAES_OAEP_SHA_1).

  • Example request
    {      
         "key_id": "bb6a3d22-dc93-47ac-b5bd-88df7ad35f1e",
          "wrapping_algorithm":"RSAES_OAEP_SHA_1"
    @@ -172,7 +172,7 @@
     
diff --git a/docs/kms/api-ref/kms_02_0036.html b/docs/kms/api-ref/kms_02_0036.html index e3a2fcf4..588c1ae5 100644 --- a/docs/kms/api-ref/kms_02_0036.html +++ b/docs/kms/api-ref/kms_02_0036.html @@ -137,7 +137,7 @@
diff --git a/docs/kms/api-ref/kms_02_0037.html b/docs/kms/api-ref/kms_02_0037.html index 58d50536..e52cd464 100644 --- a/docs/kms/api-ref/kms_02_0037.html +++ b/docs/kms/api-ref/kms_02_0037.html @@ -103,7 +103,7 @@
diff --git a/docs/kms/api-ref/kms_02_0038.html b/docs/kms/api-ref/kms_02_0038.html index 674b53d2..0775ca0f 100644 --- a/docs/kms/api-ref/kms_02_0038.html +++ b/docs/kms/api-ref/kms_02_0038.html @@ -108,7 +108,7 @@
diff --git a/docs/kms/api-ref/kms_02_0039.html b/docs/kms/api-ref/kms_02_0039.html index b6b26f17..7d7d7aa8 100644 --- a/docs/kms/api-ref/kms_02_0039.html +++ b/docs/kms/api-ref/kms_02_0039.html @@ -117,7 +117,7 @@
diff --git a/docs/kms/api-ref/kms_02_0040.html b/docs/kms/api-ref/kms_02_0040.html index d46301fe..94c3b8e8 100644 --- a/docs/kms/api-ref/kms_02_0040.html +++ b/docs/kms/api-ref/kms_02_0040.html @@ -106,7 +106,7 @@
diff --git a/docs/kms/api-ref/kms_02_0041.html b/docs/kms/api-ref/kms_02_0041.html index 745a5a86..7ca4805a 100644 --- a/docs/kms/api-ref/kms_02_0041.html +++ b/docs/kms/api-ref/kms_02_0041.html @@ -159,7 +159,7 @@
diff --git a/docs/kms/api-ref/kms_02_0042.html b/docs/kms/api-ref/kms_02_0042.html index 499fc119..e80cf0f2 100644 --- a/docs/kms/api-ref/kms_02_0042.html +++ b/docs/kms/api-ref/kms_02_0042.html @@ -291,7 +291,7 @@
diff --git a/docs/kms/api-ref/kms_02_0043.html b/docs/kms/api-ref/kms_02_0043.html index 85ee9f29..4134f0b6 100644 --- a/docs/kms/api-ref/kms_02_0043.html +++ b/docs/kms/api-ref/kms_02_0043.html @@ -124,7 +124,7 @@
diff --git a/docs/kms/api-ref/kms_02_0044.html b/docs/kms/api-ref/kms_02_0044.html index deb1e424..cbf53393 100644 --- a/docs/kms/api-ref/kms_02_0044.html +++ b/docs/kms/api-ref/kms_02_0044.html @@ -109,7 +109,7 @@
diff --git a/docs/kms/api-ref/kms_02_0045.html b/docs/kms/api-ref/kms_02_0045.html index cd106846..a43abe3f 100644 --- a/docs/kms/api-ref/kms_02_0045.html +++ b/docs/kms/api-ref/kms_02_0045.html @@ -151,7 +151,7 @@
diff --git a/docs/kms/api-ref/kms_02_0046.html b/docs/kms/api-ref/kms_02_0046.html index f2b97e11..f59a8b8a 100644 --- a/docs/kms/api-ref/kms_02_0046.html +++ b/docs/kms/api-ref/kms_02_0046.html @@ -153,7 +153,7 @@
diff --git a/docs/kms/api-ref/kms_02_0047.html b/docs/kms/api-ref/kms_02_0047.html index e6e629ca..34378ba4 100644 --- a/docs/kms/api-ref/kms_02_0047.html +++ b/docs/kms/api-ref/kms_02_0047.html @@ -111,7 +111,7 @@
diff --git a/docs/kms/api-ref/kms_02_0048.html b/docs/kms/api-ref/kms_02_0048.html index 434b5d57..af775b4f 100644 --- a/docs/kms/api-ref/kms_02_0048.html +++ b/docs/kms/api-ref/kms_02_0048.html @@ -190,7 +190,7 @@
diff --git a/docs/kms/api-ref/kms_02_0049.html b/docs/kms/api-ref/kms_02_0049.html index bc030105..519c9203 100644 --- a/docs/kms/api-ref/kms_02_0049.html +++ b/docs/kms/api-ref/kms_02_0049.html @@ -210,7 +210,7 @@
diff --git a/docs/kms/api-ref/kms_02_0050.html b/docs/kms/api-ref/kms_02_0050.html new file mode 100644 index 00000000..9a9ad225 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0050.html @@ -0,0 +1,19 @@ + + +

Before You Start

+
+ + diff --git a/docs/kms/api-ref/kms_02_0051.html b/docs/kms/api-ref/kms_02_0051.html new file mode 100644 index 00000000..aa4fb12e --- /dev/null +++ b/docs/kms/api-ref/kms_02_0051.html @@ -0,0 +1,11 @@ + + +

API Calling

+

KMS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS requests. For details about API calling, see Calling APIs.

+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0052.html b/docs/kms/api-ref/kms_02_0052.html new file mode 100644 index 00000000..aa4706f1 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0052.html @@ -0,0 +1,11 @@ + + +

Endpoints

+

An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.

+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0053.html b/docs/kms/api-ref/kms_02_0053.html new file mode 100644 index 00000000..2f91d8f7 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0053.html @@ -0,0 +1,12 @@ + + +

Constraints

+
+

For more constraints, see the descriptions of specific APIs.

+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0054.html b/docs/kms/api-ref/kms_02_0054.html new file mode 100644 index 00000000..06511acb --- /dev/null +++ b/docs/kms/api-ref/kms_02_0054.html @@ -0,0 +1,25 @@ + + +

Concepts

+
  • Account

    An account has full access permissions for all the resources and cloud services under it. It can reset user passwords and grant users permissions. The account is a payment entity and should not be used to perform routine management. For security purposes, create IAM users and grant them permissions for routine management.

    +
  • User

    An IAM user is created by an account to use cloud services. Each IAM user has its own identity credentials (password and access keys).

    +

    The account name, username, and password wll be required for API authentication.

    +
  • Region

    Regions are divided based on geographical location and network latency. Public services, such as Elastic Cloud Server (ECS), Elastic Volume Service (EVS), Object Storage Service (OBS), Virtual Private Cloud (VPC), Elastic IP (EIP), and Image Management Service (IMS), are shared within the same region. Regions are classified as universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides services of the same type only or for specific tenants.

    +
  • Availability Zone (AZ)

    An AZ comprises one or multiple physical data centers equipped with independent ventilation, fire, water, and electricity facilities. Compute, network, storage, and other resources in an AZ are logically divided into multiple clusters. AZs within a region are interconnected using high-speed optical fibers to support cross-AZ high-availability systems.

    +
  • Project

    Projects group and isolate resources (including compute, storage, and network resources) across physical regions. A default project is provided for each region, and subprojects can be created under each default project. Users can be granted permissions to access all resources in a specific project. For more refined access control, create subprojects under a project and create resources in the subprojects. Users can then be assigned permissions to access only specific resources in the subprojects.

    +
    Figure 1 Project isolation model
    +
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/kms/api-ref/kms_02_0056.html b/docs/kms/api-ref/kms_02_0056.html new file mode 100644 index 00000000..71ceabfb --- /dev/null +++ b/docs/kms/api-ref/kms_02_0056.html @@ -0,0 +1,48 @@ + + +

Returned Values

+

Status Code

After sending a request, you will receive a response containing the status code, response header, and response body.

+

A status code is a group of digits ranging from 1xx to 5xx. It indicates the status of a response. For more information, see Status Code.

+

For example, if status code 201 is returned for calling the API used to obtain a user token, the request is successful.

+
+

Response Header

A response header corresponds to a request header, for example, Content-Type.

+

Figure 1 shows the response header for the API of obtaining a user token, in which x-subject-token is the desired user token. Then, you can use the token to authenticate the calling of other APIs.

+
Figure 1 Header of the response to the request for obtaining a user token
+
+

(Optional) Response Body

A response body is generally returned in a structured format, corresponding to the Content-Type in the response header, and is used to transfer content other than the response header.

+

The following shows part of the response body for the API to obtain a user token. For the sake of space, only part of the content is displayed here.

+
{
+    "token": {
+        "expires_at": "2019-02-13T06:52:13.855000Z",
+        "methods": [
+            "password"
+        ],
+        "catalog": [
+            {
+                "endpoints": [
+                    {
+                        "region_id": "xxxxxxxx",
+......
+

If an error occurs during API calling, the system returns an error code and a message to you. The following shows the format of an error response body:

+
{
+    "error": {
+        "message": "The request you have made requires authentication.",
+        "title": "Unauthorized"
+    }
+}
+

In the preceding information, error_code is an error code, and error_msg describes the error.

+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/kms/api-ref/kms_02_0057.html b/docs/kms/api-ref/kms_02_0057.html new file mode 100644 index 00000000..b548b30b --- /dev/null +++ b/docs/kms/api-ref/kms_02_0057.html @@ -0,0 +1,177 @@ + + +

API Overview

+

You can use all functions of by calling its APIs.

+

Key Management APIs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

API

+

Description

+

Creating a CMK

+

Creates a CMK.

+

Enabling a CMK

+

Enables a CMK. Only an enabled CMK can be used.

+

Disabling a CMK

+

Disables a CMK. A disabled CMK cannot be used.

+

Scheduling the Deletion of a CMK

+

Schedules the deletion of a specific key. The deletion can be scheduled 7 to 1096 days in advance. After a key is deleted, the data encrypted using the key cannot be decrypted.

+

Canceling the Scheduled Deletion of a CMK

+

Cancels a scheduled deletion of a key. Once the deletion is cancelled, the key can be used.

+

Querying the List of CMKs

+

Queries the list of all CMKs.

+

Querying the Information About a CMK

+

Queries details of a specified key.

+

Creating a Random Number

+

Generates a 512-bit random number.

+

Creating a DEK

+

Creates a DEK. A returned result includes the plaintext and the ciphertext of a DEK.

+

Creating a Plaintext-Free DEK

+

Creates a plaintext-free DEK, that is, the returned result of this API includes only the ciphertext of the DEK.

+

Encrypting a DEK

+

Uses a specified CMK to encrypt a DEK.

+

Decrypting a DEK

+

Uses a specified CMK to decrypt a DEK.

+

Querying the Number of Instances

+

Obtains the number of created CMKs, excluding the default master keys.

+

Querying the Quota of a User

+

Queries the total quota of CMKs available and the usage information, excluding the default master keys.

+

Changing the Alias of a CMK

+

Changes the alias of a CMK.

+

Changing the Description of a CMK

+

Changes the description of a CMK.

+

Creating a Grant

+

Grants a user the permissions required for operating a specific key.

+

Revoking a Grant

+

Revokes the key operation permissions granted to a user.

+

Retiring a Grant

+

Retires the granted key operation permissions.

+

Querying Grants on a CMK

+

Queries grants of a CMK.

+

Querying Grants That Can Be Retired

+

Queries grants that can be retired.

+

Obtaining CMK Import Parameters

+

Obtains necessary parameters to import a key, including an import token and an encryption public key.

+

Importing CMK Material

+

Imports the key material of a specified key.

+

Deleting CMK Material

+

Deletes the key material of a specified key.

+

Querying CMK Instances

+

Uses the tag filtering function to query the detailed information of a CMK.

+

Querying CMK Tags

+

Queries tags of a CMK.

+

Querying Project Tags

+

Queries all tag sets of a project.

+

Adding or Deleting CMK Tags in Batches

+

Adds or deletes CMK tags in a batch.

+

Adding a CMK Tag

+

Adds a tag to a CMK.

+

Deleting a CMK Tag

+

Deletes a tag from a CMK.

+

Querying All API Versions

+

-

+

Querying a Specified API Version

+

-

+
+
+
+
+ diff --git a/docs/kms/api-ref/kms_02_0058.html b/docs/kms/api-ref/kms_02_0058.html new file mode 100644 index 00000000..06f33cef --- /dev/null +++ b/docs/kms/api-ref/kms_02_0058.html @@ -0,0 +1,13 @@ + + +

Overview

+

Key Management Service (KMS) is a secure, reliable, and easy-to-use service for managing your keys on the cloud. It helps you easily create, manage, and protect keys.

+

You can use the APIs described in this document to perform operations on keys, such as creating, querying, and deleting keys. For details about all supported operations, see API Overview.

+

Before calling KMS APIs, ensure that you have understood the concepts related to KMS. For more information, see section "Overview" in the Key Management Service User Guide.

+
+
+ +
+ diff --git a/docs/kms/api-ref/kms_02_0200.html b/docs/kms/api-ref/kms_02_0200.html new file mode 100644 index 00000000..cbe27fd7 --- /dev/null +++ b/docs/kms/api-ref/kms_02_0200.html @@ -0,0 +1,8 @@ + + +

API Usage Guidelines

+

Cloud service APIs comply with the RESTful API design principles. REST-based Web services are organized into resources. Each resource is identified by one or more Uniform Resource Identifiers (URIs). An application accesses a resource based on the resource's Unified Resource Locator (URL). A URL is usually in the following format: https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the API access path.

+

Cloud service APIs use HTTPS as the transmission protocol. Requests/Responses are transmitted by using JSON messages, with media type represented by Application/json.

+

For details about how to use APIs, see API Usage Guidelines.

+
+ diff --git a/docs/kms/api-ref/kms_02_0300.html b/docs/kms/api-ref/kms_02_0300.html index 09bc6419..bf5599bf 100644 --- a/docs/kms/api-ref/kms_02_0300.html +++ b/docs/kms/api-ref/kms_02_0300.html @@ -6,8 +6,6 @@

2022-09-30

+

2024-03-25

+

This is the sixteenth official release.

+
  • Optimized the description of the parameter grantee_principal_type in section "Creating a Grant".
  • Added an example of the message_type in section "Signing Data".
+

2023-11-29

+

This is the fifteenth official release.

+

Modified the description of some API request parameters in section "API Description".

+

2023-10-20

+

This is the fourteenth official release.

+
  • Added the section "Signing Data".
  • Added the section "Authenticating a Signature".
+

2022-09-30

This issue is the thirteenth official release.

Optimized descriptions in sections "Permissions Policies and Supported Actions".

@@ -60,7 +78,7 @@

2017-10-30

This is the fifth official release.

-
  • Added the section "Creating a Grant".
  • Added the section "Revoking a Grant".
  • Added the section "Retiring a Grant".
  • Added the section "Querying Grants on a CMK".
  • Added the section "Querying Grants That Can Be Retired".
  • Optimized request parameter description in the section "Creating a CMK".
  • Optimized request and response parameter description in the section "Querying the List of CMKs".
  • Optimized response parameter description in the section "Querying the Information About a CMK".
  • Optimized response parameter description in the section "Creating a Random Number".
  • Optimized response parameter description in the section "Querying the Quota of a User".
  • Optimized error codes and modified the section "Error Codes".
    • Added public error code KMS.0308 and its description.
    • Added error codes and their description for creating a grant.
    • Added error codes and their description for querying grants on a CMK.
    • Added error codes and their description for querying grants that can be retired.
    • Added error codes and their description for revoking a grant.
    • Added error codes and their description for retiring a grant.
    +
    • Added the section "Creating a Grant".
    • Added the section "Revoking a Grant".
    • Added the section "Retiring a Grant".
    • Added the section "Querying Grants on a CMK".
    • Added the section "Querying Grants that Can Be Retired".
    • Optimized request parameter description in the section "Creating a CMK".
    • Optimized request and response parameter description in the section "Querying the List of CMKs".
    • Optimized response parameter description in the section "Querying the Information About a CMK".
    • Optimized response parameter description in the section "Creating a Random Number".
    • Optimized response parameter description in the section "Querying the Quota of a User".
    • Optimized error codes and modified the section "Error Codes".
      • Added public error code KMS.0308 and its description.
      • Added error codes and their description for creating a grant.
      • Added error codes and their description for querying grants on a CMK.
      • Added error codes and their description for querying grants that can be retired.
      • Added error codes and their description for revoking a grant.
      • Added error codes and their description for retiring a grant.

Permission

+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -493,7 +493,7 @@ diff --git a/docs/kms/api-ref/kms_02_8888.html b/docs/kms/api-ref/kms_02_8888.html deleted file mode 100644 index 96786b22..00000000 --- a/docs/kms/api-ref/kms_02_8888.html +++ /dev/null @@ -1,950 +0,0 @@ - - -

Error Code

-
-

Permission

API

+

API

Action

+

Action

Dependent Permission

-

+

Dependent Permission

+

IAM Project

-

(Project)

+

IAM Project

+

(Project)

Enterprise Project

-

(Enterprise Project)

+

Enterprise Project

+

(Enterprise Project)

Creating a CMK

+

Creating a CMK

POST /v1.0/{project_id}/kms/create-key

+

POST /v1.0/{project_id}/kms/create-key

kms:cmk:create

+

kms:cmk:create

-

+

-

√

+

√

√

+

√

Enabling a CMK

+

Enabling a CMK

POST /v1.0/{project_id}/kms/enable-key

+

POST /v1.0/{project_id}/kms/enable-key

kms:cmk:enable

+

kms:cmk:enable

-

+

-

√

+

√

√

+

√

Disabling a CMK

+

Disabling a CMK

POST /v1.0/{project_id}/kms/disable-key

+

POST /v1.0/{project_id}/kms/disable-key

kms:cmk:disable

+

kms:cmk:disable

-

+

-

√

+

√

√

+

√

Scheduling the deletion of a CMK

+

Scheduling the deletion of a CMK

POST /v1.0/{project_id}/kms/schedule-key-deletion

+

POST /v1.0/{project_id}/kms/schedule-key-deletion

kms:cmk:update

+

kms:cmk:update

-

+

-

√

+

√

√

+

√

Canceling the scheduled deletion of a CMK

+

Canceling the scheduled deletion of a CMK

POST /v1.0/{project_id}/kms/cancel-key-deletion

+

POST /v1.0/{project_id}/kms/cancel-key-deletion

kms:cmk:update

+

kms:cmk:update

-

+

-

√

+

√

√

+

√

Querying the list of CMKs

+

Querying the list of CMKs

POST /v1.0/{project_id}/kms/list-keys

+

POST /v1.0/{project_id}/kms/list-keys

kms:cmk:list

+

kms:cmk:list

-

+

-

√

+

√

√

+

√

Queries the CMK information.

+

Queries the CMK information.

POST /v1.0/{project_id}/kms/describe-key

+

POST /v1.0/{project_id}/kms/describe-key

kms:cmk:get

+

kms:cmk:get

-

+

-

√

+

√

√

+

√

Generating a random number

+

Generating a random number

POST /v1.0/{project_id}/kms/gen-random

+

POST /v1.0/{project_id}/kms/gen-random

kms:cmk:generate

+

kms:cmk:generate

-

+

-

√

+

√

√

+

√

Creating a DEK

+

Creating a DEK

POST /v1.0/{project_id}/kms/create-datakey

+

POST /v1.0/{project_id}/kms/create-datakey

kms:dek:create

+

kms:dek:create

-

+

-

√

+

√

√

+

√

Creating a plaintext-free DEK

+

Creating a plaintext-free DEK

POST /v1.0/{project_id}/kms/create-datakey-without-plaintext

+

POST /v1.0/{project_id}/kms/create-datakey-without-plaintext

kms:dek:create

+

kms:dek:create

-

+

-

√

+

√

√

+

√

Encrypting a DEK

+

Encrypting a DEK

POST /v1.0/{project_id}/kms/encrypt-datakey

+

POST /v1.0/{project_id}/kms/encrypt-datakey

kms:dek:crypto

+

kms:dek:crypto

-

+

-

√

+

√

√

+

√

Decrypting a DEK

+

Decrypting a DEK

POST /v1.0/{project_id}/kms/decrypt-datakey

+

POST /v1.0/{project_id}/kms/decrypt-datakey

kms:dek:crypto

+

kms:dek:crypto

-

+

-

√

+

√

√

+

√

Querying the number of instances

+

Querying the number of instances

GET /v1.0/{project_id}/kms/user-instances

+

GET /v1.0/{project_id}/kms/user-instances

kms:cmk:getInstance

+

kms:cmk:getInstance

-

+

-

√

+

√

√

+

√

Querying the user quota

+

Querying the user quota

GET /v1.0/{project_id}/kms/user-quotas

+

GET /v1.0/{project_id}/kms/user-quotas

kms:cmk:getQuota

+

kms:cmk:getQuota

-

+

-

√

+

√

√

+

√

Modifying the CMK alias

+

Modifying the CMK alias

POST /v1.0/{project_id}/kms/update-key-alias

+

POST /v1.0/{project_id}/kms/update-key-alias

kms:cmk:update

+

kms:cmk:update

-

+

-

√

+

√

√

+

√

Modifying the description of a CMK

+

Modifying the description of a CMK

POST /v1.0/{project_id}/kms/update-key-description

+

POST /v1.0/{project_id}/kms/update-key-description

kms:cmk:update

+

kms:cmk:update

-

+

-

√

+

√

√

+

√

Creating a grant

+

Creating a grant

POST /v1.0/{project_id}/kms/create-grant

+

POST /v1.0/{project_id}/kms/create-grant

kms:grant:create

+

kms:grant:create

-

+

-

√

+

√

√

+

√

Revoking a grant

+

Revoking a grant

POST /v1.0/{project_id}/kms/revoke-grant

+

POST /v1.0/{project_id}/kms/revoke-grant

kms:grant:revoke

+

kms:grant:revoke

-

+

-

√

+

√

√

+

√

Retiring a grant

+

Retiring a grant

POST /v1.0/{project_id}/kms/retire-grant

+

POST /v1.0/{project_id}/kms/retire-grant

kms:grant:retire

+

kms:grant:retire

-

+

-

√

+

√

√

+

√

Querying the grant list of a CMK

+

Querying the grant list of a CMK

POST /v1.0/{project_id}/kms/list-grants

+

POST /v1.0/{project_id}/kms/list-grants

kms:grant:list

+

kms:grant:list

-

+

-

√

+

√

√

+

√

Querying the list of grants that can be retired

+

Querying the list of grants that can be retired

POST /v1.0/{project_id}/kms/list-retirable-grants

+

POST /v1.0/{project_id}/kms/list-retirable-grants

kms:grant:list

+

kms:grant:list

-

+

-

√

+

√

√

+

√

Encrypting data

+

Encrypting data

POST /v1.0/{project_id}/kms/encrypt-data

+

POST /v1.0/{project_id}/kms/encrypt-data

kms:cmk:crypto

+

kms:cmk:crypto

-

+

-

√

+

√

√

+

√

Decrypting data

+

Decrypting data

POST /v1.0/{project_id}/kms/decrypt-data

+

POST /v1.0/{project_id}/kms/decrypt-data

kms:cmk:crypto

+

kms:cmk:crypto

-

+

-

√

+

√

√

+

√

Obtaining parameters for importing a key

+

Obtaining parameters for importing a key

POST /v1.0/{project_id}/kms/get-parameters-for-import

+

POST /v1.0/{project_id}/kms/get-parameters-for-import

kms:cmk:getMaterial

+

kms:cmk:getMaterial

-

+

-

√

+

√

√

+

√

Importing key material

+

Importing key material

POST /v1.0/{project_id}/kms/import-key-material

+

POST /v1.0/{project_id}/kms/import-key-material

kms:cmk:importMaterial

+

kms:cmk:importMaterial

-

+

-

√

+

√

√

+

√

Deleting key material

+

Deleting key material

POST /v1.0/{project_id}/kms/delete-imported-key-material

+

POST /v1.0/{project_id}/kms/delete-imported-key-material

kms:cmk:deleteMaterial

+

kms:cmk:deleteMaterial

-

+

-

√

+

√

√

+

√

Enabling key rotation

+

Enabling key rotation

POST /v1.0/{project_id}/kms/enable-key-rotation

+

POST /v1.0/{project_id}/kms/enable-key-rotation

kms:cmk:enableRotation

+

kms:cmk:enableRotation

-

+

-

√

+

√

√

+

√

Modifying the rotation interval

+

Modifying the rotation interval

POST /v1.0/{project_id}/kms/update-key-rotation-interval

+

POST /v1.0/{project_id}/kms/update-key-rotation-interval

kms:cmk:updateRotation

+

kms:cmk:updateRotation

-

+

-

√

+

√

√

+

√

Disabling key rotation

+

Disabling key rotation

POST /v1.0/{project_id}/kms/disable-key-rotation

+

POST /v1.0/{project_id}/kms/disable-key-rotation

kms:cmk:disableRotation

+

kms:cmk:disableRotation

-

+

-

√

+

√

√

+

√

Querying the key rotation status

+

Querying the key rotation status

POST /v1.0/{project_id}/kms/get-key-rotation-status

+

POST /v1.0/{project_id}/kms/get-key-rotation-status

kms:cmk:getRotation

+

kms:cmk:getRotation

-

+

-

√

+

√

√

+

√

Querying key resource instances

+

Querying key resource instances

POST /v1.0/{project_id}/kms/resource_instances/action

+

POST /v1.0/{project_id}/kms/resource_instances/action

kms:cmkTag:listInstance

+

kms:cmkTag:listInstance

-

+

-

√

+

√

√

+

√

Querying tags of a key

+

Querying tags of a key

GET /v1.0/{project_id}/kms/{key_id}/tags

+

GET /v1.0/{project_id}/kms/{key_id}/tags

kms:cmkTag:list

+

kms:cmkTag:list

-

+

-

√

+

√

√

+

√

Querying the project tags

+

Querying the project tags

GET /v1.0/{project_id}/kms/tags

+

GET /v1.0/{project_id}/kms/tags

kms:cmkTag:list

+

kms:cmkTag:list

-

+

-

√

+

√

√

+

√

Adding or deleting key tags in batches

+

Adding or deleting key tags in batches

POST /v1.0/{project_id}/kms/{key_id}/tags/action

+

POST /v1.0/{project_id}/kms/{key_id}/tags/action

kms:cmkTag:batch

+

kms:cmkTag:batch

-

+

-

√

+

√

√

+

√

Adding tags to a key

+

Adding tags to a key

POST /v1.0/{project_id}/kms/{key_id}/tags

+

POST /v1.0/{project_id}/kms/{key_id}/tags

kms:cmkTag:create

+

kms:cmkTag:create

-

+

-

√

+

√

√

+

√

Deleting tags of a key

+

Deleting tags of a key

POST /v1.0/{project_id}/kms/{ key_id }/tags/{key}

+

POST /v1.0/{project_id}/kms/{ key_id }/tags/{key}

kms:cmkTag:delete

+

kms:cmkTag:delete

-

+

-

√

+

√

√

+

√

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Status Code

-

Error Code

-

Error Message

-

Description

-

Measure

-

400

-

KMS.0201

-

Invalid request URL.

-

Invalid request URL.

-

Enter a valid URL.

-

400

-

KMS.0202

-

Invalid JSON format of the request message.

-

Invalid JSON format of the request message.

-

Enter a valid message.

-

400

-

KMS.0203

-

Request message too long.

-

Request message too long.

-

Enter a valid message.

-

400

-

KMS.0204

-

Parameters missing in the request message.

-

Parameters missing in the request message.

-

Enter a valid message.

-

400

-

KMS.0205

-

Invalid key ID.

-

Invalid key ID.

-

Enter a valid key ID.

-

400

-

KMS.0206

-

Invalid sequence number.

-

Invalid sequence number.

-

Enter a valid sequence number.

-

400

-

KMS.0208

-

Invalid value of value encryption_context.

-

Invalid value of value encryption_context.

-

Enter a valid value of encryption_context.

-

400

-

KMS.0209

-

The key has been disabled.

-

The key has been disabled.

-

Enable the key.

-

400

-

KMS.0210

-

The key is in Scheduled deletion state and cannot be used.

-

The key is in Pending deletion state and cannot be used.

-

Enable the key.

-

400

-

KMS.0211

-

Cannot perform this operation on Default Master Keys.

-

Cannot perform this operation on Default Master Keys.

-

Perform this operation on a common CMK.

-

400

-

KMS.0308

-

Invalid parameter.

-

Invalid parameter.

-

Enter valid parameters.

-

400

-

KMS.0309

-

External keys required.

-

External keys required.

-

Use an imported key.

-

400

-

KMS.0310

-

The key is not in Pending import state.

-

The key is not in Pending import state.

-

Ensure the key is in Pending import state.

-

400

-

KMS.0401

-

Tag list cannot be empty.

-

Tag list cannot be empty.

-

Enter valid parameters.

-

400

-

KMS.0402

-

Invalid match value.

-

Invalid match value.

-

Enter valid parameters.

-

400

-

KMS.0403

-

Invalid match key.

-

Invalid match key.

-

Enter valid parameters.

-

400

-

KMS.0201

-

Invalid request URL.

-

Invalid request URL.

-

Enter a valid URL.

-

400

-

KMS.0202

-

Invalid JSON format of the request message.

-

Invalid JSON format of the request message.

-

Enter a valid message.

-

400

-

KMS.0203

-

Request message too long.

-

Request message too long.

-

Enter a valid message.

-

400

-

KMS.0204

-

Parameters missing in the request message.

-

Parameters missing in the request message.

-

Enter a valid message.

-

400

-

KMS.0205

-

Invalid key ID.

-

Invalid key ID.

-

Enter a valid key ID.

-

400

-

KMS.0206

-

Invalid sequence number.

-

Invalid sequence number.

-

Enter a valid sequence number.

-

400

-

KMS.0208

-

Invalid value of value encryption_context.

-

Invalid value of value encryption_context.

-

Enter a valid value of encryption_context.

-

400

-

KMS.0209

-

The key has been disabled.

-

The key has been disabled.

-

Enable the key.

-

400

-

KMS.0210

-

The key is in Scheduled deletion state and cannot be used.

-

The key is in Pending deletion state and cannot be used.

-

Enable the key.

-

400

-

KMS.0211

-

Cannot perform this operation on Default Master Keys.

-

Cannot perform this operation on Default Master Keys.

-

Perform this operation on a common CMK.

-

400

-

KMS.0308

-

Invalid parameter.

-

Invalid parameter.

-

Enter valid parameters.

-

400

-

KMS.0309

-

External keys required.

-

External keys required.

-

Use an imported key.

-

400

-

KMS.0310

-

The key is not in Pending import state.

-

The key is not in Pending import state.

-

Ensure the key is in Pending import state.

-

400

-

KMS.0311

-

Failed to decrypt data using the RSA private key.

-

Failed to decrypt data using the RSA private key.

-

Ensure the input ciphertext is correct and try again, or contact customer service.

-

400

-

KMS.0312

-

External keys cannot be rotated.

-

External keys cannot be rotated.

-

Use a common CMK.

-

400

-

KMS.0313

-

Key rotation is not enabled.

-

Key rotation is not enabled.

-

Enable key rotation.

-

400

-

KMS.0401

-

Tag list cannot be empty.

-

Tag list cannot be empty.

-

Enter valid parameters.

-

400

-

KMS.0402

-

Invalid match value.

-

Invalid match value.

-

Enter valid parameters.

-

400

-

KMS.0403

-

Invalid match key.

-

Invalid match key.

-

Enter valid parameters.

-

400

-

KMS.0404

-

Invalid action.

-

Invalid action.

-

Enter valid parameters.

-

400

-

KMS.0405

-

Invalid tag value.

-

Invalid tag value.

-

Enter valid parameters.

-

400

-

KMS.0406

-

Invalid tag key.

-

Invalid tag key.

-

Enter valid parameters.

-

400

-

KMS.0407

-

Invalid tag list size.

-

Invalid tag list size.

-

Enter valid parameters.

-

400

-

KMS.0408

-

Invalid resourceType.

-

Invalid resourceType.

-

Enter valid parameters.

-

400

-

KMS.0409

-

Too many tags.

-

Too many tags.

-

Delete unnecessary tags and try again.

-

400

-

KMS.0410

-

Invalid tag value length.

-

Invalid tag value length.

-

Enter valid parameters.

-

400

-

KMS.0411

-

Invalid tag key length.

-

Invalid tag key length.

-

Enter valid parameters.

-

400

-

KMS.0412

-

Invalid tag list.

-

Invalid tag list.

-

Enter valid parameters.

-

400

-

KMS.0413

-

Too many tag values.

-

Too many tag values.

-

Enter valid parameters.

-

400

-

KMS.0415

-

Invalid matches.

-

Invalid matches.

-

Enter valid parameters.

-

400

-

KMS.0417

-

Invalid offset.

-

Invalid offset.

-

Enter valid parameters.

-

400

-

KMS.1101

-

Invalid key_alias.

-

Invalid key_alias.

-

Enter valid parameters.

-

400

-

KMS.1102

-

Invalid realm.

-

Invalid realm.

-

Enter valid parameters.

-

400

-

KMS.1103

-

Invalid key_description.

-

Invalid key_description.

-

Enter valid parameters.

-

400

-

KMS.1104

-

Duplicate key aliases.

-

Duplicate key aliases.

-

Use another alias.

-

400

-

KMS.1105

-

Too many keys.

-

Too many keys.

-

Increase key quota or delete unnecessary keys.

-

400

-

KMS.1201

-

The key is not disabled.

-

The key is not disabled.

-

Disable the key.

-

400

-

KMS.1301

-

The key is not enabled.

-

The key is not enabled.

-

Enable the key.

-

400

-

KMS.1401

-

Set the pending deletion period between 7 to 1096 days.

-

Set the pending deletion period between 7 to 1096 days.

-

Enter valid parameters.

-

400

-

KMS.1402

-

The key is already in Pending deletion state.

-

The key is already in Pending deletion state.

-

No further operation required.

-

400

-

KMS.1501

-

The key is not in Pending deletion state.

-

The key is not in Pending deletion state.

-

Schedule deletion the key.

-

400

-

KMS.1601

-

Invalid limit.

-

Invalid limit.

-

Enter valid parameters.

-

400

-

KMS.1602

-

marker must be greater than or equals 0.

-

marker must be greater than or equals 0.

-

Enter valid parameters.

-

400

-

KMS.1801

-

random_data_length must be 512 bits.

-

random_data_length must be 512 bits.

-

Enter valid parameters.

-

400

-

KMS.1901

-

datakey_length must be in the range 8 bits to 8,192 bits.

-

datakey_length must be in the range 8 bits to 8,192 bits.

-

Enter valid parameters.

-

400

-

KMS.2001

-

datakey_length must be 512 bits.

-

datakey_length must be 512 bits.

-

Enter valid parameters.

-

400

-

KMS.2101

-

Invalid plain_text.

-

Invalid plain_text.

-

Enter valid parameters.

-

400

-

KMS.2102

-

datakey_plain_length must be 64 bytes.

-

datakey_plain_length must be 64 bytes.

-

Enter valid parameters.

-

400

-

KMS.2103

-

Failed to verify the DEK hash.

-

Failed to verify the DEK hash.

-

Ensure the DEK is valid and try again, or contact customer service.

-

400

-

KMS.2201

-

Invalid cipher_text.

-

invalid cipher_text.

-

Enter valid parameters.

-

400

-

KMS.2202

-

datakey_cipher_length must be 64 bytes.

-

datakey_cipher_length must be 64 bytes.

-

Enter valid parameters.

-

400

-

KMS.2203

-

Failed to verify the DEK hash.

-

Failed to verify the DEK hash.

-

Ensure the DEK is valid and try again, or contact customer service.

-

400

-

KMS.2401

-

Specify an operation in addition to create-grant.

-

Specify an operation in addition to create-grant.

-

Enter valid parameters.

-

400

-

KMS.2402

-

Invalid user ID.

-

Invalid user ID.

-

Enter valid parameters.

-

400

-

KMS.2403

-

Failed to create the grant.

-

Failed to create the grant.

-

Try again later or contact customer service.

-

400

-

KMS.2404

-

Too many CMK grants.

-

Too many CMK grants.

-

Increase grant quota or delete unnecessary grants.

-

400

-

KMS.2405

-

Too many grants.

-

Too many grants.

-

Increase grant quota or delete unnecessary grants.

-

400

-

KMS.2501

-

Invalid grant ID.

-

Invalid grant ID.

-

Enter a valid grant ID.

-

400

-

KMS.2502

-

grant_id and key_id do not match.

-

grant_id and key_id do not match.

-

Ensure input grant_id matches key_id.

-

400

-

KMS.2601

-

Token expired.

-

Token expired.

-

Obtain a new token.

-

400

-

KMS.2602

-

Key expiration time must be later than the current time.

-

Key expiration time must be later than the current time.

-

Set a valid key expiration time.

-

400

-

KMS.2603

-

Key IDs in the imported key and token do not match.

-

Key IDs in the imported key and token do not match.

-

Ensure the key ID in the imported key matches that in the token.

-

400

-

KMS.2604

-

The external key plaintext length must be 32 bits.

-

The external key plaintext length must be 32 bits.

-

Enter valid parameters.

-

400

-

KMS.2605

-

Token verification failed.

-

Token verification failed.

-

Obtain a new token.

-

400

-

KMS.2606

-

You are importing a deleted key again. The imported plaintext must be the same as the deleted key plaintext.

-

You are importing a deleted key again. The imported plaintext must be the same as the deleted key plaintext.

-

Ensure the plaintext of the imported key is the same as that of the deleted key.

-

400

-

KMS.2701

-

Key material is not in Enabled or Disabled state and cannot be deleted.

-

Key material is not in Enabled or Disabled state and cannot be deleted.

-

Ensure that the key is in Enabled or Disabled state.

-

500

-

KMS.0101

-

KMS error.

-

KMS error.

-

Try again later or contact customer service.

-

500

-

KMS.0102

-

Abnormal KMS I/O.

-

Abnormal KMS I/O.

-

Try again later or contact customer service.

-
-
- -
- -
- diff --git a/docs/kms/api-ref/public_sys-resources/icon-arrowdn.gif b/docs/kms/api-ref/public_sys-resources/icon-arrowdn.gif index 84eec9be2f2ce458e888f8a9b803f9387247726a..379428032932289326e52c2772bd90ba3d88b906 100644 GIT binary patch literal 1887 zcmZ?wbhEHbCgqow z*eU^C3h_d20o>TUVm+{T^pf*)^(zt!^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^ z7NqJ2r55Lx7A2Jm>Ih`8X1|p zSh~8p7&*iAy5uL9=BDPA!1Sgd^t#~G3rY&P1wfl!Qj0RnQd8WD@^clyUbf1_?G{Iz z=0WwQ;C71>PQCg-$LND17Ac}(Lcr7mV#1RxkONQnsd>QEUIa|mjQ{`r{qy_R&mZ5v zef{$J)5j0*-@SeF`qj%9&!0Vg^7zri2lwyYy>t84%^TORUA=Po(!~qs&z(JU`qar2 z$B!L7a`@1}1N-;w-Lrew&K=vgZQZhY)5ZeMTG_VdAT{+S(zE> zX{jm6Nr?&Zaj`McQIQehVWA3>*p!%p5Wn0u7E$th{n6D>ft^YU5&dnB%c=(a~-RV>2EO25SIA CZ-yWM literal 68 zcmZ?wbhEHbzkByxQ$u Mo$o?7J5~m305MV#!~g&Q diff --git a/docs/kms/api-ref/public_sys-resources/icon-arrowrt.gif b/docs/kms/api-ref/public_sys-resources/icon-arrowrt.gif index 39583d168d6db303b366b5b8c1780698a6bb6017..6aaaa11c23e919c4798d7dcd2b1ae98dd35dd316 100644 GIT binary patch literal 1890 zcmZ?wbhEHb7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k11Cod14Ab>6ALqQLqk^=3j-5FHzP|& zBUd9gQwvj9m|mCsATTyHM;rzL?XHK6w zdE)r7qel)OI(T6JzP)>P@7lRz`?jrHHgDRvVg0(bYgVsXxnlXUrArnsTDV~Tyt#8` z&zd=7`n0K2CQq6;p}()Ur@O1OqrI)QrMaoGp}wxRrn;)KqP(oMq`0WCAU`iRCp#-M zBRwrOB{?ZEAwDiPCORrIB0MZKBseHAz~9f;$J@)(!`;o*#o5Wx!QRf+#@fo#!raW% z#MsEtKwnQ+M_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0)g_((w zfkE*n3y@@B&;b#k`jUY|nSq%>!ec`MLnAA%oR7zc2TpB#@>)|YCO&lN;uMU!b7Eqm H1A{dHTIz>f literal 70 zcmZ?wbhEHb