IAM policy 的最佳实践 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

IAM policy 的最佳实践

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

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

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

使用密钥策略

尽可能在影响一个 KMS 密钥的密钥策略中提供权限,而不是在可应用于许多 KMS 密钥的 IAM policy 中提供权限,包括其他 Amazon Web Services 账户 中的权限。这对于诸如 kms: PutKeyPolicy 和 kms: 之类的敏感权限尤其重要,对于决定如何保护数据的加密操作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 密钥不切实际时,请使用限制对可信 Amazon Web Services 账户 和区域中的 KMS 密钥的访问的 Resource 值,如 arn:aws:kms:region:account:key/*。或者限制对可信 Amazon Web Services 账户 的所有区域 (*) 中的 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": "*") 中的通配符将权限应用于所有 Amazon Web Services 账户 中委托人账户有权使用的所有 KMS 密钥。这可能包括:其他 Amazon Web Services 账户 中的 KMS 密钥,以及委托人账户中的 KMS 密钥。

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

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

何时使用 "Resource": "*"

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

注意

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

 

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