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

处理授予

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

创建授予

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

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

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

Java

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

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

有关详细信息,请参阅 Amazon SDK for Python (Boto3) 中的 create_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 = kms_client.create_grant( KeyId=key_id, GranteePrincipal=grantee_principal, Operations=operation )
Ruby

有关详细信息,请参阅 Amazon SDK for Ruby 中的 create_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

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

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

查看授予

要获取有关对 KMS 密钥的授权的详细信息,请使用 ListGrants 操作。

注意

GranteePrincipal 响应中的 ListGrants 字段通常包含授权的被授权者委托人。但是,当授权中的被授权者委托人是 Amazon 服务时,GranteePrincipal 字段包含服务委托人,该委托人可能表示多个不同的被授权者委托人。

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

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

Java

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

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

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

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

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

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

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

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

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

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

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

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

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

Java

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

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

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

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

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

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

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

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

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

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

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

停用授予

要停用 KMS 密钥的授权,请使用 RetireGrant 操作。在使用完授予后,您应停用它,以将其清除。

要停用授权,请提供授权令牌,或同时提供授权 ID 和 KMS 密钥 ID。对于此操作,KMS 密钥 ID 必须是 KMS 密钥的 Amazon Resource Name (ARN)。授权令牌由 CreateGrant 操作返回。授权 ID 由 CreateGrant 和 ListGrants 操作返回。

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

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

Java

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

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

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

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

有关详细信息,请参阅 Amazon SDK for Ruby 中的 retire_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

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

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

撤销授予

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

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

Java

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

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

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

Python

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

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

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

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

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

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

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