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