检查密钥策略 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

检查密钥策略

密钥策略是控制对 KMS 密钥访问的主要方法。每个 KMS 密钥都有且只有一个密钥策略。

如果密钥策略由默认密钥策略组成或包含默认密钥策略,则密钥策略允许账户中的 IAM 管理员使用 IAM policy 控制对 KMS 密钥的访问。此外,如果密钥策略赋予其他 Amazon Web Services 账户 使用 KMS 密钥的权限,则外部账户中的 IAM 管理员可以使用 IAM policy 委派这些权限。要确定可访问 KMS 密钥的委托人的完整列表,请检查 IAM policy

要查看Amazon KMS客户托管密钥或您账户Amazon 托管式密钥中的密钥政策,请在 Amazon KMS API 中使用Amazon Web Services Management Console或GetKeyPolicy操作。要查看密钥策略,必须对 KMS 密钥具备 kms:GetKeyPolicy 权限。有关查看 KMS 密钥的密钥策略的说明,请参阅 查看密钥策略

检查密钥策略文档,并记下每个策略语句的 Principal 元素中指定的所有委托人。在具有 Allow 后果的策略语句中,Principal 元素中的 IAM 用户、IAM 角色 和 Amazon Web Services 账户将拥有对此 KMS 密钥的访问权限。

注意

除非您使用条件限制密钥政策,否则不要在允许权限的任何密钥政策语句将主体设置为星号(*)。星号表示允许每个 Amazon Web Services 账户 权限中的每个身份使用 KMS 密钥,除非另一个策略语句明确拒绝它。其他 Amazon Web Services 账户 中的用户只要在自己的账户中拥有相应的权限,就可以使用您的 KMS 密钥。

以下示例使用默认密钥策略中的策略语句来演示如何执行该操作。

例 策略语句 1
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }

在策略语句 1 中,arn:aws:iam::111122223333:root 是指向 Amazon Web Services 账户 111122223333 的 Amazon 账户主体。(这不是账户的根用户。) 默认情况下,当您使用 Amazon Web Services Management Console创建新的 KMS 密钥,或以编程方式创建新的 KMS 密钥但未提供密钥策略时,密钥策略文档中将包含与此类似的策略语句。

如果密钥策略文档中具有允许访问 Amazon Web Services 账户的语句,则将使该账户中的 IAM policy 允许访问 KMS 密钥。这意味着,即使账户中的用户和角色未在密钥策略文档中显式列为主体,也可以访问 KMS 密钥。请务必检查所有列为委托人的 Amazon Web Services 账户 中的所有 IAM policy,以确定它们是否允许访问此 KMS 密钥。

例 策略语句 2
{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"}, "Action": [ "kms:Describe*", "kms:Put*", "kms:Create*", "kms:Update*", "kms:Enable*", "kms:Revoke*", "kms:List*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }

在政策声明 2 中,arn:aws:iam::111122223333:role/KMSKeyAdmins提及 Amazon Web Services 账户 111122223333 KeyAdmins 中名为 KMS 的 IAM 角色。被授权代入该角色的用户被允许执行策略语句中列出的操作,即用于管理 KMS 密钥的管理操作。

例 策略语句 3
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "*" }

在政策声明 3 中,arn:aws:iam::111122223333:role/EncryptionApp指的是在 Amazon Web Services 账户 111122223333 EncryptionApp 中命名的 IAM 角色。被授权代入此角色的主体被允许执行策略语句中列出的操作,这包括对称加密 KMS 密钥的 加密操作

例 策略语句 4
{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:ListGrants", "kms:CreateGrant", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

在政策声明 4 中,arn:aws:iam::111122223333:role/EncryptionApp指的是在 Amazon Web Services 账户 111122223333 EncryptionApp 中命名的 IAM 角色。被授权代入此角色的主体被允许执行策略语句中列出的操作。向大多数与 Amazon KMS 集成的 Amazon 服务(特别是使用授权的服务)委托 KMS 密钥使用权限时,都将需要将这些操作以及示例策略语句 3 中允许的操作结合使用。Condition元素中的 kms: GrantIsFor AWSResource 值可确保只有当委托是与授权集成Amazon KMS并使用授权进行授权的Amazon服务时,才允许委托。

要了解可以在密钥策略文档中指定委托人的所有不同方法,请参阅 IAM 用户指南中的指定委托人

要了解有关 Amazon KMS 密钥策略的更多信息,请参阅Amazon KMS 中的密钥策略