條件(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*"
均不合法。該條件鍵僅在部分地域支持。
公共云
地域分類
支持的地域
中國
華東1(杭州)、華東2(上海)、華南1(深圳)、華南2(河源)、華南3(廣州)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、西南1(成都)、中國香港
其他國家和地區
馬來西亞(吉隆坡)、日本(東京)、德國(法蘭克福)、美國(弗吉尼亞)、美國(硅谷)、印度尼西亞(雅加達)、英國(倫敦)、菲律賓(馬尼拉)、新加坡、韓國(首爾)、泰國(曼谷)
行業云
深圳金融云、上海金融云、杭州金融云、華北2阿里政務云
密鑰/憑據策略示例:僅允許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地址。例如:
|
|
使用限制:該條件鍵僅在部分地域支持。
公共云
地域分類 | 支持的地域 |
中國 | 華東1(杭州)、華東2(上海)、華南1(深圳)、華南2(河源)、華南3(廣州)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、西南1(成都)、中國香港 |
其他國家和地區 | 馬來西亞(吉隆坡)、日本(東京)、德國(法蘭克福)、美國(弗吉尼亞)、美國(硅谷)、印度尼西亞(雅加達)、英國(倫敦)、菲律賓(馬尼拉)、新加坡、韓國(首爾)、泰國(曼谷) |
行業云
深圳金融云、上海金融云、杭州金融云、華北2阿里政務云
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) |
|