本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
针对 AWS KMS 使用策略条件
您可以在密钥策略和 AWS Identity and Access Management 策略(IAM 策略)中指定条件以控制对 AWS KMS 资源的访问。仅当条件为 True 时,策略语句才有效。例如,您可能希望策略语句仅在特定日期后生效。或者,您可能希望策略语句根据 API 请求中是否存在特定值来控制访问。
要指定条件,请结合使用策略语句的 元素中的预定义条件键Condition
与 IAM 条件策略运算符。有些条件键通用于 AWS,而有些条件键则特定于 AWS KMS。
AWS 全局条件键
AWS 定义全局条件键,它是一组策略条件键,适用于使用 AWS 进行访问控制的所有 IAM 服务。您可以在 AWS KMS 密钥策略和 IAM 策略中使用全局条件键。
例如,您可以使用 aws:PrincipalArn 全局条件键,以仅当请求中的委托人由条件键值中的 Amazon 资源名称 (ARN) 表示时,允许访问 客户主密钥 (CMK)。要在 中支持基于属性的访问控制 (AWS KMSABAC),您可以在 策略中使用 aws:ResourceTagIAM 全局条件键以允许访问CMKs带特定标签的 。
AWS KMS 支持除以下 AWS 全局条件键之外的所有全局条件键:
有关AWS全局条件键的信息,包括它们可用的请求的类型,请参阅 中的AWS全局条件上下文键IAM 用户指南。有关在 IAM 策略中使用全局条件键的示例,请参阅 中的https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests控制对 请求的访问和控制标签键IAM 用户指南。
以下主题提供有关使用基于 IP 地址和 VPC 终端节点的条件键的特殊指导。
在具有 AWS KMS 权限的策略中使用 IP 地址条件
您可以使用 AWS KMS 保护您在集成 AWS 服务中的数据。但在允许或拒绝访问 的同一策略语句中指定 IP 地址条件运算符aws:SourceIp
或 AWS KMS 条件键时,请务必小心。例如, AWS:AWS基于源 IP 拒绝对 的访问中的策略将AWS操作限制为来自指定 IP 范围的请求。
请考虑以下情况:
-
您将类似 AWS:基于源 IP 拒绝对 AWS 的访问中所示的策略附加到 IAM 用户。您将
aws:SourceIp
条件键的值设置为该用户公司的 IP 地址范围。此 IAM 用户已附加允许其使用 Amazon EBS、Amazon EC2 和 AWS KMS 的其他策略。 -
用户试图将加密的 EBS 卷附加到 EC2 实例。即使用户有权使用所有相关服务,此操作也会失败并显示授权错误。
步骤 2 失败,因为要求 AWS KMS 解密卷的加密数据密钥的请求来自与 Amazon EC2 基础设施关联的 IP 地址。要想成功,请求必须来自始发用户的 IP 地址。由于步骤 1 中的策略明确拒绝除来自指定 IP 地址以外的所有请求,因此将不允许 Amazon EC2 对 EBS 卷的加密数据密钥进行解密。
此外,当请求来自 aws:sourceIP
终端节点Amazon VPC时, 条件键也不起作用。要限制对 VPC 终端节点(包括 AWS KMS VPC 终端节点)的请求,请使用 aws:sourceVpce
或 aws:sourceVpc
条件键。有关更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 终端节点 - 控制终端节点的使用。
在具有 AWS KMS 权限的策略中使用 VPC 终端节点条件
AWS KMS 支持 Amazon Virtual Private Cloud (Amazon VPC) 终端节点,这些终端节点由 AWS PrivateLink 提供支持。当请求来自 VPC 或使用 VPC 终端节点时,您可以在密钥策略和 策略中使用以下全局条件键IAM来控制对 AWS KMS 资源的访问。有关详细信息,请参阅 在策略语句中使用 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条件键CMK根据 AWS KMS 操作请求中的参数值控制对 的访问。例如,您可以在 策略中使用 CustomerMasterKeySpeckms:IAM 条件键,以便仅当请求中的 参数值为 时才允许使用 CustomerMasterKeySpec
CreateKeyCreateKey
操作RSA_4096
。
即使该参数未出现在请求中(例如当使用参数的默认值时),此类条件也会起作用。例如,您可以使用 kms:CustomerMasterKeySpec 条件键,以仅当 CreateKey
参数值为 (默认值CustomerMasterKeySpec
)时,允许用户使用 SYMMETRIC_DEFAULT
操作。此条件允许 CustomerMasterKeySpec
参数值为 SYMMETRIC_DEFAULT
的请求,以及无 CustomerMasterKeySpec
参数的请求。
API 操作CMKs中使用的 条件
某些AWS KMS条件键可以根据操作CMK中使用的 的属性控制对操作的访问。例如,您可以使用 kms:KeyOrigin 条件,仅当 的 为 CMK 时,才允许委托人在 上调用 Origin
GenerateDataKeyCMKAWS_KMS
。要了解某个条件键能否以这种方式使用,请参阅条件键的说明。
该操作必须是 CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources
列中查找 CMK
值。 如果您将这种类型的条件键用于未授权用于特定CMK资源的操作(如 ListKeys则权限无效,因为条件永远无法满足。授权 CMK 操作不涉及任何ListKeys
资源,并且没有 CustomerMasterKeySpec
属性。
以下主题将介绍每个 AWS KMS 条件键,并提供演示策略语法的示例策略语句。
主题
- kms:BypassPolicyLockoutSafetyCheck
- kms:CallerAccount
- kms:CustomerMasterKeySpec
- kms:CustomerMasterKeyUsage
- kms:DataKeyPairSpec
- kms:EncryptionAlgorithm
- kms:EncryptionContext:
- kms:EncryptionContextKeys
- kms:ExpirationModel
- kms:GrantConstraintType
- kms:GrantIsForAWSResource
- kms:GrantOperations
- kms:GranteePrincipal
- kms:KeyOrigin
- kms:MessageType
- kms:ReEncryptOnSameKey
- kms:RequestAlias
- kms:ResourceAliasess
- kms:RetiringPrincipal
- kms:SigningAlgorithm
- kms:ValidTo
- kms:ViaService
- kms:WrappingAlgorithm
- kms:WrappingKeySpec
kms:BypassPolicyLockoutSafetyCheck
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
Boolean |
|
IAM仅 策略 密钥政策和 IAM 策略 |
kms:BypassPolicyLockoutSafetyCheck
条件键基于请求中 参数的值控制对 CreateKey 和 PutKeyPolicyBypassPolicyLockoutSafetyCheck
操作的访问权限。
以下示例IAM策略语句禁止用户绕过策略锁定安全检查,方式为当CMKs请求中的 BypassPolicyLockoutSafetyCheck
参数的值为 CreateKey
时,拒绝用户创建 的权限 true.
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }
您还可以在 kms:BypassPolicyLockoutSafetyCheck
策略或密钥策略中使用 IAM 条件键控制对 PutKeyPolicy
操作的访问权限。来自密钥策略的以下示例策略语句阻止用户在更改 的策略时绕过策略锁定安全检查CMK。
此策略语句不是使用显式 Deny
,而是结合使用 Allow
和 Null 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
CMK 资源操作 |
仅密钥策略 |
您可以使用此条件键允许或拒绝对 IAM 账户中所有身份(AWS 用户和角色)进行访问。在密钥策略中,您可以使用 Principal
元素来指定策略语句所适用的身份。Principal
元素的语法未提供指定 AWS 账户中的所有身份的方式。但您可以通过将此条件键与指定所有 Principal
身份的 AWS 元素相结合来实现此效果。
由于此条件仅在密钥策略中有效,因此您可以使用它来控制对任何CMK资源操作(即,使用特定 的任何AWS KMS操作)的访问CMK。 要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources
列中查找 CMK
值。
例如,以下策略语句演示了如何使用 kms:CallerAccount
条件键。此策略语句位于 AWS 托管的 CMK 的密钥策略中Amazon EBS。它结合了 Principal
元素,该元素利用 AWS 条件键指定所有 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
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
CMK 资源操作 |
IAM 策略 密钥政策和 IAM 策略 |
kms:CustomerMasterKeySpec
条件键根据由操作CustomerMasterKeySpec
创建或在操作中使用的 的 CMK 属性值控制对操作的访问。
您可以在 IAM 策略中使用此条件键,以根据请求中的 CustomerMasterKeySpec 参数的值控制对 CreateKeyCreateKey
操作的访问。例如,您可以使用此条件来允许用户仅创建对称CMKs密钥或仅使用 RSA CMKs 密钥创建。
以下示例IAM策略语句使用 kms:CustomerMasterKeySpec
条件键,以CMK仅当请求CustomerMasterKeySpec
中的 为 时,允许委托人创建 RSA_4096
。
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "RSA_4096" } } }
您还可以使用 kms:CustomerMasterKeySpec
条件键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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
CMK 资源操作 |
IAM 策略 密钥政策和 IAM 策略 |
kms:CustomerMasterKeyUsage
条件键根据由操作KeyUsage
创建或在操作中使用的 的 CMK 属性值控制对操作的访问。
您可以使用此条件键根据请求中 KeyUsage 参数的值控制对 CreateKey 操作的访问。的有效值为 KeyUsage
ENCRYPT_DECRYPT
和 SIGN_VERIFY
。
例如,您可以CMK仅当 KeyUsage
为 时,才允许用户创建 ENCRYPT_DECRYPT
,或者在 KeyUsage
为 时拒绝用户权限SIGN_VERIFY
。
以下示例IAM策略语句使用 kms:CustomerMasterKeyUsage
条件键,以CMK仅当 KeyUsage
为 时,允许用户创建 ENCRYPT_DECRYPT
。
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "ENCRYPT_DECRYPT" } } }
您还可以使用 kms:CustomerMasterKeyUsage
条件键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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
您可以使用此条件键根据请求中 参数的值控制对 GenerateDataKeyPair 和 GenerateDataKeyPairWithoutPlaintextKeyPairSpec
操作的访问。例如,可以允许用户仅生成特定类型的数据密钥对。
以下示例密钥策略语句使用 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
您可以使用 kms:EncryptionAlgorithm
条件键,根据操作中使用的加密算法,控制对加密操作的访问。对于 Encrypt、Decrypt 和 ReEncrypt 操作,它根据请求中 EncryptionAlgorithm 参数的值控制访问。对于生成数据密钥和数据密钥对的操作,则根据用于加密数据密钥的加密算法控制访问。
此条件键不会影响在 外部执行的操作AWS KMS,例如,在 外部使用非对称CMK对中的公有密钥进行加密AWS KMS。
请求中的 EncryptionAlgorithm 参数
要允许用户仅将特定加密算法用于 CMK,请使用具有 Deny
效果和 StringNotEquals
条件运算符的策略语句。例如,以下示例密钥策略语句禁止可担任ExampleRole
角色的委托人CMK在指定加密操作中使用此对称,除非请求中的加密算法为 RSAES_OAEP_SHA_256
。
与允许用户使用特定加密算法的策略语句不同,具有双负 (如此) 的策略语句会阻止其他策略和授权允许CMK此角色使用其他加密算法。此策略语句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、GenerateDataKeyWithoutPlaintext、GenerateDataKeyPair 和 GenerateDataKeyPairWithoutPlaintext 没有立即的实际效果,因为您无法使用非对称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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
您可以使用 kms:EncryptionContext:
条件键前缀CMK根据加密操作请求中的加密上下文来控制对对称 的访问。使用此条件键前缀可评估加密上下文对中的键和值。要仅评估加密上下文键,请使用 kms:EncryptionContextKeys 条件键。
加密上下文是一组非机密密钥–值对,您可以将其包含在使用对称 AWS KMS (CMKEncrypt、Decrypt、GenerateDataKey、GenerateDataKeyWithoutPlaintext 和 ReEncrypt) 和 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"
以下示例键策略语句使用此条件键。由于请求中可存在多个加密上下文对,条件运算符必须包含 ForAnyValue
或 ForAllValues
。
仅当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/" } } }
加密上下文条件区分大小写
在解密操作中指定的加密上下文,与加密操作中指定的加密上下文必须是区分大小写的精确匹配。只有当加密上下文中有多个上下文对时,上下文对的顺序可以改变。
但是,在策略条件中,条件键不区分大小写。条件值是否区分大小写由您使用的策略条件运算符确定,例如 StringEquals
或 StringEqualsIgnoreCase
。
因此,条件键,由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:EncryptionContextKeys
和 kms: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}" } } }
只能在 IAM 条件键对的值中使用 kms:EncryptionContext:
策略变量。不能在键中使用变量。
也可以在变量中使用提供程序特定的上下文键。这些上下文键通过使用 Web 联合身份验证来唯一标识已登录 AWS 的用户。
与所有变量一样,这些变量只能用于 kms:EncryptionContext:
策略条件,而不能用于实际加密上下文。此外,它们只能用于条件的值,而不能用于条件的键。
例如,以下键策略语句与上一个类似。但是,条件需要加密上下文,其中键为 sub
,值唯一标识已登录 用户池Amazon Cognito的用户。有关在 中标识用户和角色的详细信息Amazon Cognito,请参阅 中的 IAM 角色Amazon Cognito 开发者指南。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ] "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }
另请参阅
kms:EncryptionContextKeys
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串(列表) |
|
密钥政策和 IAM 策略 |
您可以使用 kms:EncryptionContextKeys
条件键CMK根据加密操作请求中的加密上下文来控制对对称 的访问。使用此条件键前缀仅评估各个加密上下文对中的键。要同时评估键和值,请使用 kms:EncryptionContext: 条件键前缀。
您不能在使用非对称 CMK 的加密操作中指定加密上下文。AWS KMS 使用的标准非对称加密算法不支持加密上下文。
利用此条件键,您可以根据 API 请求中的加密上下文AWS KMS来控制访问。加密上下文是一组密钥–值对,您可以将其包含在加密AWS KMS操作中,包括对称 CMKs (Encrypt、Decrypt、GenerateDataKey、GenerateDataKeyWithoutPlaintext 和 ReEncrypt) 以及 CreateGrant 操作。由于请求中可存在多个加密上下文对,条件运算符必须包含 ForAnyValue
或 ForAllValues
。
以下示例策略语句使用 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
。
您可以在各个条件中指定多个加密上下文键。例如,以下策略语句使用 ForAllValues
和 StringEquals
条件运算符,仅当请求中的加密上下文包含 AppName
和 FilePath
键(忽视其值且不能是其他键)时,才允许进行指定的运算。加密上下文中键的顺序不重要。
{ "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仅当 API 请求中存在kms:EncryptionContextKeys
条件键 (不为 null) 时,允许访问 。它不会检查加密上下文的键或值,仅检查是否存在加密上下文。
{ "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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
kms:ExpirationModel
条件键基于请求中 ExpirationModel 参数的值控制对 ImportKeyMaterial 操作的访问权限。
ExpirationModel
是可选参数,用于确定导入的密钥材料是否过期。有效值为 KEY_MATERIAL_EXPIRES
和 KEY_MATERIAL_DOES_NOT_EXPIRE
。KEY_MATERIAL_EXPIRES
是默认值。
到期日期和时间由 ValidTo 参数的值确定。参数ValidTo
是必需的,除非 ExpirationModel
参数的值为 KEY_MATERIAL_DOES_NOT_EXPIRE
。您还可以使用 kms:ValidTo 条件键要求特定到期日期作为访问条件。
以下示例策略语句使用 kms:ExpirationModel
条件键,以CMK仅当请求包含 ExpirationModel
参数并且其值为 时,允许用户将密钥材料导入到 中KEY_MATERIAL_DOES_NOT_EXPIRE
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }
您也可以使用 kms:ExpirationModel
条件键,以仅当密钥材料过期时,允许用户导入密钥材料,而不在条件中指定到期日期。以下示例策略语句结合使用 kms:ExpirationModel
条件键和 Null 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
您可以使用此条件键根据请求中授权约束的类型来控制对 CreateGrant 操作的访问。
创建授权时,您可以选择性地指定授权约束,以仅在存在特定加密上下文时允许授予操作权限。授权约束可以是以下两种类型之一:EncryptionContextEquals
或 EncryptionContextSubset
。您可以使用此条件键来检查请求中包含哪种类型。
以下示例策略语句使用 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 操作 | 策略类型 |
---|---|---|---|
|
Boolean |
|
密钥政策和 IAM 策略 |
仅当与 集成的 https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html 服务代表用户https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html调用 操作时,才允许或拒绝 CreateGrant、ListGrantsAWS 或 AWS KMSRevokeGrant
以下示例键策略语句使用 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
IAM 和密钥策略 |
您可以使用此条件键根据请求中 GranteePrincipal 参数的值控制对 CreateGrant 操作的访问。例如,您可以仅当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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
CMK 资源操作 |
IAM 策略 密钥政策和 IAM 策略 |
kms:KeyOrigin
条件键根据由 操作Origin
创建或在操作中使用的 的 CMK 属性值控制对 操作的访问。它可用作资源条件或请求条件。
您可以使用此条件键根据请求中 Origin 参数的值控制对 CreateKey 操作的访问。的有效值为 Origin
AWS_KMS
、 AWS_CLOUDHSM
和 EXTERNAL
。
例如,您可以仅允许用户CMK在 KMS (AWS_KMS
) 中生成密钥材料时,在与AWS CloudHSM自定义密钥存储 () 关联的 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
条件键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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
kms:MessageType
条件键根据请求中 参数的值控制对签名和验证MessageType
操作的访问。的有效值为 MessageType
RAW
和 DIGEST
。
例如,以下密钥策略语句使用 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 操作 | 策略类型 |
---|---|---|---|
|
Boolean |
|
密钥政策和 IAM 策略 |
您可以使用此条件键根据请求是否指定与用于原始加密的目标相同的目标来控制对 ReEncryptCMK 操作的访问。例如,以下策略语句使用 kms:ReEncryptOnSameKey
条件键,以仅当目标CMK与用于原始加密的目标相同时,允许用户重新加密。以下示例显示了密钥策略中的策略语句。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }
kms:RequestAlias
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串(列表) |
密钥政策和 IAM 策略 |
您可以使用此条件键,以仅当请求使用特定别名来标识 CMK 时允许操作。kms:RequestAlias
条件键CMK根据在请求中标识 CMK 的GetPublicKey
别名DescribeKey
来控制对在加密操作、 或 中使用的 的访问。(此策略条件对 GenerateRandom 操作没有影响,因为该操作不使用 CMK 或 别名。)
此条件支持 中的基于属性的访问控制 (AWS KMSABAC),这允许您CMKs根据 的标签和别名控制对 的访问CMK。您可以使用标签和别名来允许或拒绝对 的访问CMK,而无需更改策略或授权。有关详细信息,请参阅 将 ABAC 用于 AWS KMS。
要在此策略条件中指定别名,请使用别名(如 alias/project-alpha
)或别名模式(如 alias/*test*
)。您不能在此条件键的值中指定别名 ARN。
要满足此条件,请求中的 KeyId
参数的值必须是匹配的别名名称或别名 ARN。如果请求使用不同的密钥标识符,则它不满足条件,即使 标识了相同的 也是如此CMK。
例如,以下密钥策略语句允许委托人在 上调用 GenerateDataKey 操作CMK。但是,仅当请求中的 KeyId
参数值为 alias/finance-key
或别名为 的别名 ARN(如 )时,才允许执行该操作arn:aws:kms:us-west-2:111122223333:alias/finance-key
。
{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/developer" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:RequestAlias": "alias/finance-key" } } }
您不能使用此条件键来控制对别名操作(如 CreateAlias 或 DeleteAlias的访问。有关控制对别名操作的访问的信息,请参阅控制对别名的访问。
kms:ResourceAliasess
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串(列表) |
CMK 资源操作 |
IAM仅 策略 |
使用此条件键CMK可根据与 关联的别名控制对 的访问CMK。 该操作必须是 CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources
列中查找 CMK
值。
此条件支持 中的基于属性的访问控制 (AWS KMSABAC)。利用 ABAC,您可以CMKs根据分配给 的标签CMK以及与 关联的别名来控制对 的访问CMK。您可以使用标签和别名来允许或拒绝对 的访问CMK,而无需更改策略或授权。有关详细信息,请参阅 将 ABAC 用于 AWS KMS。
kms:ResourceAliases 条件仅在 CMK 符合每个CMK配额的别名时有效。如果 CMK 超过此配额,则CMKkms:ResourceAliases
按条件授权使用 的委托人将被拒绝访问 CMK。
要在此策略条件中指定别名,请使用别名(如 alias/project-alpha
)或别名模式(如 alias/*test*
)。您不能在此条件键的值中指定别名 ARN。要满足 条件, 操作CMK中使用的 必须具有指定的别名。在 操作的请求中,是否或如何标识 CMK 并不重要。
例如,以下IAM策略语句允许委托人对与别名关联的指定账户CMK中的任何 调用 AWSGenerateDataKeyfinance-key
操作。别名在一个AWS账户和区域中必须是唯一的,但此条件可能允许访问每个账户CMKs的不同AWS区域中的多个 。(受影响的 的密钥策略CMKs还必须允许委托人的账户将其用于此操作。)
要指示在可能与 关联的多个别名之一为 CMK 时满足条件alias/finance-key
,条件将使用 ForAnyValue
集合运算符。
由于kms:ResourceAliases
条件基于资源而不是请求,因此,即使请求使用GenerateDataKey
密钥 IDfinance-key
或密钥 ARN 标识 CMK,对与别名关联的任何 CMK 的调用也会成功。
{ "Version": "2012-10-17", "Statement": { "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" } } } }
kms:RetiringPrincipal
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串(列表) |
|
密钥政策和 IAM 策略 |
您可以使用此条件键根据请求中 RetiringPrincipal 参数的值控制对 CreateGrant 操作的访问。例如,您可以允许用户创建CMK仅当RetiringPrincipal
请求CreateGrant
中的 与条件语句RetiringPrincipal
中的 匹配时才使用 的授权。
以下示例策略语句允许用户为 创建授权CMK。kms:RetiringPrincipal
条件键将权限限制为 CreateGrant
请求,其中授权的停用委托人是 LimitedAdminRole
或 OpsAdmin
用户。
{ "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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
您可以使用 kms:SigningAlgorithm
条件键根据请求中 SignSigningAlgorithm 参数的值控制对 Sign 和 Verify 操作的访问。此条件键对在 外部执行的操作没有影响AWS KMS,例如,使用 外部的非对称CMK对中的公有密钥验证签名AWS KMS。
以下示例密钥策略允许可代入testers
角色的用户仅在用于请求的签名算法是 RSASSA_PSS 算法(如 )时使用 CMK 签署消息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 操作 | 策略类型 |
---|---|---|---|
|
时间戳 |
|
密钥政策和 IAM 策略 |
kms:ValidTo
条件键根据请求中 ValidTo 参数的值控制对 ImportKeyMaterial 操作的访问,该参数确定导入的密钥材料的过期时间。此值用 Unix 时间
默认情况下,ValidTo
请求中需要 ImportKeyMaterial
参数。但是,如果 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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
CMK 资源操作 |
密钥政策和 IAM 策略 |
kms:ViaService
条件键将 AWS KMS 客户主密钥 (CMK) 的使用限制于来自指定AWS服务的请求。您可以在每个kms:ViaService
条件键中指定一个或多个服务。 该操作必须是 CMK 资源操作,即为特定 CMK 授权的操作。要标识 CMK 资源操作,请在 Actions and Resources Table (操作和资源表) 中该操作对应的 Resources
列中查找 CMK
值。
例如,来自密钥策略的以下语句使用 kms:ViaService
条件键,以仅当请求来自代表 的 CMK 区域中的 或 时Amazon EC2Amazon RDS,才允许美国西部(俄勒冈)将客户用于指定的操作ExampleUser
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }
您还可以使用kms:ViaService
条件键,以在请求来自特定服务CMK时拒绝使用 的权限。例如,来自密钥策略的以下策略语句使用 kms:ViaService
条件键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 集成的 AWS KMS 服务的详细信息,请查阅有关集成服务的文档。
所有AWS托管项都在其密钥策略文档中CMKs使用kms:ViaService
条件键。此条件仅允许CMK将 用于来自创建 的 服务的请求CMK。要查看 AWS 托管 的密钥策略CMK,请使用 GetKeyPolicy 操作。
kms:ViaService
条件键在 IAM 和 密钥策略语句中有效。您指定的服务必须与 AWS KMS 集成kms:ViaService
条件键。
支持 kms:ViaService
条件键的服务
下表列出了与 集成的 AWS 服务AWS KMS,并支持在客户托管的 中使用 kms:ViaService
条件键CMKs。此表中的服务可能在有些地区不可用。在所有.amazonaws.com
分区中使用 AWS KMS ViaService 名称的AWS后缀。
您可能需要水平或垂直滚动才能查看此表中的所有数据。
服务名称 | AWS KMS ViaService 名称 |
---|---|
Amazon Appflow | appflow。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 | 备份。AWS_region .amazonaws.com
|
AWS CodeArtifact | codeartifact。AWS_region .amazonaws.com
|
Amazon 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 DynamoDB | dynamodb.AWS_region .amazonaws.com
|
Amazon EC2 Systems Manager (SSM) | ssm.AWS_region .amazonaws.com
|
Amazon Elastic Block Store (Amazon EBS) | ec2.AWS_region .amazonaws.com(仅限 EBS)
|
Amazon Elastic Container Registry (Amazon ECR) | ecr。AWS_region .amazonaws.com
|
Amazon Elastic File System (Amazon EFS) | elasticfilesystem。AWS_region .amazonaws.com
|
Amazon Elastic Kubernetes Service (Amazon EKS) | eks。AWS_region .amazonaws.com
|
Amazon ElastiCache |
在条件键值中包括两个 ViaService 名称:
|
Amazon Elasticsearch Service (Amazon ES) | es.AWS_region .amazonaws.com
|
Amazon Forecast | 预测。AWS_region .amazonaws.com
|
Amazon FSx | fsx。AWS_region .amazonaws.com
|
AWS Glue | 粘附。AWS_region .amazonaws.com
|
AWS IoT SiteWise | iotsitewise。AWS_region .amazonaws.com
|
Amazon Kendra | kendra。AWS_region .amazonaws.com
|
Amazon Kinesis | kinesis.AWS_region .amazonaws.com
|
Amazon Kinesis Data Firehose | Firehose。AWS_region .amazonaws.com
|
Amazon Kinesis Video Streams | kinesisvideo.AWS_region .amazonaws.com
|
AWS Lambda | lambda.AWS_region .amazonaws.com
|
Amazon Lex | lex.AWS_region .amazonaws.com
|
AWS License Manager | license-manager。AWS_region .amazonaws.com
|
Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka。AWS_region .amazonaws.com
|
适用于 Apache Airflow 的 Amazon 托管工作流 (MWAA) | 流式传输。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 RDS Performance Insights | rds.AWS_region .amazonaws.com
|
Amazon Redshift | redshift.AWS_region .amazonaws.com
|
Amazon Relational Database Service (Amazon RDS) | rds.AWS_region .amazonaws.com
|
AWS Secrets Manager | secretsmanager.AWS_region .amazonaws.com
|
Amazon Simple Email Service (Amazon SES) | ses.AWS_region .amazonaws.com
|
Amazon Simple Notification Service (Amazon SNS) | sns。AWS_region .amazonaws.com
|
Amazon Simple Queue Service (Amazon SQS) | sqs.AWS_region .amazonaws.com
|
Amazon Simple Storage Service (Amazon S3) | S3.AWS_region .amazonaws.com
|
AWS Snowball | importexport.AWS_region .amazonaws.com
|
AWS Storage Gateway | storagegateway。AWS_region .amazonaws.com
|
Amazon Timestream | timestream。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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
此条件键基于请求中 WrappingAlgorithm 参数的值控制对 GetParametersForImport 操作的访问。您可以使用此条件要求委托人在导入过程中使用特定算法来加密密钥材料。当对所需公有密钥和导入令牌的请求指定不同的包装算法时,它们会失败。
以下示例策略语句使用 kms:WrappingAlgorithm
条件键为示例用户提供调用 GetParametersForImport
操作的权限,但阻止他们使用 RSAES_OAEP_SHA_1
包装算法。当WrappingAlgorithm
请求GetParametersForImport
中的 为 时RSAES_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 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
此条件键基于请求中 WrappingKeySpec 参数的值控制对 GetParametersForImport 操作的访问。您可以使用此条件,要求委托人在导入过程中使用特定的公有密钥类型。如果请求指定了不同密钥类型,它会失败。
由于 WrappingKeySpec
参数值的唯一有效值为 RSA_2048
,阻止用户使用此值将有效阻止它们使用 GetParametersForImport
操作。
以下示例策略语句使用 kms:WrappingAlgorithm
条件键要求请求中的 WrappingKeySpec
为 RSA_2048
。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } } }
另请参阅
AWS KMS 的条件键 AWS Nitro Enclaves
AWS Nitro Enclaves 是一项 Amazon EC2 功能,可让您创建名为 enclaves 的隔离计算环境来保护和处理高度敏感的数据。 AWS KMS 提供条件键来支持 AWS Nitro Enclaves。这些条件键仅在对 AWS KMS 操作的请求源自 容器时起作用。
当您APIs从 封装调用 kms-decrypt
、 或 Nitro kms-generate-data-key
kms-generate-random
封装时AWS
以下条件键允许您根据签名的证明文档的内容限制这些操作的权限。在允许 操作之前, 将来自 证书区的验证文档与这些AWS KMS条件键中的值AWS KMS进行比较。
kms:RecipientAttestation:ImageSha384
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
仅当kms:RecipientAttestation:ImageSha384
请求中签名的证明文档中的图像哈希与kms-decrypt
条件键中的值匹配时kms-generate-data-key
, 条件键才允许来自 容器的 kms-generate-random
、 和 请求。ImageSha384
该值对应于证明文档中的 XML[0]。此条件键仅当您从 封装调用 Nitro AWS 封装区开发工具包 APIs 时有效。
例如,以下密钥策略语句允许data-processing
角色将 CMK 用于 kms-decrypt
(解密)、kms-generate-data-key
(GenerateDataKey和 kms-generate-random
(GenerateRandom操作。仅当请求中证明文档的图像哈希值 (PCR[0]) 与条件中的图像哈希值匹配时, kms:RecipientAttestation:ImageSha384
条件键才允许执行 操作。
如果请求不包含任何鉴证文档,则权限将被拒绝,因为未满足此条件。
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }
kms:RecipientAttestation:PCR
AWS KMS 条件键 | 条件类型 | API 操作 | 策略类型 |
---|---|---|---|
|
字符串 |
|
密钥政策和 IAM 策略 |
仅当平台配置从kms:RecipientAttestation:PCR
请求中的已签名证明文档注册 (PCRs) 与条件键中的 PCRs 匹配时, 条件键才允许kms-decrypt
来自 容器的 kms-generate-data-key
kms-generate-random
、 和 请求。此条件键仅当您从 封装调用 Nitro AWS 封装区开发工具包 APIs 时有效。
要指定 CRV 值,请使用以下格式。将 的 XML ID 与 条件键名称连接起来。一个小写的十六进制字符串(最大为 96 字节)的 CSV 值。
"kms:RecipientAttestation:PCR
PCR_ID
": "PCR_value
"
例如,以下条件键指定了用于 zencrap 和引导过程的内核的哈希值[1] 的特定值。
kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
以下示例密钥策略语句允许data-processing
角色将 CMK 用于 kms-decrypt
(解密)操作。
此语句中的 kms:RecipientAttestation:PCR
条件键仅在请求中签名的证明文档中的 PCR1 值与条件中的 kms:RecipientAttestation:PCR1
值匹配时,才允许执行 操作。使用 StringEqualsIgnoreCase
策略运算符要求对 的 XML 值进行不区分大小写的比较。
如果请求不包含鉴证文档,则权限将被拒绝,因为未满足此条件。
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }