AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

检查密钥策略

您可以通过两种方法来检查密钥策略:

  • 如果 CMK 是在 AWS 管理控制台默认视图 查看密钥策略中列出的委托人。如果您可以通过这种方法查看密钥策略,则意味着密钥策略允许使用 IAM 策略进行访问。请务必检查 IAM策略,以确定可以访问 CMK 的委托人的完整列表。

  • 您可以使用 AWS KMS API 中的 GetKeyPolicy 操作检索密钥策略文档的副本,然后检查此文档。您还可以在 AWS 管理控制台中查看策略文档。

检查密钥策略(控制台)

授权用户可以在 AWS 管理控制台的 Key Policy (密钥策略) 部分中查看和更改客户主密钥 (CMK) 的策略文档。

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)

  4. 在 CMK 的列表中,选择要检查的 CMK 的别名或密钥 ID。

  5. Key policy (密钥策略) 下,Key administrators (密钥管理员) 部分显示可管理 CMK 的 IAM 用户和角色的列表。Key users (密钥用户) 部分列出了可在加密操作中使用此 CMK 的用户、角色和 AWS 账户。

    重要

    此处列出的 IAM 用户、角色和 AWS 账户是密钥策略中向其显式授予了访问权限的对象。如果您使用 IAM 策略来允许访问 CMK,则此处未列出的其他 IAM 用户和角色可能也有权访问此 CMK。请注意检查所有 IAM 策略(位于此账户中),以确定它们是否允许访问此 CMK。

  6. (可选) 要查看密钥策略文档,请选择切换到策略视图

检查密钥策略文档 (KMS API)

您可以通过多种方法查看密钥策略文档:

  • 使用 AWS 管理控制台的密钥详细信息页面(请参阅上一部分中的说明)。

  • 要获取密钥策略文档,请在 AWS KMS API 中使用 GetKeyPolicy 操作。

检查密钥策略文档,并记下每个策略语句的 Principal 元素中指定的所有委托人。Principal 元素中的 IAM 用户、IAM 角色和 AWS 账户均可以访问此 CMK。

注意

请不要在任何允许权限的关键策略语句中将委托人设置为星号 (*)。星号向每个 AWS 账户中的每个身份授予 CMK 的使用权限,除非另一个策略语句明确拒绝此权限。其他 AWS 账户中的用户只需要他们自己账户中的相应 IAM 权限便能使用 CMK。

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

例 策略语句 1

{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }

在上述策略语句中,arn:aws:iam::111122223333:root 指的是 AWS 账户 111122223333。默认情况下,当您使用控制台创建新的 CMK 时,密钥策略文档中将存在与此语句类似的策略语句。此外,当您以编程方式创建新的 CMK 但未提供密钥策略时,它也将存在。

如果密钥策略文档中具有允许访问 AWS 账户(根用户)的语句,则将使账户中的 IAM 策略允许访问 CMK。这意味着,即使账户中的 IAM 用户和角色未在密钥策略文档中显示列为委托人,也可以访问 CMK。请务必在列为委托人的所有 AWS 账户中检查所有 IAM 策略,以确定它们是否允许访问此 CMK。

例 策略语句 2

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSKeyAdmin"}, "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": "*" }

在上述策略语句中,arn:aws:iam::111122223333:user/KMSKeyAdmin 指 AWS 账户 111122223333 中名为 KMSKeyAdmin 的 IAM 用户。该策略允许此用户执行语句中列出的操作,即用于管理 CMK 的管理操作。

例 策略语句 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": "*" }

在上述策略语句中,arn:aws:iam::111122223333:role/EncryptionApp 指 AWS 账户 111122223333 中名为 EncryptionApp 的 IAM 角色。该策略允许可以担任此角色的委托人执行语句中列出的操作,即有关使用 CMK 对数据进行加密和解密的加密操作。

例 策略语句 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}} }

在上述策略语句中,arn:aws:iam::111122223333:role/EncryptionApp 指 AWS 账户 111122223333 中名为 EncryptionApp 的 IAM 角色。该策略允许可以担任此角色的委托人执行语句中列出的操作。向大多数与 AWS 集成的 AWS KMS 服务(特别是使用授权的服务)委托 CMK 使用权限时,都需要这些操作以及示例策略语句 3 中允许的操作。Condition 元素确保仅当委托为与 AWS KMS 集成并使用授权命令进行授权的 AWS 服务时才允许委托。

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

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