IAM policy 的最佳实践 - AWS Key Management Service

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

IAM policy 的最佳实践

保护对 AWS KMS keys 的访问对于您的所有 AWS 资源的安全至关重要。KMS 密钥用于保护您的 AWS 账户 中很多最敏感的资源。花点时间设计控制对 KMS 密钥的访问权限的密钥政策、IAM 策略、授权和 VPC 端点策略。

在控制对 KMS 密钥的访问的 IAM policy 语句中,使用最低权限原则。仅为 IAM 委托人授予他们对必须使用或管理的 KMS 密钥的所需权限。

以下最佳实践适用于控制 AWS KMS 密钥和别名访问权限的 IAM policy。有关一般性的 IAM policy 最佳实践,请参阅《IAM 用户指南》中的 IAM 安全最佳实践

使用密钥策略

尽可能在影响一个 KMS 密钥的密钥策略中提供权限,而不是在可应用于许多 KMS 密钥的 IAM policy 中提供权限,包括其他 AWS 账户 中的权限。这对于像 kms:PutKeyPolicykms:ScheduleKeyDeletion 之类的敏感权限尤其重要,而且也适用于确定如何保护您的数据的加密操作。

限制 CreateKey 权限

将创建密钥的权限 (kms:CreateKey) 仅授予需要它的委托人。创建 KMS 密钥的委托人还会设置其密钥策略,以便他们可以授予自己和其他人使用和管理他们创建的 KMS 密钥的权限。允许此权限时,请考虑通过使用策略条件限制它。例如,您可以使用 kms:KeySpec 条件来限制对称加密 KMS 密钥的权限。

在 IAM policy 中指定 KMS 密钥

最佳实践是在策略语句的 Resource 元素中指定权限所应用到的每个 KMS 密钥的密钥 ARN。此实践限制委托人需要的 KMS 密钥的权限。例如,此 Resource 元素仅列出主体需要使用的 KMS 密钥。

"Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ]

当指定 KMS 密钥不切实际时,请使用限制对可信 AWS 账户 和区域中的 KMS 密钥的访问的 Resource 值,如 arn:aws:kms:region:account:key/*。或者限制对可信 AWS 账户 的所有区域 (*) 中的 KMS 密钥的访问,例如 arn:aws:kms:*:account:key/*

您无法使用密钥 ID别名名称或者别名 ARN 表示 IAM policy 的 Resource 字段中的 KMS 密钥。如果您指定别名 ARN,则策略将应用于别名,而不是 KMS 密钥。有关别名的 IAM policy 的信息,请参阅。控制对别名的访问

在 IAM policy 中避免使用 "Resource": "*"

谨慎地使用通配符 (*)。在密钥策略中,Resource 元素中的通配符表示密钥策略附加到的 KMS 密钥。但是,在 IAM policy 中,单独出现在 Resource 元素 ("Resource": "*") 中的通配符将权限应用于所有 AWS 账户 中委托人账户有权使用的所有 KMS 密钥。这可能包括:其他 AWS 账户 中的 KMS 密钥,以及委托人账户中的 KMS 密钥。

例如,要在另一个 AWS 账户 中使用 KMS 密钥,委托人需要来自外部账户中 KMS 密钥的密钥策略以及其自己账户中的 IAM policy 的权限。假设一个任意账户授予了您对其 KMS 密钥的 AWS 账户 kms:Decrypt 权限。若如此,您账户中授予角色对所有 KMS 密钥 ("Resource": "*") 的 kms:Decrypt 权限的 IAM policy 将满足要求的 IAM 部分。因此,可以担任该角色的委托人现在可以使用不可信账户中的 KMS 密钥解密密文。其操作条目显示在这两个账户的 CloudTrail 日志中。

特别是,避免在允许以下 API 操作的策略语句中使用 "Resource": "*"。可以对其他 AWS 账户 中的 KMS 密钥调用这些操作。

何时使用 "Resource": "*"

在 IAM policy 中,仅将 Resource 元素中的通配符用于需要它的权限。只有以下权限才需要 "Resource": "*" 元素。

注意

别名操作的权限(kms:CreateAliaskms:UpdateAliaskms:DeleteAlias)必须附加到别名和 KMS 密钥。您可以使用 IAM policy 中的 "Resource": "*" 来表示别名和 KMS 密钥,或者在 Resource 元素中指定别名和 KMS 密钥。有关示例,请参阅控制对别名的访问

 

本主题中的示例提供了有关设计 KMS 密钥的 IAM policy 的详细信息和指导。有关适用于所有 AWS 资源的 IAM 最佳实践,请参阅 IAM 用户指南中的 IAM 中的安全最佳实践