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

IAM 策略的最佳实践

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

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

使用密钥策略

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

限制 CreateKey 权限

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

在 IAM 策略中指定 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 策略的 Resource 字段中的 KMS 密钥。如果您指定别名 ARN,则策略将应用于别名,而不是 KMS 密钥。有关别名的 IAM 策略的信息,请参阅 控制对别名的访问

在 IAM 策略中避免使用 "Resource": "*"

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

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

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

何时使用 "Resource": "*"

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

注意

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

 

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