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:PrincipalArn 条件键,以仅当请求中的委托人由您指定的 Amazon 资源名称 (ARN) 表示时才允许访问。

除每一个 AWS 服务支持的全局条件键以外,IAM 还定义了 AWS 服务可选择是否支持的条件键。AWS KMS 支持下列可选的全局条件键。

有关所有可选全局条件键的列表和说明,请参阅 AWS Identity and Access Management 用户指南 中的部分服务可用的键。有关在 IAM 策略中使用这些条件键的示例,请参阅 IAM 用户指南 中的控制对请求的访问控制标签键

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

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

请考虑以下情况:

  1. 您将类似 AWS:基于源 IP 拒绝对 AWS 的访问中所示的策略附加到 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 策略中使用以下全局条件键来授予或拒绝对特定 VPC 或 VPC 终端节点的访问权限。您还可以在 AWS KMS 密钥策略中使用这些全局条件键,以将对 AWS KMS CMK 的访问限制为来自 VPC 或 VPC 终端节点的请求。

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

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

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

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

AWS KMS 条件键

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

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

kms:BypassPolicyLockoutSafetyCheck

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

kms:BypassPolicyLockoutSafetyCheck

Boolean

CreateKey

PutKeyPolicy

CreateKey:仅 IAM 策略

PutKeyPolicy:IAM 和密钥策略

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

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

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

字符串

以下操作外,所有 AWS KMS 操作都有 kms:CallerAccount 条件键:CreateKeyGenerateRandomListAliasesListKeysListRetirableGrantsRetireGrant

仅密钥策略

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

例如,以下策略语句演示了如何使用 kms:CallerAccount 条件键。此策略语句位于适用于 Amazon EBS 的 AWS 托管 CMK 的密钥策略中。它结合了 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:EncryptionContext:

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

kms:EncryptionContext:

字符串

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyWithoutPlaintext

ReEncrypt

IAM 和密钥策略

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

加密上下文是一组非机密键–值对,可以包括在任意 AWS KMS 加密操作(EncryptDecryptGenerateDataKeyGenerateDataKeyWithoutPlaintextReEncrypt)以及 CreateGrant 操作的请求中。在加密操作中指定加密上下文时,您必须在解密操作中指定相同的加密上下文。否则,解密请求会失败。

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

"kms:EncryptionContext:encryption_context_key": "encryption_context_value"

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

"kms:EncryptionContext:AppName": "ExampleApp"

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

此策略仅当请求中至少有一个加密上下文是 "AppName": "ExampleApp" 时,才允许委托人在 GenerateDataKey 请求中使用 CMK。

{ "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: 前缀和 encryption_context_key 替换组成的条件键不区分大小写。使用此条件的策略不检查条件键任何元素的大小写。条件值(即 encryption_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:EncryptionContextKeys 策略条件和区分大小写的条件运算符,例如 StringEquals。在此策略条件中,由于加密上下文键是策略条件值,它是否区分大小写由条件运算符确定。

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

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

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

另请参阅

kms:EncryptionContextKeys

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

kms:EncryptionContextKeys

字符串(列表)

CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyWithoutPlaintext

ReEncrypt

IAM 和密钥策略

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

可以使用此条件键根据 AWS KMS API 请求中的加密上下文来控制访问。加密上下文是您可包含在 AWS KMS 加密操作(EncryptDecryptGenerateDataKeyGenerateDataKeyWithoutPlaintextReEncrypt)和 CreateGrant 操作中的一组键–值对。由于请求中可存在多个加密上下文对,条件运算符必须包含 ForAnyValueForAllValues

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

{ "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,以仅当 API 请求中存在 kms:EncryptionContextKeys 条件键(不为 null)时,允许对 CMK 的访问。它不会检查加密上下文的键或值,仅检查是否存在加密上下文。

{ "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 参数的值确定。除非 ExpirationModel 参数的值为 KEY_MATERIAL_DOES_NOT_EXPIRE,否则 ValidTo 参数是必需的。您还可以使用 kms:ValidTo 条件键要求特定到期日期作为访问条件。

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

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

Boolean

CreateGrant

ListGrants

RevokeGrant

IAM 和密钥策略

当任何与 AWS KMS 集成的 AWS 服务代表用户执行授权操作时,允许或拒绝对 CreateGrantListGrantsRevokeGrant 操作的访问。此条件键不影响用户直接执行授权操作的权限。

例如,以下键策略语句使用 kms:GrantIsForAWSResource 条件键。它仅在任一集成服务代表某个用户创建授权时,允许该用户在此 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 和密钥策略

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

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

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

IAM 策略

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

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

以下示例策略语句使用 kms:KeyOrigin 条件键,以仅当密钥源为 EXTERNAL (即,密钥材料是导入的) 时,允许用户创建 CMK。

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

另请参阅

kms:ReEncryptOnSameKey

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

kms:ReEncryptOnSameKey

Boolean

ReEncrypt

IAM 和密钥策略

利用此条件键,您可以根据请求指定的目标 CMK 是否与用于原始加密的 CMK 相同来控制对 ReEncrypt 操作的访问。例如,以下策略语句使用 kms:ReEncryptOnSameKey 条件键,仅允许用户在目标 CMK 与用于原始加密的 CMK 相同时进行重新加密。以下示例显示了密钥策略中的策略语句。

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

kms:RetiringPrincipal

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

kms:RetiringPrincipal

字符串(列表)

CreateGrant

IAM 和密钥策略

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

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

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

另请参阅

kms:ValidTo

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

kms:ValidTo

时间戳

ImportKeyMaterial

IAM 和密钥策略

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

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

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

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

另请参阅

kms:ViaService

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

kms:ViaService

字符串

kms:ViaService 条件键对于所有 AWS KMS 操作均有效,但以下操作除外CreateKeyGenerateRandomListAliasesListKeysListRetirableGrantsRetireGrant

IAM 和密钥策略

kms:ViaService 条件键将 AWS KMS 客户主密钥 (CMK) 的使用限制于来自指定的 AWS 服务的请求。您可以在每个 kms:ViaService 条件键中指定一个或多个服务。

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

{ "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": { "ForAnyValue:StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }

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

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

重要

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

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

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

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

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

下表列出了与 AWS KMS 集成的 AWS 服务,这些服务支持客户托管 CMK 以及客户托管 CMK 中 kms:ViaService 条件键的使用。此表中的服务可能在有些地区不可用。

支持客户托管 CMK 中的 kms:ViaService 条件键的服务

服务名称 KMS ViaService 名称
AWS Backup backup.AWS_region.amazonaws.com
Amazon Connect connect.AWS_region.amazonaws.com
AWS Database Migration Service (AWS DMS) dms.AWS_region.amazonaws.com
AWS Directory Service directoryservice.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 es.AWS_region.amazonaws.com
Amazon FSx fsx.AWS_region.amazonaws.com
AWS Glue glue.AWS_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 Kafka kafka.AWS_region.amazonaws.com
Amazon Neptune rds.AWS_region.amazonaws.com
Amazon Redshift redshift.AWS_region.amazonaws.com
Amazon Relational Database Service (Amazon RDS) rds.AWS_region.amazonaws.com
Amazon RDS Performance Insights rds.AWS_region.amazonaws.com
AWS Secrets Manager (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 Storage Service (Amazon S3) s3.AWS_region.amazonaws.com
AWS Snowball importexport.AWS_region.amazonaws.com
Amazon SQS sqs.AWS_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 和密钥策略

此条件键基于请求中 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

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

另请参阅