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

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

处理授权

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

创建授予

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

这些示例创建了一个授权,允许能够担任该ExampleKeyUser角色的用户对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:role/ExampleKeyUser"; String operation = GrantOperation.GenerateDataKey.toString(); CreateGrantRequest request = new CreateGrantRequest() .withKeyId(keyId) .withGranteePrincipal(granteePrincipal) .withOperations(operation); CreateGrantResult result = kmsClient.createGrant(request);
C#

有关详细信息,请参阅 Amazon SDK for .NET 中的 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:role/ExampleKeyUser"; 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:role/ExampleKeyUser' 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:role/ExampleKeyUser' operation = ['GenerateDataKey'] response = kmsClient.create_grant({ key_id: key_id, grantee_principal: grantee_principal, operations: operation })
PHP

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

// 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:role/ExampleKeyUser"; $operation = ['GenerateDataKey'] $result = $KmsClient->createGrant([ 'GranteePrincipal' => $granteePrincipal, 'KeyId' => $keyId, 'Operations' => $operation ]);
Node.js

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

// 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:role/ExampleKeyUser'; 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:role/ExampleKeyUser' $operation = 'GenerateDataKey' $response = New-KMSGrant -GranteePrincipal $granteePrincipal -KeyId $keyId -Operation $operation

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

查看授予

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

注意

ListGrants 响应中的 GranteePrincipal 字段通常包含授权的被授权者委托人。但是,当授权中的被授权者委托人是 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#

有关详细信息,请参阅 Amazon SDK for .NET 中的 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"; 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

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

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

// 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-KMS cmdlet GrantList

为限制输出对象的数量,此示例使用 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 cmdlet,请安装 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#

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

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

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

// 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-KMS cmdlet GrantList

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

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

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

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

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

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

// 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 cmdlet,请安装 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"; // Replace the following example grant ID with a valid one String grantId = "grant1"; RevokeGrantRequest req = new RevokeGrantRequest().withKeyId(keyId).withGrantId(grantId); kmsClient.revokeGrant(req);
C#

有关详细信息,请参阅 Amazon SDK for .NET 中的 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"; // Replace the following example grant ID with a valid one String grantId = "grant1"; RevokeGrantRequest revokeGrantRequest = new RevokeGrantRequest() { KeyId = keyId, GrantId = grantId }; kmsClient.RevokeGrant(revokeGrantRequest);

要使用 Amazon KMS PowerShell cmdlet,请安装 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' # Replace the following example grant ID with a valid one 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' # Replace the following example grant ID with a valid one grant_id = 'grant1' response = kmsClient.revoke_grant({ key_id: key_id, grant_id: grant_id })
PHP

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

// 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 中的 AmazonrevokeGrant 属性。

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