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

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

处理授予

本主题中的示例使用 Amazon KMS API 创建、查看、停用和撤销对 Amazon KMS 客户主密钥 (CMK) 的授权。有关在 Amazon KMS 中使用授权的更多详细信息,请参阅使用授权

创建授予

要为 Amazon KMS 客户主密钥创建授予,请使用 CreateGrant 操作。响应仅包括授权 ID 和授权令牌。要获取有关授权的详细信息,请使用 ListGrants 操作,如查看授予中所示。

这些示例创建了一个授权,允许账户中的 IAM 用户 Alice 调用GenerateDataKey操作在 CMK 上标识的KeyId参数。

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

Java

有关详细信息,请参阅。createGrant 方法中的Amazon SDK for JavaAPI 参考.

// Create a grant // // 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"; String granteePrincipal = "arn:aws:iam::111122223333:user/Alice"; String operation = GrantOperation.GenerateDataKey.toString(); CreateGrantRequest request = new CreateGrantRequest() .withKeyId(keyId) .withGranteePrincipal(granteePrincipal) .withOperations(operation); CreateGrantResult result = kmsClient.createGrant(request);
C#

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

// Create a grant // // 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"; String granteePrincipal = "arn:aws:iam::111122223333:user/Alice"; String operation = GrantOperation.GenerateDataKey; CreateGrantRequest createGrantRequest = new CreateGrantRequest() { KeyId = keyId, GranteePrincipal = granteePrincipal, Operations = new List<string>() { operation } }; CreateGrantResponse createGrantResult = kmsClient.CreateGrant(createGrantRequest);
Python

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

# Create a grant # 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' grantee_principal = 'arn:aws:iam::111122223333:user/Alice' operation = ['GenerateDataKey'] response = kms_client.create_grant( KeyId=key_id, GranteePrincipal=grantee_principal, Operations=operation )
Ruby

有关详细信息,请参阅 https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/KMS/Client.html#create_grant-instance_method 中的 Amazon SDK for Rubycreate_grant 实例方法。

# Create a grant # 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' grantee_principal = 'arn:aws:iam::111122223333:user/Alice' operation = ['GenerateDataKey'] response = kmsClient.create_grant({ key_id: key_id, grantee_principal: grantee_principal, operations: operation })
PHP

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

// Create a grant // // 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'; $granteePrincipal = "arn:aws:iam::111122223333:user/Alice"; $operation = ['GenerateDataKey'] $result = $KmsClient->createGrant([ 'GranteePrincipal' => $granteePrincipal, 'KeyId' => $keyId, 'Operations' => $operation ]);
Node.js

有关详细信息,请参阅。createGrant 属性中的Amazon适用于 Node.js 中的 JavaScript 的 SDK.

// Create a grant // // 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'; const GranteePrincipal = 'arn:aws:iam::111122223333:user/Alice'; const Operations: ["GenerateDataKey"]; kmsClient.createGrant({ KeyId, GranteePrincipal, Operations }, (err, data) => { ... });
PowerShell

要创建授权,请使用 New-KMSGrant cmdlet。

# Create a grant # 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' $granteePrincipal = 'arn:aws:iam::111122223333:user/Alice' $operation = 'GenerateDataKey' $response = New-KMSGrant -GranteePrincipal $granteePrincipal -KeyId $keyId -Operation $operation

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

查看授予

要获取有关对 Amazon KMS 客户主密钥的授予的详细信息,请使用 ListGrants 操作。

注意

ListGrants 响应中的 GranteePrincipal 字段通常包含授权的被授权者委托人。但是,如果授权中的被授权委托人是Amazon服务,GranteePrincipal字段包含服务委托人,它可能代表几个不同的受赠者委托人。

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

这些示例使用可选 Limits 参数,该参数确定操作返回的授权数量。

Java

有关 Java 实施的详细信息,请参阅。ListGrants 方法中的Amazon SDK for JavaAPI 参考.

// Listing grants on a CMK // // 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"; Integer limit = 10; ListGrantsRequest req = new ListGrantsRequest().withKeyId(keyId).withLimit(limit); ListGrantsResult result = kmsClient.listGrants(req);
C#

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

// Listing grants on a CMK // // 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"; int limit = 10; ListGrantsRequest listGrantsRequest = new ListGrantsRequest() { KeyId = keyId, Limit = limit }; ListGrantsResponse listGrantsResponse = kmsClient.ListGrants(listGrantsRequest);
Python

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

# Listing grants on a CMK # 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.list_grants( KeyId=key_id, Limit=10 )
Ruby

有关详细信息,请参阅 https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/KMS/Client.html#list_grants-instance_method 中的 Amazon SDK for Rubylist_grants 实例方法。

# Listing grants on a CMK # 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.list_grants({ key_id: key_id, limit: 10 })
PHP

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

// Listing grants on a CMK // // 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'; $limit = 10; $result = $KmsClient->listGrants([ 'KeyId' => $keyId, 'Limit' => $limit, ]);
Node.js

有关详细信息,请参阅。ListGrants 属性中的Amazon适用于 Node.js 中的 JavaScript 的 SDK.

// Listing grants on a CMK // // 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'; const Limit = 10; kmsClient.listGrants({ KeyId, Limit }, (err, data) => { ... });
PowerShell

要查看 CMK 的所有 Amazon KMS 授权的详细信息,请使用 Get-KMSgrantList cmdlet。

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

# Listing grants on a CMK # 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' $limit = 10 $response = Get-KMSGrantList -KeyId $keyId | Select-Object -First $limit

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

您必须在每个ListGrants运算。但是,您可以通过指定授权 ID 或被授权者委托人来进一步筛选授权列表。以下示例仅获取 CMK 的授权,其中test-engineer角色是被授予者承担者。

Java

有关 Java 实施的详细信息,请参阅。ListGrants 方法中的Amazon SDK for JavaAPI 参考.

// Listing grants on a CMK // // 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"; String grantee = "arn:aws:iam::111122223333:role/test-engineer"; ListGrantsRequest req = new ListGrantsRequest().withKeyId(keyId).withGranteePrincipal(grantee); ListGrantsResult result = kmsClient.listGrants(req);
C#

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

// Listing grants on a CMK // // 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"; String grantee = "arn:aws:iam::111122223333:role/test-engineer"; ListGrantsRequest listGrantsRequest = new ListGrantsRequest() { KeyId = keyId, GranteePrincipal = grantee }; ListGrantsResponse listGrantsResponse = kmsClient.ListGrants(listGrantsRequest);
Python

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

# Listing grants on a CMK # 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' grantee = 'arn:aws:iam::111122223333:role/test-engineer' response = kms_client.list_grants( KeyId=key_id, GranteePrincipal=grantee )
Ruby

有关详细信息,请参阅 https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/KMS/Client.html#list_grants-instance_method 中的 Amazon SDK for Rubylist_grants 实例方法。

# Listing grants on a CMK # 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' grantee = 'arn:aws:iam::111122223333:role/test-engineer' response = kmsClient.list_grants({ key_id: keyId, grantee_principal: grantee })
PHP

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

// Listing grants on a CMK // // 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'; $grantee = 'arn:aws:iam::111122223333:role/test-engineer'; $result = $KmsClient->listGrants([ 'KeyId' => $keyId, 'GranteePrincipal' => $grantee, ]);
Node.js

有关详细信息,请参阅。ListGrants 属性中的Amazon适用于 Node.js 中的 JavaScript 的 SDK.

// Listing grants on a CMK // // 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'; const Grantee = 'arn:aws:iam::111122223333:role/test-engineer'; kmsClient.listGrants({ KeyId, Grantee }, (err, data) => { ... });
PowerShell

要查看 CMK 的所有 Amazon KMS 授权的详细信息,请使用 Get-KMSgrantList cmdlet。

# Listing grants on a CMK # 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' $grantee = 'arn:aws:iam::111122223333:role/test-engineer' $response = Get-KMSGrantList -KeyId $keyId -GranteePrincipal $grantee

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

停用授予

要为 Amazon KMS 客户主密钥停用授予,请使用 RetireGrant 操作。在使用完授予后,您应停用它,以将其清除。

要停用授权,请提供授权令牌,或同时提供授权 ID 和 CMK ID。对于此操作,CMK ID 必须是 CMK 的 Amazon 资源名称 (ARN)。授权令牌由 CreateGrant 操作返回。授权 ID 由 CreateGrant 和 ListGrants 操作返回。

RetireGrant 不返回响应。要验证它是否有效,请使用 ListGrants 操作。

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

Java

有关详细信息,请参阅。retireGrant 方法中的Amazon SDK for JavaAPI 参考.

// Retire a grant // String grantToken = Place your grant token here; RetireGrantRequest req = new RetireGrantRequest().withGrantToken(grantToken); kmsClient.retireGrant(req);
C#

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

// Retire a grant // String grantToken = "Place your grant token here"; RetireGrantRequest retireGrantRequest = new RetireGrantRequest() { GrantToken = grantToken }; kmsClient.RetireGrant(retireGrantRequest);
Python

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

# Retire a grant grant_token = Place your grant token here response = kms_client.retire_grant( GrantToken=grant_token )
Ruby

有关详细信息,请参阅 https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/KMS/Client.html#retire_grant-instance_method 中的 Amazon SDK for Rubyretire_grant 实例方法。

# Retire a grant grant_token = Place your grant token here response = kmsClient.retire_grant({ grant_token: grant_token })
PHP

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

// Retire a grant // $grantToken = 'Place your grant token here'; $result = $KmsClient->retireGrant([ 'GrantToken' => $grantToken, ]);
Node.js

有关详细信息,请参阅。retireGrant 属性中的Amazon适用于 Node.js 中的 JavaScript 的 SDK.

// Retire a grant // const GrantToken = 'Place your grant token here'; kmsClient.retireGrant({ GrantToken }, (err, data) => { ... });
PowerShell

要停用授权,请使用 Disable-KMSGrant cmdlet。要获取授予令牌,请使用 New-KMSGrant cmdlet。GrantToken 参数接受一个字符串,因此您不需要转换 Read-Host cmdlet 返回的输出。

# Retire a grant $grantToken = Read-Host -Message Place your grant token here Disable-KMSGrant -GrantToken $grantToken

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

撤销授予

要撤销对 Amazon KMS 客户主密钥的授予,请使用 RevokeGrant 操作。您可以撤销授予,以显式拒绝依赖它的操作。

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

Java

有关详细信息,请参阅。revokeGrant 方法中的Amazon SDK for JavaAPI 参考.

// Revoke a grant on a CMK // // 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"; // &fake-grant-id; String grantId = "grant1"; RevokeGrantRequest req = new RevokeGrantRequest().withKeyId(keyId).withGrantId(grantId); kmsClient.revokeGrant(req);
C#

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

// Revoke a grant on a CMK // // 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"; // &fake-grant-id; String grantId = "grant1"; RevokeGrantRequest revokeGrantRequest = new RevokeGrantRequest() { KeyId = keyId, GrantId = grantId }; kmsClient.RevokeGrant(revokeGrantRequest);

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南

Python

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

# Revoke a grant on a CMK # 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' # &fake-grant-id; grant_id = 'grant1' response = kms_client.revoke_grant( KeyId=key_id, GrantId=grant_id )
Ruby

有关详细信息,请参阅 https://docs.amazonaws.cn/sdk-for-ruby/v3/api/Aws/KMS/Client.html#revoke_grant-instance_method 中的 Amazon SDK for Rubyrevoke_grant 实例方法。

# Revoke a grant on a CMK # 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' # &fake-grant-id; grant_id = 'grant1' response = kmsClient.revoke_grant({ key_id: key_id, grant_id: grant_id })
PHP

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

// Revoke a grant on a CMK // // 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'; // Replace the following example grant ID with a valid one $grantId = "grant1"; $result = $KmsClient->revokeGrant([ 'KeyId' => $keyId, 'GrantId' => $grantId, ]);
Node.js

有关详细信息,请参阅。revokeGrant 属性中的Amazon适用于 Node.js 中的 JavaScript 的 SDK.

// Revoke a grant on a CMK // // 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'; // Replace the following example grant ID with a valid one const GrantId = 'grant1'; kmsClient.revokeGrant({ GrantId, KeyId }, (err, data) => { ... });
PowerShell

要撤销授权,请使用 Revoke-KMSGrant cmdlet。

# Revoke a grant on a CMK # 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' # Replace the following example grant ID with a valid one $grantId = 'grant1' Revoke-KMSGrant -KeyId $keyId -GrantId $grantId

使用Amazon KMSPowerShell 命令管理器中,请安装Amazon. 工具。密钥管理服务模块. 有关更多信息,请参阅 Amazon Tools for Windows PowerShell 用户指南