本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS KMS 中的授权
授权是一种策略分析工具,允许 AWS 主体将 KMS 密钥用于加密操作中。它还可以让他们查看 KMS 密钥 (DescribeKey
) 以及创建和管理授权。在授权访问 KMS 密钥时,将考虑授权与密钥策略和 IAM policy。授权通常用于临时权限,因为您可以在不更改密钥策略或 IAM policy 的情况下创建授权、使用其权限并将其删除。
授权通常被与 AWS KMS 集成的 AWS 服务用来加密静态数据。该服务代表账户中的用户创建授权,使用其权限,并在其任务完成后立即停用授权。有关 AWS 服务如何使用授权的详细信息,请参阅服务的用户指南或开发人员指南中的 AWS 服务如何使用 AWS KMS 或静态加密主题。
有关演示如何通过多种编程语言使用授权的代码示例,请参阅 处理授权。
关于授权
授权是一种非常灵活且有用的访问控制机制。当您为 KMS 密钥创建授权时,授权允许被授权主体对 KMS 密钥调用指定授权操作,前提是该授权中指定的所有条件都得到满足。
-
每个授权只允许访问一个 KMS 密钥。您可以在不同的 AWS 账户 中为 KMS 密钥创建授权。
-
授权可以允许访问 KMS 密钥,但不能拒绝访问。
-
每个授权都有一名被授权主体。被授权主体可以在 KMS 密钥的同一个 AWS 账户 中或在不同的账户中代表一个或多个身份。
-
授权只能允许授权操作。授权操作必须由授权中的 KMS 密钥支持。如果您指定了不支持的操作,则CreateGrant请求会失败并出现
ValidationError
异常。 -
被授权主体可以使用授权给予他们的权限,而无需指定授权,就像权限来自密钥策略或 IAM policy 一样。但是,由于 AWS KMS API 采用最终一致性模型,当您创建、停用或撤销授权时,可能会出现短暂的延迟,才能使更改在整个 AWS KMS 中可用。要立即使用授权中的权限,请使用授权令牌。
-
AWS KMS 限制每个 KMS 密钥上的授权数量。有关更多信息,请参阅 每个 KMS 密钥的授权数:50000。
在创建授权和给予其他人创建授权的权限时务必谨慎。创建授权的权限会带来安全影响,就像允许 kms: PutKeyPolicy 权限设置策略一样。
-
有权为 KMS 密钥 (
kms:CreateGrant
) 创建授权的用户可以使用授权来允许用户和角色(包括 AWS 服务)使用 KMS 密钥。委托人可以是您自己的 AWS 账户 中的身份或其他账户或组织中的身份。 -
授权只能允许 AWS KMS 运算符子集。您可以使用授权允许委托人查看 KMS 密钥,在加密操作中使用它,以及创建和停用授权。有关详细信息,请参阅授权操作。您还可以使用授权约束来限制对称加密密钥授权中的权限。
-
委托人可以获得从密钥策略或 IAM policy 创建授权的权限。通过策略获得的
kms:CreateGrant
权限的主体可以为基于 KMS 密钥的任何授权操作创建授权。这些主体无需拥有他们对密钥的授权权限。当您在策略中允许kms:CreateGrant
权限时,您可以使用策略条件来限制此权限。 -
委托人还可以获得从授权创建授权的权限。这些委托人只能委派他们被授予的权限,即使他们具有来自策略的其他权限也是如此。有关更多信息,请参阅 授予 CreateGrant 权限。
有关与授权相关的概念的帮助,请参阅授权术语。
授权概念
为了有效地使用授权,您需要了解 AWS KMS 使用的术语和概念。
- 授权约束
-
限制授权中的权限的条件。目前,AWS KMS 基于请求中的加密上下文支持将授权约束用于加密操作。有关更多信息,请参阅 使用授权约束。
- 授权 ID
-
KMS 密钥的授权的唯一标识符。您可以使用授权 ID 和密钥标识符来标识RetireGrant或RevokeGrant请求中的授权。
- 授权操作
-
您可以在授权中允许的 AWS KMS 操作。如果您指定其他操作,则CreateGrant请求会失败,但会出现
ValidationError
异常。这些也是接受授权令牌的操作。有关这些权限的详细信息,请参阅 AWS KMS 权限。这些授权操作实际上代表使用操作的权限。因此,对于
ReEncrypt
操作,您可以指定ReEncryptFrom
、ReEncryptTo
或此两者ReEncrypt*
。授权操作包括:
-
加密操作
-
其他操作
您允许的授权操作必须由授权中的 KMS 密钥支持。如果您指定了不支持的操作,则CreateGrant请求会失败并出现
ValidationError
异常。例如,对称加密 KMS 密钥的授权不能允许 Sign、Verify、GenerateMac
或VerifyMac
操作。非对称 KMS 密钥的授权不能允许生成数据密钥或数据密钥对的操作。 -
- 授权令牌
-
AWS KMS API 采用最终一致性模型。当您创建授权时,可能会出现短暂的延迟,才能使更改在整个 AWS KMS 中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播,但在某些情况下,可能需要几分钟。如果您尝试在系统中完全传播之前使用授权,您可能会收到访问被拒绝的错误。授权令牌允许您引用授权并立即使用授权权限。
授权令牌是代表授权的唯一、非秘密、长度可变的 base64 编码字符串。您可以使用授权令牌来标识任何授权操作中的授权。但是,由于令牌值是哈希摘要,它不会显示有关授权的任何详细信息。
授权令牌设计为仅在授权传播到整个 AWS KMS 中时使用。之后,被授权者委托人可以在不提供授权令牌或授权的任何其他证据的情况下使用授权中的权限。您可以随时使用授权令牌,但是一旦授权达到最终一致性,AWS KMS 就会使用授权来确定权限,而不是授权令牌。
例如,以下命令调用该GenerateDataKey操作。它使用授权令牌来表示给予调用者(被授权者委托人)对指定的 KMS 密钥调用
GenerateDataKey
的权限的授权。$
aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --grant-token $token
您还可以使用授权令牌来标识管理授权的操作中的授权。例如,即将退休的委托人可以在调用RetireGrant操作时使用授权令牌。
$
aws kms retire-grant \ --grant-token $token
CreateGrant
是返回授权令牌的唯一操作。您无法从任何其他AWS KMS操作或该操作的CloudTrail 日志事件中获取授权令牌。 CreateGrant ListGrants和ListRetirableGrants操作返回授权 ID,但不返回授权令牌。有关更多信息,请参阅 使用授权令牌。
- 被授权者委托人
-
获取授权中指定的权限的身份。每个授权都有一个被授权主体,但被授权主体可以代表多个身份。
被授权者主体可以是任何 AWS 主体,包括 AWS 账户(根)、IAM 用户、IAM 角色、联合角色或用户或代入的角色用户。被授权者委托人可以与 KMS 密钥位于同一账户中,也可以位于不同的账户中。但是,被授权者委托人不能是服务委托人、IAM 组,或 AWS组织。
注意
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 安全最佳实践。
- 停用(授权)
-
终止授权。当您使用完权限时,将停用授权。
撤销和停用授权都会删除授权。但是,停用由授权中指定的委托人完成。撤消通常由密钥管理员执行。有关更多信息,请参阅 停用和撤销授权。
- 停用委托人
-
可以停用授权的委托人。您可以在授权中指定停用委托人,但这不是必需的。停用委托人可以是任何 AWS 委托人,包括 AWS 账户、IAM 用户、IAM 角色、联合身份用户以及代入的角色用户。停用委托人可以与 KMS 密钥位于同一账户中,也可以位于不同的账户中。
注意
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 安全最佳实践。
除了授权中指定的停用委托人外,还可通过在其中创建授权的 AWS 账户 停用授权。如果授权允许
RetireGrant
操作,被授权者委托人可以停用授权。另外,AWS 账户 或 停用委托人的 AWS 账户 可以委派权限以停用相同 AWS 账户 中的 IAM 委托人的授权。有关更多信息,请参阅 停用和撤销授权。 - 撤销(授予)
-
终止授权。您将撤销积极拒绝授权允许的权限的授权。
撤销和停用授权都会删除授权。但是,停用由授权中指定的委托人完成。撤消通常由密钥管理员执行。有关更多信息,请参阅 停用和撤销授权。
- 最终一致性(用于授权)
-
AWS KMS API 采用最终一致性
模型。当您创建、停用或撤销授权时,可能会出现短暂的延迟,才能使更改在整个 AWS KMS 中可用。更改通常需要不到几秒钟的时间即可在整个系统中传播,但在某些情况下,可能需要几分钟。 如果您遇到意外错误,您可能会注意到这个短暂的延迟。例如,如果您尝试在整个 AWS KMS 知晓授权前管理一个新的授权或使用新授权中的权限,您可能会收到访问被拒绝错误。如果您停用或撤销授权,则被授权者委托人可能仍然能够在短时间内使用其权限,直到完全删除该授权为止。典型的策略是重试请求,且一些 AWS 开发工具包包括自动退避和重试逻辑。
AWS KMS 具有缓解这一短暂延迟的功能。
-
该CreateGrant操作具有一个
Name
参数,可防止重试操作创建重复的授权。
注意
授权令牌将取代授权的有效性,直到服务中的所有终端节点都使用新的授权状态更新为止。在大多数情况下,最终一致性将在五分钟内实现。
有关更多信息,请参阅AWS KMS 最终一致性。
AWS KMS 授权的最佳实践
AWS KMS 建议在创建、使用和管理授权时使用以下最佳实践。
-
将授权中的权限限制为被授权者委托人所需的权限。使用最小特权访问权限的原则。
-
使用特定的被授权者委托人(如 IAM 角色),并授予被授权委托人仅使用他们所需的 API 操作的权限。
-
使用加密上下文授权约束以确保调用方正在将 KMS 密钥用于预期目的。有关如何在请求中使用加密上下文来保护数据的详细信息,请参阅AWS安全博客 EncryptionContext中的如何使用AWS Key Management Service和保护加密数据的完整性
。 提示
尽可能使用EncryptionContextEqual授权约束。EncryptionContextSubset授权约束更难正确使用。如果您需要使用它,请仔细阅读文档并测试授权约束以确保它按预期工作。
-
删除重复的授权。重复授权具有相同的密钥 ARN、API 操作、被授权者委托人、加密上下文和名称。如果您停用或撤销原始授予,但保留重复项授权,则剩余的重复授权将构成意外的权限提升。为了在重试
CreateGrant
请求时避免重复授权,请使用 Name 参数。要检测重复的授权,请使用ListGrants操作。如果您意外创建了重复授权,请尽快停用或撤销该授权。 -
请记住,授权不会自动过期。当权限不再需要时,立即停用或撤销授权。未删除的授权可能会对加密资源造成安全风险。