条件(Condition)即指定授权生效的限制条件,您可以在密钥策略、凭据策略、RAM的系统权限策略中设定条件键,以控制对KMS的访问。本文介绍KMS支持哪些条件键。
示例中的Principal字段为密钥策略、凭据策略必填的字段,如果您使用RAM的自定义权限策略,无需设置该字段。
密钥相关的条件键
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: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: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"
]
}
}
}
]
}