IAM 策略的最佳实践
保护对 Amazon KMS keys 的访问对于您的所有 Amazon 资源的安全至关重要。KMS 密钥用于保护您的 Amazon Web Services 账户 中很多最敏感的资源。花点时间设计控制对 KMS 密钥的访问权限的密钥策略、IAM 策略、授权和 VPC 终端节点策略。
在控制对 KMS 密钥的访问的 IAM 策略语句中,使用最低权限原则。仅为 IAM 委托人授予他们对必须使用或管理的 KMS 密钥的所需权限。
- 使用密钥策略
-
尽可能在影响一个 KMS 密钥的密钥策略中提供权限,而不是在可应用于许多 KMS 密钥的 IAM 策略中提供权限,包括其他 Amazon Web Services 账户 中的权限。这对于像 kms:PutKeyPolicy 和 kms: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:
。或者限制对可信 Amazon Web Services 账户 的所有区域 (*) 中的 KMS 密钥的访问,例如region
:account
:key/*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:CreateAlias、kms:UpdateAlias、kms:DeleteAlias)必须附加到别名和 KMS 密钥。您可以使用 IAM 策略中的
"Resource": "*"
来表示别名和 KMS 密钥,或者在Resource
元素中指定别名和 KMS 密钥。有关示例,请参阅 控制对别名的访问。
本主题中的示例提供了有关设计 KMS 密钥的 IAM 策略的详细信息和指导。对于一般 Amazon KMS 最佳实践指导,请参阅 Amazon Key Management Service 最佳实践 (PDF)