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

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

处理授予

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

创建授予

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

这些示例创建一个授权,以允许账户中的 IAM 用户 Alice 对 参数标识的 调用 GenerateDataKeyCMK 操作KeyId

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

Java

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

// Create a grant // // 将以下示例键 ARN 替换为有效的键 ID 或键 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#

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

// Create a grant // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 方法适用于 Python (Boto3) 的 AWS 软件开发工具包.

# Create a grant # 将以下示例键 ARN 替换为有效的键 ID 或键 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 中的 适用于 Ruby 的 AWS 开发工具包create_grant. 实例方法。

# Create a grant # 将以下示例键 ARN 替换为有效的键 ID 或键 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

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

// Create a grant // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 属性AWS SDK for JavaScript in Node.js

// Create a grant // // 将以下示例键 ARN 替换为有效的键 ID 或键 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

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

# Create a grant # 将以下示例键 ARN 替换为有效的键 ID 或键 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

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

查看授予

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

注意

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

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

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

Java

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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#

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 方法适用于 Python (Boto3) 的 AWS 软件开发工具包.

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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 中的 适用于 Ruby 的 AWS 开发工具包list_grants. 实例方法。

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 属性AWS SDK for JavaScript in Node.js

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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

要查看 的所有AWS KMS授权的详细信息CMK,请使用 KMSGrantList cmdlet。

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

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

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

Java

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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#

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 方法适用于 Python (Boto3) 的 AWS 软件开发工具包.

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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 中的 适用于 Ruby 的 AWS 开发工具包list_grants. 实例方法。

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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

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

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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 属性AWS SDK for JavaScript in Node.js

// Listing grants on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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

要查看 的所有AWS KMS授权的详细信息CMK,请使用 KMSGrantList cmdlet。

# Listing grants on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

停用授予

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

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

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

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

Java

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

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

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

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

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

# 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 中的 适用于 Ruby 的 AWS 开发工具包retire_grant. 实例方法。

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

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

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

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

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

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

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

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

撤销授予

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

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

Java

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

// Revoke a grant on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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#

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

// Revoke a grant on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 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);

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

Python

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

# Revoke a grant on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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 中的 适用于 Ruby 的 AWS 开发工具包revoke_grant. 实例方法。

# Revoke a grant on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 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

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

// Revoke a grant on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; // 将以下示例授权 ID 替换为有效的授权 ID $grantId = "grant1"; $result = $KmsClient->revokeGrant([ 'KeyId' => $keyId, 'GrantId' => $grantId, ]);
Node.js

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

// Revoke a grant on a CMK // // 将以下示例键 ARN 替换为有效的键 ID 或键 ARN const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; // 将以下示例授权 ID 替换为有效的授权 ID const GrantId = 'grant1'; kmsClient.revokeGrant({ GrantId, KeyId }, (err, data) => { ... });
PowerShell

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

# Revoke a grant on a CMK # 将以下示例键 ARN 替换为有效的键 ID 或键 ARN $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' # 将以下示例授权 ID 替换为有效的授权 ID $grantId = 'grant1' Revoke-KMSGrant -KeyId $keyId -GrantId $grantId

要使用 AWS KMS PowerShell cmdlet,请安装 AWS.Tools.KeyManagementService 模块。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南