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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

针对 AWS KMS 使用策略条件

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

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

AWS 全局条件键

AWS 定义全局条件键,它是一组策略条件键,适用于使用 IAM 进行访问控制的所有 AWS 服务。您可以在 AWS KMS 密钥策略和 IAM 策略中使用全局条件键。例如,您可以使用 AWS:普罗马恩 允许访问 客户主密钥 (CMK)仅当请求中的主体由条件密钥值中的Amazon资源名称(ARN)代表时。

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

有关 AWS 全局条件密钥,包括可用的请求类型,请参阅 AWS 全局条件上下文关键字IAM 用户指南. 如需使用全局条件密钥的示例 IAM 政策,请参阅 控制对请求的访问控制标签键IAM 用户指南.

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

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

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

请考虑以下情况:

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

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

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

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

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

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

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

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

如果您在一个允许或拒绝访问 AWS KMS CMKs,您可能无意中拒绝访问 AWS 使用的服务 AWS KMS 代表。

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

AWS KMS 条件键

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

API 操作请求的条件

许多 AWS KMS 条件键控制对A的访问 CMK 根据请求中的参数值 AWS KMS 操作。例如,您可以使用 KMS:CustomerMasterKeySpec 状态键 IAM 允许使用 Createkey 只有当 CustomerMasterKeySpec 参数 CreateKey 请求是 RSA_4096.

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

条件 CMKs 用于API操作

一些 AWS KMS 条件键控制基于 CMK 在操作中使用。例如,您可以使用 KMS:Keyorigin 允许负责人呼叫的条件 GenerateDataKey 在 CMK 仅当 Origin 的 CMK 是 AWS_KMS。要了解如何以此方式使用条件密钥,请参阅条件密钥的描述。

该操作必须是 CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources 列中查找 CMK 值。 如果您使用此类型的条件密钥而不是特定的操作 CMK 资源,例如 列表键,该权限不会生效,因为这种情况无法满足。没有 CMK 授权 ListKeys 操作和否 CustomerMasterKeySpec 属性。

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

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

布尔型

CreateKey

PutKeyPolicy

仅 IAM 策略

密钥政策和 IAM 策略

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

以下示例 IAM 政策声明阻止用户通过拒绝他们创建的权限来绕过策略锁定安全检查 CMKs 当 BypassPolicyLockoutSafetyCheck 参数 CreateKey 请求是 true.

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

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

此策略语句不是使用显式 Deny,而是结合使用 AllowNull condition operator,以仅当请求不含 BypassPolicyLockoutSafetyCheck 参数时,允许访问。未使用参数时,默认值为 false。这种较弱的政策声明可能在很少有必要旁路的情况下表现得更加强烈。

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

另请参阅

kms:CallerAccount

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

kms:CallerAccount

:字符串

CMK 资源操作

仅密钥策略

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

由于此条件仅在关键策略中有效,您可以使用它控制对任何 CMK 资源操作,即任何 AWS KMS 使用特定CMK的操作。 要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources 列中查找 CMK 值。

例如,以下策略语句演示了如何使用 kms:CallerAccount 条件键。本政策声明属于 AWS 管理 CMK 对于 Amazon EBS. 它结合了 Principal 元素,该元素利用 kms:CallerAccount 条件键指定所有 AWS 身份,从而高效地向 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

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

kms:CustomerMasterKeySpec

:字符串

CreateKey

CMK 资源操作

IAM 策略

密钥政策和 IAM 策略

TheThethe kms:CustomerMasterKeySpec 条件关键控制基于 CustomerMasterKeySpec 属性 CMK 由操作创建或使用。

您可以在 IAM 控制访问 Createkey 基于 CustomerMasterKeySpec 参数 CreateKey 请求。例如,您可以使用此条件来允许用户只创建对称 CMKs 或者 CMKs 使用RSA密钥。

以下示例 IAM 政策声明使用 kms:CustomerMasterKeySpec 允许负责人创建 CMK 仅当 CustomerMasterKeySpec 请求中 RSA_4096.

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

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

例如, IAM 政策允许负责人执行指定 CMK 资源操作,但只与对称配合使用 CMKs 在帐户中。

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

另请参阅

kms.CustomerMasterKeyUsage

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

kms:CustomerMasterKeyUsage

:字符串

CreateKey

CMK 资源操作

IAM 策略

密钥政策和 IAM 策略

TheThethe kms:CustomerMasterKeyUsage 条件关键控制基于 KeyUsage 属性 CMK 由操作创建或使用。

您可以使用此条件键控制对 Createkey 基于 键盘使用 请求中的参数。KeyUsage 的有效值为 ENCRYPT_DECRYPTSIGN_VERIFY

例如,您可以允许用户创建 CMK 仅当 KeyUsageENCRYPT_DECRYPT 或拒绝用户权限 KeyUsageSIGN_VERIFY.

以下示例IAM政策声明使用 kms:CustomerMasterKeyUsage 允许用户创建 CMK 仅当 KeyUsageENCRYPT_DECRYPT.

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

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

例如, IAM 政策允许负责人执行指定 CMK 资源运营,但只有 CMKs 用于签署和验证的帐户。

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

另请参阅

kms:DataKeyPairSpec

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

kms:DataKeySpec

:字符串

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

密钥政策和 IAM 策略

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

以下示例关键策略声明使用 kms:DataKeyPairSpec 允许用户使用 CMK 仅生成RSA数据密钥对。

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

另请参阅

kms:EncryptionAlgorithm

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

kms:EncryptionAlgorithm

:字符串

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥政策和 IAM 策略

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

此条件密钥对于以外所执行操作没有影响 AWS KMS,例如对不对称的公钥进行加密 CMK 以外的对 AWS KMS.

请求中的 EncryptionAlgorithm 参数

允许用户仅使用具有特定加密算法的 CMK,使用政策声明 Deny 效果和 StringNotEquals 状态操作符。例如,以下示例关键政策声明禁止负责人 ExampleRole 使用此对称的角色 CMK 在指定的密码操作中,除非请求中的加密算法是 RSAES_OAEP_SHA_256.

与允许用户使用特定加密算法的策略声明不同,一个具有双阴性的策略声明,这一策略声明可以防止其他策略和授予对此 CMK 从允许此角色使用其他加密算法。TheThethe Deny 本政策声明优先于任何关键政策或 IAM 政策 Allow 效果,并且优先于此项所有授权 CMK 及其负责人。

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

用于操作的加密算法

还可以使用 kms:EncryptionAlgorithm 条件键,控制对生成数据密钥和数据密钥对的操作的访问。这些操作仅使用对称 CMKs 和 SYMMETRIC_DEFAULT 算法。

例如,此 IAM 策略限制其委托人只能使用对称加密。它拒绝访问任何 CMK 在示例帐户中,除非请求中指定的加密算法为symmetric_default,否则加密操作中会指定加密算法。添加 GenerateDataKey通用数据主题概述原始文本GenerateDataKeyAir,和 GenerateDataKeyAirwithOutplaintext 无法立即使用不对称效果 CMK 或对不对称加密算法来加密数据密钥或对数据密钥对中的私钥加密。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:GenerateDataKeyPair*" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }

另请参阅

kms:EncryptionContext:

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

kms:EncryptionContext:

:字符串

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

密钥政策和 IAM 策略

您可以使用 kms:EncryptionContext: 控制访问权限的条件密钥前缀 对称度 CMK 基于加密操作请求中的加密上下文。使用此条件键前缀可评估加密上下文对中的键和值。要仅评估加密上下文键,请使用 kms:EncryptionContextKeys 条件键。

一个 加密上下文 是一套非秘密密钥–值对,您可以在请求中包含 AWS KMS 使用对称的加密操作 CMK (加密解密GenerateDataKey通用数据主题概述原始文本,和 重新加密)和 CreateGrant 操作。在加密操作中指定加密上下文时,您必须在解密操作中指定相同的加密上下文。否则,解密请求会失败。

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

要使用 kms:EncryptionContext: 条件键前缀,请将 encryption_context_key 占位符替换为加密上下文键。使用加密上下文值替换 encryption_context_value 占位符。

"kms:EncryptionContext:encryption_context_key": "encryption_context_value"

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

"kms:EncryptionContext:AppName": "ExampleApp"

以下示例键策略语句使用此条件键。由于请求中可存在多个加密上下文对,条件运算符必须包含 ForAnyValueForAllValues

本政策允许负责人使用 CMK 在 GenerateDataKey 仅当请求中的至少一个加密上下文对 "AppName": "ExampleApp".

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

需要多个加密上下文对

要请求多个加密上下文对,您可以包括 kms:EncryptionContext: 条件的多个实例。例如,以下示例策略语句使用 ForAllValues 运算符来要求存在以下两个加密上下文对(而不是其他对)。指定上下文对的顺序不重要。

  • "AppName": "ExampleApp"

  • "FilePath": "/var/opt/secrets/"

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

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

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

但是,在策略条件中,条件键不区分大小写。条件值是否区分大小写由您使用的策略条件运算符确定,例如 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": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }

要要求大小写加密上下文密钥,请使用 KMS:加密接入密钥 具有区分大小写的条件操作员的策略条件,例如 StringEquals...在此策略条件下,由于加密上下文密钥是策略条件值,因此其病例灵敏度由条件操作员确定。

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

如需要求加密上下文键和值均为区分大小写的评估,请在同一个策略语句中同时使用 kms:EncryptionContextKeyskms:EncryptionContext: 策略条件。例如,在以下示例策略语句中,由于 StringEquals 运算符区分大小写,加密上下文键和加密上下文值均区分大小写。

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

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

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

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

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

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

考虑一个您希望所有可以承担角色的用户的情况 CMK 对其数据进行加密和解密。但是,您希望仅允许这些用户解密其加密的数据。首先,要求对 AWS KMS 的每个请求均包含一个加密上下文,其中键为 user,值为调用方的 AWS 用户名,例如下面的项。

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

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

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

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

只能在 kms:EncryptionContext: 条件键对的值中使用 IAM 策略变量。不能在键中使用变量。

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

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

例如,以下键策略语句与上一个类似。不过,条件需要加密上下文,其中键为 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": { "ForAnyValue: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 策略

您可以使用 kms:EncryptionContextKeys 控制访问权限的条件键 对称度 CMK 基于加密操作请求中的加密上下文。使用此条件键前缀仅评估各个加密上下文对中的键。要同时评估键和值,请使用 kms:EncryptionContext: 条件键前缀。

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

可以使用此条件键根据 AWS KMS API 请求中的加密上下文来控制访问。加密上下文是一组密钥–您可以包含在 AWS KMS 带对称的加密操作 CMKs (加密解密GenerateDataKey通用数据主题概述原始文本,和 重新加密)和 CreateGrant 操作。由于请求中可存在多个加密上下文对,条件运算符必须包含 ForAnyValueForAllValues

以下示例策略声明使用 kms:EncryptionContextKeys 允许使用 CMK 仅当请求中至少一个加密上下文对中的至少一个包含 AppName 关键,无论其值如何。

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

由于 StringEquals 条件操作区分大小写,先前的策略语句对加密上下文键的拼写和大小写有要求。不过您可以使用忽略键大小写的条件运算符,例如 StringEqualsIgnoreCase

您可以在各个条件中指定多个加密上下文键。例如,以下策略语句使用 ForAllValuesStringEquals 条件运算符,仅当请求中的加密上下文包含 AppNameFilePath 键(忽视其值且不能是其他键)时,才允许进行指定的运算。加密上下文中键的顺序不重要。

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

您还可以使用 kms:EncryptionContextKeys 要求加密操作中加密上下文的条件密钥 CMK.

以下示例关键策略声明使用 kms:EncryptionContextKeys 条件键与 Null condition operator 允许访问 CMK 仅当 kms:EncryptionContextKeys API请求中存在条件密钥(不是空)。它不会检查加密上下文的键或值,仅检查是否存在加密上下文。

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

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

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

到期日期和时间由 ValidTo 参数的值确定。TheThethe ValidTo 参数是必需的,除非该值为 ExpirationModel 参数是 KEY_MATERIAL_DOES_NOT_EXPIRE。您还可以使用 KMS:验证 要求特定到期日期的条件密钥作为ACCESS的条件。

以下示例策略声明使用 kms:ExpirationModel 条件键,允许用户将关键材料导入到A CMK 仅当请求包括 ExpirationModel 参数及其值 KEY_MATERIAL_DOES_NOT_EXPIRE.

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

您也可以使用 kms:ExpirationModel 条件键,以仅当密钥材料过期时,允许用户导入密钥材料,而不在条件中指定到期日期。以下示例策略语句结合使用 kms:ExpirationModel 条件键和 Null condition operator,以仅当请求没有 ExpirationModel 参数时,允许用户导入密钥材料。

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

另请参阅

kms:GrantConstraintType

AWS 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

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

kms:GrantIsForAWSResource

布尔型

CreateGrant

ListGrants

RevokeGrant

密钥政策和 IAM 策略

允许或拒绝授权 CreateGrantListgrants,或 撤销授予 只有在 AWS 与 AWS KMS 代表用户调用操作。此策略条件不允许用户直接拨打这些授予操作。

以下示例关键策略声明使用 kms:GrantIsForAWSResource 状态键。它允许 AWS 与 AWS KMS,例如 Amazon EBS,创建对此项目的授予 CMK 代表指定用户。

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

另请参阅

kms:GrantOperations

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

kms:GrantOperations

:字符串

CreateGrant

密钥政策和 IAM 策略

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

以下示例策略声明使用 kms:GrantOperations 条件密钥,允许用户创建授予授权来加密和重新加密授权 CMK 是目的地 CMK. 以下示例显示了密钥策略中的策略语句。

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

另请参阅

kms:GranteePrincipal

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

kms:GranteePrincipal

:字符串

CreateGrant

IAM 和密钥策略

您可以使用此条件键控制对 CreateGrant 基于 Granteeprincipal 请求中的参数。例如,您可以允许用户创建授予以使用 CMK 只有当受让人在 CreateGrant 请求与“条件声明”中指定的负责人匹配。

以下示例策略声明使用 kms:GranteePrincipal 允许用户创建授权的条件键 CMK 只有当授予人在授予中的委托人 LimitedAdminRole.

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

另请参阅

kms:KeyOrigin

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

kms:KeyOrigin

:字符串

CreateKey

CMK 资源操作

IAM 策略

密钥政策和 IAM 策略

TheThethe kms:KeyOrigin 条件关键控制基于 Origin 属性 CMK 由操作创建或使用。它作为资源状况或请求条件工作。

您可以使用此条件键控制对 Createkey 基于 原产地 请求中的参数。有效值 OriginAWS_KMSAWS_CLOUDHSM,和 EXTERNAL.

例如,您可以允许用户创建 CMK 仅在KMS中生成关键物料时(AWS_KMS),仅当关键材料在 AWS CloudHSM 与A相关的群集 自定义钥匙店AWS_CLOUDHSM),或仅当 密钥材料已导入 从外部来源(EXTERNAL)。

以下示例策略声明使用 kms:KeyOrigin 允许用户创建 CMK 仅当 AWS KMS 创建关键材料。

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

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

例如, IAM 政策允许负责人执行指定 CMK 资源运营,但只有 CMKs 在自定义密钥存储中创建的帐户中。

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

另请参阅

kms:MessageType

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

kms:MessageType

:字符串

Sign

Verify

密钥政策和 IAM 策略

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

例如,以下关键策略声明使用 kms:MessageType 允许用户使用不对称的条件键 CMK 要签署消息,但不是消息摘要。

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

另请参阅

kms:ReEncryptOnSameKey

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

kms:ReEncryptOnSameKey

布尔型

ReEncrypt

密钥政策和 IAM 策略

您可以使用此条件键控制对 重新加密 基于请求指定目标的操作 CMK 这与原始加密使用的相同。例如,以下策略声明使用 kms:ReEncryptOnSameKey 允许用户仅在目标时重新加密的条件密钥 CMK 与原始加密相同。以下示例显示了密钥策略中的策略语句。

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

kms:RetiringPrincipal

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

kms:RetiringPrincipal

字符串(列表)

CreateGrant

密钥政策和 IAM 策略

您可以使用此条件键控制对 CreateGrant 基于 退休金委托人 请求中的参数。例如,您可以允许用户创建授予以使用 CMK 仅当 RetiringPrincipalCreateGrant 请求与 RetiringPrincipal 在条件声明中。

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

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

另请参阅

kms:SigningAlgorithm

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

kms:SigningAlgorithm

:字符串

Sign

Verify

密钥政策和 IAM 策略

您可以使用 kms:SigningAlgorithm 控制访问 签名验证 基于 Signing算法 请求中的参数。此条件密钥对于以外所执行操作没有影响 AWS KMS,例如在不对称的公钥上验证签名 CMK 以外的对 AWS KMS.

以下示例关键策略允许用户假设 testers 使用 CMK 只在请求使用的签名算法为RSASSA_PSS算法时才签署消息,例如 RSASSA_PSS_SHA512.

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

TheThethe kms:ValidTo 条件键控制访问 导入键材料 基于 有效 请求中的参数,确定导入的密钥材料何时到期。此值用 Unix 时间表示。

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

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

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

另请参阅

kms:ViaService

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

kms:ViaService

:字符串

CMK 资源操作

密钥政策和 IAM 策略

TheThethe kms:ViaService 条件关键限制使用 AWS KMS 客户主密钥 (CMK)至指定请求 AWS 服务。您可以在每个 kms:ViaService 状态键。 该操作必须是 CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources 列中查找 CMK 值。

例如,关键策略的以下声明使用 kms:ViaService 允许A 客户管理 CMK 仅在请求来源时才用于指定的操作 Amazon EC2 或 Amazon RDS 在 美国西部(俄勒冈) 代表 ExampleUser.

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

您也可以使用 kms:ViaService 拒绝使用A的条件密钥 CMK 请求来自特定服务。例如,关键策略的以下策略声明使用 kms:ViaService 防止客户管理的条件关键字 CMK 从用途 Encrypt 请求来自 AWS Lambda 代表 ExampleUser.

{ "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 条件键时,服务代表 AWS 账户中的委托人发出请求。这些委托人必须具有以下权限:

  • 使用 CMK. 负责人需要向集成服务授予这些权限,以便服务可以使用客户管理 CMK 代表委托人。有关更多信息,请参阅 AWS 服务如何使用 AWS KMS。)

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

全部 AWS管理 CMKs 使用 kms:ViaService 关键策略文件中的条件密钥。这种情况允许 CMK 仅用于创建服务的请求 CMK. 查看AWS管理的关键政策 CMK,使用 GetKeyPolicy 操作。

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

以下表格列表 AWS 与 AWS KMS,支持客户管理 CMKs,并支持 kms:ViaService 客户管理中的条件密钥 CMKs. 此表中的服务可能在有些地区不可用。使用 .amazonaws.com 后缀 AWS KMS Viaservice名称 AWS 分区。

支持 kms:ViaService 客户管理中的条件密钥 CMKs
服务名称 AWS KMS Viaservice名称
AWS Backup backup/AWS_region*.amazonaws.com
Amazon Connect connect/AWS_region*.amazonaws.com
AWS Database Migration Service (AWS DMS) dmsAWS_region*.amazonaws.com
AWS Directory Service 董事服务。AWS_region*.amazonaws.com
Amazon DynamoDB dynamodb.AWS_region*.amazonaws.com
Amazon EC2 Systems Manager ssm.AWS_region*.amazonaws.com
Amazon Elastic Block Store (Amazon EBS) ec2:*AWS_region.Amazonaws.com(仅限EBS)
Amazon Elastic File System elasticfilesystem。AWS_region*.amazonaws.com
Amazon Elasticsearch Service .esAWS_region*.amazonaws.com
Amazon FSx FSX。AWS_region*.amazonaws.com
AWS Glue glueAWS_region*.amazonaws.com
Amazon Kinesis kinesis/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
Amazon Managed Streaming for Apache Kafka Kafka。AWS_region*.amazonaws.com
Amazon Neptune rdsAWS_region*.amazonaws.com
Amazon Redshift redshift/AWS_region*.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rdsAWS_region*.amazonaws.com
Amazon RDS Performance Insights rdsAWS_region*.amazonaws.com
AWS Secrets Manager (Secrets Manager) secretsmanager.AWS_region*.amazonaws.com
Amazon Simple Email Service (Amazon SES) sesAWS_region*.amazonaws.com
Amazon Simple Notification Service (Amazon SNS) snsAWS_region*.amazonaws.com
Amazon Simple Storage Service (Amazon S3) s3AWS_region*.amazonaws.com
AWS Snowball importexportAWS_region*.amazonaws.com
Amazon SQS sqsAWS_region*.amazonaws.com
Amazon WorkMail workmail/AWS_region*.amazonaws.com
Amazon WorkSpaces workspaces://AWS_region*.amazonaws.com
AWS X-Ray xray/AWS_region*.amazonaws.com

kms:WrappingAlgorithm

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

kms:WrappingAlgorithm

:字符串

GetParametersForImport

密钥政策和 IAM 策略

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

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

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

kms:WrappingKeySpec

:字符串

GetParametersForImport

密钥政策和 IAM 策略

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

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

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

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

另请参阅