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

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

管理授权

具有所需权限的委托人可以查看、使用和删除(停用或撤销)授权。要优化创建和管理授权的权限,Amazon KMS 支持多个策略条件,您可在密钥策略和 IAM policy 中使用它们。

控制对授权的访问

您可以控制对在密钥策略、IAM policy 和授权中创建和管理授权的操作的访问权限。从授权中获得 CreateGrant 权限的委托人具有更有限的授权权限

API 操作 密钥策略或 IAM policy 授权
CreateGrant
ListGrants -
ListRetirableGrants -
停用授权 (有限。请参阅 停用和撤销授权
RevokeGrant -

您在使用密钥策略或 IAM policy 以控制对创建和管理授权的操作的访问时,可以使用一个或多个以下策略条件来限制权限。Amazon KMS 支持以下所有与授权相关的条件键。有关详细信息和示例,请参阅 Amazon KMS 条件键

kms: GrantConstraintType

允许委托人仅在授权包含指定的授权约束时创建授权。

kms: GrantIsFor AWSResource

允许仅在Amazon 服务与 Amazon KMS 集成时调用 CreateGrantListGrantsRevokeGrant 的主体代表主体发送请求。

kms: GrantOperations

允许委托人创建授权,但将授权限制为指定操作。

kms: GranteePrincipal

允许委托人仅为指定的被授权者委托人创建授权。

kms: RetiringPrincipal

允许委托人仅在授权指定特定的停用委托人时创建授权。

查看授权

要查看授权,请使用ListGrants操作。您必须指定授权所适用的 KMS 密钥。您还可以按授权 ID 或被授权者委托人筛选授权列表。有关更多示例,请参阅查看授予

要查看Amazon Web Services 账户和地区中具有特定退休本金的所有补助金,请使用ListRetirableGrants。响应包括每项授权的详细信息。

注意

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

例如,以下命令列出 KMS 密钥的所有授权。

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572216195.0, "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Operations": [ "Decrypt" ] } ] }

使用授权令牌

Amazon KMS API 采用最终一致性模型。创建授权时,授权可能不会立即生效。可能会出现短暂的延迟,才能使更改在整个 Amazon KMS 中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播,但在某些情况下,可能需要几分钟。更改完全传播到整个系统后,被授权者主体可以使用授权中的权限,而无需指定授权令牌或授权的任何证据。然而,如果授权太新,尚未被所有 Amazon KMS 知晓,则请求可能会失败,并显示 AccessDeniedException 错误。

要立即使用新授权中的权限,请使用该授权的授权令牌。保存CreateGrant操作返回的授权令牌。然后为 Amazon KMS 操作提交请求中的授权令牌。您可以将授权令牌提交给任何 Amazon KMS 授权操作,且您可以在同一请求中提交多个授权令牌。

以下示例使用该CreateGrant操作创建允许GenerateDataKey解密操作的授权。它将保存 CreateGranttoken 变量中返回的授权令牌。然后,在调用 GenerateDataKey 操作时,它使用 token 变量中的授权令牌。

# Create a grant; save the grant token $ token=$(aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/appUser \ --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \ --operations GenerateDataKey Decrypt \ --query GrantToken \ --output text) # Use the grant token in a request $ aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ –-key-spec AES_256 \ --grant-tokens $token

具有权限的主体也可以使用授权令牌来停用新授权,即使授权在整个 Amazon KMS 中可用之前。(RevokeGrant 操作不接受授权令牌。) 有关更多信息,请参阅 停用和撤销授权

# Retire the grant $ aws kms retire-grant --grant-token $token

停用和撤销授权

要删除某个授权,请停用或撤销该授权。

RetireGrantRevokeGrant操作彼此非常相似。这两个操作都会删除授权,从而消除授权允许的权限。这些操作之间的主要区别在于它们是如何获得授权的。

RevokeGrant

与大多数 Amazon KMS 操作一样,对 RevokeGrant 操作的访问通过密钥策略IAM policy 控制。任何kms:RevokeGrant获得许可的委托人都可以调用RevokeGrant该 API。该权限包含在授予给密钥管理员的标准权限中。通常,管理员会撤销授权以拒绝授权允许的权限。

RetireGrant

授权决定谁可以停用它。此设计使您能够控制授权的生命周期,而无需更改密钥策略或 IAM policy。通常,当您使用授权的权限时,将停用授权。

授权可以通过授权中指定的可选停用委托人停用。被授权者委托人还可以停用授权,但只有当他们也是停用委托人或者授权包括 RetireGrant 操作时。作为备份,在其中创建授权的 Amazon Web Services 账户 可以停用授权。

有一个可用于 IAM policy 的 kms:RetireGrant 权限,但它具有有限的实用工具。授权中指定的委托人无需 kms:RetireGrant 权限即可停用授权。单独的 kms:RetireGrant 权限不允许委托人停用授权。kms:RetireGrant 权限在密钥策略中无效。

  • 若要拒绝停用授权的权限,您可以使用具有 kms:RetireGrant 权限的 Deny 操作。

  • 拥有 KMS 密钥的 Amazon Web Services 账户可以将 kms:RetireGrant 权限委托给账户中的 IAM 主体。

  • 如果停用主体是其他 Amazon Web Services 账户,则该其他账户中的管理员可以使用 kms:RetireGrant 将停用授权的权限委托给该账户中的 IAM 主体。

Amazon KMS API 采用最终一致性模型。当您创建、停用或撤销授权时,可能会出现短暂的延迟,才能使更改在整个 Amazon KMS 中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播,但在某些情况下,可能需要几分钟。如果您需要在某个新授权可在整个 Amazon KMS 中使用前立即删除它,请使用授予令牌停用该授权。您不能使用授权令牌撤销授权。