AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用授权

AWS KMS 支持两种基于资源的访问控制机制:密钥策略授权。在授权时,您可以通过编程方式向其他 AWS 委托人委派使用 KMS 客户主密钥 (CMK) 的权限。您可以使用它们来允许访问,但无法拒绝。授权通常用于提供临时权限或精细的权限。

您还可以使用密钥策略来允许其他委托人访问 CMK,但密钥策略最适合相对静态的权限分配。此外,密钥策略为 AWS 策略使用标准权限模型,其中用户可以具有或不具有权限来执行对资源的操作。例如,具有适用于 CMK 的 kms:PutKeyPolicy 权限的用户可以将 CMK 的密钥策略完全替换为他们所选择的其他密钥策略。要启用更精细的权限管理,请使用授权。

有关演示如何使用授权的代码示例,请参阅处理授予

创建授权

要创建授权,您可以调用 CreateGrant API 操作。指定 CMK、授权允许使用 CMK 的被授权委托人以及允许的操作列表。CreateGrant 操作会返回一个授权 ID,您可以在后续操作中使用它来标识授权。要自定义授权,请使用可选 Constraints 参数来定义授予约束

任何具有 CMK 上 kms:RevokeGrant 权限的用户可以撤销(取消)授权。以下任意用户均可停用授权:

  • 在其下创建授权的 AWS 账户(根用户)

  • 授权中的停用委托人(如果有)

  • 被授权委托人(如果授予包括 kms:RetireGrant 权限)

授权约束

授权约束设置被授权委托人可以执行的权限的条件。授权有两个支持的约束,均涉及到加密操作请求中的加密上下文

  • EncryptionContextEquals 指定仅在请求中加密上下文对与授权约束中加密上下文对是区分大小写的完全匹配时,应用授权。上下文对可以按任意顺序显示,不过每一对中的键和值不能有改变。

  • EncryptionContextSubset 指定仅在请求中加密上下文包含在授权约束中指定的加密上下文时,应用授权。请求中的加密上下文必须是约束中加密上下文的区分大小写的完全匹配,不过可以包括其他加密上下文对。上下文对可以按任意顺序显示,不过包括的每一对中的键和值不能有改变。

例如,设想允许 GenerateDataKeyDecrypt 操作的授权。它包括一个具有以下值的 EncryptionContextSubset 约束。

{"Department":"Finance","Classification":"Public"}

在本示例中,以下任何加密上下文值都满足 EncryptionContextSubset 约束。

  • {"Department":"Finance","Classification":"Public"}

  • {"Classification":"Public","Department":"Finance"}

  • {"Customer":"12345","Department":"Finance","Classification":"Public","Purpose":"Test"}

但是,以下加密上下文值将不满足约束,因为它们不完整,或者不包含指定对区分大小写的完全匹配。

  • {"Department":"Finance"}

  • {"department":"finance","classification":"public"}

  • {"Classification":"Public","Customer":"12345"}

在键策略中授权 CreateGrant

创建键策略来控制对 CreateGrant API 操作的访问时,您可以使用一个或多个策略条件来限制权限。AWS KMS 支持以下所有与授权相关的条件键。有关这些条件键的详细信息,请参阅 AWS KMS 条件键

授予 CreateGrant 权限

当授权包括调用 CreateGrant 操作的权限时,授权仅允许被授权委托人创建具有相同限制或更多限制的授权。

例如,考虑一个授权,该授权允许被授权委托人调用 GenerateDataKeyDecryptCreateGrant 操作。被授权主用户可以使用此权限创建授权,其中包括在父授权中指定的操作的任意子集,例如 GenerateDataKeyDecrypt。但是,它不能包含其他操作,如 ScheduleKeyDeletionReEncrypt

此外,子授权中的授权约束必须与父授权具有相同的限制或更严格的限制。例如,子授权可以添加对到父授权中的 EncryptionContextSubset 约束,但不能从中删除对。子授权可以将 EncryptionContextSubset 约束更改为 EncryptionContextEquals 约束,但不能反之。