條件(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:KmsInstanceId
條件鍵 | 說明 | 條件操作類型 | API操作 | 取值範圍 | 策略類型 |
kms:KmsInstanceId | 根據訪問請求中關聯的KMS執行個體ID控制存取權限 | 字串 | 密碼運算API:
管控API:
標籤 API:
| 執行個體ID |
|
設定樣本:
RAM的自訂權限原則
{
"Effect": "Allow",
"Action": "kms:CreateKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:KmsInstanceId": "kst-**"
}
}
}密鑰策略
{
"Effect": "Allow",
"Principal": {
"RAM": "acs:ram::119285303511****:*"
},
"Action": "kms:Decrypt",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:KmsInstanceId": "kst-**"
}
}
}kms:RecipientAttestation
條件鍵 | 說明 | 條件操作類型 | API操作 |
kms:RecipientAttestation:PCR8 | Enclave 鏡像檔案的度量值。 | 字串 | 授權生效需滿足以下全部條件:
|
kms:RecipientAttestation:PCR9 | 核心和啟動引導程式的度量值。 | ||
kms:RecipientAttestation:PCR11 | 應用程式的度量值。 |
設定樣本:
RAM的自訂權限原則
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "acs:kms:cn-hangzhou:119******460:key/key-hzz******sg5",
"Condition": {
"StringEquals": {
"kms:RecipientAttestation:PCR8": "300705e44da926d8ec85bb7e840******710f303e22de0869a",
"kms:RecipientAttestation:PCR9": "b5753ad8242e1c3b8150caf7098f******440bef5401e02575",
"kms:RecipientAttestation:PCR11": "f9189a4331f1d4ba93d77672401******04a19be1b4d4a5de"
}
}
}
]
}
密鑰策略
{
"Statement": [
{
"Action": [
"kms:*"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119*******460:*"
]
},
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"kms:RecipientAttestation:PCR8": "f193c1e72c226a2212d4d8865964239******ca6f02f79ea85e91af"
}
},
"Sid": "kms default key policy"
}
],
"Version": "1"
}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:KmsInstanceId
條件鍵 | 說明 | 條件操作類型 | API操作 | 取值範圍 | 策略類型 |
kms:KmsInstanceId | 根據訪問請求中關聯的KMS執行個體ID控制存取權限 | 字串 |
| 執行個體ID |
|
設定樣本:
RAM的自訂權限原則
{
"Effect": "Allow",
"Action": "kms:CreateSecret",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:KmsInstanceId": "kst-**"
}
}
}密鑰策略
{
"Effect": "Allow",
"Principal": {
"RAM": "acs:ram::119285303511****:*"
},
"Action": "kms:CreateSecret",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:KmsInstanceId": "kst-**"
}
}
}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) |
|