AWS KMS 条件键 - AWS Key Management Service

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

AWS KMS 条件键

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

API 操作请求的条件

许多 AWS KMS 条件密钥根据 AWS KMS 操作请求中参数的值来控制对 KMS 密钥的访问。例如,您可以在 IAM 策略中使用 k ms: KeySpec 条件密钥,仅当CreateKey请求中的KeySpec参数值为时才允许使用该CreateKey操作RSA_4096

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

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

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

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

以下主题描述了每个 AWS KMS 条件键,并包括演示策略语法的示例策略语句。

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

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

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

  • 单值条件键在授权上下文(请求或资源)中最多具有一个值。例如,由于每个 API 调用只能来自一个 AWS 账户,因此 k m CallerAccount s: 是单值条件密钥。不要将集合运算符用于单值条件键。

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

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

警告

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

如果您创建或更新包含带有 kms:EncryptionContext: 上下文密钥或aws:RequestTag/tag-key条件密钥的ForAllValues集合运算符的策略, AWS 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

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

kms:BypassPolicyLockoutSafetyCheck

布尔值

单值

CreateKey

PutKeyPolicy

仅限 IAM policy

密钥策略和 IAM policy

kms:BypassPolicyLockoutSafetyCheck条件键根据请求中BypassPolicyLockoutSafetyCheck参数的值控制对CreateKeyPutKeyPolicy操作的访问权限。

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

{ "Effect": "Deny", "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

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

kms:CallerAccount

字符串

单值

KMS 密钥资源操作

自定义密钥存储操作

密钥策略和 IAM 策略

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

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

例如,以下密钥策略语句演示了如何使用 kms:CallerAccount 条件键。本政策声明包含在 Amazon EBS AWS 托管式密钥 的关键政策中。它将指定所有 AWS 身份的Principal元素与kms:CallerAccount条件键相结合,以有效地允许访问 AWS 账户 111122223333 中的所有身份。它包含一个额外的 AWS 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。但是,为了避免破坏性更改, AWS KMS 支持这两个条件键。

kms:CustomerMasterKeyUsage(已弃用)

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

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

kms: DataKeyPairSpec

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

kms:DataKeyPairSpec

字符串

单值

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

密钥策略和 IAM policy

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

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

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

另请参阅

kms: EncryptionAlgorithm

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

kms:EncryptionAlgorithm

字符串

单值

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥策略和 IAM 策略

您可以使用 kms:EncryptionAlgorithm 条件键,根据操作中使用的加密算法,控制对加密操作的访问。对于 “加密”、“解密” 和 “ReEncrypt操作”,它根据请求中EncryptionAlgorithm参数的值来控制访问权限。对于生成数据密钥和数据密钥对的操作,则根据用于加密数据密钥的加密算法控制访问。

此条件密钥对以外执行的操作没有影响 AWS KMS,例如使用外部非对称 KMS 密钥对中的公钥进行加密。 AWS 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*添加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: 上下文密钥

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

kms:EncryptionContext:context-key

字符串

单值

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥策略和 IAM policy

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

注意

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

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

要使用 km s:EncryptionContext: 上下文密钥条件密钥,请将上下文密钥占位符替换为加密上下文密钥。使用加密上下文值替换 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 集合运算符用于此单值条件键。这些集合运算符可以创建一个策略条件,该条件不需要您计划要求的值,并允许您计划禁止的值。

如果您创建或更新包含带有 kms:: conte xt-keyForAllValues集合运算符的策略, AWS KMS 则会返回以下错误消息EncryptionContext:

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:EncryptionContextKeys中同时使用 kms:EncryptionContext: conte xt-key。以下密钥策略语句使用 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::111122223333:role/KeyUsers" }, "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 用户指南中的创建具有多个键或值的条件

注意

本主题的早期版本显示了使用和 se ForAllValues t 运算符ForAnyValue和 kms:EncryptionContext: conte xt-key 条件密钥的策略声明。将集合运算符与单值条件键结合使用可能会导致允许没有加密上下文和未指定加密上下文对的请求的策略。

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

请查看您的政策,并使用 kms:EncryptionContext: conte xt- 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:EncryptionContextKeys中同时使用 kms:EncryptionContext: conte xt-key。以下密钥策略声明使用 kms:EncryptionContext: 上下文密钥条件来要求同时包含Department=ITProject=Alpha对的加密上下文。它结合使用 kms:EncryptionContextKeys 条件键与 ForAllValues 集合运算符以仅允许 DepartmentProject 加密上下文键。

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "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" } } }

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

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

要要求对加密上下文密钥和值进行区分大小写的评估,请在同一个策略声明中同时使用kms:EncryptionContextKeys和 kmsEncryptionContext:: 上下文密钥策略条件。区分大小写的条件运算符(例如 StringEquals)始终适用于条件的值。加密上下文键(例如 AppName)是 kms:EncryptionContextKeys 条件的值。加密上下文值(例如ExampleApp)是 kms:EncryptionContext: 上下文密钥条件的值。

例如,在以下示例密钥策略语句中,由于 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" } } }

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

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

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

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

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

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

"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 联合身份验证登录 AWS 的用户。

与所有变量一样,这些变量只能用于 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

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

kms:EncryptionContextKeys

字符串(列表)

多值

CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥策略和 IAM policy

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

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

注意

条件密钥值(包括加密上下文密钥)必须符合密 AWS 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

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

kms:ExpirationModel

字符串

单值

ImportKeyMaterial

密钥策略和 IAM policy

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

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

到期日期和时间由ValidTo参数的值决定。除非 ExpirationModel 参数的值为 KEY_MATERIAL_DOES_NOT_EXPIRE,否则 ValidTo 参数是必需的。您也可以使用 k ms: ValidTo 条件密钥要求特定的到期日期作为访问条件。

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

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

您也可以使用 kms:ExpirationModel 条件键,以仅允许用户在密钥材料过期时导入密钥材料。以下示例密钥策略语句结合使用 kms:ExpirationModel 条件键和 空值条件运算符,以仅允许用户在请求没有 ExpirationModel 参数时导入密钥材料。的默认值 ExpirationModel 为KEY_MATERIAL_EXPIRES

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

另请参阅

kms: GrantConstraintType

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

kms:GrantConstraintType

字符串

单值

CreateGrant

密钥策略和 IAM policy

您可以使用此条件键根据请求中的授权约束类型来控制对CreateGrant操作的访问权限

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

重要

不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。

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

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

另请参阅

kms: GrantIsFor AWSResource

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

kms:GrantIsForAWSResource

布尔值

单值

CreateGrant

ListGrants

RevokeGrant

密钥策略和 IAM policy

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

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

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

另请参阅

kms: GrantOperations

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

kms:GrantOperations

字符串

多值

CreateGrant

密钥策略和 IAM policy

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

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

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

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

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

以下示例密钥策略语句使用 kms:GrantOperations 条件键,以仅允许在授权操作为 EncryptReEncryptTo 或此两者时创建授权。如果授权包括任何其他操作,则 CreateGrant 请求失败。

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

如果将策略条件中的集合运算符更改为 ForAnyValue,则策略语句将要求授权中至少有一个授权操作是 EncryptReEncryptTo,但它允许其他授权操作,例如 DecryptReEncryptFrom

另请参阅

kms: GranteePrincipal

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

kms:GranteePrincipal

字符串

单值

CreateGrant

IAM 和密钥策略

您可以使用此条件键根据请求中GranteePrincipal参数的值来控制对CreateGrant操作的访问权限。例如,您可以仅允许在 CreateGrant 请求中的被授权主体与条件语句中指定的主体匹配时创建使用 KMS 密钥的授权。

要指定被授权人委托人,请使用委托人的亚马逊资源名称 (ARN)。 AWS 有效的委托人包括 AWS 账户IAM 用户、IAM 角色、联合用户和代入角色用户。有关委托人的 ARN 语法的帮助,请参阅 IAM 用户指南中的 IA M ARN

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

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

另请参阅

kms: KeyOrigin

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

kms:KeyOrigin

字符串

单值

CreateKey

KMS 密钥资源操作

IAM 策略

密钥策略和 IAM 策略

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

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

例如,只有在 () 中生成密钥材料、仅当密钥材料是在与自定义密钥存储库关联的 AWS CloudHSM 集群 AWS KMS (AWS_KMS) 中生成密钥材料时,或者仅当密钥材料是从外部来源 (AWS_CLOUDHSMEXTERNAL) 导入时,才能创建 KMS 密钥。

以下示例密钥策略声明仅在创建密钥材料时才使用kms:KeyOrigin条件密钥创 AWS KMS 建 KMS 密钥。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "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

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

kms:KeySpec

字符串

单值

CreateKey

KMS 密钥资源操作

IAM 策略

密钥策略和 IAM 策略

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

您可以在 IAM 策略中使用此条件密钥,根据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

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

kms:KeyUsage

字符串

单值

CreateKey

KMS 密钥资源操作

IAM 策略

密钥策略和 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

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

kms:MacAlgorithm

字符串

单值

GenerateMac

VerifyMac

密钥策略和 IAM policy

您可以使用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

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

kms:MessageType

字符串

单值

Sign

Verify

密钥策略和 IAM 策略

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

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

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

另请参阅

kms: MultiRegion

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

kms:MultiRegion

布尔值

单值

CreateKey

KMS 密钥资源操作

密钥策略和 IAM 策略

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

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

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

kms: MultiRegionKeyType

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

kms:MultiRegionKeyType

字符串

单值

CreateKey

KMS 密钥资源操作

密钥策略和 IAM 策略

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

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

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

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

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

kms: PrimaryRegion

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

kms:PrimaryRegion

字符串(列表)

单值

UpdatePrimaryRegion

密钥策略和 IAM policy

您可以使用此条件键来限制UpdatePrimaryRegion操作中的目标区域。它们 AWS 区域 可以托管您的多区域主密钥。

kms:PrimaryRegion条件键根据PrimaryRegion参数的值控制对UpdatePrimaryRegion操作的访问权限。该PrimaryRegion参数指定要提升 AWS 区域 为主密钥的多区域副本密钥。条件的值是一个或多个 AWS 区域 名称,例如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

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

kms:ReEncryptOnSameKey

布尔值

单值

ReEncrypt

密钥策略和 IAM policy

您可以使用此条件密钥来控制对ReEncrypt操作的访问权限,具体取决于请求指定的目标 KMS 密钥是否与用于原始加密的目标密钥相同。

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

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

kms: RequestAlias

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

kms:RequestAlias

字符串(列表)

单值

加密操作

DescribeKey

GetPublicKey

密钥策略和 IAM policy

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

此条件支持中的基于属性的访问控制 (ABAC) AWS KMS,允许您根据 KMS 密钥的标签和别名控制对 KMS 密钥的访问。您可以使用标签和别名,在不更改策略或授权的情况下,允许或拒绝对 KMS 密钥的访问权限。有关更多信息,请参阅 AWS 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" } } }

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

kms: ResourceAliases

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

kms:ResourceAliases

字符串(列表)

多值 KMS 密钥资源操作

仅限 IAM policy

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

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

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

注意

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

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

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

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

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

例如,以下 IAM 策略声明允许委托人对指定 AWS 账户 的 KMS 密钥中与finance-key别名关联的任何 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

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

kms:ReplicaRegion

字符串(列表)

单值

ReplicateKey

密钥策略和 IAM policy

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

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

例如,以下密钥策略声明使用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操作的访问权限,请使用 k ms: PrimaryRegion 条件密钥。

kms: RetiringPrincipal

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

kms:RetiringPrincipal

字符串(列表)

单值

CreateGrant

密钥策略和 IAM policy

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

要指定即将退出的委托人,请使用委托人的 Amazon 资源名称 (ARN)。 AWS 有效的委托人包括 AWS 账户IAM 用户、IAM 角色、联合用户和代入角色用户。有关委托人的 ARN 语法的帮助,请参阅 IAM 用户指南中的 IA M ARN

以下示例密钥策略声明允许用户为 KMS 密钥创建授权。kms:RetiringPrincipal条件键将权限限制为授予中即将退休的委托人为的CreateGrant请求。LimitedAdminRole

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

另请参阅

kms: ScheduleKeyDeletionPendingWindowInDays

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

kms:ScheduleKeyDeletionPendingWindowInDays

数值

单值

ScheduleKeyDeletion

密钥策略和 IAM policy

您可以使用此条件键来限制委托人可以在ScheduleKeyDeletion请求PendingWindowInDays参数中指定的值。

PendingWindowInDays指定删除密钥之前 AWS KMS 要等待的天数。 AWS KMS 允许您指定 7 到 30 天之间的等待期,但您可以使用kms:ScheduleKeyDeletionPendingWindowInDays条件键进一步限制等待时间,例如在有效范围内强制规定最短等待时间。

例如,以下密钥政策语句使用 kms:ScheduleKeyDeletionPendingWindowInDays 条件键,以防止主体安排在等待时间小于或等于 21 天时删除密钥。

{ "Effect": "Deny", "Action": "kms:ScheduleKeyDeletion", "Principal": "*", "Resource": "*", "Condition" : { "NumericLessThanEquals" : { "kms:ScheduleKeyDeletionPendingWindowInDays" : "21" } } }

kms: SigningAlgorithm

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

kms:SigningAlgorithm

字符串

单值

Sign

Verify

密钥策略和 IAM policy

您可以使用kms:SigningAlgorithm条件键根据请求中SigningAlgorithm参数的值来控制对 “签名” 和 “验证” 操作的访问权限。此条件密钥对以外执行的操作没有影响 AWS KMS,例如使用外部非对称 KMS 密钥对中的公钥验证签名。 AWS 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

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

kms:ValidTo

Timestamp

单值

ImportKeyMaterial

密钥策略和 IAM policy

kms:ValidTo条件密钥根据请求中ValidTo参数的值控制对ImportKeyMaterial操作的访问权限,该值决定了导入的密钥材料何时过期。此值用 Unix 时间表示。

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

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

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

另请参阅

kms: ViaService

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

kms:ViaService

字符串

单值

KMS 密钥资源操作

密钥策略和 IAM policy

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

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "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 条件键以防止在代表 ExampleRole 发出来自 AWS Lambda 的请求时将客户托管密钥用于 Encrypt 操作。

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

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

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

  • 使用集成服务的权限。有关向用户提供与集成的 AWS 服务的访问权限的详细信息 AWS KMS,请参阅集成服务的文档。

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

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

支持 kms:ViaService 条件键的服务

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

注意

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

服务名称 AWS KMS ViaService 名字
AWS App Runner apprunner.AWS_region.amazonaws.com
AWS AppFabric appfabric.AWS_region.amazonaws.com
Amazon AppFlow appflow.AWS_region.amazonaws.com
AWS Application Migration Service mgn.AWS_region.amazonaws.com
Amazon Athena athena.AWS_region.amazonaws.com
AWS Audit Manager auditmanager.AWS_region.amazonaws.com
Amazon Aurora rds.AWS_region.amazonaws.com
AWS Backup backup.AWS_region.amazonaws.com
AWS Backup 网关 backup-gateway.AWS_region.amazonaws.com
Amazon Chime SDK chimevoiceconnector.AWS_region.amazonaws.com
AWS 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 Q in Connect wisdom.AWS_region.amazonaws.com
AWS Database Migration Service (AWS DMS) dms.AWS_region.amazonaws.com
AWS Directory Service directoryservice.AWS_region.amazonaws.com
Amazon DynamoDB dynamodb.AWS_region.amazonaws.com
Amazon DocumentDB docdb-elastic.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 ElastiCache

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

  • elasticache.AWS_region.amazonaws.com

  • dax.AWS_region.amazonaws.com

AWS Elemental MediaTailor mediatailor.AWS_region.amazonaws.com
AWS 实体分辨率 entityresolution.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
AWS Glue glue.AWS_region.amazonaws.com
AWS Ground Station groundstation.AWS_region.amazonaws.com
Amazon GuardDuty malware-protection.AWS_region.amazonaws.com
AWS HealthLake healthlake.AWS_region.amazonaws.com
AWS 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 Data Firehose firehose.AWS_region.amazonaws.com
Amazon Kinesis Video Streams kinesisvideo.AWS_region.amazonaws.com
AWS Lambda lambda.AWS_region.amazonaws.com
Amazon Lex lex.AWS_region.amazonaws.com
AWS 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
AWS Mainframe Modernization m2.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
适用于 Redis 的 Amazon MemoryDB 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
AWS HealthOmics omics.AWS_region.amazonaws.com
亚马逊 OpenSearch 服务 es.AWS_region.amazonaws.com, aoss.AWS_region.amazonaws.com
AWS Proton proton.AWS_region.amazonaws.com
Amazon Quantum Ledger Database (Amazon QLDB) qldb.AWS_region.amazonaws.com
Amazon RDS 性能详情 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 复制的数据存储 ards.AWS_region.amazonaws.com
Amazon SageMaker sagemaker.AWS_region.amazonaws.com
AWS Secrets Manager secretsmanager.AWS_region.amazonaws.com
Amazon Security Lake securitylake.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
AWS Snowball importexport.AWS_region.amazonaws.com
AWS Storage Gateway storagegateway.AWS_region.amazonaws.com
AWS Systems Manager Incident Manager ssm-incidents.AWS_region.amazonaws.com
AWS Systems Manager Incident Manager 联系人 ssm-contacts.AWS_region.amazonaws.com
Amazon Timestream timestream.AWS_region.amazonaws.com
Amazon Translate translate.AWS_region.amazonaws.com
AWS Verified Access verified-access.AWS_region.amazonaws.com
Amazon WorkMail workmail.AWS_region.amazonaws.com
Amazon WorkSpaces workspaces.AWS_region.amazonaws.com
Amazon WorkSpaces 瘦客户机 thinclient.AWS_region.amazonaws.com
Amazon WorkSpaces Web workspaces-web.AWS_region.amazonaws.com
AWS X-Ray xray.AWS_region.amazonaws.com

kms: WrappingAlgorithm

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

kms:WrappingAlgorithm

字符串

单值

GetParametersForImport

密钥策略和 IAM policy

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

以下示例密钥策略语句使用 kms:WrappingAlgorithm 条件键为示例用户提供调用 GetParametersForImport 操作的权限,但阻止他们使用 RSAES_OAEP_SHA_1 包装算法。当 GetParametersForImport 请求中的 WrappingAlgorithmRSAES_OAEP_SHA_1 时,操作会失败。

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

另请参阅

kms: WrappingKeySpec

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

kms:WrappingKeySpec

字符串

单值

GetParametersForImport

密钥策略和 IAM policy

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

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

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

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_4096" } } }

另请参阅