针对 Amazon KMS 使用策略条件 - Amazon Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

针对 Amazon KMS 使用策略条件

您可以在密钥策略和 AWS Identity and Access Management 策略 (IAM 策略),它控制对Amazon KMS资源的费用。仅当条件为 True 时,策略语句才有效。例如,您可能希望策略语句仅在特定日期后生效。或者,您可能希望策略语句根据 API 请求中是否存在特定值来控制访问。

要指定条件,您可以使用预定义的条件键中的Condition元素的策略语句IAM 条件策略运算符。有些条件键通用于 Amazon,而有些条件键则特定于 Amazon KMS。

Amazon 全局条件键

Amazondefines全局条件键,它是一组策略条件键,适用于所有Amazon使用 IAM 进行访问控制的服务。您可以在Amazon KMS关键策略和 IAM 策略。

例如,您可以使用aws:PrincipalArn全局条件键,仅当请求中的委托人由条件键值中的 Amazon 资源名称 (ARN) 表示时,才允许访问客户主密钥 (CMK)。支持基于属性的访问控制(ABAC)Amazon KMS时,您可以使用AWS: Resource/标签键全局条件密钥,以允许访问具有特定标签的 CMK。

Amazon KMS 支持除以下 Amazon 全局条件键之外的所有全局条件键:

有关的信息Amazon全局条件键(包括可用的请求类型),请参阅Amazon全局条件上下文键中的IAM 用户指南。有关在 IAM 策略中使用全局条件键的示例,请参阅控制对请求的访问控制标签键中的IAM 用户指南

以下主题提供有关使用基于 IP 地址和 VPC 终端节点的条件键的特殊指导。

在具有 Amazon KMS 权限的策略中使用 IP 地址条件

您可以使用 Amazon KMS 保护您在集成 Amazon 服务中的数据。但在允许或拒绝访问 的同一策略语句中指定 IP 地址条件运算符aws:SourceIp或 Amazon KMS 条件键时,请务必小心。例如,Amazon:拒绝对的访问Amazon基于源 IP限制Amazon操作添加到来自指定 IP 范围的请求。

请考虑以下情况:

  1. 您可以附加一个策略,如Amazon:拒绝对的访问Amazon基于源 IP分配给 IAM 用户。您将aws:SourceIp 条件键的值设置为该用户公司的 IP 地址范围。此 IAM 用户还附有其他策略,允许其使用 Amazon EBS、Amazon EC2 和Amazon KMS。

  2. 用户试图将加密的 EBS 卷附加到 EC2 实例。即使用户有权使用所有相关服务,此操作也会失败并显示授权错误。

步骤 2 失败,因为Amazon KMS解密卷的加密数据密钥来自与 Amazon EC2 基础设施关联的 IP 地址。要想成功,请求必须来自始发用户的 IP 地址。由于步骤 1 中的策略明确拒绝除来自指定 IP 地址以外的所有请求,因此将不允许 Amazon EC2 对 EBS 卷的加密数据密钥进行解密。

另外,aws:sourceIP条件键是无效的,当请求来自Amazon VPC 终端节点。要限制对 VPC 终端节点(包括 Amazon KMS VPC 终端节点)的请求,请使用 aws:sourceVpceaws:sourceVpc 条件键。有关更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 终端节点 - 控制终端节点的使用

在具有 Amazon KMS 权限的策略中使用 VPC 终端节点条件

Amazon KMS支持 Amazon Virtual Private Cloud (Amazon VPC) 终端节点支持的AmazonPrivateLink。您可以使用以下全局条件键,从而控制对的访问权限Amazon KMS资源,当请求来自 VPC 或使用 VPC 终端节点时。有关详细信息,请参阅 在策略语句中使用 VPC 终端节点

  • aws:SourceVpc 将访问限制为来自指定 VPC 的请求。

  • aws:SourceVpce 将访问限制为来自指定 VPC 终端节点的请求。

如果您在允许或拒绝访问的密钥策略语句中使用这些条件键Amazon KMSCMK,您可能会无意中拒绝访问Amazon使用的服务Amazon KMS代表您.

请注意避免出现类似 IP 地址条件键示例的情况。如果将 CMK 的请求限制为 VPC 或 VPC 终端节点,则调用Amazon KMS从集成服务(如 Amazon S3 或 Amazon EBS)可能会失败。即使源请求最终来源于 VPC 或 VPC 终端节点,也会发生这种情况。

Amazon KMS 条件键

Amazon KMS提供了一组额外的预定义条件键,您可以在密钥策略和 IAM 策略中使用。这些条件键特定于 Amazon KMS。例如,您可以使用kms:EncryptionContext:context-key条件键来需要特定的加密上下文控制对Amazon KMS对称客户主密钥 (CMK)。

API 操作请求的条件

多个Amazon KMS条件键根据请求中的参数值,控制对 CMK 的访问Amazon KMSoperation. 例如,您可以使用kms:CustomerMasterKeySpec条件密钥,以允许使用CreateKey操作的值仅当CustomerMasterKeySpec中的参数CreateKey请求是RSA_4096

即使该参数未出现在请求中(例如当使用参数的默认值时),此类条件也会起作用。例如,可以使用 kms:CustomerMasterKeySpec 条件键,允许用户仅当 CustomerMasterKeySpec 参数值为 SYMMETRIC_DEFAULT(默认值)时,才能使用 CreateKey 操作。此条件允许 CustomerMasterKeySpec 参数值为 SYMMETRIC_DEFAULT 的请求,以及无 CustomerMasterKeySpec 参数的请求。

API 操作中使用的 CMK 条件

一段时间Amazon KMS条件键可以根据操作中使用的 CMK 属性来控制对操作的访问。例如,您可以使用kms:KeyOrigin条件来允许委托人调用GenerateDataKey只有当OriginCMK 的AWS_KMS。要了解某个条件键能否以这种方式使用,请参阅条件键的说明。

该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。如果将此类条件键用于未授权特定 CMK 资源的操作(如ListKeys,则该权限无效,因为永远不能满足条件。授权 ListKeys 操作时未涉及 CMK 资源,也无 CustomerMasterKeySpec 属性。

以下主题将介绍每个 Amazon KMS 条件键,并提供演示策略语法的示例策略语句。

使用带有条件键的集合运算符

当策略条件比较两组值(例如请求中的标签集和策略中的标签集)时,您需要告诉Amazon如何比较集合。IAM 定义了两个集合运算符,ForAnyValueForAllValues为此目的。仅将集合运算符用于多值条件,这需要它们。不要将集合运算符与单值条件键。与往常一样,请先测试您的策略语句,然后再在生产环境中使用它们。

条件键是单值或多值。若要确定是否Amazon KMS条件键是单值或多值,请参阅值类型列中的条件键描述。

  • 单值指标条件键在授权上下文(请求或资源)中最多具有一个值。例如,因为每个 API 调用只能源于一个Amazon账户,kms:CallerAccount是单值条件键。不要将集合运算符与单值条件键一起使用。

  • 多值指标条件键在授权上下文(请求或资源)中具有多个值。例如,由于每个 CMK 可以有多个别名,因此KMS: 资源别名可以有多个值。多值条件键需要一个集合运算符。

请注意,单值条件键和多值条件键之间的差异取决于授权上下文中的值数;而不是策略条件中的值数。

警告

使用带有单值条件键的集合运算符可以创建过于宽容(或过于限制)的策略语句。仅对多值条件键使用集合运算符。

如果您创建或更新包含ForAllValues使用 KMS: EncryptionContext:上下文键或者aws:RequestTag/tag-key条件键Amazon KMS返回以下错误消息:

OverlyPermissiveCondition: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified [encryption context or tag] or with an unspecified [encryption context or tag]. To fix, remove ForAllValues.

有关ForAnyValueForAllValues设置运算符,请参阅使用多个键和值中的IAM 用户指南。有关使用ForAllValues使用单值条件设置运算符,请参阅安全警告-对于具有单值密钥的所有值中的IAM 用户指南

kms:BypassPolicyLockoutSafetyCheck

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:BypassPolicyLockoutSafetyCheck

Boolean

单值指标

CreateKey

PutKeyPolicy

仅适用于 IAM 策略

密钥政策和策略

kms:BypassPolicyLockoutSafetyCheck 条件键基于请求中 参数的值控制对 CreateKeyPutKeyPolicyBypassPolicyLockoutSafetyCheck 操作的访问权限。

以下示例 IAM 策略语句阻止用户绕过策略锁定安全检查,方式为当当BypassPolicyLockoutSafetyCheck中的参数CreateKey请求是true.

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

您也可以使用kms:BypassPolicyLockoutSafetyCheck条件键或密钥策略中的控制对PutKeyPolicyoperation. 键策略中的以下示例策略语句阻止用户在更改 CMK 的策略时绕过策略锁定安全检查。

而不是使用显式Deny,此策略声明使用Allow使用Null 条件操作以仅当请求不含有BypassPolicyLockoutSafetyCheck参数。如果未使用此参数,则默认值为 false。此较弱的策略语句在少数有必要绕过的情况下可覆盖。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }

另请参阅

kms:CallerAccount

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:CallerAccount

字符串

单值指标

CMK 资源操作

仅密钥策略

您可以使用此条件键,允许或拒绝访问Amazonaccount. 在密钥策略中,您可以使用 Principal 元素来指定策略语句所适用的身份。Principal 元素的语法未提供指定 Amazon 账户中的所有身份的方式。但您可以通过将此条件键与指定所有 Amazon 身份的 Principal 元素相结合来实现此效果。

由于此条件仅在密钥策略中有效,因此您可以使用它控制对任何CMK 资源操作,也就是说,任何Amazon KMS操作,使用特定 CMK。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

例如,以下键策略语句演示了如何使用kms:CallerAccount条件键。此策略语句位于Amazon适用于 Amazon EBS 的托管 CMK。它结合了Principal元素,指定所有Amazon使用的身份kms:CallerAccount条件键,从而高效地向Amazon账户。它包含一个额外的Amazon KMS条件键kms:ViaService),以仅允许通过 Amazon EBS 提出的请求,进一步限制权限。有关更多信息,请参阅 kms:ViaService

{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" }

kms:CustomerMasterKeySpec

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:CustomerMasterKeySpec

字符串

单值指标

CreateKey

CMK 资源操作

IAM 策略

密钥政策和策略

kms:CustomerMasterKeySpec 条件键根据操作创建的或操作中使用的 CMK 的 CustomerMasterKeySpec 属性值,控制对操作的访问。

您可以在 IAM 策略中使用此条件键控制对CreateKey基于CustomerMasterKeySpec中的参数CreateKey请求. 例如,可以使用此条件允许用户仅创建对称 CMK 或仅创建具有 RSA 密钥的 CMK。

以下示例 IAM 策略语句使用kms:CustomerMasterKeySpec条件键,允许委托人仅当CustomerMasterKeySpec在请求中是RSA_4096

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "RSA_4096" } } }

您也可以使用kms:CustomerMasterKeySpec条件键,控制对使用或管理 CMK 的操作的访问权限CustomerMasterKeySpec属性,用于操作的 CMK。该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

例如,以下 IAM 策略允许委托人执行指定的 CMK 资源操作,但只能使用账户中的对称 CMK。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "SYMMETRIC_DEFAULT" } } }

另请参阅

kms:CustomerMasterKeyUsage

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:CustomerMasterKeyUsage

字符串

单值指标

CreateKey

CMK 资源操作

IAM 策略

密钥政策和策略

kms:CustomerMasterKeyUsage 条件键根据操作创建的或操作中使用的 CMK 的 KeyUsage 属性值,控制对操作的访问。

利用此条件键,您可以控制对CreateKey基于KeyUsage参数。KeyUsage 的有效值为 ENCRYPT_DECRYPTSIGN_VERIFY

例如,可以允许用户仅当 KeyUsageENCRYPT_DECRYPT 时才能创建 CMK,或者当 KeyUsageSIGN_VERIFY 时拒绝用户权限。

以下示例 IAM 策略语句使用 kms:CustomerMasterKeyUsage 条件键,允许用户仅当 KeyUsageENCRYPT_DECRYPT 时才能创建 CMK。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "ENCRYPT_DECRYPT" } } }

您也可以使用kms:CustomerMasterKeyUsage条件键,控制对使用或管理 CMK 的操作的访问权限KeyUsage属性,用于操作的 CMK。该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

例如,以下 IAM 策略允许委托人执行指定的 CMK 资源操作,但只能使用账户中用于签名和验证的 CMK。

{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey", "kms:GetPublicKey", "kms:ScheduleKeyDeletion" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "SIGN_VERIFY" } } }

另请参阅

kms:DataKeyPairSpec

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:DataKeyPairSpec

字符串

单值指标

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

密钥政策和策略

利用此条件键,您可以控制对GenerateDataKeyPairGenerateDataKeyPairWithoutPlaintext基于KeyPairSpec参数。例如,可以允许用户仅生成特定类型的数据密钥对。

以下示例密钥策略语句使用 kms:DataKeyPairSpec 条件键,允许用户使用 CMK 仅生成 RSA 数据密钥对。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "kms:DataKeyPairSpec": "RSA*" } } }

另请参阅

kms:EncryptionAlgorithm

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:EncryptionAlgorithm

字符串

单值指标

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥政策和策略

您可以使用 kms:EncryptionAlgorithm 条件键,根据操作中使用的加密算法,控制对加密操作的访问。对于 EncryptDecryptReEncrypt 操作,此条件键根据请求中的 EncryptionAlgorithm 参数值控制访问。对于生成数据密钥和数据密钥对的操作,则根据用于加密数据密钥的加密算法控制访问。

此条件键对于在 Amazon KMS 外部执行的操作没有影响,例如,在 Amazon KMS 外部使用非对称 CMK 密钥对中的公有密钥进行加密。

请求中的 EncryptionAlgorithm 参数

要允许用户仅将特定加密算法用于 CMK,请使用包含 Deny 效果和 StringNotEquals 条件运算符的策略语句。例如,以下示例密钥策略语句禁止可担任 ExampleRole 角色的委托人,在指定的加密操作中使用此对称 CMK,除非请求中的加密算法为 RSAES_OAEP_SHA_256

与允许用户使用特定加密算法的策略语句不同,具有双重否定的策略语句(如上例),会阻止此 CMK 的其他策略和授权允许此角色使用其他加密算法。这些区域有:Deny优先于任何密钥策略或带有Allow效果,并且优先于此 CMK 及其委托人的所有授权。

{ "Sid": "Allow only one encryption algorithm with this asymmetric CMK", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256" } } }

用于操作的加密算法

您也可以使用kms:EncryptionAlgorithm条件键,即使算法未在请求中指定,也可以根据操作中使用的加密算法控制对操作的访问。这允许您要求或禁止SYMMETRIC_DEFAULT算法,因为它是默认值,所以可能不会在请求中指定该算法。

此功能允许您使用kms:EncryptionAlgorithm条件键,控制对生成数据键和数据密钥对的操作的访问。这些操作仅使用对称 CMK 和 SYMMETRIC_DEFAULT 算法。

例如,此 IAM 策略限制其委托人只能使用对称加密。除非请求中指定的或操作中使用的加密算法为 SYMMETRIC_DEFAULT,否则策略将拒绝对示例帐户中的任何 CMK 进行加密操作的访问。INCLEDGenerateDataKey*添加GenerateDataKeyGenerateDataKeyWithoutPlaintextGenerateDataKeyPair, 和GenerateDataKeyPairWithoutPlaintext设置为权限。条件对这些操作没有影响,因为它们始终使用对称加密算法。

{ "Sid": "AllowOnlySymmetricAlgorithm", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }

另请参阅

kms:EncryptionContext:上下文键

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:EncryptionContext:context-key

字符串

单值指标

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥政策和策略

您可以使用kms:EncryptionContext:context-key条件键来控制对对称 CMK基于加密上下文在请求加密操作。使用此条件键可评估加密上下文对中的键和值。要仅评估加密上下文键或需要加密上下文,而不考虑密钥或值,请使用kms:EncryptionContextKeys条件键。

您不能在加密操作中指定加密上下文,并且包含非对称 CMK。标准的非对称加密算法Amazon KMS使用不支持加密上下文。

要使用 KMS: Entext,请执行以下操作:上下文键条件键,请将上下文键占位符与加密上下文密钥。将替换为上下文值占位符与加密上下文值。

"kms:EncryptionContext:context-key": "context-value"

例如,以下条件键指定一个加密上下文,其键为AppName值为ExampleApp(AppName = ExampleApp)。

"kms:EncryptionContext:AppName": "ExampleApp"

这是单值条件键。条件密钥中的密钥指定特定的加密上下文密钥 (上下文键)。尽管您可以在每个 API 请求中包含多个加密上下文对,但加密上下文与指定上下文键只能有一个值。例如,kms:EncryptionContext:Department条件键仅适用于具有Department密钥,以及任何给定的加密上下文对与Department键只能有一个值。

不要将集合运算符与kms:EncryptionContext:context-key条件键。如果创建具有Allow操作,kms:EncryptionContext:context-key条件键和ForAllValuesset 运算符,则条件允许没有加密上下文的请求以及带有未在策略条件中指定的加密上下文对的请求。

警告

请勿使用ForAnyValue或者ForAllValues设置运算符与此单值条件键。这些集合运算符可以创建一个策略条件,该条件不需要您打算要求的值,并允许您禁止的值。

如果您创建或更新包含ForAllValues使用 KMS: EncryptionContext:上下文键、Amazon KMS返回以下错误消息:

OverlyPermissiveCondition:EncryptionContext: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified encryption context or with an unspecified encryption context. To fix, remove ForAllValues.

要需要特定的加密上下文对,请使用kms:EncryptionContext:context-key条件键与StringEquals运算符。

以下示例键策略语句允许可代入角色的委托人在GenerateDataKey请求仅在请求中的加密上下文包含AppName:ExampleApp对。允许使用其他加密上下文对。

密钥名称不区分大小写。值是否区分大小写由条件运算符确定,例如StringEquals。有关详细信息,请参阅 加密上下文条件区分大小写

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

要要求加密上下文对并禁止所有其他加密上下文对,请同时使用 KMS:加密上下文:上下文键kms:EncryptionContextKeys在策略声明。以下键策略语句使用kms:EncryptionContext:AppName条件来要求AppName=ExampleApp加密上下文对。它还使用kms:EncryptionContextKeys条件键与ForAllValues设置运算符以仅允许AppName加密上下文

这些区域有:ForAllValues设置运算符将请求中的加密上下文密钥限制为AppName。如果kms:EncryptionContextKeys使用的条件ForAllValuesset 运算符在策略语句中单独使用,则此集合运算符将允许没有加密上下文的请求。但是,如果请求没有加密上下文,kms:EncryptionContext:AppName条件将失败。有关详细信息ForAllValues设置运算符,请参阅使用多个键和值中的IAM 用户指南

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName" ] } } }

您还可以使用此条件键拒绝对特定操作的 CMK 的访问。以下示例键策略语句使用Deny效果来禁止委托人使用 CMK,如果请求中的加密上下文包含Stage=Restricted加密上下文 此条件允许使用其他加密上下文对进行请求,包括Stage键和其他值(例如Stage=Test

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": "Restricted" } } }

使用多个加密上下文对

您可以要求或禁止多个加密上下文对。您还可以需要几个加密上下文对之一。有关用于解释这些条件的逻辑的详细信息,请参阅创建具有多个键或值的条件(在 IAM 用户指南中)。

注意

此主题的早期版本显示的策略语句使用ForAnyValueForAllValues使用 KMS: EncryptionContext:上下文键条件键。将集合运算符与单值条件键可能会导致允许没有加密上下文和未指定加密上下文对的请求的策略。

例如,具有Allow效果,ForAllValues集合运算符和"kms:EncryptionContext:Department": "IT"条件密钥不会将加密上下文限制为 “部门 = IT” 对。它允许没有加密上下文的请求和具有未指定加密上下文对的请求,例如Stage=Restricted

请查看您的策略,并使用 KMS:加密上下文来消除集合运算符的任何条件:上下文键。尝试使用此格式创建或更新策略失败,并显示OverlyPermissiveCondition异常。要纠正该错误,请删除集合运算符。

要需要多个加密上下文对,请在相同条件下列出这些对。以下示例密钥策略语句需要两个加密上下文对Department=ITProject=Alpha。由于条件有不同的键(kms:EncryptionContext:Departmentkms:EncryptionContext:Project),则它们由 AND 运算符隐式连接。允许使用其他加密上下文对,但不是必需的。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" } } }

要要求一个加密上下文对或另一个加密上下文对,请将每个条件密钥放在单独的策略语句中。以下示例键策略要求Department=IT 或者 Project=Alpha对,或两者兼有。允许使用其他加密上下文对,但不是必需的。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Project": "Alpha" } } }

要要求特定的加密对并排除所有其他加密上下文对,请同时使用 KMS:加密上下文:上下文键kms:EncryptionContextKeys在策略声明。以下键策略语句使用 KMS:加密上下文:上下文键条件要求加密上下文Department=IT Project=Alpha对。它使用kms:EncryptionContextKeys条件键与ForAllValues设置运算符以仅允许DepartmentProject加密上下文

这些区域有:ForAllValues设置运算符将请求中的加密上下文密钥限制为DepartmentProject。如果在条件中单独使用,则此集合运算符将允许没有加密上下文的请求,但在此配置中,KMS: 加密上下文:上下文键在这种情况下将失败。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "Department", "Project" ] } } }

您还可以禁止多个加密上下文对。以下示例键策略语句使用Deny效果来禁止委托人使用 CMK,如果请求中的加密上下文包含Stage=Restricted或者Stage=Production.pair.

多个值 (RestrictedProduction)为相同的键(kms:EncryptionContext:Stage)通过 OR 隐式连接。有关详细信息,请参阅。具有多个键或值的条件的评估逻辑中的IAM 用户指南

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": [ "Restricted", "Production" ] } } }

加密上下文条件区分大小写

在解密操作中指定的加密上下文,与加密操作中指定的加密上下文必须是区分大小写的精确匹配。只有当加密上下文中有多个上下文对时,上下文对的顺序可以改变。

但是,在策略条件中,条件键不区分大小写。条件值是否区分大小写由您使用的策略条件运算符确定,例如 StringEqualsStringEqualsIgnoreCase

因此,由 kms:EncryptionContext: 前缀和 context-key 替换组成的条件键不区分大小写。使用此条件的策略不检查条件键任何元素的大小写。条件值(即 context-value 替换)是否区分大小写由策略条件运算符确定。

例如,以下策略语句在加密上下文包含 Appname 键时允许操作,不论其大小写如何。StringEquals 条件要求 ExampleApp 按照其指定的大小写。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }

如需要求使用区分大小写的加密上下文键,请使用 kms:EncryptionContextKeys 策略条件和区分大小写的条件运算符,例如 StringEquals。在此策略条件中,由于加密上下文键是此策略条件中的值,它是否区分大小写由条件运算符确定。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }

要求加密上下文键和值均为区分大小写的评估,请使用kms:EncryptionContextKeys和 KMS: EncryptionContext:上下文键策略条件一起放在同一策略语句中。区分大小写的条件运算符(例如StringEquals)始终适用于条件的值。加密上下文密钥(如AppName)的值kms:EncryptionContextKeys条件。加密上下文值(如ExampleApp)是 KMS: 加密上下文的值:上下文键条件。

例如,在下面的示例键策略语句中,因为StringEquals运算符区分大小写,加密上下文键和加密上下文值均区分大小写。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" }, "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

在加密上下文条件中使用变量

加密上下文对中的键和值必须是简单的文本字符串。它们不能是整数或对象,也不能是任何未完全解析的类型。如果您使用其他类型(例如整数或浮点),则 Amazon KMS 会将其解释为文本字符串。

"encryptionContext": { "department": "10103.0" }

但是,kms:EncryptionContext:context-key条件键可以是IAM 策略变量。在运行时根据请求中的值解析这些策略变量。例如,aws:CurrentTime 解析为请求的时间,aws:username 解析为调用方的友好名称。

您可以使用这些策略变量来创建一个策略语句,该语句包含的条件需要加密上下文中非常具体的信息,例如调用方的用户名。由于它包含一个变量,因此,您可以对所有能够代入该角色的用户使用相同的策略语句。您无需为每个用户编写单独的策略语句。

请考虑这样一种情况:您希望所有能够代入角色的用户都使用同一 CMK 来加密和解密其数据。但是,您希望仅允许这些用户解密其加密的数据。首先,要求对 Amazon KMS 的每个请求均包含一个加密上下文,其中键为 user,值为调用方的 Amazon 用户名,例如下面的项。

"encryptionContext": { "user": "bob" }

然后,要强制执行此要求,您可以使用与以下示例中的策略语句类似的策略语句。此策略语句向 TestTeam 角色授予使用 CMK 加密和解密数据的权限。不过,此权限仅在请求中的加密上下文包含 "user": "<username>" 对时有效。为了表示用户名,条件使用 aws:username 策略变量。

在评估请求时,调用方的用户名将替换条件中的变量。同样地,条件要求 "user": "bob"(对于“bob”)和 "user": "alice"(对于“alice”)的加密上下文。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } } }

IAM 策略变量仅能在kms:EncryptionContext:context-key条件键。不能在键中使用变量。

也可以在变量中使用提供程序特定的上下文键。这些上下文键通过使用 Web 联合身份验证来唯一标识已登录 Amazon 的用户。

与所有变量一样,这些变量只能用于 kms:EncryptionContext:context-key 策略条件,而不能用于实际加密上下文。此外,它们只能用于条件的值,而不能用于条件的键。

例如,以下键策略语句与上一个类似。不过,条件需要加密上下文,其中键为sub并且值唯一标识已登录 Amazon Cognito 用户池的用户。有关识别 Amazon Cognito 中的用户和角色的详细信息,请参阅IAM 角色中的Amazon Cognito 开发人员指南

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }

另请参阅

kms:EncryptionContextKeys

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:EncryptionContextKeys

字符串(列表)

多值指标

CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥政策和策略

您可以使用kms:EncryptionContextKeys条件键来控制对对称 CMK基于加密上下文在请求加密操作中。使用此条件键可仅评估各个加密上下文对中的键。要同时评估加密上下文中的键和值,请使用kms:EncryptionContext:context-key条件键。

您不能在加密操作中指定加密上下文,并且包含非对称 CMK。标准的非对称加密算法Amazon KMS使用不支持加密上下文。

这是多值条件。您可以在每个 API 请求中指定多个加密上下文对。kms:EncryptionContextKeys将请求中的加密上下文密钥与策略中的加密上下文密钥集进行比较。要确定如何比较这些集,必须提供ForAnyValue或者ForAllValues在策略条件下设置运算符。有关集合运算符的详细信息,请参阅使用多个键和值(在 IAM 用户指南中)。

  • ForAnyValue:请求中的至少一个加密上下文密钥必须与策略条件中的加密上下文密钥匹配。允许使用其他加密上下文密钥。如果请求没有加密上下文,则不满足条件。

  • ForAllValues:请求中的每个加密上下文密钥必须匹配策略条件中的加密上下文密钥。此集合运算符将加密上下文密钥限制为策略条件中的密钥。它不需要任何加密上下文密钥,但禁止未指定的加密上下文密钥。

以下示例键策略语句使用kms:EncryptionContextKeys条件键与ForAnyValue集运算符。此策略语句允许为指定操作使用 CMK,但只有当请求中至少有一个加密上下文对包括AppName键,而不考虑其值。

例如,此关键策略声明允许GenerateDataKey请求包含两个加密上下文对,AppName=HelperProject=Alpha,因为第一个加密上下文对满足条件。请求仅包含Project=Alpha或没有加密上下文的情况都会失败。

由于字符串等于条件操作区分大小写,此策略语句需要加密上下文键的拼写和大小写。不过您可以使用忽略键大小写的条件运算符,例如 StringEqualsIgnoreCase

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }

您也可以使用kms:EncryptionContextKeys条件键,以在使用 CMK 的加密操作中需要加密上下文(任何加密上下文)。

以下示例键策略语句使用kms:EncryptionContextKeys条件键与Null 条件操作以允许仅当 API 请求中的加密上下文不为空时访问 CMK。此条件不会检查加密上下文的键或值。它只验证加密上下文是否存在。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } } }

另请参阅

kms:ExpirationModel

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:ExpirationModel

字符串

单值指标

ImportKeyMaterial

密钥政策和策略

kms:ExpirationModel 条件键基于请求中 ExpirationModel 参数的值控制对 ImportKeyMaterial 操作的访问权限。

ExpirationModel 是可选参数,用于确定导入的密钥材料是否过期。有效值为 KEY_MATERIAL_EXPIRESKEY_MATERIAL_DOES_NOT_EXPIRE。默认值为 KEY_MATERIAL_EXPIRES

到期日期和时间由 ValidTo 参数的值确定。除非 ExpirationModel 参数的值为 KEY_MATERIAL_DOES_NOT_EXPIRE,否则 ValidTo 参数是必需的。您还可以使用 kms:ValidTo 条件键要求特定到期日期作为访问条件。

以下示例键策略语句使用kms:ExpirationModel条件键,以仅当请求包含时,允许用户在 CMK 中导入键材料ExpirationModel参数,其值为KEY_MATERIAL_DOES_NOT_EXPIRE

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }

您也可以使用kms:ExpirationModel条件键,以仅当密钥材料到期时,允许用户导入密钥材料。以下示例键策略语句使用kms:ExpirationModel条件键与Null 条件操作以仅当请求没有包含的ExpirationModel参数。“到 ExpirationModel 默认值为KEY_MATERIAL_EXPIRES

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } } }

另请参阅

kms:GrantConstraintType

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:GrantConstraintType

字符串

单值指标

CreateGrant

密钥政策和策略

利用此条件键,您可以控制对CreateGrant操作的类型基于授权约束请求中)。

创建授权时,您可以选择性地指定授权约束,以仅在存在特定加密上下文时允许授予操作权限。授权约束可以是以下两种类型之一:EncryptionContextEqualsEncryptionContextSubset。您可以使用此条件键来检查请求中包含哪种类型。

以下示例键策略语句使用kms:GrantConstraintType条件键,允许用户仅当请求包含EncryptionContextEquals授权约束。以下示例显示了密钥策略中的策略语句。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } } }

另请参阅

kms:GrantIsForAWSResource

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:GrantIsForAWSResource

Boolean

单值指标

CreateGrant

ListGrants

RevokeGrant

密钥政策和策略

允许或拒绝对CreateGrantListGrants,或者RevokeGrant操作仅当Amazon与 集成的 服务Amazon KMS代表用户调用操作。此策略条件不允许用户直接调用这些授权操作。

以下示例键策略语句使用kms:GrantIsForAWSResource条件键。允许Amazon与集成的服务Amazon KMS(例如 Amazon EBS)代表指定用户在此 CMK 上创建授权。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }

另请参阅

kms:GrantOperations

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:GrantOperations

字符串

多值指标

CreateGrant

密钥政策和策略

利用此条件键,您可以控制对CreateGrant操作基于授予操作请求中)。例如,您可以允许用户创建委托加密权限(但不委托解密权限)的授权。有关授予的更多信息,请参阅使用授权

这是多值条件kms:GrantOperations将比较CreateGrant请求添加到策略中的授权操作集。要确定如何比较这些集,必须提供ForAnyValue或者ForAllValues在策略条件下设置运算符。有关集合运算符的详细信息,请参阅使用多个键和值(在 IAM 用户指南中)。

  • ForAnyValue:请求中的至少一个授权操作必须匹配策略条件中的授权操作之一。允许使用其他授予操作。

  • ForAllValues:请求中的每个授权操作都必须匹配策略条件下的授权操作。此集合运算符将授权操作限制为策略条件中指定的操作。它不需要任何授权操作,但它禁止未指定的授权操作。

    如果请求中没有授权操作,则 ForAllValues 也会返回 true,但CreateGrant不允许它。如果Operations参数缺失或具有空值,则CreateGrant请求失败。

以下示例键策略语句使用kms:GrantOperations条件键,允许用户仅当授权操作为EncryptReEncryptTo,或同时选择两者。如果授权包括任何其他操作,CreateGrant请求失败。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } } }

如果将策略条件中的集合运算符更改为ForAnyValue,则政策声明将要求授予中至少有一个授权操作是Encrypt或者ReEncryptTo,但它允许其他授权操作,例如Decrypt或者ReEncryptFrom

另请参阅

kms:GranteePrincipal

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:GranteePrincipal

字符串

单值指标

CreateGrant

IAM 和关键策略

利用此条件键,您可以控制对CreateGrant基于GranteePrincipal参数。例如,您可以仅当 CreateGrant 请求中的被授权委托人与条件语句中指定的委托人匹配时,允许用户创建使用 CMK 的授权。

以下示例键策略语句使用kms:GranteePrincipal条件键,以仅当授权中的被授权委托人为时,允许用户创建 CMK 授权LimitedAdminRole

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } } }

另请参阅

kms:KeyOrigin

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:KeyOrigin

字符串

单值指标

CreateKey

CMK 资源操作

IAM 策略

密钥政策和策略

kms:KeyOrigin 条件键根据操作创建的或操作中使用的 CMK 的 Origin 属性值,控制对操作的访问。它作为资源条件或请求条件工作。

利用此条件键,您可以控制对CreateKey基于Origin参数。Origin 的有效值为 AWS_KMSAWS_CLOUDHSMEXTERNAL

例如,您可以允许用户仅当在 KMS (AWS_KMS),只有当关键材质在Amazon CloudHSM群集,该群集与自定义密钥存储(AWS_CLOUDHSM),或者仅当导入的密钥材料来自外部源(EXTERNAL)。

以下示例键策略语句使用kms:KeyOrigin条件键,允许用户仅当时才能创建 CMKAmazon KMS创建关键材料。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }

您也可以使用kms:KeyOrigin条件键,控制对使用或管理 CMK 的操作的访问权限Origin属性,用于操作的 CMK。该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

例如,以下 IAM 策略允许委托人执行指定的 CMK 资源操作,但只能使用账户中在自定义密钥存储中创建的 CMK。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_CLOUDHSM" } } }

另请参阅

kms:MessageType

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:MessageType

字符串

单值指标

Sign

Verify

密钥政策和策略

这些区域有:kms:MessageType条件键控制对SignVerify基于MessageType参数。MessageType 的有效值为 RAWDIGEST

例如,以下密钥策略语句使用 kms:MessageType 条件键,允许用户使用非对称 CMK 签署消息,而不是消息摘要。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } } }

另请参阅

kms:ReEncryptOnSameKey

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:ReEncryptOnSameKey

Boolean

单值指标

ReEncrypt

密钥政策和策略

利用此条件键,您可以根据请求指定的目标 CMK 是否与用于原始加密的 CMK 相同来控制对 ReEncrypt 操作的访问。

例如,以下键策略语句使用kms:ReEncryptOnSameKey条件键,以允许用户仅当目标 CMK 与用于原始加密的 CMK 相同时进行重新加密。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }

KMS: 请求别名

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:RequestAlias

字符串(列表)

单值指标

加密操作

DescribeKey

GetPublicKey

密钥政策和策略

您可以使用此条件键,以仅当请求使用特定别名标识 CMK 时,允许操作。这些区域有:kms:RequestAlias条件键控制对加密操作中使用的 CMK 的访问,GetPublicKey,或者DescribeKey基于alias来标识请求中的 CMK。此策略条件对GenerateRandom操作,因为该操作不使用 CMK 或别名。)

此条件支持基于属性的访问控制(ABAC)Amazon KMS,它允许您根据 CMK 的标签和别名控制对 CMK 的访问。您可以使用标签和别名来允许或拒绝对 CMK 的访问,而无需更改策略或授权。有关详细信息,请参阅 使用 ABACAmazon KMS

要在此策略条件下指定别名,请使用别名之外的压缩算法(例如alias/project-alpha或别名模式(如alias/*test*。您不能指定别名 ARN设置为此条件键的值。

为了满足此条件,KeyId参数必须是匹配的别名名名或别名 ARN。如果请求使用不同的密钥标识符,即使标识相同的 CMK,它也不能满足条件。

例如,以下键策略语句允许委托人调用GenerateDataKey操作。但是,仅当KeyId参数是alias/finance-key或带有该别名名称的别名 ARN,例如arn:aws:kms:us-west-2:111122223333:alias/finance-key

{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/developer" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:RequestAlias": "alias/finance-key" } } }

您不能使用此条件键控制对别名操作(例如CreateAlias或者DeleteAlias。有关控制别名操作访问权限的信息,请参阅控制对别名的访问

KMS: 资源别名

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:ResourceAliases

字符串(列表)

多值指标 CMK 资源操作

仅适用于 IAM 策略

使用此条件键,可根据别名与 CMK 关联的值。该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

一个别名在Amazon帐户和区域,但是此条件允许您控制对同一区域中多个 CMK 的访问(使用StringLike比较运算符)或多个不同的 CMKAmazon每个账户的区域。有关详细信息,请参阅 使用 ABACAmazon KMS

注意

这些区域有:KMS: 资源别名条件仅当 CMK 符合每个 CMK 的别名配额. 如果 CMK 超出此配额,则由kms:ResourceAliases条件被拒绝访问 CMK。

要在此策略条件下指定别名,请使用别名之外的压缩算法(例如alias/project-alpha或别名模式(如alias/*test*。您不能指定别名 ARN设置为此条件键的值。要满足条件,操作中使用的 CMK 必须具有指定的别名。在操作请求中是否或如何识别 CMK 并不重要。

这是一个多值条件键,用于将与 CMK 关联的别名集与策略中的别名集进行比较。要确定如何比较这些集,必须提供ForAnyValue或者ForAllValues在策略条件下设置运算符。有关集合运算符的详细信息,请参阅使用多个键和值(在 IAM 用户指南中)。

  • ForAnyValue:至少有一个与 CMK 关联的别名必须与策略条件中的别名匹配。允许使用其他别名。如果 CMK 没有别名,则不满足条件。

  • ForAllValues:与 CMK 关联的每个别名必须与策略中的别名匹配。此集合运算符将与 CMK 关联的别名限制为策略条件中的别名。它不需要任何别名,但它禁止未指定的别名。

例如,以下 IAM 策略语句允许委托人调用GenerateDataKey在指定的任何 CMK 上的操作Amazon与finance-key别名。(受影响 CMK 的关键策略还必须允许委托人的账户将它们用于此操作。) 指示满足条件时可能与 CMK 关联的许多别名之一是alias/finance-key,则条件使用ForAnyValue集运算符。

由于kms:ResourceAliases条件基于资源,而不是请求,对GenerateDataKey对于与finance-key别名,即使请求使用密钥 ID或者密钥 ARN来识别 CMK。

{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*", ], "Condition": { "ForAnyValue:StringEquals": { "kms:ResourceAliases": "alias/finance-key" } } }

以下示例 IAM 策略语句允许委托人启用和禁用 CMK,但仅当 CMK 的所有别名都包含”Test。” 此策略语句使用两个条件。条件ForAllValues集合运算符要求所有与CMK包括 “测试”。条件ForAnyValue集合运算符要求 CMK 至少有一个带有 “Test” 的别名。如果不使用ForAnyValue条件时,此策略语句将允许委托人使用没有别名的 CMK。

{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKey", "kms:DisableKey" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": [ { "ForAllValues:StringLike": { "kms:ResourceAliases": "alias/*Test*" } }, { "ForAnyValue:StringLike": { "kms:ResourceAliases": "alias/*Test*" } } ] }

kms:RetiringPrincipal

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:RetiringPrincipal

字符串(列表)

单值指标

CreateGrant

密钥政策和策略

利用此条件键,您可以控制对CreateGrant基于RetiringPrincipal参数。例如,您可以仅当 CreateGrant 请求中的 RetiringPrincipal 与条件语句中的 RetiringPrincipal 匹配时,允许用户创建使用 CMK 的授权。

以下示例键策略语句允许用户创建 CMK 授权。kms:RetiringPrincipal 条件键将权限限制为 CreateGrant 请求,其中授权的停用委托人是 LimitedAdminRoleOpsAdmin 用户。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:RetiringPrincipal": [ "arn:aws:iam::111122223333:role/LimitedAdminRole", "arn:aws:iam::111122223333:user/OpsAdmin" ] } } }

另请参阅

kms:SigningAlgorithm

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:SigningAlgorithm

字符串

单值指标

Sign

Verify

密钥政策和策略

您可以使用kms:SigningAlgorithm条件键来控制对SignVerify基于SigningAlgorithm参数。此条件键对于在 Amazon KMS 外部执行的操作没有影响,例如,在 Amazon KMS 外部使用非对称 CMK 密钥对中的公有密钥验证签名。

以下示例密钥策略允许可担任 testers 角色的用户,仅当用于请求的签名算法为 RSASSA_PSS 算法(如 RSASSA_PSS_SHA512)时,才能使用 CMK 签署消息。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } } }

另请参阅

kms:ValidTo

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:ValidTo

时间戳

单值指标

ImportKeyMaterial

密钥政策和策略

这些区域有:kms:ValidTo条件键控制对ImportKeyMaterial基于ValidTo参数,用于确定导入的密钥材料何时到期。此值用 Unix 时间表示。

默认情况下,ImportKeyMaterial 请求中需要 ValidTo 参数。但是,如果 ExpirationModel 参数的值为 KEY_MATERIAL_DOES_NOT_EXPIRE,则 ValidTo 参数无效。您还可以使用 kms:ExpirationModel 条件键要求 ExpirationModel 参数或特定参数值。

以下示例键策略语句允许用户在 CMK 中导入键材料。kms:ValidTo 条件键将权限限制为 ImportKeyMaterial 请求,其中 ValidTo 值小于或等于 1546257599.0(2018 年 12 月 31 日晚上 11:59:59)。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } } }

另请参阅

kms:ViaService

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:ViaService

字符串

单值指标

CMK 资源操作

密钥政策和策略

kms:ViaService 条件键将 Amazon KMS 客户主密钥 (CMK) 的使用限制于来自指定的 Amazon 服务的请求。您可以在每个 kms:ViaService 条件键中指定一个或多个服务。该操作必须是CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在操作和资源表,请查找值CMK中的Resources列中的操作。

例如,以下键策略语句使用kms:ViaService条件键以允许客户托管 CMK,仅当请求来自美国西部(俄勒冈)区域中的 Amazon EC2 或 Amazon RDS 代表时,才用于指定操作。ExampleUser

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }

您也可以使用 kms:ViaService 条件键以在请求来自特定服务时拒绝使用 CMK 的权限。例如,密钥策略中的以下策略语句使用 kms:ViaService 条件键以防止在代表 ExampleUser 发出来自 Amazon Lambda 的请求时将客户托管 CMK 用于 Encrypt 操作。

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "lambda.us-west-2.amazonaws.com" ] } } }
重要

在使用 kms:ViaService 条件键时,服务代表 Amazon 账户中的委托人发出请求。这些委托人必须具有以下权限:

  • 使用 CMK 的权限。委托人需要向集成服务授予这些权限,这样此服务才能代表委托人使用客户管理的 CMK。有关更多信息,请参阅 Amazon 服务如何使用 Amazon KMS

  • 使用集成服务的权限。有关授权用户访问与 Amazon KMS 集成的 Amazon 服务的详细信息,请查阅有关集成服务的文档。

全部Amazon托管 CMK使用kms:ViaService条件键。此条件允许 CMK 仅用于来自创建 CMK 的服务的请求。要查看Amazon托管 CMK,请使用GetKeyPolicyoperation.

kms:ViaService 条件键在 IAM 和密钥策略语句中有效。您指定的服务必须与 Amazon KMS 集成并支持 kms:ViaService 条件键。

支持 kms:ViaService 条件键的服务

下表列出了Amazon与集成的服务Amazon KMS并支持使用kms:ViaService客户托管 CMK 中的条件键。此表中的服务可能在有些地区不可用。使用.amazonaws.com后缀Amazon KMS所有 ViaService 名称Amazon分区。

注意

您可能需要水平或垂直滚动才能查看此表中的所有数据。

服务名称 Amazon KMSViaService 名称
Amazon AppFlow 应用程序流。aws_region.amazonaws.com
Amazon Systems Migration Service MGNaws_region.amazonaws.com
Amazon Athena athena.aws_region.amazonaws.com
Amazon审计管理器 审计管理器。aws_region.amazonaws.com
Amazon Aurora rds.AWS_region.amazonaws.com
Amazon Backup backup.AWS_region.amazonaws.com
AmazonCodeArtifact CodeArtifactaws_region.amazonaws.com
Amazon CodeGuru Reviewer 科德古鲁-审查员.aws_region.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
Amazon Database Migration Service (Amazon DMS) dms.AWS_region.amazonaws.com
Amazon Directory Service directoryservice.AWS_region.amazonaws.com
Amazon DynamoDB dynamodb.aws_region.amazonaws.com
Amazon EC2 Systems Manager (SSM) ssm.AWS_region.amazonaws.com
Amazon Elastic Block Store (Amazon EBS) ec2.AWS_region.amazonaws.com(仅限 EBS)
Amazon Elastic Container Registry (Amazon ECR) ECR.aws_region.amazonaws.com
Amazon Elastic File System elasticfilesystem.AWS_region.amazonaws.com
Amazon Elastic Kubernetes Service (Amazon EKS) eks.aws_region.amazonaws.com
Amazon ElastiCache

在条件键值中包含两个 ViaService 名称:

  • 弹性疼痛。aws_region.amazonaws.com

  • dax.aws_region.amazonaws.com

Amazon Elasticsearch Service (Amazon ES) es.AWS_region.amazonaws.com
Amazon FinSpaces 查找空间。aws_region.amazonaws.com
Amazon Forecast 预测.aws_region.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
Amazon Glue glue.AWS_region.amazonaws.com
Amazon IoT SiteWise IotSiteWiseaws_region.amazonaws.com
Amazon Kendra 肯德拉aws_region.amazonaws.com
Amazon Kinesis kinesis.AWS_region.amazonaws.com
Amazon Kinesis Data Firehose Firehoseaws_region.amazonaws.com
Amazon Kinesis Video Streams kinesisvideo.AWS_region.amazonaws.com
Amazon Lambda lambda.AWS_region.amazonaws.com
Amazon Lex lex.AWS_region.amazonaws.com
Amazon License Manager 许可证管理器。aws_region.amazonaws.com
Amazon Lookout for Equipment 寻找。aws_region.amazonaws.com
Amazon Lookout for Metrics 查找指标。aws_region.amazonaws.com
Amazon Lookout for Vision 展望远景aws_region.amazonaws.com
Amazon Managed Streaming for Apache Kafka (Amazon MSK) kafka.AWS_region.amazonaws.com
Amazon Managed Workflows of Apache Airflow (MWA) 气流aws_region.amazonaws.com
Amazon Monitron Monitronaws_region.amazonaws.com
Amazon MQ mqaws_region.amazonaws.com
Amazon Neptune rds.AWS_region.amazonaws.com
Amazon Vible Studio 灵活aws_region.amazonaws.com
Amazon RDS Performance Insights rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Rekognition Rekognition.aws_region.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rds.AWS_region.amazonaws.com
Amazon Secrets Manager secretsmanager.AWS_region.amazonaws.com
Amazon Simple Email Service (Amazon SES) ses.AWS_region.amazonaws.com
Amazon Simple Notification Service (Amazon SNS) sns.AWS_region.amazonaws.com
Amazon Simple Queue Service (Amazon SQS) sqs.AWS_region.amazonaws.com
Amazon Simple Storage Service (Amazon S3) s3.AWS_region.amazonaws.com
Amazon Snowball importexport.AWS_region.amazonaws.com
Amazon Storage Gateway 存储网关。aws_region.amazonaws.com
Amazon系统经理事件管理员联系人 军官-联系人aws_region.amazonaws.com
Amazon Timestream 时间流。aws_region.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
Amazon X-Ray xray.AWS_region.amazonaws.com

kms:WrappingAlgorithm

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:WrappingAlgorithm

字符串

单值指标

GetParametersForImport

密钥政策和策略

此条件键控制对GetParametersForImport基于WrappingAlgorithm参数。您可以使用此条件要求委托人在导入过程中使用特定算法来加密密钥材料。当对所需公有密钥和导入令牌的请求指定不同的包装算法时,它们会失败。

以下示例键策略语句使用kms:WrappingAlgorithm条件键授予示例用户调用GetParametersForImport操作,但阻止它们使用RSAES_OAEP_SHA_1包装算法。当 GetParametersForImport 请求中的 WrappingAlgorithmRSAES_OAEP_SHA_1 时,操作会失败。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } } }

另请参阅

kms:WrappingKeySpec

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:WrappingKeySpec

字符串

单值指标

GetParametersForImport

密钥政策和策略

此条件键控制对GetParametersForImport基于WrappingKeySpec参数。您可以使用此条件,要求委托人在导入过程中使用特定的公有密钥类型。如果请求指定了不同密钥类型,它会失败。

由于 WrappingKeySpec 参数值的唯一有效值为 RSA_2048,阻止用户使用此值将有效阻止它们使用 GetParametersForImport 操作。

以下示例策略语句使用 kms:WrappingAlgorithm 条件键要求请求中的 WrappingKeySpecRSA_2048

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } } }

另请参阅

Amazon KMS的条件键AmazonNitro 飞地

AmazonNitro 飞地是 Amazon EC2 功能,允许您创建名为飞地来保护和处理高度敏感的数据。Amazon KMS提供条件键以支持AmazonNitro 飞地 这些条件键只有在Amazon KMS操作起源于飞地。

当您调用kms-decryptkms-generate-data-key,或者kms-generate-random AmazonNitro 飞地 SDK来自飞地的 API,这些 API 会调用相应的Amazon KMS操作,其中包含一个带符号证明文档从飞地。签名的证明文件证明飞地的身份Amazon KMS。

通过以下条件键,您可以根据签名证明文档的内容限制这些操作的权限。在允许操作之前,Amazon KMS将来自飞地的证明文档与这些Amazon KMS条件键。

KMS: 收件人证明站:图片 HA384

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:RecipientAttestation:ImageSha384

字符串

单值指标

Decrypt

GenerateDataKey

GenerateRandom

密钥政策和策略

这些区域有:kms:RecipientAttestation:ImageSha384允许使用条件键kms-decryptkms-generate-data-key, 和kms-generate-random请求仅当请求中签名证明文档的图像哈希与条件键中的值匹配时。这些区域有:ImageSha384值对应于证明文档中的 PCR [0]。此条件键仅在您调用Amazon硝基飞地从一个飞地飞地开发工具包 API。

例如,以下键策略语句允许data-processing角色以将 CMK 用于kms-decrypt(Decrypt),kms-generate-data-key(GenerateDataKey) 和kms-generate-random(GenerateRandom) 操作。这些区域有:kms:RecipientAttestation:ImageSha384条件键仅允许在请求中证明文档的图像哈希值 (PCR [0]) 与条件中的图像哈希值匹配时执行操作。

如果请求不包含任何证明文档,则权限将被拒绝,因为不满足此条件。

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }

KMS: 收件人证明:PCR <PCR_ID>

Amazon KMS 条件键 条件类型 值类型 API 操作 策略类型

kms:RecipientAttestation:PCR

字符串

单值指标

Decrypt

GenerateDataKey

GenerateRandom

密钥政策和策略

这些区域有:kms:RecipientAttestation:PCR<PCR_ID>允许使用条件键kms-decryptkms-generate-data-key, 和kms-generate-random仅当请求中已签名的证明文档中的平台配置注册 (PCR) 与条件密钥中的 PCR 匹配时,才会发出来自飞地的请求。此条件键仅在您调用Amazon硝基飞地从一个飞地飞地开发工具包 API。

要指定 PCR 值,请使用以下格式。将 PCR ID 连接到条件键名称。PCR 值必须是最多 96 个字节的小写十六进制字符串。

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

例如,以下条件键指定 PCR [1] 的特定值,该值对应于用于飞地和引导过程的内核的哈希值。

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

以下示例键策略语句允许data-processing角色以将 CMK 用于kms-decrypt(Decrypt) 操作。

这些区域有:kms:RecipientAttestation:PCR条件键仅在请求中签名证明文档中的 PCR1 值匹配时才允许操作kms:RecipientAttestation:PCR1值。使用StringEqualsIgnoreCase策略运算符来要求对 PCR 值进行不区分大小写的比较。

如果请求不包含证明文档,则权限将被拒绝,因为不满足此条件。

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }