

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

# 补助金 Amazon KMS
<a name="grants"></a>

*授权*是一种策略分析工具，允许 [Amazon 主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)将 KMS 密钥用于加密操作中。它还可以让他们查看 KMS 密钥 (`DescribeKey`) 以及创建和管理授权。在授权访问 KMS 密钥时，将考虑授权与[密钥策略](key-policies.md)和 [IAM policy](iam-policies.md)。授权通常用于临时权限，因为您可以在不更改密钥策略或 IAM policy 的情况下创建授权、使用其权限并将其删除。

与之集成的 Amazon 服务通常使用赠款 Amazon KMS 来加密您的静态数据。该服务代表账户中的用户创建授权，使用其权限，并在其任务完成后立即停用授权。有关 Amazon 服务如何使用授权的详细信息，请参阅服务用户指南或开发者指南中的*静态加密*主题。

授权是一种非常灵活且有用的访问控制机制。当您为 KMS 密钥创建授权时，授权允许被授权主体对 KMS 密钥调用指定授权操作，前提是该授权中指定的所有条件都得到满足。
+ 每个授权只允许访问一个 KMS 密钥。您可以在不同的 Amazon Web Services 账户中为 KMS 密钥创建授权。
+ 授权可以允许访问 KMS 密钥，但不能拒绝访问。
+ 每个授权都有一名[被授权主体](#terms-grantee-principal)。被授权者委托人可以代表一个或多个与 KMS 密钥 Amazon Web Services 账户 相同的身份，也可以在不同的账户中代表一个或多个身份。
+ 授权只能允许[授权操作](#terms-grant-operations)。授权操作必须由授权中的 KMS 密钥支持。如果您指定了不支持的操作，则[CreateGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateGrant.html)请求会失败并出现`ValidationError`异常。
+ 被授权主体可以使用授权给予他们的权限，而无需指定授权，就像权限来自密钥策略或 IAM policy 一样。但是，由于 Amazon KMS API 遵循[最终一致性](#terms-eventual-consistency)模型，因此当您创建、停用或撤销授权时，可能会有短暂的延迟，直到更改始终 Amazon KMS可用。要立即使用授权中的权限，[请使用授权令牌](using-grant-token.md)。
+ 授权委托人可以删除授权（[停用](#terms-retire-grant)或者[撤销](#terms-revoke-grant)它）。删除授权会清除授权允许的所有权限。您不必确定要添加或删除哪些策略来撤销授权。
+ Amazon KMS 限制每个 KMS 密钥的授权数量。有关更多信息，请参阅 [每个 KMS 密钥的授权数：50000](resource-limits.md#grants-per-key)。

在创建授权和给予其他人创建授权的权限时务必谨慎。创建授权的权限会带来安全影响，就像允许 [kms: PutKeyPolicy](https://docs.amazonaws.cn/kms/latest/APIReference/API_PutKeyPolicy.html) 权限设置策略一样。
+ 有权为 KMS 密钥创建授权的用户可以使用授权来允许用户和角色（包括 Amazon 服务`kms:CreateGrant`）使用 KMS 密钥。委托人可以是您自己的身份，也可以是其他账户 Amazon Web Services 账户 或组织中的身份。
+ 授权只能允许一部分 Amazon KMS 操作。您可以使用授权允许委托人查看 KMS 密钥，在加密操作中使用它，以及创建和停用授权。有关详细信息，请参阅[授权操作](#terms-grant-operations)。您还可以使用[授权约束](create-grant-overview.md#grant-constraints)来限制对称加密密钥授权中的权限。
+ 委托人可以获得从密钥策略或 IAM policy 创建授权的权限。通过策略获得的 `kms:CreateGrant` 权限的主体可以为基于 KMS 密钥的任何[授权操作](#terms-grant-operations)创建授权。这些主体无需拥有他们对密钥的授权权限。当您在策略中允许 `kms:CreateGrant` 权限时，您可以使用[策略条件](grant-authorization.md)来限制此权限。
+ 委托人还可以获得从授权创建授权的权限。这些主体只能委派他们被授予的权限，即使他们具有来自策略的其他权限也是如此。有关更多信息，请参阅 [授予 CreateGrant 权限](create-grant-overview.md#grant-creategrant)。

## 授权概念
<a name="grant-concepts"></a>

为了有效地使用授权，您需要了解 Amazon KMS 使用的术语和概念。

**授权约束**  <a name="terms-grant-constraint"></a>
限制授权中的权限的条件。目前， Amazon KMS 支持基于加密操作请求中的[加密上下文](encrypt_context.md)的授予限制。有关更多信息，请参阅 [使用授权约束](create-grant-overview.md#grant-constraints)。

**授权 ID**  <a name="terms-grant-id"></a>
KMS 密钥的授权的唯一标识符。您可以使用授权 ID 和[密钥标识符](concepts.md#key-id)来标识[RetireGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_RetireGrant.html)或[RevokeGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_RevokeGrant.html)请求中的授权。

**授权操作**  <a name="terms-grant-operations"></a>
您可以在授权中允许的 Amazon KMS 操作。如果您指定其他操作，则[CreateGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateGrant.html)请求会失败，但会出现`ValidationError`异常。这些也是接受[授权令牌](#grant_token)的操作。有关这些权限的详细信息，请参阅 [Amazon KMS 权限](kms-api-permissions-reference.md)。  
这些授权操作实际上代表使用操作的权限。因此，对于 `ReEncrypt` 操作，您可以指定 `ReEncryptFrom`、`ReEncryptTo` 或此两者 `ReEncrypt*`。  
授权操作包括：  
+ 加密操作
  + [Decrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_Decrypt.html)
  + [DeriveSharedSecret](https://docs.amazonaws.cn/kms/latest/APIReference/API_DeriveSharedSecret.html)
  + [Encrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_Encrypt.html)
  + [GenerateDataKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyPair](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPair.html)
  + [GenerateDataKeyPairWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [GenerateMac](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateMac.html)
  + [ReEncryptFrom](https://docs.amazonaws.cn/kms/latest/APIReference/API_ReEncrypt.html)
  + [ReEncryptTo](https://docs.amazonaws.cn/kms/latest/APIReference/API_ReEncrypt.html)
  + [Sign](https://docs.amazonaws.cn/kms/latest/APIReference/API_Sign.html)
  + [Verify](https://docs.amazonaws.cn/kms/latest/APIReference/API_Verify.html)
  + [VerifyMac](https://docs.amazonaws.cn/kms/latest/APIReference/API_VerifyMac.html)
+ 其他操作
  + [CreateGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateGrant.html)
  + [DescribeKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_DescribeKey.html)
  + [GetPublicKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GetPublicKey.html)
  + [RetireGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_RetireGrant.html)
您允许的授权操作必须由授权中的 KMS 密钥支持。如果您指定了不支持的操作，则[CreateGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateGrant.html)请求会失败并出现`ValidationError`异常。例如，对称加密 KMS 密钥的授权不能允许 [Sign](https://docs.amazonaws.cn/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.amazonaws.cn/kms/latest/APIReference/API_Verify.html)、[https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateMac.html](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateMac.html) 或 [https://docs.amazonaws.cn/kms/latest/APIReference/API_VerifyMac.html](https://docs.amazonaws.cn/kms/latest/APIReference/API_VerifyMac.html) 操作。非对称 KMS 密钥的授权不能允许生成数据密钥或数据密钥对的操作。

**授权令牌**  <a name="grant_token"></a>
 Amazon KMS API 遵循[最终一致性](#terms-eventual-consistency)模型。当您创建授权时，可能会出现短暂的延迟，才能使更改在整个 Amazon KMS中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播，但在某些情况下，可能需要几分钟。如果您尝试在系统中完全传播之前使用授权，您可能会收到访问被拒绝的错误。授权令牌允许您引用授权并立即使用授权权限。  
*授权令牌*是代表授权的唯一、非秘密、长度可变的 base64 编码字符串。您可以使用授权令牌来标识任何[授权操作](#terms-grant-operations)中的授权。但是，由于令牌值是哈希摘要，它不会显示有关授权的任何详细信息。  
授权令牌设计为仅在授权传播到整个 Amazon KMS中时使用。之后，[被授权者委托人](#terms-grantee-principal)可以在不提供授权令牌或授权的任何其他证据的情况下使用授权中的权限。您可以随时使用授权令牌，但是一旦授权最终保持一致，就 Amazon KMS 使用授权而不是授权令牌来确定权限。  
例如，以下命令调用该[GenerateDataKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKey.html)操作。它使用授权令牌来表示给予调用者（被授权者委托人）对指定的 KMS 密钥调用 `GenerateDataKey` 的权限的授权。  

```
$ aws kms generate-data-key \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
        --key-spec AES_256 \
        --grant-token $token
```
您还可以使用授权令牌来标识管理授权的操作中的授权。例如，[即将退休的委托](#terms-retiring-principal)人可以在调用[RetireGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_RetireGrant.html)操作时使用授权令牌。  

```
$ aws kms retire-grant \
        --grant-token $token
```
`CreateGrant` 是返回授权令牌的唯一操作。您无法从任何其他 Amazon KMS 操作或该操作的[CloudTrail 日志事件](ct-creategrant.md)中获取授权令牌。 CreateGrant [ListGrants](https://docs.amazonaws.cn/kms/latest/APIReference/API_ListGrants.html)和[ListRetirableGrants](https://docs.amazonaws.cn/kms/latest/APIReference/API_ListRetirableGrants.html)操作返回[授权 ID](#terms-grant-id)，但不返回授权令牌。  
有关更多信息，请参阅 [使用授权令牌](using-grant-token.md)。

**被授权者委托人**  <a name="terms-grantee-principal"></a>
获取授权中指定的权限的身份。每个授权都有一个被授权主体，但被授权主体可以代表多个身份。  
被授权者委托人可以是任何 Amazon 委托人，包括 Amazon Web Services 账户 （根）、I [AM 用户](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users.html)、[IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)[、联合角色或用户](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers.html)或代入角色用户。被授权者委托人可以与 KMS 密钥位于同一账户中，也可以位于不同的账户中。但是，被授权者委托人不能是[服务委托人](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)、[IAM 组](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html)，或 [Amazon 组织](https://docs.amazonaws.cn/organizations/latest/userguide/)。  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html)**。

**停用（授权）**  <a name="terms-retire-grant"></a>
终止授权。当您使用完权限时，将停用授权。  
撤销和停用授权都会删除授权。但是，停用由授权中指定的委托人完成。撤消通常由密钥管理员执行。有关更多信息，请参阅 [停用和撤销授权](grant-delete.md)。

**停用委托人**  <a name="terms-retiring-principal"></a>
可以[停用授权](#terms-retire-grant)的委托人。您可以在授权中指定停用委托人，但这不是必需的。即将退出的委托人可以是任何 Amazon 委托人，包括 Amazon Web Services 账户 IAM 用户、IAM 角色、联合用户和代入角色用户。停用委托人可以与 KMS 密钥位于同一账户中，也可以位于不同的账户中。  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html)**。
除了补助金中规定的退休本金外，补助金还可由设立补助金 Amazon Web Services 账户 的所在地收回。如果授权允许 `RetireGrant` 操作，[被授权者委托人](#terms-grantee-principal)可以停用授权。此外，即将退休 Amazon Web Services 账户 的委托人 Amazon Web Services 账户 或可以将撤回补助金的权限委托给同 Amazon Web Services 账户一个IAM委托人。有关更多信息，请参阅 [停用和撤销授权](grant-delete.md)。

**撤销（授予）**  <a name="terms-revoke-grant"></a>
终止授权。您将撤销积极拒绝授权允许的权限的授权。  
撤销和停用授权都会删除授权。但是，停用由授权中指定的委托人完成。撤消通常由密钥管理员执行。有关更多信息，请参阅 [停用和撤销授权](grant-delete.md)。

**最终一致性（用于授权）**  <a name="terms-eventual-consistency"></a>
 Amazon KMS API 遵循[最终一致性](https://en.wikipedia.org/wiki/Eventual_consistency)模型。当您创建、停用或撤销授权时，可能会出现短暂的延迟，才能使更改在整个 Amazon KMS中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播，但在某些情况下，可能需要几分钟。  
如果您遇到意外错误，您可能会注意到这个短暂的延迟。例如，如果您尝试管理新的授权，或者在新授权中使用这些权限 Amazon KMS，则可能会收到拒绝访问的错误。如果您停用或撤销授权，则被授权者委托人可能仍然能够在短时间内使用其权限，直到完全删除该授权为止。典型的策略是重试请求，有些策略 Amazon SDKs 包括自动退避和重试逻辑。  
Amazon KMS 具有缓解这种短暂延迟的功能。  
+ 要立即使用新授权中的权限，请使用[授权令牌](using-grant-token.md)。您可以使用授权令牌来引用任何[授权操作](#terms-grant-operations)中的授权。有关说明，请参阅[使用授权令牌](using-grant-token.md)。
+ 该[CreateGrant](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateGrant.html)操作具有防止重试操作创建重复授权的`Name`参数。
授权令牌将取代授权的有效性，直到服务中的所有终端节点都使用新的授权状态更新为止。在大多数情况下，最终一致性将在五分钟内实现。
有关更多信息，请参阅[Amazon KMS 最终一致性](accessing-kms.md#programming-eventual-consistency)。