使用别名控制对密钥的KMS访问 - AWS Key Management Service

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

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

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

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

这些功能不允许您在策略声明的resource元素中使用别名来识别KMS密钥。当别名是resource元素的值时,该策略适用于别名资源,而不是任何可能与之关联的KMS密钥。

注意

标签和别名更改最多可能需要五分钟才能影响KMS密钥授权。最近的更改可能会在影响授权之前出现在API操作中。

使用别名控制对KMS密钥的访问时,请考虑以下几点:

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

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

  • 查看您 AWS 账户 中当前有权管理别名的委托人,并在必要时调整权限。无权更改密钥策略或创建授权的密钥管理员如果有权管理别名,则可以控制对KMS密钥的访问权限。

    例如,控制台密钥管理员的默认密钥策略包括对 kms:CreateAliaskms:DeleteAliaskms:UpdateAlias 权限。IAM策略可能会为你中的所有KMS密钥提供别名权限 AWS 账户。例如,AWSKeyManagementServicePowerUser托管策略允许委托人创建、删除和列出所有KMS密钥的别名,但不允许对其进行更新。

  • 在设置依赖于别名的策略之前,请 AWS 账户查看中KMS密钥的别名。请确保您的策略仅适用于您要包含的别名。使用CloudTrail 日志CloudWatch 警报提醒您注意可能影响KMS密钥访问权限的别名更改。此外,ListAliases响应还包括每个别名的创建日期和上次更新日期。

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

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

kms: RequestAlias

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

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

例如,以下密钥策略声明允许委托人对KMS密钥使用指定的操作。只有当请求使用包含alpha标识KMS密钥的别名时,该权限才有效。

{ "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密钥的访问,即使请求中未使用别名也是如此。k ms: ResourceAliases condition 密钥允许您指定别名或别名模式alias/test*,例如,这样您就可以在IAM策略中使用它来控制对同一区域中多个KMS密钥的访问权限。它对任何使用KMS密钥的 AWS KMS 操作都有效。

例如,以下IAM策略允许委托人对KMS密钥一分为二 AWS 账户地调用指定的操作。但是,该权限仅适用于与以开头的别名关联的KMS密钥。restricted

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "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"