条件(Condition)即指定授权生效的限制条件,您可以在密钥策略、凭据策略、RAM的自定义权限策略中设定条件键,以控制对KMS的访问。本文介绍KMS支持哪些阿里云通用条件键以及产品条件键。
示例中的Principal字段为密钥策略、凭据策略必填的字段,如果您使用RAM的自定义权限策略,无需设置该字段。
阿里云通用条件键
acs:SourceIp
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:SourceIp | 用户请求的客户端IP,仅包含公网IP地址。 | 字符串类型(String) | KMS的所有OpenAPI。具体列表,请参见API概览。 | IP地址。例如:
|
|
RAM策略示例
仅当请求来自116.62.XX.XX/24
IP地址范围时,才允许执行生成数据密钥的操作。
{
"Statement": [
{
"Action": "kms:GenerateDataKey",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"IpAddress": {
"acs:SourceIp": "116.62.XX.XX/24"
}
}
}
],
"Version": "1"
}
密钥/凭据策略实例
仅允许RAM用户ramuser1,且从IP地址203.0.XX.XX发起访问。
{
"Version":"1",
"Statement":[
{
"Sid":"kms policy",
"Effect":"Allow",
"Action":"kms:*",
"Principal":{
"RAM":[
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource":"*",
"Condition":{
"IpAddress":{
"acs:SourceIp":[
"203.0.XX.XX"
]
}
}
}
]
}
acs:SourceVpc
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:SourceVpc | 用户请求的客户端所属VPC,仅当请求来自阿里云VPC网络时该条件键有效。 | 字符串类型(String) | KMS的所有OpenAPI。具体列表,请参见API概览。 | VPC的ID。例如,vpc-bp1717bgs34gj****。 |
|
使用限制:
策略的
Statement
字段中所有Action必须以kms:
开头的,例如"Action":"kms:*"
,"Action":"kms:GenerateDataKey"
。"Action":"*"
、"Action":"k*"
均不合法。该条件键仅在部分地域支持。
密钥/凭据策略示例:仅允许RAM用户ramuser1,且从vpc-bp1l8j1t3l3j5****发起访问。
{
"Version": "1",
"Statement": [
{
"Sid": "kms policy",
"Effect": "Allow",
"Action": "kms:*",
"Principal": {
"RAM": [
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:SourceVpc": [
"vpc-bp1l8j1t3l3j5****"
]
}
}
}
]
}
acs:VpcSourceIp
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:VpcSourceIp | 用户请求的客户端IP,仅当请求来自阿里云VPC网络时该条件键有效。 | 字符串类型(String) | KMS的所有OpenAPI。具体列表,请参见API概览。 | VPC中的IP地址。例如:
|
|
使用限制:该条件键仅在部分地域支持。
RAM策略示例
仅允许请求来源于vpc-bp1717bghfnkqg5wn****
中的172.168.XX.XX/24
网段。
{
"Statement": [
{
"Action": "kms:GenerateDataKey",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"acs:SourceVpc": "vpc-bp1717bghfnkqg5wn****"
},
"IpAddress": {
"acs:VpcSourceIp": "172.168.**.**/24"
}
}
}
],
"Version": "1"
}
密钥/凭据策略示例
仅允许RAM用户ramuser1,且从VPC IP地址192.168.XX.XX发起访问。
{
"Version": "1",
"Statement": [
{
"Sid": "kms policy",
"Effect": "Allow",
"Action": "kms:*",
"Principal": {
"RAM": [
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource": "*",
"Condition": {
"IpAddress": {
"acs:VpcSourceIp": [
"192.168.XX.XX"
]
}
}
}
]
}
acs:SecureTransport
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:SecureTransport | 发送请求是否使用了安全信道HTTPS。 | 布尔类型(Boolean) | KMS的所有OpenAPI。具体列表,请参见API概览。 |
|
|
RAM策略示例
允许用户对阿里云KMS服务的所有资源进行任何操作,但前提是操作必须通过安全传输协议(HTTPS)来发起。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "kms:*",
"Resource": "*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
]
}
密钥/凭据策略示例
仅允许RAM用户ramuser1,且使用https安全信道发起访问。
{
"Version": "1",
"Statement": [
{
"Sid": "kms policy",
"Effect": "Allow",
"Action": "kms:*",
"Principal": {
"RAM": [
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource": "*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
]
}
acs:CurrentTime
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:CurrentTime | 服务端接收到请求的时间。 | 日期类型(Date and time) | KMS的所有OpenAPI。具体列表,请参见API概览。 | 使用UTC时间并按照ISO 8601标准。 例如:北京时间2024年01月10日20点00分00秒,表示为 |
|
密钥/凭据策略示例:仅允许RAM用户ramuser1,且在2099-12-31T12:00:00Z之前发起访问。
{
"Version": "1",
"Statement": [
{
"Sid": "kms policy",
"Effect": "Allow",
"Action": "kms:*",
"Principal": {
"RAM": [
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource": "*",
"Condition": {
"DateLessThan": {
"acs:CurrentTime": "2099-12-31T12:00:00Z"
}
}
}
]
}
acs:MFAPresent
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
acs:MFAPresent | 用户登录时是否使用了多因素认证(MFA)。 | 布尔类型(Boolean) | KMS的所有OpenAPI。具体列表,请参见API概览。 |
|
|
密钥/凭据策略示例:仅允许RAM用户ramuser1,且启用了多因素认证(MFA)发起访问。
{
"Version": "1",
"Statement": [
{
"Sid": "kms policy",
"Effect": "Allow",
"Action": "kms:*",
"Principal": {
"RAM": [
"acs:ram::1192853035****:user/ramuser1"
]
},
"Resource": "*",
"Condition": {
"Bool": {
"acs:MFAPresent": [
"true"
]
}
}
}
]
}
KMS产品条件键(密钥相关)
kms:tag
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:tag | 根据密钥标签,筛选对API操作的访问权限。 | 字符串 |
| 您自定义的密钥标签。 |
|
kms:EncryptionAlgorithm
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:EncryptionAlgorithm | 根据请求中的加密算法的取值,筛选对加密操作的访问权限。 | 字符串 |
| 加密算法,例如SYMMETRIC_DEFAULT、RSAES_OAEP_SHA_256、ECIES_DH_SHA_1_XOR_HMAC等。 KMS支持的加密算法,请参见密钥管理类型和密钥规格。 |
|
例如,如下示例表示仅允许RAM用户key_ramuser1
,使用RSAES_OAEP_SHA_256算法执行加密、解密或转加密操作。可以提高加密密钥使用的安全性和合规性,确保只使用指定的加密算法,防止不合规或不安全的加密算法被误用。
{
"Sid": "Allow only one encryption algorithm with this asymmetric KMS key",
"Effect": "Deny",
"Principal": {
"RAM": [
"acs:ram::119285303511****:user/key_ramuser1"
]
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
}
}
}
kms:EncryptionContext:${EncryptionContextKey}
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:EncryptionContext:${EncryptionContextKey} | 根据加密操作中的加密上下文,筛选对KMS对称密钥的访问权限。 此条件可评估每个键值加密上下文对中的键和值。 | 字符串 |
| 您自行设置的EncryptionContext。 |
|
例如,如下示例表示允许阿里云账号119285303511****
下的所有RAM用户,当加密上下文kms:EncryptionContext
中的Project
值为ProjectA
时,执行生成数据密钥操作(kms:GenerateDataKey
)。
{
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119285303511****:*"
]
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:Project": "ProjectA"
}
}
}
kms:EncryptionContextKeys
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:EncryptionContextKeys | 根据加密操作中的加密上下文,筛选对KMS对称密钥的访问权限。 仅支持筛选每个键值加密上下文对中的键。 | 字符串数组 |
| 由您自行设置,仅支持设置为EncryptionContext键值对中的键。 | 密钥策略 |
例如,如下示例表示允许阿里云账号119285303511****
下的所有RAM用户在加密上下文(EncryptionContext)中包含键名为Project
时,执行数据密钥生成操作(kms:GenerateDataKey
)。
{
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119285303511****:*"
]
},
"Action": "kms:GenerateDataKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContextKeys": "Project"
}
}
}
kms:ExpirationModel
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:ExpirationModel | 根据请求中ExpirationModel参数的值,筛选对ImportKeyMaterial操作的访问权限。 | 字符串 | ImportKeyMaterial |
|
|
例如,如下示例表示仅支持密钥材料的过期模型为KEY_MATERIAL_DOES_NOT_EXPIRE
的情况下,才允许阿里云账号119285303511****
下的所有RAM用户执行kms:ImportKeyMaterial
操作(导入密钥材料)。
{
"Effect": "Allow",
"Principal": {
"RAM": "acs:ram::119285303511****:*"
},
"Action": "kms:ImportKeyMaterial",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE"
}
}
}
kms:ValidTo
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:ValidTo | 根据请求中ValidTo参数的值,筛选对ImportKeyMaterial操作的访问权限。 您可以使用此条件键以允许用户仅当在指定的日期到期时才能导入密钥材料。 | 日期 | ImportKeyMaterial | Unix时间戳格式 |
|
例如,如下示例表示仅在2024年6月20日之前,允许阿里云账号 119285303511****
下的所有 RAM 用户导入密钥材料。
{
"Effect": "Allow",
"Principal": {
"RAM": "acs:ram::119285303511****:*"
},
"Action": "kms:ImportKeyMaterial",
"Resource": "*",
"Condition": {
"NumericLessThanEquals": {
"kms:ValidTo": "1718841600"
}
}
}
kms:KeyOrigin
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:KeyOrigin | 根据由操作创建或在操作中使用的KMS的Origin属性,筛选对API操作的访问权限。 使用它可以限定对 CreateKey操作或为KMS 密钥资源授权的任何操作的授权。 | 字符串 | 所有密钥相关的OpenAPI。具体列表,请参见API概览。 |
|
|
kms:KeySpec
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:KeySpec | 根据由操作创建或在操作中使用的KMS的KeySpec属性筛选对API操作的访问权限。 | 字符串 | 所有密钥相关的OpenAPI。具体列表,请参见API概览。 | 密钥规格,例如Aliyun_AES_256、RSA_2048等。 KMS支持的密钥规格,请参见密钥管理类型和密钥规格。 |
|
例如,如下示例表示允许阿里云账号119285303511****
下的所有RAM用户和RAM角色执行创建密钥操作(kms:CreateKey
),但仅限于创建RSA密钥。
{
"Effect": "Allow",
"Action": "kms:CreateKey",
"Principal": {
"RAM": "acs:ram::119285303511****:*"
},
"Resource": "*",
"Condition": {
"StringLike": {
"kms:KeySpec": "RSA_*"
}
}
}
kms:KeyUsage
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:KeyUsage | 根据创建或在操作中使用的KMS的KeyUsage 属性,筛选对API操作的访问权限。 | 字符串 | 所有密钥相关的OpenAPI。具体列表,请参见API概览。 |
|
|
例如,如下示例表示允许执行创建密钥操作(kms:CreateKey
),但仅限于创建用途为 ENCRYPT_DECRYPT
的密钥。
{
"Effect": "Allow",
"Action": "kms:CreateKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:KeyUsage": "ENCRYPT_DECRYPT"
}
}
}
kms:ScheduleKeyDeletionPendingWindowInDays
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:ScheduleKeyDeletionPendingWindowInDays | 根据请求中PendingWindowInDays参数的值,筛选对ScheduleKeyDeletion操作的访问权限。 | 数值 | ScheduleKeyDeletion | 密钥的预删除周期,取值为天数。 |
|
例如,如下示例表示当预删除周期小于或等于21天时,拒绝所有用户和角色执行密钥计划删除操作(kms:ScheduleKeyDeletion
)。
{
"Effect": "Deny",
"Action": "kms:ScheduleKeyDeletion",
"Principal": "*",
"Resource": "*",
"Condition": {
"NumericLessThanEquals": {
"kms:ScheduleKeyDeletionPendingWindowInDays": "21"
}
}
}
kms:SigningAlgorithm
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:SigningAlgorithm | 根据请求中的签名算法,筛选对Sign和Verify操作的访问权限。 | 字符串 |
| 签名算法,例如RSA_PSS_SHA_256、ECDSA_SHA_256等。 支持的签名算法列表,请参见密钥管理类型和密钥规格。 |
|
kms:WrappingAlgorithm
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:WrappingAlgorithm | 根据请求中WrappingAlgorithm参数的值,筛选对GetParametersForImport操作的访问权限。 | 字符串 | GetParametersForImport | 包装算法。 |
|
kms:WrappingKeySpec
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:WrappingKeySpec | 根据请求中WrappingKeySpec参数的值,筛选对GetParametersForImport操作的访问权限。 | 字符串 | GetParametersForImport | 包装公钥的类型。 |
|
KMS产品条件键(凭据相关)
kms:tag
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:tag | 根据凭据标签,筛选对API操作的访问权限。 | 字符串 |
| 您自定义的凭据标签。 |
|
kms:SecretName
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:SecretName | 根据请求中的Secretname 值,筛选对API操作的访问权限。 | 字符串 | 所有凭据相关的OpenAPI。具体列表,请参见API概览。 | 您自定义的凭据名称。 |
|
kms:EncryptionKeyId
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:EncryptionKeyId | 根据访问凭据请求中的加密密钥的ID,筛选对API操作的访问权限。 | 字符串 |
| 密钥ID。 |
|
kms:SecretVersionId
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:SecretVersionId | 根据请求中凭据版本的唯一标识符,筛选对API操作的访问权限。 | 字符串 |
| 凭据的版本号。 |
|
kms:SecretVersionStage
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:SecretVersionStage | 根据请求中的凭据版本状态列表,筛选对API操作的访问权限。 | 字符串 |
|
|
|
kms:SecretType
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:SecretType | 根据请求中的凭据类型,筛选对API操作的访问权限。 | 字符串 | 所有凭据相关的OpenAPI。具体列表,请参见API概览。 |
|
|
kms:ForceDeleteWithoutRecovery
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:ForceDeleteWithoutRecovery | 是否强制删除凭据,且不允许恢复。 | 布尔值 | DeleteSecret |
|
|
kms:RecoveryWindowInDays
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:RecoveryWindowInDays | 按照可恢复的方式删除凭据,且指定可恢复的窗口(天数)。 | 数值 | DeleteSecret | 天数。 |
|
例如,如下示例表示当设置的恢复窗口期小于或等于10天时,拒绝所有用户和角色执行 kms:DeleteSecret
操作。
{
"Statement": [
{
"Effect": "Deny",
"Action": "kms:DeleteSecret",
"Principal": "*",
"Resource": "*",
"Condition": {
"NumericLessThanEquals": {
"kms:RecoveryWindowInDays": "10"
}
}
}
]
}
KMS产品条件键(其他)
kms:TlsVersion
条件键 | 说明 | 条件操作类型 | API操作 | 取值范围 | 策略类型 |
kms:TlsVersion | 根据请求中的TLS版本,筛选对API操作的访问权限。 | 字符串 | 所有需要鉴权的OpenAPI。 说明 不涉及的鉴权的API:例如DescribeRegions。 | 1.2 |
|
例如,如下示例表示当请求中TLS版本小于1.2时,拒绝对指定的密钥进行任何操作。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "kms:*",
"Resource": "acs:kms:*:*:key/key-hzz653f1f8fybn5qa****",
"Condition": {
"NumericLessThan": {
"kms:TlsVersion": [
"1.2"
]
}
}
}
]
}
附录1:条件操作类型说明
条件操作类型包括:字符串类型(String)、数字类型(Number)、日期类型(Date and time)、布尔类型(Boolean)和IP地址类型(IP address)。
条件操作类型 | 支持类型 |
字符串类型(String) |
|
数字类型(Number) |
|
日期类型(Date and time) |
|
布尔类型(Boolean) | Bool |
IP地址类型(IP address) |
|