GenerateDataKey搭配使用 AWS SDK或 CLI - AWS Key Management Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

GenerateDataKey搭配使用 AWS SDK或 CLI

以下代码示例演示如何使用 GenerateDataKey

操作示例是大型程序的代码摘录,必须在上下文中运行。您可以在以下代码示例中查看此操作的上下文:

CLI
AWS CLI

示例 1:生成 256 位对称数据密钥

以下generate-data-key示例请求一个 256 位的对称数据密钥以供在之外使用 AWS。 该命令返回一个供立即使用和删除的纯文本数据密钥,以及使用指定KMS密钥加密的该数据密钥的副本。您可以安全地将加密的数据密钥与加密的数据一起存储。

要请求 256 位数据密钥,请使用值为 AES_256key-spec 参数。要请求 128 位数据密钥,请使用值为 AES_128key-spec 参数。对于所有其他数据密钥长度,请使用 number-of-bytes 参数。

您指定的KMS密钥必须是对称加密KMS密钥,即KMS密钥规格值为 SYMMETRIC _ DEFAULT 的密钥。

aws kms generate-data-key \ --key-id alias/ExampleAlias \ --key-spec AES_256

输出:

{ "Plaintext": "VdzKNHGzUAzJeRBVY+uUmofUGGiDzyB3+i9fVkh3piw=", "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CiphertextBlob": "AQEDAHjRYf5WytIc0C857tFSnBaPn2F8DgfmThbJlGfR8P3WlwAAAH4wfAYJKoZIhvcNAQcGoG8wbQIBADBoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDEFogLqPWZconQhwHAIBEIA7d9AC7GeJJM34njQvg4Wf1d5sw0NIo1MrBqZa+YdhV8MrkBQPeac0ReRVNDt9qleAt+SHgIRF8P0H+7U=" }

Plaintext(明文数据密钥)和 CiphertextBlob(加密数据密钥)均以 base64 编码的格式返回。

有关更多信息,请参阅中的数据密钥 < https://docs.aws.amazon.com/kms/ latest/developerguide/concepts.html #data-keys AWS 密钥管理服务开发人员指南

示例 2:生成 512 位对称数据密钥

以下 generate-data-key 示例请求用于加密和解密的 512 位对称数据密钥。该命令返回一个供立即使用和删除的纯文本数据密钥,以及使用指定KMS密钥加密的该数据密钥的副本。您可以安全地将加密的数据密钥与加密的数据一起存储。

要请求 128 或 256 位以外的密钥长度,请使用 number-of-bytes 参数。为了请求 512 位数据密钥,以下示例使用值为 64(字节)的 number-of-bytes 参数。

您指定的KMS密钥必须是对称加密KMS密钥,即KMS密钥规格值为 SYMMETRIC _ DEFAULT 的密钥。

NOTE:此示例输出中的值被截断以供显示。

aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --number-of-bytes 64

输出:

{ "CiphertextBlob": "AQIBAHi6LtupRpdKl2aJTzkK6FbhOtQkMlQJJH3PdtHvS/y+hAEnX/QQNmMwDfg2korNMEc8AAACaDCCAmQGCSqGSIb3DQEHBqCCAlUwggJRAgEAMIICSgYJKoZ...", "Plaintext": "ty8Lr0Bk6OF07M2BWt6qbFdNB+G00ZLtf5MSEb4al3R2UKWGOp06njAwy2n72VRm2m7z/Pm9Wpbvttz6a4lSo9hgPvKhZ5y6RTm4OovEXiVfBveyX3DQxDzRSwbKDPk/...", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

Plaintext(明文数据密钥)和 CiphertextBlob(加密数据密钥)均以 base64 编码的格式返回。

有关更多信息,请参阅中的数据密钥 < https://docs.aws.amazon.com/kms/ latest/developerguide/concepts.html #data-keys AWS 密钥管理服务开发人员指南

  • 有关API详细信息,请参阅GenerateDataKey中的 AWS CLI 命令参考

Python
SDK适用于 Python (Boto3)
注意

还有更多相关信息 GitHub。在中查找完整的示例,学习如何设置和运行 AWS 代码示例存储库

class KeyManager: def __init__(self, kms_client): self.kms_client = kms_client self.created_keys = [] def generate_data_key(self, key_id): """ Generates a symmetric data key that can be used for client-side encryption. """ answer = input( f"Do you want to generate a symmetric data key from key {key_id} (y/n)? " ) if answer.lower() == "y": try: data_key = self.kms_client.generate_data_key( KeyId=key_id, KeySpec="AES_256" ) except ClientError as err: logger.error( "Couldn't generate a data key for key %s. Here's why: %s", key_id, err.response["Error"]["Message"], ) else: pprint(data_key)
  • 有关API详细信息,请参阅GenerateDataKey中的 AWS SDK供参考 Python (Boto3) API。

Rust
SDK对于 Rust
注意

还有更多相关信息 GitHub。在中查找完整的示例,学习如何设置和运行 AWS 代码示例存储库

async fn make_key(client: &Client, key: &str) -> Result<(), Error> { let resp = client .generate_data_key() .key_id(key) .key_spec(DataKeySpec::Aes256) .send() .await?; // Did we get an encrypted blob? let blob = resp.ciphertext_blob.expect("Could not get encrypted text"); let bytes = blob.as_ref(); let s = base64::encode(bytes); println!(); println!("Data key:"); println!("{}", s); Ok(()) }
  • 有关API详细信息,请参阅GenerateDataKey中的 AWS SDK供API参考 Rust

有关完整列表 AWS SDK开发者指南和代码示例,请参阅使用 AWS KMS 用一个 AWS SDK。本主题还包括有关入门的信息以及有关先前SDK版本的详细信息。