密鑰策略是基于資源的策略,用于控制哪些阿里云賬號、RAM用戶、RAM角色有權限來管理或使用KMS密鑰,KMS實例中的每個密鑰必須有且只有一個密鑰策略。本文介紹密鑰策略的詳細信息。
密鑰策略與訪問控制RAM的權限策略的關系
密鑰策略支持將當前阿里云賬號(密鑰所屬的阿里云賬號)下的RAM用戶、RAM角色設置為管理員或使用者,將其他阿里云賬號下的RAM用戶、RAM角色設置為使用者。
除了在KMS上設置密鑰策略外,您也可以在訪問控制RAM上設置基于身份的策略,用于指定阿里云賬號、RAM用戶、RAM角色可以管理或使用哪些密鑰。具體操作,請參見為RAM用戶授權、為RAM角色授權、密鑰管理服務自定義權限策略參考。
當阿里云賬號、RAM身份(RAM用戶或RAM角色)通過阿里云控制臺、OpenAPI或CLI發起KMS資源訪問請求時,都需要執行權限策略的判定流程,根據判定結果決定是否被允許訪問。具體請參見如下流程圖和說明。
判定結果遵循如下原則:
如果是當前阿里云賬號下的RAM用戶、RAM角色:判定結果A或者判定結果B中,有一個是允許(Allow)且無Explicit Deny(顯式拒絕),即允許管理或使用該密鑰。
說明當前阿里云賬號,即密鑰創建者的阿里云賬號。您可以通過如下方式查看密鑰創建者:
通過控制臺:登錄密鑰管理服務控制臺,在密鑰管理頁面,進入密鑰詳情頁面,查看創建者。
通過OpenAPI:調用DescribeKey接口,響應消息中的
Creator
即創建者。
關于Explicit Deny(顯式拒絕)、Implicit Deny(隱式拒絕)的詳細介紹,請參見權限策略判定流程。
如果是其他阿里云賬號下的RAM用戶、RAM角色:判定結果A和判定結果B,必須都是允許(Allow),才允許使用該密鑰。
通過上述判斷流程,您可以了解到:
如果您想允許當前阿里云賬號下的RAM用戶、RAM角色管理或使用密鑰,只需在KMS側設置密鑰策略允許其管理或使用密鑰,或者在RAM側設置權限策略允許其管理或使用密鑰。
如果您想允許其他阿里云賬號下的RAM用戶、RAM角色使用密鑰,不僅需要在KMS側設置密鑰策略允許其使用密鑰,同時還要在RAM側設置權限策略允許其使用密鑰。
注意事項
密鑰策略說明
完整的密鑰策略包含如下內容:
Version:密鑰策略的版本,目前版本僅支持設置為1。
Statement:密鑰策略的語句,每個密鑰策略包含一個或多個語句。每個語句包含以下幾個參數。
Sid
可選,表示自定義的語句標識符。內容長度小于等于128字符,支持的字符為:大寫英文字母(A-Z)、小寫英文字母(a-z)、數字(0-9),特殊字符( _/+=.@-)。
Effect
必選,表示是允許還是拒絕該策略語句中的權限。取值為:
Allow
或Deny
。Principal
必選,表示權限策略的授權主體,支持設置為以下主體:
當前阿里云賬號,即密鑰所屬的阿里云賬號。
當前阿里云賬號下的RAM用戶、RAM角色。
其他阿里云賬號下的RAM用戶、RAM角色。
重要授權給其他阿里云賬號下的RAM用戶、RAM角色后,您仍需在訪問控制RAM側,使用該RAM用戶、RAM角色的阿里云賬號為其授權使用該密鑰,RAM用戶、RAM角色才能使用該密鑰。
具體操作,請參見密鑰管理服務自定義權限策略參考、為RAM用戶授權、為RAM角色授權。
Action
必選,表示要允許或拒絕的API操作,內容必須以"kms:"開頭。操作權限列表的范圍如下,如果您設置了列表外的操作,設置后也不會生效。
"Action": [ "kms:List*", "kms:Describe*", "kms:Create*", "kms:Enable*", "kms:Disable*", "kms:Get*", "kms:Set*", "kms:Update*", "kms:Delete*", "kms:Cancel*", "kms:TagResource", "kms:UntagResource", "kms:ImportKeyMaterial", "kms:ScheduleKeyDeletion" "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateAndExportDataKey", "kms:AsymmetricEncrypt", "kms:AsymmetricDecrypt", "kms:DescribeKey", "kms:DescribeKeyVersion", "kms:ListKeyVersions", "kms:ListAliasesByKeyId", "kms:TagResource" ]
Resource
必選,取值只能是
*
,表示本KMS密鑰。Condition
可選,表示授權生效的限制條件。Condition元素也稱為條件塊(Condition Block),它是由一個或多個條件子句構成。一個條件子句由條件操作類型、條件關鍵字和條件值組成。詳細信息,請參見權限策略基本元素。
格式為
"Condition": {"condition operator": {"condition key": "condition value"}}
。
密鑰策略示例
為阿里云賬號(119285303511****)下的密鑰設置密鑰策略為例。示例表示:
允許當前阿里云賬號(119285303511****)對該密鑰的完全訪問權限,即管理和使用密鑰。
允許當前阿里云賬號(119285303511****)下的RAM用戶(key_ramuser1)管理密鑰。
允許當前阿里云賬號(119285303511****)下的RAM用戶(key_ramuser2)、其他阿里云賬號(190325303126****)下的RAM用戶(key_ramuser3)使用密鑰。
{
"Statement": [
{
"Action": [
"kms:*"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119285303511****:*"
]
},
"Resource": [
"*"
],
"Sid": "kms default key policy"
},
{
"Action": [
"kms:List*",
"kms:Describe*",
"kms:Create*",
"kms:Enable*",
"kms:Disable*",
"kms:Get*",
"kms:Set*",
"kms:Update*",
"kms:Delete*",
"kms:Cancel*",
"kms:TagResource",
"kms:UntagResource",
"kms:ImportKeyMaterial",
"kms:ScheduleKeyDeletion"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119285303511****:user/key_ramuser1"
]
},
"Resource": [
"*"
]
},
{
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:GenerateAndExportDataKey",
"kms:AsymmetricEncrypt",
"kms:AsymmetricDecrypt",
"kms:DescribeKey",
"kms:DescribeKeyVersion",
"kms:ListKeyVersions",
"kms:ListAliasesByKeyId",
"kms:TagResource"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::119285303511****:user/key_ramuser2",
"acs:ram::190325303126****:user/key_ramuser3"
]
},
"Resource": [
"*"
]
}
],
"Version": "1"
}