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

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

创建密钥策略

您可以在 Amazon KMS 控制台中创建和管理密钥策略,也可以使用诸如CreateKeyReplicateKey、和之类的 Amazon KMS API操作来创建和管理密钥策略PutKeyPolicy

在 Amazon KMS 控制台中创建KMS密钥时,控制台将引导您完成基于控制台默认密钥策略创建密钥策略的步骤。使用CreateKey或时 ReplicateKeyAPIs,如果您未指定密钥策略,则这些策略将对以编程方式创建的密钥APIs应用默认密钥策略。使用时 PutKeyPolicyAPI,您需要指定密钥策略。

每个策略文档都可以有一个或多个策略语句。以下示例显示了具有一个策略语句的有效密钥策略文档。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Describe the policy statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } } ] }

密钥策略格式

密钥策略文档必须符合以下规则:

  • 最多 32KB(32768 字节)

  • 密钥策略语句中的 Sid 元素可以包含空格。(禁止在IAM政策文件的Sid元素中使用空格。)

关键策略文档只能包含以下字符:

  • 可打印ASCII字符

  • Basic Latin 和 Latin-1 Supplement 字符集中的可打印字符

  • 制表符(\u0009)、换行符(\u000A)和回车(\u000D)特殊字符

密钥策略中的元素

密钥策略文档必须有以下元素:

版本

指定密钥策略文档版本。将版本设置为 2012-10-17(最新版本)。

语句

随附策略语句。密钥策略文档必须至少包含一个语句。

每个密钥策略语句最多包含六个元素。EffectPrincipalActionResource 是必需元素。

Sid

(可选)语句标识符(Sid),是可用于描述语句的任意字符串。密钥策略中的 Sid 可以包含空格。(您不能在IAM策略Sid元素中包含空格。)

效果

(必需)确定是允许还是拒绝该策略语句中的权限。有效值为 AllowDeny。如果您不明确允许访问KMS密钥,则会隐式拒绝访问密钥。您也可以明确拒绝对KMS密钥的访问。您可以通过这种方式确保用户无法访问 CMK,即使其他策略允许访问也是如此。

主体

(必需)主题是获取策略语句中指定的权限的身份。您可以在密钥策略中将IAM用户 Amazon Web Services 账户、IAM角色和某些 Amazon 服务指定为委托人。 IAM在任何策略类型中,用户组都不是有效的委托人。

星号值,例如,"AWS": "*" 表示所有账户中的所有 Amazon 身份。

重要

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

注意

IAM最佳做法不鼓励使用具有长期凭证的IAM用户。只要有可能,就使用提供临时证书的IAM角色。有关详细信息,请参阅《IAM用户指南》IAM中的安全最佳实践

当关键政策声明中的委托人是表示为的Amazon Web Services 账户 委托人时arn:aws:iam::111122223333:root",该政策声明不允许任何IAM委托人。相反,它 Amazon Web Services 账户 允许使用IAM策略来委托密钥策略中指定的权限。[尽管在账户标识符中使用了“root”,但是格式为 arn:aws:iam::111122223333:root" 的主体并代表 Amazon 账户根用户。但是,账户主体代表账户及其管理员(包括账户根用户)。]

当委托人是另一个 Amazon Web Services 账户 或其委托人时,只有在使用KMS密钥和密钥策略的区域中启用该账户时,权限才会生效。有关默认情况下未启用的区域(“选择加入区域”)的信息,请参阅《Amazon Web Services 一般参考》 中的 Managing Amazon Web Services 区域

要允许其他用户 Amazon Web Services 账户 或其委托人使用KMS密钥,您必须在密钥策略和另一个账户的IAM策略中提供权限。有关详细信息,请参阅允许其他账户中的用户使用 KMS 密钥

操作

(必需)指定要允许或拒绝的API操作。例如,该kms:Encrypt操作对应于 “ Amazon KMS 加密” 操作。您可以在策略语句中列出多个 Action。有关更多信息,请参阅 权限参考

注意

如果密钥策略语句中缺少必要的 Action 元素,则策略语句将无效。没有Action元素的密钥策略声明不适用于任何KMS密钥。

当关键策略语句缺少其Action元素时, Amazon KMS 控制台会正确报告错误,但是即使策略语句无效,CreateKey和也会PutKeyPolicyAPIs成功。

资源

(必需)在密钥策略中,资源元素的值为"*",意思是 “此KMS密钥”。星号 ("*") 用于标识密钥政策附加到的 KMS 密钥。

注意

如果密钥策略语句中缺少必要的 Resource 元素,则策略语句将无效。没有Resource元素的密钥策略声明不适用于任何KMS密钥。

当关键策略语句缺少其Resource元素时, Amazon KMS 控制台会正确报告错误,但是即使策略语句无效,CreateKey和也会PutKeyPolicyAPIs成功。

状况

(可选)条件指定要使密钥策略生效而必须满足的要求。使用条件, Amazon 可以评估API请求的上下文以确定政策声明是否适用。

要指定条件,您可以使用预定义的条件键。 Amazon KMS 支持Amazon 全局条件键Amazon KMS 条件键。为了支持基于属性的访问控制 (ABAC), Amazon KMS 提供了根据标签和别名控制对密KMS钥的访问的条件密钥。有关详细信息,请参阅Amazon KMS 中的 ABAC

条件的格式为:

"Condition": {"condition operator": {"condition key": "condition value"}}

例如:

"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}

有关 Amazon 策略语法的更多信息,请参阅IAM用户指南中的Amazon IAM策略参考

示例密钥政策

以下示例显示了对称加密密钥的完整KMS密钥策略。在阅读本章中的密钥策略概念时,您可以将它作为参考。此密钥策略将之前默认密钥策略部分的示例策略语句合并为一个密钥策略,该密钥策略可完成以下操作:

  • 允许示例 Amazon Web Services 账户 111122223333 对密钥进行完全访问权限。KMS它允许账户及其管理员,包括账户 root 用户(用于紧急情况)使用账户中的IAM策略来允许访问KMS密钥。

  • 允许该ExampleAdminRoleIAM角色管理KMS密钥。

  • 允许ExampleUserRoleIAM角色使用KMS密钥。

{ "Id": "key-consolepolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM user Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleAdminRole" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:RotateKeyOnDemand" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }