全部產品
Search
文件中心

:GenerateDataKey

更新時間:Jan 22, 2025

調用GenerateDataKey介面產生一個隨機的資料密鑰,用於本機資料加密。

注意事項

  • 非KMS執行個體中的密鑰:進行密碼運算時,僅支援通過阿里雲SDK調用OpenAPI。
  • KMS執行個體中的密鑰:進行密碼運算時,支援如下兩種方式。

QPS限制

本介面的單使用者QPS限制為750次/秒。超過限制,API調用將會被限流,這可能影響您的業務,請合理調用。

詳細說明

API隨機產生的資料密鑰通過您指定的主要金鑰(CMK)加密後,返回資料密鑰的密文和明文。您可以使用返回的資料密鑰明文,在KMS之外對資料進行本地離線加密。在儲存加密後的資料時,也需要儲存資料密鑰的密文。您可以通過響應中的Plaintext欄位擷取到資料密鑰的明文,通過CiphertextBlob欄位擷取到資料密鑰的密文。

在請求中指定的CMK,僅會被用作資料密鑰的加密,和資料密鑰的產生無關。KMS不會記錄或儲存隨機產生的資料密鑰,您需要負責對資料密鑰(密文)進行持久化。

建議您使用以下方式在本地進行資料加密:

1.調用GenerateDataKey介面,獲得用於資料加密的密鑰。

2.使用資料密鑰的明文(通過響應中的Plaintext欄位返回),在本地完成離線資料加密,隨後清除記憶體中的資料密鑰明文。

3.將資料密鑰的密文(通過響應中的CiphertextBlob欄位返回),和本地離線加密後的資料一併進行儲存。

在本地解密資料:

  • 調用Decrypt介面解密本機存放區的資料密鑰的密文。該操作將返回資料密鑰的明文。
  • 使用資料密鑰的明文,在本地完成離線資料解密,隨後清除記憶體中的資料密鑰明文。

本文將提供一個樣本,為ID為key-hzz630494463ejqjx****的密鑰產生隨機的資料密鑰。

調試

您可以在OpenAPI Explorer中直接運行該介面,免去您計算簽名的困擾。運行成功後,OpenAPI Explorer可以自動產生SDK程式碼範例。

請求參數

名稱

類型

是否必選

樣本值

描述

Action String GenerateDataKey

要執行的操作。取值:GenerateDataKey

KeyId String key-hzz630494463ejqjx****

密鑰的ID,也可以指定為密鑰別名或密鑰資源名稱(ARN)。關於別名的詳細介紹,請參見管理密鑰別名

說明 訪問其他阿里雲帳號下的密鑰時,必須輸入密鑰ARN。密鑰ARN的格式為acs:kms:${region}:${account}:key/${keyid}
KeySpec String AES_256

指定產生的資料密鑰的長度,取值:

  • AES_256:256位元的對稱金鑰。
  • AES_128:128位元的對稱金鑰。
說明 建議使用KeySpec或者NumberOfBytes來指定資料密鑰長度。如果兩者都不指定,KMS產生256位元的資料密鑰;如果兩者都被指定,KMS會忽略KeySpec參數。
NumberOfBytes Integer 256

指定產生的資料密鑰的長度,單位為位元組。

取值:1~1024。

預設值:

  • 當KeySpec取值為AES_256時,NumberOfBytes預設值為32。
  • 當KeySpec取值為AES_128時,NumberOfBytes預設值為16。
EncryptionContext Map {"Example":"Example"}

key/value對的JSON字串。

如果指定了該參數,則在調用Decrypt介面時需要提供同樣的參數。更多資訊,請參見EncryptionContext

DryRun String false

是否開啟DryRun模式。

  • true:開啟
  • false(預設值):關閉

DryRun模式用於測試API調用,驗證您是否具有相應資源的許可權,以及請求參數是否配置正確。DryRun模式開啟後,KMS會始終返回失敗並提示失敗原因。失敗原因包含如下:

  • DryRunOperationError:不配置DryRun參數時,請求會成功。
  • ValidationError:請求中指定的參數有誤。
  • AccessDeniedError:您無權在KMS資源上執行該操作。

關於公用請求參數的詳情,請參見公用參數

返回資料

名稱

類型

樣本值

描述

KeyVersionId String 2ab1a983-7072-4bbc-a582-584b5bd8****

密鑰版本ID。主要金鑰版本的通用唯一識別碼。

KeyId String key-hzz630494463ejqjx****

密鑰ID。如果請求中的KeyId參數使用的是密鑰別名、密鑰ARN,在響應中也會返回密鑰ID。

CiphertextBlob String ODZhOWVmZDktM2QxNi00ODk0LWJkNGYtMWZjNDNmM2YyYWJmS7FmDBBQ0BkKsQrtRnidtPwirmDcS0ZuJCU41xxAAWk4Z8qsADfbV0b+i6kQmlvj79dJdGOvtX69Uycs901qOjop4bTS****

資料密鑰被指定密鑰的主要版本加密後的密文。

RequestId String 7021b6ec-4be7-4d3c-8a68-1e85d4d515a0

本次調用請求的ID,是由阿里雲為該請求產生的唯一識別碼,可用於排查和定位問題。

Plaintext String QmFzZTY0IGVuY29kZWQgcGxhaW50****

資料密鑰的明文經過Base64編碼後的值。

樣本

請求樣本

http(s)://[Endpoint]/?Action=GenerateDataKey
&KeyId=key-hzz630494463ejqjx****
&KeySpec=AES_256
&NumberOfBytes=256
&DryRun=false
&公用請求參數

正常返回樣本

XML格式

HTTP/1.1 200 OK
Content-Type:application/xml

<GenerateDataKeyResponse>
    <KeyVersionId>2ab1a983-7072-4bbc-a582-584b5bd8****</KeyVersionId>
    <KeyId>key-hzz630494463ejqjx****</KeyId>
    <CiphertextBlob>ODZhOWVmZDktM2QxNi00ODk0LWJkNGYtMWZjNDNmM2YyYWJmS7FmDBBQ0BkKsQrtRnidtPwirmDcS0ZuJCU41xxAAWk4Z8qsADfbV0b+i6kQmlvj79dJdGOvtX69Uycs901qOjop4bTS****</CiphertextBlob>
    <RequestId>7021b6ec-4be7-4d3c-8a68-1e85d4d515a0</RequestId>
    <Plaintext>QmFzZTY0IGVuY29kZWQgcGxhaW50****</Plaintext>
</GenerateDataKeyResponse>

JSON格式

HTTP/1.1 200 OK
Content-Type:application/json

{
  "KeyVersionId" : "2ab1a983-7072-4bbc-a582-584b5bd8****",
  "KeyId" : "key-hzz630494463ejqjx****",
  "CiphertextBlob" : "ODZhOWVmZDktM2QxNi00ODk0LWJkNGYtMWZjNDNmM2YyYWJmS7FmDBBQ0BkKsQrtRnidtPwirmDcS0ZuJCU41xxAAWk4Z8qsADfbV0b+i6kQmlvj79dJdGOvtX69Uycs901qOjop4bTS****",
  "RequestId" : "7021b6ec-4be7-4d3c-8a68-1e85d4d515a0",
  "Plaintext" : "QmFzZTY0IGVuY29kZWQgcGxhaW50****"
}

錯誤碼

HttpCode

錯誤碼

錯誤資訊

描述

400 UnsupportedOperation This action is not supported. 不支援的操作
404 Forbidden.AliasNotFound The specified Alias is not found. 指定的別名找不到
404 Forbidden.KeyNotFound The specified Key is not found. 指定的密鑰不存在。
409 Rejected.Disabled The request was rejected because the key state is Disabled. 請求被拒絕,因為密鑰狀態為已禁用。
409 Rejected.PendingDeletion The request was rejected because the key state is PendingDeletion. 請求被拒絕,原因是密鑰狀態為待刪除。
409 Rejected.Unavailable The request was rejected because the key state is Unavailable. 請求被拒絕,原因是密鑰狀態為不可用。

訪問錯誤中心查看更多錯誤碼。