使用别名控制对 KMS 密钥的访问 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用别名控制对 KMS 密钥的访问

您可以根据与 KMS 密钥关联的别名来控制对 KMS 密钥的访问。为此,使用 kms:RequestAliaskms:ResourceAliases 条件键。此功能是 Amazon KMS 对基于属性的访问控制 (ABAC) 的一部分。

kms:RequestAlias 条件键基于请求中的别名允许或拒绝对 KMS 密钥的访问。kms:ResourceAliases 条件键基于与 KMS 密钥关联的别名允许或拒绝对 KMS 密钥的访问。

这些功能不允许您通过使用策略语句的 resource 元素中的别名来标识 KMS 密钥。当别名是 resource 元素的值时,策略将应用于别名资源,而不是可能与其关联的任何 KMS 密钥。

注意

标签和别名的更改最多可能需要 5 分钟的时间才能影响 KMS 密钥授权。最近的更改可能会在 API 操作中显示,然后才会影响授权。

使用别名控制对 KMS 密钥的访问权限时,请考虑以下事项:

  • 使用别名来强化最低权限访问的最佳实践。仅为 IAM 委托人授予他们对必须使用或管理的 KMS 密钥的所需权限。例如,使用别名标识用于项目的 KMS 密钥。然后授予项目团队仅使用带有项目别名的 KMS 密钥的权限。

  • 谨慎为委托人提供 kms:CreateAliaskms:UpdateAliaskms:DeleteAlias 权限,以允许他们添加、编辑和删除标签。当您使用别名控制对 KMS 密钥的访问时,更改别名可以授予委托人使用他们没有权限使用的 KMS 密钥的权限。它还可以拒绝对其他委托人执行其工作所需的 KMS 密钥的访问。

  • 查看您的 Amazon Web Services 账户 中当前有权管理别名和调整权限(如有必要)的委托人。不具有更改密钥策略或创建授权权限的密钥管理员可以控制对 KMS 密钥的访问,前提是他们有权管理别名。

    例如,控制台密钥管理员的默认密钥策略包括对 kms:CreateAliaskms:DeleteAliaskms:UpdateAlias 权限。IAM 策略可能会授予对您的 Amazon Web Services 账户 中所有 KMS 密钥的别名权限。例如,AWSKeyManagementServicePowerUser 托管策略允许委托人创建、删除和列出所有 KMS 密钥的别名,而不是更新它们。

  • 在设置依赖于别名的策略之前,请查看您的 Amazon Web Services 账户 中的 KMS 密钥上的别名。请确保您的策略仅适用于您要包含的别名。使用 CloudTrail 日志CloudWatch 告警以提示您可能会影响对您的 KMS 密钥的访问的别名更改。此外,ListAliases 响应包括每个别名的创建日期和上次更新日期。

  • 别名策略条件使用模式匹配;它们不绑定到别名的特定实例。使用基于别名的条件键的策略会影响与模式匹配的所有新别名和现有别名。如果删除并重新创建与策略条件匹配的别名,则该条件将应用于新别名,就像对旧别名一样。

kms:RequestAlias 条件键依赖于操作请求中明确指定的别名。kms:ResourceAliases 条件键取决于与 KMS 密钥关联的别名,即使它们未出现在请求中。

kms:RequestAlias

基于标识请求中的 KMS 密钥的别名,允许或拒绝对 KMS 密钥的访问。您可以在密钥策略或 IAM 策略中使用 kms:RequestAlias 条件键。它适用于使用别名来标识请求中的 KMS 密钥的操作,即加密操作DescribeKeyGetPublicKey。它对别名操作无效,例如 CreateAliasDeleteAlias

在条件键中,指定别名名称或别名名称模式。您不能指定别名 ARN

例如,以下密钥策略语句允许委托人在 KMS 密钥上使用指定的操作。权限仅在请求使用包含可标识 KMS 密钥的 alpha 别名时有效。

{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/alpha-developer" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringLike": { "kms:RequestAlias": "alias/*alpha*" } } }

以下来自授权委托人的示例请求将满足条件。但是,使用密钥 ID密钥 ARN 或者其他别名的请求将无法满足条件,即使这些值标识了相同的 KMS 密钥。

$ aws kms describe-key --key-id "arn:aws:kms:us-west-2:111122223333:alias/project-alpha"

kms:ResourceAliases

基于与 KMS 密钥关联的别名允许或拒绝访问 KMS 密钥,即使请求中未使用别名也是如此。kms:ResourceAliases 条件键让您可以指定别名或别名模式,例如 alias/test*,因此您可以在 IAM 策略中使用它来控制对同一区域中多个 KMS 密钥的访问。它对于使用 KMS 密钥的任何 Amazon KMS 操作有效。

例如,以下 IAM 策略允许委托人在两个 Amazon Web Services 账户 中的 KMS 密钥上管理自动密钥轮换。但是,该权限仅适用于与开头为 restricted 的别名相关联的 KMS 密钥。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKeyRotation", "kms:DisableKeyRotation", "kms:GetKeyRotationStatus" ], "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ], "Condition": { "ForAnyValue:StringLike": { "kms:ResourceAliases": "alias/restricted*" } } } ] }

kms:ResourceAliases 条件是资源的条件,而不是请求的。因此,未指定别名的请求仍然可以满足条件。

以下示例请求(指定匹配别名)满足条件。

$ aws kms enable-key-rotation --key-id "alias/restricted-project"

但是,下面的示例请求也满足条件,前提是指定的 KMS 密钥具有以 restricted 开头的别名,即使该别名未在请求中使用。

$ aws kms enable-key-rotation --key-id "1234abcd-12ab-34cd-56ef-1234567890ab"