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

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

IAM policy 的最佳实践

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

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

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

使用密钥策略

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

限制 CreateKey 权限

仅向需要密钥 (kms:CreateKey) 的委托人授予创建密钥 (kms:) 的权限。创建 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 密钥的Resourcearn:aws:kms:region:account:key/*值。或者限制对受信任方所有区域 (*) 的 KMS 密钥的访问权限 AWS 账户,例如arn:aws:kms:*:account:key/*

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

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

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

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

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

何时使用 "Resource": "*"

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

注意

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

 

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