使用密钥 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用密钥

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

创建 KMS 密钥

要创建 Amazon KMS key(KMS 密钥),请使用CreateKey操作。本节中的示例创建一个对称加密 KMS 密钥。这些示例中使用的 Description 参数是可选的。

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

有关在 Amazon KMS 控制台中创建 KMS 密钥的帮助,请参阅 创建密钥

Java

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

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

有关详细信息,请参阅 Amazon SDK for .NET 中的 CreateKey 方法

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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 create_key 方法

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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 create_key 实例方法。

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

有关详细信息,请参阅 Amazon SDK for PHP 中的 CreateKey 方法

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

有关详细信息,请参阅 Node.js 软件开发工具包中的 create Amazon Key 属性 JavaScript

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

要在中创建 KMS 密钥 PowerShell,请使用 New-KmsKey cmdlet。

# Create a KMS key $desc = 'Key for protecting critical data' New-KmsKey -Description $desc

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

生成数据密钥

要生成对称数据密钥,请使用GenerateDataKey操作。此操作将返回一个明文数据密钥以及以您指定的对称加密 KMS 密钥加密的该数据密钥的副本。您必须在每个命令中指定 KeySpecNumberOfBytes (但不能同时指定这两者)。

在使用数据密钥加密数据如需帮助,请参阅 Amazon Encryption SDK。您还可以使用数据密钥进行 HMAC 操作。

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

Java

有关详细信息,请参阅《Amazon SDK for JavaAPI 参考》中的generateDataKey 方法

// Generate a data key // // Replace the following example key ARN with any valid key identfier 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#

有关详细信息,请参阅 Amazon SDK for .NET 中的 GenerateDataKey 方法

// Generate a data key // // Replace the following example key ARN with any valid key identfier 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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 generate_data_key 方法

# Generate a data key # Replace the following example key ARN with any valid key identfier 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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 generate_data_key 实例方法。

# Generate a data key # Replace the following example key ARN with any valid key identfier key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.generate_data_key({ key_id: key_id, key_spec: 'AES_256' }) plaintext_key = response.plaintext encrypted_key = response.ciphertext_blob
PHP

有关详细信息,请参阅 Amazon SDK for PHP 中的 GenerateDataKey 方法

// Generate a data key // // Replace the following example key ARN with any valid key identfier $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

有关详细信息,请参阅 Node.js Amazon 软件开发工具包 JavaScript 中的generateDataKey 属性

// Generate a data key // // Replace the following example key ARN with any valid key identfier 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; ... } });
PowerShell

要生成对称数据密钥,请使用 new-DataKey KMS cmdlet。

在输出中,纯文本密钥(在Plaintext属性中)和加密密钥(在CiphertextBlob属性中)是MemoryStream对象。要将它们转换为字符串,请使用MemoryStream类的方法,或者使用将MemoryStream对象转换为字符串的 cmdlet 或函数,例如 Convert 模块中的 ConvertFrom-MemoryStreamConvertFrom-Base64 函数。

# Generate a data key # Replace the following example key ARN with any valid key identfier $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' $keySpec = 'AES_256' $response = New-KmsDataKey -KeyId $keyId -KeySpec $keySpec $plaintextKey = $response.Plaintext $encryptedKey = $response.CiphertextBlob

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

查看 Amazon KMS key

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

DescribeKey 未获得别名。要获取别名,请使用ListAliases操作。有关示例,请参阅使用别名

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

有关在 Amazon KMS 控制台中查看 KMS 密钥的帮助,请参阅 查看密钥

Java

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

// Describe a KMS key // // Replace the following example key ARN with any valid key identfier 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#

有关详细信息,请参阅 Amazon SDK for .NET 中的 DescribeKey 方法

// Describe a KMS key // // Replace the following example key ARN with any valid key identfier 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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 describe_key 方法

# Describe a KMS key # Replace the following example key ARN with any valid key identfier key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kms_client.describe_key( KeyId=key_id )
Ruby

有关详细信息,请参阅 Amazon SDK for Ruby 中的 describe_key 实例方法。

# Describe a KMS key # Replace the following example key ARN with any valid key identfier key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.describe_key({ key_id: key_id })
PHP

有关详细信息,请参阅 Amazon SDK for PHP 中的 DescribeKey 方法

// Describe a KMS key // // Replace the following example key ARN with any valid key identfier $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->describeKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 Node.js 软件开发工具包中的 Amazon describe K JavaScript ey 属性。

// Describe a KMS key // // Replace the following example key ARN with any valid key identfier const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.describeKey({ KeyId }, (err, data) => { ... });
PowerShell

要获取有关 KMS 密钥的详细信息,请使用 Get-KmsKey cmdlet。

# Describe a KMS key # Replace the following example key ARN with any valid key identfier $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' Get-KmsKey -KeyId $keyId

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

获取 KMS 密钥的密钥 ID 和密钥 ARN

要获取的密钥 ID密钥 ARNAmazon KMS keys,请使用ListKeys操作。这些示例使用可选 Limit 参数,该参数设置在每个调用中返回的最大 KMS 密钥数。有关在 Amazon KMS 操作中识别 KMS 密钥的帮助信息,请参阅 密钥标识符 (KeyId)

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

有关在 Amazon KMS 控制台中查找密钥 ID 和密钥 ARN 的帮助,请参阅查找密钥 ID 和密钥 ARN

Java

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

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

有关详细信息,请参阅 Amazon SDK for .NET 中的 ListKeys 方法

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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 list_keys 方法

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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 list_keys 实例方法。

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

有关详细信息,请参阅 Amazon SDK for PHP 中的 ListKeys 方法

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

有关详细信息,请参阅 Node.js 软件开发工具包中的 list Amazon Keys 属性 JavaScript

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

要获取账户和区域中所有 KMS 密钥的密钥 ID 和密钥 ARN,请使用 Get -KmsKeyList cmdlet

为限制输出对象的数量,此示例使用 Select-Object cmdlet,而不是 Limit 参数,该参数在列表 cmdlet 中将被弃用。有关在 Amazon Tools for PowerShell 中分页输出的帮助,请参阅使用 Amazon Tools for PowerShell 的输出分页

# List KMS keys in this account $limit = 10 Get-KmsKeyList | Select-Object -First $limit

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

启用 Amazon KMS keys

要启用已禁用Amazon KMS key,请使用EnableKey操作。

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

有关在 Amazon KMS 控制台中启用和禁用 KMS 密钥的帮助,请参阅 启用和禁用密钥

Java

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

// Enable a KMS key // // Replace the following example key ARN with a valid key ID or key 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#

有关详细信息,请参阅 Amazon SDK for .NET 中的 EnableKey 方法

// Enable a KMS key // // Replace the following example key ARN with a valid key ID or key 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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 enable_key 方法

# Enable a KMS key # Replace the following example key ARN with a valid key ID or key 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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 enable_key 实例方法。

# Enable a KMS key # Replace the following example key ARN with a valid key ID or key ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.enable_key({ key_id: key_id })
PHP

有关详细信息,请参阅 Amazon SDK for PHP 中的 EnableKey 方法

// Enable a KMS key // // Replace the following example key ARN with a valid key ID or key ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->enableKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 Node.js 软件开发工具包中的 Amazonenable K JavaScript ey 属性。

// Enable a KMS key // // Replace the following example key ARN with a valid key ID or key ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.enableKey({ KeyId }, (err, data) => { ... });
PowerShell

要启用 KMS 密钥,请使用 En able-KmsKey cmdlet。

# Enable a KMS key # Replace the following example key ARN with a valid key ID or key ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' Enable-KmsKey -KeyId $keyId

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

禁用 Amazon KMS key

要禁用 KMS 密钥,请使用DisableKey操作。禁用 KMS 密钥可防止其在加密操作中使用。

在需要客户端对象的语言中,这些示例使用您在 创建客户端 中创建的 Amazon KMS 客户端对象。

有关在 Amazon KMS 控制台中启用和禁用 KMS 密钥的帮助,请参阅 启用和禁用密钥

Java

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

// Disable a KMS key // // Replace the following example key ARN with a valid key ID or key 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#

有关详细信息,请参阅 Amazon SDK for .NET 中的 DisableKey 方法

// Disable a KMS key // // Replace the following example key ARN with a valid key ID or key 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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 disable_key 方法

# Disable a KMS key # Replace the following example key ARN with a valid key ID or key 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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 disable_key 实例方法。

# Disable a KMS key # Replace the following example key ARN with a valid key ID or key ARN key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' response = kmsClient.disable_key({ key_id: key_id })
PHP

有关详细信息,请参阅 Amazon SDK for PHP 中的 DisableKey 方法

// Disable a KMS key // // Replace the following example key ARN with a valid key ID or key ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $result = $KmsClient->disableKey([ 'KeyId' => $keyId, ]);
Node.js

有关详细信息,请参阅 Node.js 软件开发工具包中的 Amazon d isable K JavaScript ey 属性。

// Disable a KMS key // // Replace the following example key ARN with a valid key ID or key ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; kmsClient.disableKey({ KeyId }, (err, data) => { ... });
PowerShell

要禁用 KMS 密钥,请使用禁用-KmsKey cmdlet。

# Disable a KMS key # Replace the following example key ARN with a valid key ID or key ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' Disable-KmsKey -KeyId $keyId

要使用 Amazon KMS PowerShell cmdlet,请安装 aws.Tools。 KeyManagementService模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南