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

使用密钥

本主题中的示例使用 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceCreateKeyCreateKeyRequest.html 中的 Amazon SDK for .NETCreateKey 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#createkey 中的 Amazon SDK for PHPCreateKey 方法

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

有关详细信息,请参阅适用于 Node.js 中的 JavaScript 的 Amazon 开发工具包中的 createKey 属性

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

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

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

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

生成数据密钥

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

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

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

Java

有关详细信息,请参阅 Amazon SDK for Java API 参考中的 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceGenerateDataKeyGenerateDataKeyRequest.html 中的 Amazon SDK for .NETGenerateDataKey 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#generatedatakey 中的 Amazon SDK for PHPGenerateDataKey 方法

// 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 中的 JavaScript 的 Amazon 开发工具包中的 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-KMSDataKey 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 cmdlets,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅《Amazon Tools for Windows PowerShell 用户指南》。

查看 Amazon KMS key

要获取有关 Amazon KMS key 的详细信息(包括 KMS 密钥 ARN 和密钥状态),请使用 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceDescribeKeyDescribeKeyRequest.html 中的 Amazon SDK for .NETDescribeKey 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#describekey 中的 Amazon SDK for PHPDescribeKey 方法

// 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 中的 JavaScript 的 Amazon 开发工具包中的 describeKey 属性

// 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 cmdlets,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅《Amazon Tools for Windows PowerShell 用户指南》。

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

要获取 Amazon KMS keys 的密钥 ID密钥 ARN,请使用 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceListKeysListKeysRequest.html 中的 Amazon SDK for .NETListKeys 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#listkeys 中的 Amazon SDK for PHPListKeys 方法

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

有关详细信息,请参阅适用于 Node.js 中的 JavaScript 的 Amazon 开发工具包中的 listKeys 属性

// 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 cmdlets,请安装 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceEnableKeyEnableKeyRequest.html 中的 Amazon SDK for .NETEnableKey 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#enablekey 中的 Amazon SDK for PHPEnableKey 方法

// 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 中的 JavaScript 的 Amazon 开发工具包中的 enableKey 属性

// 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 密钥,请使用 Enable-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 cmdlets,请安装 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#

有关详细信息,请参阅 https://docs.amazonaws.cn/sdkfornet/v3/apidocs/items/KeyManagementService/MKeyManagementServiceDisableKeyDisableKeyRequest.html 中的 Amazon SDK for .NETDisableKey 方法

// 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

有关详细信息,请参阅 https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-kms-2014-11-01.html#disablekey 中的 Amazon SDK for PHPDisableKey 方法

// 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 中的 JavaScript 的 Amazon 开发工具包中的 disableKey 属性

// 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 密钥,请使用 Disable-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 cmdlets,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南