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

Amazon KMS 的条件键

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

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

注意

条件键值必须遵守 Amazon KMS 密钥策略和 IAM 策略的字符和编码规则。有关密钥策略文档规则的详细信息,请参阅 密钥策略格式。有关 IAM policy 文档规则的详细信息,请参阅《IAM 用户指南》中的 IAM 名称要求

Amazon 全局条件键

Amazon 定义全局条件键,它是一组策略条件键,适用于使用 IAM 进行访问控制的所有 Amazon 服务。Amazon KMS 支持所有全局条件键。您可以在 Amazon KMS 密钥策略和 IAM 策略中使用它们。

例如,仅当请求中的主体由条件键值中的 Amazon Resource Name (ARN) 表示时,才可以使用 aws:PrincipalArn 全局条件键来允许访问 Amazon KMS key(KMS 密钥)。要在 Amazon KMS 中支持基于属性的访问控制 (ABAC),您可以在 IAM policy 中使用 aws:ResourceTag/tag-key 全局条件键以允许访问带有特定标签的 KMS 密钥。

在主体是 Amazon 服务主体的策略中,为了帮助防止 Amazon 服务被用作混淆代理人,您可以使用 aws:SourceArnaws:SourceAccount 全局条件键。有关详细信息,请参阅使用 aws:SourceArn 或 aws:SourceAccount 条件键

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

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

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

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

请考虑以下情况:

  1. 您将类似 Amazon:基于源 IP 拒绝对 Amazon 的访问中所示的策略附加到 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 卷的加密数据密钥进行解密。

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

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

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

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

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

如果您使用这些条件键来控制对 KMS 密钥的访问,那么您可能会意外拒绝访问代表您使用 Amazon KMS 的 Amazon 服务。

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

Amazon KMS 条件键

Amazon KMS 提供了一组可在密钥策略和 IAM 策略中使用的条件键。这些条件键特定于 Amazon KMS。例如,在控制对对称加密 KMS 密钥的访问时,您可以使用 kms:EncryptionContext:context-key 条件键以请求特定的加密上下文

API 操作请求的条件

许多 Amazon KMS 条件键根据 Amazon KMS 操作请求中的参数值,控制对 KMS 密钥的访问。例如,您可以使用 IAM policy 中的 kms:KeySpec 条件密钥,以仅在 CreateKey 请求中的 KeySpec 参数的值为 RSA_4096 时允许使用 CreateKey 操作。

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

API 操作中使用的 KMS 密钥的条件

某些 Amazon KMS 条件键可以根据操作中使用的 KMS 密钥的属性,控制对操作的访问。例如,您可以使用 kms:KeyOrigin 条件来允许委托人仅在 KMS 密钥的 OriginAWS_KMS 时在 KMS 密钥上调用 GenerateDataKey。要了解某个条件键能否以这种方式使用,请参阅条件键的说明。

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

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

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

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

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

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

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

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

警告

将集合运算符用于单值条件键可能会创建过于宽容(或过于限制)的策略语句。仅将集合运算符用于多值条件键。

如果您创建或更新包含 ForAllValues 集合运算符的策略,且该策略带有 kms:EncryptionContext:context-keyaws: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 用户指南中的安全警告 – 带有单值键的 ForAllValues

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

布尔值

单值

CreateKey

PutKeyPolicy

仅限 IAM 策略

密钥策略和 IAM 策略

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

以下示例 IAM policy 语句阻止用户绕过策略锁定安全检查,方式为当 CreateKey 请求中 BypassPolicyLockoutSafetyCheck 参数的值为 true. 时,拒绝用户创建 KMS 密钥的权限

{ "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy" ], "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } }

您还可以在 IAM policy 或密钥策略中使用 kms:BypassPolicyLockoutSafetyCheck 条件键控制对 PutKeyPolicy 操作的访问权限。密钥策略中的以下示例策略语句阻止用户在更改 KMS 密钥的策略时绕过策略锁定安全检查。

此策略语句不是使用显式 Deny,而是结合使用 AllowNull 条件运算符,以仅当请求不含 BypassPolicyLockoutSafetyCheck 参数时,允许访问。如果未使用此参数,则默认值为 false。此较弱的策略语句在少数有必要绕过的情况下可覆盖。

{ "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } }

另请参阅

kms:CallerAccount

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

kms:CallerAccount

字符串

单值

KMS 密钥资源操作

自定义密钥存储操作

密钥策略和 IAM 策略

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

您可以使用它来控制对任何 KMS 密钥资源操作的访问权,即使用特定 KMS 密钥的任何 Amazon KMS 操作。若要标识 KMS 密钥资源操作,请在操作和资源表中,在操作的 Resources 列中查找的 KMS key 的值。它也适用于管理自定义密钥存储的操作。

例如,以下密钥策略语句演示了如何使用 kms:CallerAccount 条件键。此策略语句位于适用于 Amazon EBS 的 Amazon 托管式密钥 的密钥策略中。它结合了 Principal 元素,该元素利用 kms:CallerAccount 条件键指定所有 Amazon 身份,从而高效地向 Amazon Web Services 账户 111122223333. 中的所有身份提供访问权限。它包含一个额外的 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(已弃用)

kms:CustomerMasterKeySpec 条件键已弃用。改为使用 kms:KeySpec 条件键。

kms:CustomerMasterKeySpeckms:KeySpec 条件键的运行方式相同。只有名称不同。建议使用 kms:KeySpec。但是,为了避免破坏性变化,Amazon KMS 支持两个条件键。

kms:CustomerMasterKeyUsage(已弃用)

kms:CustomerMasterKeyUsage 条件键已弃用。请改用 kms:KeyUsage 条件键。

kms:CustomerMasterKeyUsagekms:KeyUsage 条件键的运行方式相同。只有名称不同。建议使用 kms:KeyUsage。但是,为了避免破坏性变化,Amazon KMS 支持两个条件键。

kms:DataKeyPairSpec

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

kms:DataKeyPairSpec

字符串

单值

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

密钥策略和 IAM 策略

您可以基于请求中的 KeyPairSpec 参数的值使用此条件键控制对 GenerateDataKeyPairGenerateDataKeyPairWithoutPlaintext 操作的访问权限。例如,可以允许用户仅生成特定类型的数据密钥对。

以下示例密钥策略语句使用 kms:DataKeyPairSpec 条件键,以允许用户使用 KMS 密钥仅生成 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

密钥策略和 IAM 策略

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

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

请求中的 EncryptionAlgorithm 参数

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

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

{ "Sid": "Allow only one encryption algorithm with this asymmetric KMS key", "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 条件键,控制对生成数据密钥和数据密钥对的操作的访问。这些操作仅使用对称加密 KMS 密钥和 SYMMETRIC_DEFAULT 算法。

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

{ "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:context-key

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

kms:EncryptionContext:context-key

字符串

单值

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥策略和 IAM 策略

您可以使用 kms:EncryptionContext:context-key 条件键,根据加密操作请求中的加密上下文,控制对对称加密 KMS 密钥的访问。使用此条件键可评估加密上下文对中的键和值。要仅评估加密上下文键,或者需要加密上下文不考虑键或值,请使用 kms:EncryptionContextKeys 条件键。

注意

此条件键在密钥策略语句和 IAM policy 语句中有效,即使没有出现在 IAM 控制台或 IAM 服务授权引用中。

条件键值必须遵守密钥策略和 IAM 策略的字符规则。在加密上下文中有效的某些字符在策略中无效。您可能无法使用此条件键来表示全部有效的加密上下文值。有关密钥策略文档规则的详细信息,请参阅 密钥策略格式。有关 IAM policy 文档规则的详细信息,请参阅《IAM 用户指南》中的 IAM 名称要求

您不能在使用非对称 KMS 密钥HMAC KMS 密钥的加密操作中指定加密上下文。非对称算法和 MAC 算法不支持加密上下文。

要使用 kms:EncryptionContext:context-key 条件键,请将 context-key 占位符替换为加密上下文键。使用加密上下文值替换 context-value 占位符。

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

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

"kms:EncryptionContext:AppName": "ExampleApp"

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

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

警告

请勿将 ForAnyValueForAllValues 集合运算符用于此单值条件键。这些集合运算符可以创建一个策略条件,该条件不需要您计划要求的值,并允许您计划禁止的值。

如果您创建或更新包括 ForAllValues 集合运算符与 kms:EncryptionContext:context-key 的策略,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 运算符。

以下示例密钥策略语句允许可以担任角色的委托人仅在请求中的加密上下文包括 AppName:ExampleApp 对时使用 GenerateDataKey 请求中的 KMS 密钥。允许使用其他加密上下文对。

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

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

若要要求加密上下文对并禁止所有其他加密上下文对,请同时使用策略语句中的 kms:EncryptionContext:context-keykms:EncryptionContextKeys。以下密钥策略语句使用 kms:EncryptionContext:AppName 条件要求请求中的 AppName=ExampleApp 加密上下文对。它还结合使用 kms:EncryptionContextKeys 条件键与 ForAllValues 集合运算符以仅允许 AppName 加密上下文键。

ForAllValues 集合运算符将请求中的加密上下文键限制为 AppName。如果 kms:EncryptionContextKeys 条件与 ForAllValues 集合运算符在策略语句中单独使用,则此集合运算符将允许没有加密上下文的请求。但是,如果请求没有加密上下文,则 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" ] } } }

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

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

使用多个加密上下文对

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

注意

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

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

请查看您的策略,并从具有 kms:EncryptionContext:context-key 的任何条件中消除集合运算符。尝试使用此格式创建或更新策略失败,并显示 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:EncryptionContext:context-keykms:EncryptionContextKeys。以下键策略语句使用 kms:EncryptionContext:context-key 条件要求同时具有 Department=IT Project=Alpha 对的加密上下文。它结合使用 kms:EncryptionContextKeys 条件键与 ForAllValues 集合运算符以仅允许 DepartmentProject 加密上下文键。

ForAllValues 集合运算符将请求中的加密上下文键限制为 DepartmentProject。如果在条件中单独使用,则此集合运算符将允许没有加密上下文的请求,但在此配置中,此条件中的 kms:EncryptionContext:context-key 将会失败。

{ "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" ] } } }

您还可以禁止多个加密上下文对。如果请求中的加密上下文包含 Stage=RestrictedStage=Production 对,以下示例密钥策略语句使用 Deny 效果,以禁止委托人使用 KMS 密钥。

相同键 (kms:EncryptionContext:Stage) 的多个值(RestrictedProduction)用 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:context-key 策略条件。区分大小写的条件运算符(例如 StringEquals)始终适用于条件的值。加密上下文键(例如 AppName)是 kms:EncryptionContextKeys 条件的值。加密上下文值(例如 ExampleApp)是 kms:EncryptionContext:context-key 条件的值。

例如,在以下示例密钥策略语句中,由于 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 policy 变量。在运行时根据请求中的值解析这些策略变量。例如,aws:CurrentTime 解析为请求的时间,aws:username 解析为调用方的友好名称。

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

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

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

然后,要强制执行此要求,您可以使用与以下示例中的策略语句类似的策略语句。此策略语句向 TestTeam 角色授予使用 KMS 密钥加密和解密数据的权限。不过,此权限仅在请求中的加密上下文包含 "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}" } } }

您只能在 kms:EncryptionContext:context-key 条件键的值中使用 IAM policy 变量。不能在键中使用变量。

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

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

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

{ "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

密钥策略和 IAM 策略

您可以使用 kms:EncryptionContextKeys 条件键,根据加密操作请求中的加密上下文,控制对对称加密 KMS 密钥的访问。使用此条件键仅评估各个加密上下文对中的键。要同时评估加密上下文中的键和值,请使用 kms:EncryptionContext:context-key 条件键。

您不能在使用非对称 KMS 密钥HMAC KMS 密钥的加密操作中指定加密上下文。非对称算法和 MAC 算法不支持加密上下文。

注意

条件键值(包括加密上下文密钥)必须符合 Amazon KMS 密钥策略的字符和编码规则。您可能无法使用此条件键来表示所有有效的加密上下文键。有关密钥策略文档规则的详细信息,请参阅 密钥策略格式。有关 IAM policy 文档规则的详细信息,请参阅《IAM 用户指南》中的 IAM 名称要求

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

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

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

以下示例密钥策略语句结合使用 kms:EncryptionContextKeys 条件键与 ForAnyValue 集合运算符。此策略语句允许对指定运算使用 KMS 密钥,但仅当请求中至少有一个加密上下文对包括 AppName 键(忽视其值)时,才允许为指定运算使用 KMS 密钥。

例如,此密钥策略语句允许包含两个加密上下文对 AppName=HelperProject=AlphaGenerateDataKey 请求,因为第一个加密上下文对满足此条件。只有 Project=Alpha 或没有加密上下文的请求都会失败。

由于 StringEquals 条件运算区分大小写,此策略语句对加密上下文键的拼写和大小写有要求。不过您可以使用忽略键大小写的条件运算符,例如 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 条件键在使用 KMS 密钥的加密操作中要求加密上下文(任何加密上下文)。

以下示例密钥策略语句结合使用 kms:EncryptionContextKeys 条件键和 Null 条件运算符,仅允许在 API 请求中的加密上下文不为 null 时允许访问 KMS 密钥。此条件不检查加密上下文的键或值。它只验证加密上下文是否存在。

{ "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

密钥策略和 IAM 策略

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 条件键,以仅当请求包含 ExpirationModel 参数且其值为 KEY_MATERIAL_DOES_NOT_EXPIRE 时,允许用户将密钥材料导入 KMS 密钥。

{ "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

密钥策略和 IAM 策略

利用此条件键,您可以根据请求中授权约束的类型来控制对 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

布尔值

单值

CreateGrant

ListGrants

RevokeGrant

密钥策略和 IAM 策略

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

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

{ "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

密钥策略和 IAM 策略

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

这是一个多值条件键kms:GrantOperations 将比较 CreateGrant 请求中的授权操作集合与策略中的授权操作集合。要确定如何比较这些集,您必须在策略条件中提供 ForAnyValueForAllValues 集合运算符。有关集合运算符的详细信息,请参阅 IAM 用户指南中的使用多个键和值

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

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

    如果请求中没有授权操作,则 ForAllValues 也会返回 true,但 CreateGrant 不允许它。如果 Operations 参数缺失或具有 null 值,则 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,则策略语句将要求授权中至少有一个授权操作是 EncryptReEncryptTo,但它允许其他授权操作,例如 DecryptReEncryptFrom

另请参阅

kms:GranteePrincipal

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

kms:GranteePrincipal

字符串

单值

CreateGrant

IAM 和密钥策略

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

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

{ "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

KMS 密钥资源操作

IAM policy

密钥策略和 IAM 策略

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

您可以使用此条件键基于请求中 Origin 参数的值控制对 CreateKey 操作的访问权限。Origin 的有效值为 AWS_KMSAWS_CLOUDHSMEXTERNAL

例如,您可以允许用户仅在密钥材料在 Amazon KMS (AWS_KMS) 中生成、密钥材料在与自定义密钥存储 (AWS_CLOUDHSM) 关联的 Amazon CloudHSM 集群中生成或仅在密钥材料从外部源 (EXTERNAL) 中导入时创建 KMS 密钥。

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "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:KeyOrigin 条件键,根据用于操作的 KMS 密钥的 Origin 属性,控制对使用或管理 KMS 密钥的操作的访问。该操作必须是 KMS 密钥资源操作,即为特定 KMS 密钥授权的操作。若要标识 KMS 密钥资源操作,请在操作和资源表中,在操作的 Resources 列中查找的 KMS key 的值。

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

{ "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:KeySpec

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

kms:KeySpec

字符串

CreateKey

KMS 密钥资源操作

IAM policy

密钥策略和 IAM 策略

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

您可以使用 IAM policy 中的此条件键基于 CreateKey 请求中 KeySpec 参数的值控制对 CreateKey 操作的访问权限。例如,您可以使用此条件允许用户仅创建对称加密 KMS 密钥或仅创建 HMAC KMS 密钥。

以下示例 IAM policy 语句使用 kms:KeySpec 条件键,允许主体仅创建 RSA 非对称 KMS 密钥。权限仅在请求中的 KeySpecRSA_ 开头时有效。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringLike": { "kms:KeySpec": "RSA_*" } } }

还可以使用 kms:KeySpec 条件键,根据用于操作的 KMS 密钥的 KeySpec 属性,控制对使用或管理 KMS 密钥的操作的访问。该操作必须是 KMS 密钥资源操作,即为特定 KMS 密钥授权的操作。若要标识 KMS 密钥资源操作,请在操作和资源表中,在操作的 Resources 列中查找的 KMS key 的值。

例如,以下 IAM policy 允许主体执行指定的 KMS 密钥资源操作,但只能使用账户中的对称加密 KMS 密钥。

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

另请参阅

kms:KeyUsage

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

kms:KeyUsage

字符串

CreateKey

KMS 密钥资源操作

IAM policy

密钥策略和 IAM 策略

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

您可使用此条件键基于请求中 KeyUsage 参数的值控制对 CreateKey 操作的访问权限。KeyUsage 的有效值为 ENCRYPT_DECRYPTSIGN_VERIFYGENERATE_VERIFY_MAC

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

以下示例 IAM policy 语句使用 kms:KeyUsage 条件键,允许用户仅当 KeyUsageENCRYPT_DECRYPT 时才能创建 KMS 密钥。

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

还可以使用 kms:KeyUsage 条件键,根据操作中的 KMS 密钥的 KeyUsage 属性,控制对使用或管理 KMS 密钥的操作的访问。该操作必须是 KMS 密钥资源操作,即为特定 KMS 密钥授权的操作。若要标识 KMS 密钥资源操作,请在操作和资源表中,在操作的 Resources 列中查找的 KMS key 的值。

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

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

另请参阅

kms:MacAlgorithm

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

kms:MacAlgorithm

字符串

单值

GenerateMac

VerifyMac

密钥策略和 IAM 策略

您可以使用 kms:MacAlgorithm 条件键基于请求中的 MacAlgorithm 参数的值控制对 GenerateMacVerifyMac 操作的访问权限。

以下示例密钥策略允许可以代入 testers 角色的用户仅在请求中的 MAC 算法为 HMAC_SHA_384HMAC_SHA_512 时使用 HMAC KMS 密钥生成和验证 HMAC 标签。此策略使用两个独立的策略语句,每个语句都有自己的条件。如果在单个条件语句中指定多个 MAC 算法,则该条件需要两种算法,而不是其中一种算法。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_384" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_512" } } } ] }

另请参阅

kms:MessageType

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

kms:MessageType

字符串

单值

Sign

Verify

密钥策略和 IAM 策略

kms:MessageType 条件键基于请求中 MessageType 参数的值控制对 SignVerify 操作的访问权限。MessageType 的有效值为 RAWDIGEST

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

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

另请参阅

kms:MultiRegion

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

kms:MultiRegion

布尔值

CreateKey

KMS 密钥资源操作

密钥策略和 IAM 策略

您可以使用此条件键以允许仅对单区域密钥或仅对多区域密钥进行操作。kms:MultiRegion 条件键根据 KMS 密钥的 MultiRegion 属性的值控制对 KMS 密钥上的 Amazon KMS 操作和 CreateKey 操作的访问。有效值为 true(多区域)或 false(单区域)。所有 KMS 密钥都具有 MultiRegion 属性。

例如,以下 IAM policy 语句使用 kms:MultiRegion 条件键,允许委托人仅创建单区域密钥。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:MultiRegion": false } } }

kms:MultiRegionKeyType

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

kms:MultiRegionKeyType

字符串

CreateKey

KMS 密钥资源操作

密钥策略和 IAM 策略

您可以使用此条件键以允许仅对多区域主密钥或仅对多区域副本密钥执行操作。kms:MultiRegionKeyType 条件键根据 KMS 密钥的 MultiRegionKeyType 属性控制对 KMS 密钥上的 Amazon KMS 操作和 CreateKey 操作的访问。有效值为 PRIMARYREPLICA。只有多区域密钥具有 MultiRegionKeyType 属性。

通常情况下,您可以使用 IAM policy 中的 kms:MultiRegionKeyType 条件键以控制对多个 KMS 密钥的访问。但是,由于给定的多区域密钥可以更改为主密钥或副本密钥,因此您可能希望在密钥策略中使用此条件,以便仅当特定的多区域密钥为主密钥或副本密钥时才允许操作。

IAM policy 语句使用 kms:MultiRegionKeyType 条件键,以允许委托人仅对 Amazon Web Services 账户 中指定的多区域副本密钥计划和取消删除密钥。

{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "kms:MultiRegionKeyType": "REPLICA" } } }

要允许或拒绝访问所有多区域密钥,您可以将这两个值或 null 值用于 kms:MultiRegionKeyType。但是,为此目的,建议使用 kms:MultiRegion 条件键。

kms:PrimaryRegion

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

kms:PrimaryRegion

字符串(列表)

UpdatePrimaryRegion

密钥策略和 IAM 策略

您可以使用此条件键限制 UpdatePrimaryRegion 操作中的目的区域。这些都是可以托管您的多区域主密钥的 Amazon Web Services 区域。

kms:PrimaryRegion 条件键基于 PrimaryRegion 参数的值控制对 UpdatePrimaryRegion 操作的访问权限。PrimaryRegion 参数指定正被提升为主密钥的多区域副本密钥的 Amazon Web Services 区域。条件的值为一个或多个 Amazon Web Services 区域 名称,例如 us-east-1ap-southeast-2,或者区域名称模式,例如 eu-*

例如,以下密钥策略语句使用 kms:PrimaryRegion 条件键,以允许委托人将多区域密钥的主区域更新为四个指定的区域之一。

{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Resource": "*", "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-east-1", "us-west-2", "eu-west-3", "ap-southeast-2" ] } } }

kms:ReEncryptOnSameKey

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

kms:ReEncryptOnSameKey

布尔值

单值

ReEncrypt

密钥策略和 IAM 策略

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

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

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

kms:RequestAlias

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

kms:RequestAlias

字符串(列表)

单值

加密操作

DescribeKey

GetPublicKey

密钥策略和 IAM 策略

您可以使用此条件键,仅在请求使用特定别名来标识 KMS 密钥时允许操作。kms:RequestAlias 条件键基于标识请求中的 KMS 密钥的别名控制对加密操作中使用的 KMS 密钥 GetPublicKeyDescribeKey 的访问。(此策略条件不会影响 GenerateRandom 操作,因为该操作不使用 KMS 密钥或别名。)

此条件在 Amazon KMS 中支持基于属性的访问控制 (ABAC),它允许您根据 KMS 密钥的标签和别名控制对 KMS 密钥的访问。您可以使用标签和别名,在不更改策略或授权的情况下,允许或拒绝对 KMS 密钥的访问权限。有关详细信息,请参阅Amazon KMS 中的 ABAC

要在此策略条件下指定别名,请使用别名名称,例如 alias/project-alpha,或别名名称模式,例如 alias/*test*。您无法在此条件键的值中指定别名 ARN

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

例如,以下密钥策略语句允许委托人在 KMS 密钥调用 GenerateDataKey 操作。但是,仅当请求中的 KeyId 参数的值为 alias/finance-key 或具有该别名名称(例如 arn:aws:kms:us-west-2:111122223333:alias/finance-key)的别名 ARN 时才允许此操作。

{ "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" } } }

您不能使用此条件键来控制对别名操作(例如 CreateAliasDeleteAlias)的访问。有关控制对别名操作的访问的信息,请参阅 控制对别名的访问

kms:ResourceAliases

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

kms:ResourceAliases

字符串(列表)

多值 KMS 密钥资源操作

仅限 IAM 策略

使用此条件键可根据与 KMS 密钥关联的别名来控制对 KMS 密钥的访问。该操作必须是 KMS 密钥资源操作,即为特定 KMS 密钥授权的操作。若要标识 KMS 密钥资源操作,请在操作和资源表中,在操作的 Resources 列中查找的 KMS key 的值。

此条件在 Amazon KMS 中支持基于属性的访问控制 (ABAC)。使用 ABAC,您可以根据分配给 KMS 密钥的标签以及与 KMS 密钥关联的别名来控制对 KMS 密钥的访问。您可以使用标签和别名,在不更改策略或授权的情况下,允许或拒绝对 KMS 密钥的访问权限。有关详细信息,请参阅Amazon KMS 中的 ABAC

别名在 Amazon Web Services 账户 和区域中必须是唯一的,但此条件可让您控制对同一个区域中的多个 KMS 密钥(使用 StringLike 比较运算符)或每个账户的不同 Amazon Web Services 区域 中的多个 KMS 密钥的访问权限。

注意

kms:ResourceAliases 条件仅在 KMS 密钥符合每个 KMS 密钥的别名数量配额时有效。如果 KMS 密钥超出此配额,则由 kms:ResourceAliases 条件授权使用 KMS 密钥的委托人将被拒绝访问 KMS 密钥。

要在此策略条件下指定别名,请使用别名名称,例如 alias/project-alpha,或别名名称模式,例如 alias/*test*。您无法在此条件键的值中指定别名 ARN。要满足条件,操作中使用的 KMS 密钥必须具有指定的别名。是否或者如何在操作请求中标识 KMS 密钥并不重要。

这是一个多值条件键,用于将与 KMS 密钥关联的别名集与策略中的别名集进行比较。要确定如何比较这些集,您必须在策略条件中提供 ForAnyValueForAllValues 集合运算符。有关集合运算符的详细信息,请参阅 IAM 用户指南中的使用多个键和值

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

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

例如,以下 IAM policy 语句允许委托人对与 finance-key 别名关联的指定 Amazon Web Services 账户 中的任何 KMS 密钥调用 GenerateDataKey 操作。(受影响的 KMS 密钥的密钥策略还必须允许委托人的账户将它们用于此操作。) 为了指示条件在可能与 KMS 密钥关联的很多别名中的一个为 alias/finance-key 时得到满足,条件使用 ForAnyValue 集合运算符。

由于 kms:ResourceAliases 条件基于资源,而不是请求,对于与 finance-key 别名关联的任何 KMS 密钥,对 GenerateDataKey 的调用成功,即使请求使用密钥 ID密钥 ARN 来标识 KMS 密钥。

{ "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 policy 语句允许委托人启用和禁用 KMS 密钥,但仅当 KMS 密钥的所有别名都包含“Test”时。此策略语句使用两个条件。带有 ForAllValues 集合运算符的条件要求与 KMS 密钥关联的所有别名都包括“Test”。带有 ForAnyValue 集合运算符的条件要求 KMS 密钥至少具有一个带有“Test”的别名。如果不使用 ForAnyValue 条件,此策略语句将允许委托人使用没有别名的 KMS 密钥。

{ "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:ReplicaRegion

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

kms:ReplicaRegion

字符串(列表)

ReplicateKey

密钥策略和 IAM 策略

您可以使用此条件键限制 Amazon Web Services 区域,委托人可以在其中复制多区域密钥kms:ReplicaRegion 条件键根据请求中 ReplicaRegion 参数的值控制对 ReplicateKey 操作的访问权限。此参数为新的副本密钥指定 Amazon Web Services 区域。

条件的值为一个或多个 Amazon Web Services 区域 名称,例如 us-east-1ap-southeast-2,或者名称模式,例如 eu-*。有关 Amazon KMS 支持的 Amazon Web Services 区域 的名称的列表,请参阅 Amazon 一般参考中的 Amazon Key Management Service 终端节点和配额

例如,以下密钥策略语句使用 kms:ReplicaRegion 条件键以允许委托人仅在 ReplicaRegion 参数的值为指定区域之一时调用 ReplicateKey 操作。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey" "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": [ "us-east-1", "eu-west-3", "ap-southeast-2" ] } } }

此条件键仅控制对 ReplicateKey 操作的访问权限。若要控制对 UpdatePrimaryRegion 操作的访问权限,请使用 kms:PrimaryRegion 条件键。

kms:RetiringPrincipal

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

kms:RetiringPrincipal

字符串(列表)

单值

CreateGrant

密钥策略和 IAM 策略

您可以使用此条件键基于请求中 RetiringPrincipal 参数的值控制对 CreateGrant 操作的访问权限。例如,您可以仅在 CreateGrant 请求中的 RetiringPrincipal 与条件语句中的 RetiringPrincipal 匹配时,允许用户创建使用 KMS 密钥的授权。

以下示例密钥策略语句允许用户为 KMS 密钥创建授权。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

密钥策略和 IAM 策略

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

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

{ "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

密钥策略和 IAM 策略

kms:ValidTo 条件键基于请求中 ValidTo 参数的值(其确定导入的密钥材料何时到期)控制对 ImportKeyMaterial 操作的访问权限。此值用 Unix 时间表示。

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

以下示例策略语句允许用户在 KMS 密钥中导入密钥材料。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

字符串

单值

KMS 密钥资源操作

密钥策略和 IAM 策略

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

例如,以下密钥策略语句使用 kms:ViaService 条件键以允许仅在请求来自于美国西部(俄勒冈)区域的 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 条件键以在请求来自特定服务时拒绝使用 KMS 密钥的权限。例如,密钥策略中的以下策略语句使用 kms:ViaService 条件键以防止在代表 ExampleUser 发出来自 Amazon Lambda 的请求时将客户托管密钥用于 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 Web Services 账户 中的委托人发出请求。这些委托人必须具有以下权限:

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

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

所有 Amazon 托管式密钥 都使用其密钥策略文档中的 kms:ViaService 条件键。此条件允许 KMS 密钥仅用于来自创建 KMS 密钥的服务的请求。要查看 Amazon 托管式密钥 的密钥策略,请使用 GetKeyPolicy 操作。

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

支持 kms:ViaService 条件键的服务

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

注意

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

服务名称 Amazon KMS ViaService 名称
Amazon App Runner apprunner.AWS_region.amazonaws.com
Amazon AppFlow appflow.AWS_region.amazonaws.com
Amazon Application Migration Service mgn.AWS_region.amazonaws.com
Amazon Athena athena.AWS_region.amazonaws.com
Amazon Audit Manager auditmanager.AWS_region.amazonaws.com
Amazon Aurora rds.AWS_region.amazonaws.com
Amazon Backup backup.AWS_region.amazonaws.com
Amazon Backup 网关 backup-gateway.AWS_region.amazonaws.com
Amazon CodeArtifact codeartifact.AWS_region.amazonaws.com
Amazon CodeGuru Reviewer codeguru-reviewer.AWS_region.amazonaws.com
Amazon Comprehend comprehend.AWS_region.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
Amazon Connect Customer Profiles profile.AWS_region.amazonaws.com
Amazon Connect Wisdom wisdom.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 (Amazon EFS) elasticfilesystem.AWS_region.amazonaws.com
Amazon Elastic Kubernetes Service (Amazon EKS) eks.AWS_region.amazonaws.com
Amazon ElastiCache

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

  • elasticache.AWS_region.amazonaws.com

  • dax.AWS_region.amazonaws.com

Amazon OpenSearch Service (OpenSearch Service) es.AWS_region.amazonaws.com
AWS Elemental MediaTailor mediatailor.AWS_region.amazonaws.com
Amazon FinSpace finspace.AWS_region.amazonaws.com
Amazon Forecast forecast.AWS_region.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
Amazon GuardDuty malware-protection.AWS_region.amazonaws.com
Amazon Glue glue.AWS_region.amazonaws.com
Amazon HealthLake healthlake.AWS_region.amazonaws.com
Amazon IoT SiteWise iotsitewise.AWS_region.amazonaws.com
Amazon Kendra kendra.AWS_region.amazonaws.com
Amazon Keyspaces (for Apache Cassandra) cassandra.AWS_region.amazonaws.com
Amazon Kinesis kinesis.AWS_region.amazonaws.com
Amazon Kinesis Data Firehose firehose.AWS_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 license-manager.AWS_region.amazonaws.com
Amazon Location Service geo.AWS_region.amazonaws.com
Amazon Lookout for Equipment lookoutequipment.AWS_region.amazonaws.com
Amazon Lookout for Metrics lookoutmetrics.AWS_region.amazonaws.com
Amazon Lookout for Vision lookoutvision.AWS_region.amazonaws.com
Amazon Macie macie.AWS_region.amazonaws.com
Amazon Managed Blockchain managedblockchain.AWS_region.amazonaws.com
Amazon Managed Streaming for Apache Kafka (Amazon MSK) kafka.AWS_region.amazonaws.com
Amazon Managed Workflows for Apache Airflow (MWAA) airflow.AWS_region.amazonaws.com
Amazon 内存 DB memorydb.AWS_region.amazonaws.com
Amazon Monitron monitron.AWS_region.amazonaws.com
Amazon MQ mq.AWS_region.amazonaws.com
Amazon Neptune rds.AWS_region.amazonaws.com
Amazon Nimble Studio nimble.AWS_region.amazonaws.com
Amazon Proton proton.AWS_region.amazonaws.com
Amazon Quantum Ledger Database (Amazon QLDB) qldb.AWS_region.amazonaws.com
Amazon RDS Performance Insights rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Redshift 查询编辑器 V2 sqlworkbench.AWS_region.amazonaws.com
Amazon Redshift Serverless redshift-serverless.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 storagegateway.AWS_region.amazonaws.com
Amazon Systems Manager Incident Manager ssm-incidents.AWS_region.amazonaws.com
Amazon Systems Manager Incident Manager 联系人 ssm-contacts.AWS_region.amazonaws.com
Amazon Timestream timestream.AWS_region.amazonaws.com
Amazon Translate translate.AWS_region.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
Amazon WorkSpaces Web workspaces-web.AWS_region.amazonaws.com
Amazon X-Ray xray.AWS_region.amazonaws.com

kms:WrappingAlgorithm

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

kms:WrappingAlgorithm

字符串

单值

GetParametersForImport

密钥策略和 IAM 策略

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

以下示例密钥策略语句使用 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

密钥策略和 IAM 策略

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

由于 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 Nitro Enclaves 的 Amazon KMS 条件键

Amazon Nitro Enclaves 是一项 Amazon EC2 功能,可让您创建称为 enclave 的隔离计算环境,以保护和处理高度敏感的数据。Amazon KMS 提供支持 Amazon Nitro Enclaves 的条件键。这些条件键仅在 Amazon KMS 操作的请求起源于 enclave 有效。

当您从 enclave 调用 kms-decryptkms-generate-data-keykms-generate-random Amazon Nitro Enclaves 开发工具包 API 时,这些 API 会使用包含来自 enclave 的已签名证明文档的参数,调用相应的 Amazon KMS 操作。签名的证明文档可向 Amazon KMS 证明 enclave 的身份。

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

kms:RecipientAttestation:ImageSha384

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

kms:RecipientAttestation:ImageSha384

字符串

单值

Decrypt

GenerateDataKey

GenerateRandom

密钥策略和 IAM 策略

kms:RecipientAttestation:ImageSha384 条件键仅在请求中的签名证明文档的图像哈希值与条件键中的值匹配时允许来自 enclave 的 kms-decryptkms-generate-data-keykms-generate-random 请求。ImageSha384 值对应于证明文档中的 PCR[0]。此条件键仅在您从 enclave 中调用 Amazon Nitro Enclaves 开发工具包 API 时有效。

注意

此条件键在密钥策略语句和 IAM policy 语句中有效,即使没有出现在 IAM 控制台或 IAM 服务授权引用中。

例如,以下密钥策略语句允许 data-processing 角色将 KMS 密钥用于 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:RecipientAttestation:PCR<PCR_ID>

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

kms:RecipientAttestation:PCR

字符串

单值

Decrypt

GenerateDataKey

GenerateRandom

密钥策略和 IAM 策略

kms:RecipientAttestation:PCR<PCR_ID> 条件键仅在请求中的签名证明文档的平台配置注册 (PCR) 与条件键中的 PCR 匹配时允许来自 enclave 的 kms-decryptkms-generate-data-keykms-generate-random 请求。此条件键仅在您从 enclave 中调用 Amazon Nitro Enclaves 开发工具包 API 时有效。

注意

此条件键在密钥策略语句和 IAM policy 语句中有效,即使没有出现在 IAM 控制台或 IAM 服务授权引用中。

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

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

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

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

以下示例密钥策略语句允许 data-processing 角色将 KMS 密钥用于 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" } } }