AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用密钥

本主题中的示例使用 AWS KMS API 创建、查看、启用和禁用 AWS KMS 客户主密钥并生成数据密钥。

创建客户主密钥

要创建客户主密钥,请使用 CreateKey 操作。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 createKey 方法

// Create a CMK // String desc = "Key for protecting critical data"; CreateKeyRequest req = new CreateKeyRequest().withDescription(desc); CreateKeyResult result = kmsClient.createKey(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 CreateKey 方法

// Create a CMK // String desc = "Key for protecting critical data"; CreateKeyRequest req = new CreateKeyRequest() { Description = desc }; CreateKeyResponse response = kmsClient.CreateKey(req);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 create_key 方法

# Create a CMK desc = 'Key for protecting critical data' response = kms_client.create_key( Description=desc )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 create_key 实例方法。

# Create a CMK desc = 'Key for protecting critical data' response = kmsClient.create_key({ description: desc })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 CreateKey 方法

// Create a CMK // $desc = "Key for protecting critical data"; $result = $KmsClient->createKey([ 'Description' => $desc ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 createKey 属性

// Create a CMK // const Description = 'Key for protecting critical data'; kmsClient.createKey({ Description }, (err, data) => { ... });

生成数据密钥

要生成数据密钥,请使用 GenerateDataKey 操作。该操作返回其创建的数据密钥的明文和加密副本。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 generateDataKey 方法

// Generate a data key // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest(); dataKeyRequest.setKeyId(keyId); dataKeyRequest.setKeySpec("AES_256"); GenerateDataKeyResult dataKeyResult = kmsClient.generateDataKey(dataKeyRequest); ByteBuffer plaintextKey = dataKeyResult.getPlaintext(); ByteBuffer encryptedKey = dataKeyResult.getCiphertextBlob();
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 GenerateDataKey 方法

// Generate a data key // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest() { KeyId = keyId, KeySpec = DataKeySpec.AES_256 }; GenerateDataKeyResponse dataKeyResponse = kmsClient.GenerateDataKey(dataKeyRequest); MemoryStream plaintextKey = dataKeyResponse.Plaintext; MemoryStream encryptedKey = dataKeyResponse.CiphertextBlob;
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 generate_date_key 方法

# Generate a data key # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.generate_data_key( KeyId=key_id, KeySpec='AES_256' ) plaintext_key = response['Plaintext'] encrypted_key = response['CiphertextBlob']
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 generate_data_key 实例方法。

# Generate a data key # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.generate_data_key({ key_id: keyId, key_spec: 'AES_256' }) plaintextKey = response.plaintext encryptedKey = response.ciphertext_blob
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 GenerateDataKey 方法

// Generate a data key // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $keySpec = 'AES_256'; $result = $KmsClient->generateDataKey([ 'KeyId' => $keyId, 'KeySpec' => $keySpec, ]); $plaintextKey = $result['Plaintext']; $encryptedKey = $result['CiphertextBlob'];
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 generateDataKey 属性

// Generate a data key // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; const KeySpec = 'AES_256'; kmsClient.generateDataKey({ KeyId, KeySpec }, (err, data) => { if (err) console.log(err, err.stack); else { const { CiphertextBlob, Plaintext } = data; ... } });

查看自定义主密钥

要获取有关客户主密钥 (CMK) 的详细信息(包括 CMK ARN 和密钥状态),请使用 DescribeKey 操作。

DescribeKey 未获得别名。要获得别名,请使用 ListAliases 操作。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 describeKey 方法

// Describe a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; DescribeKeyRequest req = new DescribeKeyRequest().withKeyId(keyId); DescribeKeyResult result = kmsClient.describeKey(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 DescribeKey 方法

// Describe a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; DescribeKeyRequest describeKeyRequest = new DescribeKeyRequest() { KeyId = keyId }; DescribeKeyResponse describeKeyResponse = kmsClient.DescribeKey(describeKeyRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 describe_key 方法

# Describe a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.describe_key( KeyId=key_id )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 describe_key 实例方法。

# Describe a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.describe_key({ key_id: keyId })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 DescribeKey 方法

// Describe a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->describeKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 describeKey 属性

// Describe a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.describeKey({ KeyId }, (err, data) => { ... });

获取客户主密钥的密钥 ID 和密钥 ARN

要获取客户主密钥的 ID 和 ARN,请使用 ListKeys 操作。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 listKeys 方法

// List CMKs in this account // Integer limit = 10; ListKeysRequest req = new ListKeysRequest().withLimit(limit); ListKeysResult result = kmsClient.listKeys(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 ListKeys 方法

// List CMKs in this account // int limit = 10; ListKeysRequest listKeysRequest = new ListKeysRequest() { Limit = limit }; ListKeysResponse listKeysResponse = kmsClient.ListKeys(listKeysRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 list_keys 方法

# List CMKs in this account response = kms_client.list_keys( Limit=10 )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 list_keys 实例方法。

# List CMKS in this account response = kmsClient.list_keys({ limit: 10 })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 ListKeys 方法

// List CMKs in this account // $limit = 10; $result = $KmsClient->listKeys([ 'Limit' => $limit, ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 listKeys 属性

// List CMKs in this account // const Limit = 10; kmsClient.listKeys({ Limit }, (err, data) => { ... });

启用客户主密钥

要启用已禁用的客户主密钥 (CMK),请使用 EnableKey 操作。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关 Java 实施的详细信息,请参阅 AWS SDK for Java API Reference 中的 enableKey 方法

// Enable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; EnableKeyRequest req = new EnableKeyRequest().withKeyId(keyId); kmsClient.enableKey(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 EnableKey 方法

// Enable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; EnableKeyRequest enableKeyRequest = new EnableKeyRequest() { KeyId = keyId }; kmsClient.EnableKey(enableKeyRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 enable_key 方法

# Enable a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.enable_key( KeyId=key_id )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 enable_key 实例方法。

# Enable a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.enable_key({ key_id: keyId })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 EnableKey 方法

// Enable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->enableKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 enableKey 属性

// Enable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.enableKey({ KeyId }, (err, data) => { ... });

禁用客户主密钥

要禁用 CMK,请使用 DisableKey 操作。禁用 CMK 可防止其被使用。

此示例使用您在kmsClient中创建的 创建客户端 客户端对象。

JavaC#PythonRubyPHPNode.js
Java

有关详细信息,请参阅 AWS SDK for Java API Reference 中的 disableKey 方法

// Disable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; DisableKeyRequest req = new DisableKeyRequest().withKeyId(keyId); kmsClient.disableKey(req);
C#

有关详细信息,请参阅 适用于 .NET 的 AWS 开发工具包 中的 DisableKey 方法

// Disable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; DisableKeyRequest disableKeyRequest = new DisableKeyRequest() { KeyId = keyId }; kmsClient.DisableKey(disableKeyRequest);
Python

有关详细信息,请参阅 适用于 Python 的 AWS 开发工具包 (Boto3) 中的 disable_key 方法

# Disable a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.disable_key( KeyId=key_id )
Ruby

有关详细信息,请参阅 适用于 Ruby 的 AWS 开发工具包 中的 disable_key 实例方法。

# Disable a CMK # 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.disable_key({ key_id: keyId })
PHP

有关详细信息,请参阅 适用于 PHP 的 AWS 开发工具包 中的 DisableKey 方法

// Disable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->disableKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 AWS SDK for JavaScript in Node.js 中的 disableKey 属性

// Disable a CMK // // 使用有效的 CMK ID 或 ARN 替换以下虚拟 CMK ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.disableKey({ KeyId }, (err, data) => { ... });