本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
检查密钥策略
密钥策略是控制对 KMS 密钥访问的主要方法。每个 KMS 密钥都有且只有一个密钥策略。
如果密钥策略由默认密钥策略组成或包含默认密钥策略,则密钥策略允许账户中的 IAM 管理员使用 IAM policy 控制对 KMS 密钥的访问。此外,如果密钥策略赋予其他 AWS 账户 使用 KMS 密钥的权限,则外部账户中的 IAM 管理员可以使用 IAM policy 委派这些权限。要确定可访问 KMS 密钥的委托人的完整列表,请检查 IAM policy。
要查看您账户中的 AWS KMS 客户托管密钥 或 AWS 托管式密钥 的密钥策略,请使用 AWS KMS API 中的 AWS Management Console 或 GetKeyPolicy 操作。要查看密钥策略,必须对 KMS 密钥具备 kms:GetKeyPolicy
权限。有关查看 KMS 密钥的密钥策略的说明,请参阅 查看密钥政策。
检查密钥策略文档,并记下每个策略语句的 Principal
元素中指定的所有委托人。在具有 Allow
后果的策略语句中,Principal
元素中的 IAM 用户、IAM 角色 和 AWS 账户将拥有对此 KMS 密钥的访问权限。
注意
除非您使用条件限制密钥政策,否则不要在允许权限的任何密钥政策语句将主体设置为星号(*)。星号表示允许每个 AWS 账户 权限中的每个身份使用 KMS 密钥,除非另一个策略语句明确拒绝它。其他 AWS 账户 中的用户只要在自己的账户中拥有相应的权限,就可以使用您的 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
是指向 AWS 账户 111122223333 的 AWS 账户主体。(这不是账户的根用户。) 默认情况下,当您使用 AWS Management Console创建新的 KMS 密钥,或以编程方式创建新的 KMS 密钥但未提供密钥策略时,密钥策略文档中将包含与此类似的策略语句。
如果密钥策略文档中具有允许访问 AWS 账户的语句,则将使该账户中的 IAM policy 允许访问 KMS 密钥。这意味着,即使账户中的用户和角色未在密钥策略文档中显式列为主体,也可以访问 KMS 密钥。请务必检查所有列为委托人的 AWS 账户 中的所有 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
是指 AWS 账户 111122223333 中名为 KMSKeyAdmins 的 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
指的是 AWS 账户 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
指的是 AWS 账户 111122223333 中名为 EncryptionApp 的 IAM 角色。被授权代入此角色的主体被允许执行策略语句中列出的操作。向大多数与 AWS KMS 集成的 AWS 服务(特别是使用授权的服务)委托 KMS 密钥使用权限时,都将需要将这些操作以及示例策略语句 3 中允许的操作结合使用。Condition
元素中的 kms:GrantIsForAWSResource 值确保仅在被委托方是与 AWS KMS 集成,并使用授权进行授权的 AWS 服务时才允许委托。
要了解可以在密钥策略文档中指定委托人的所有不同方法,请参阅 IAM 用户指南中的指定委托人。
要了解有关 AWS KMS 密钥策略的更多信息,请参阅中的关键政策 AWS KMS。