Key Management Service(Key Management Service)通過存取控制RAM(Resource Access Management)實現對資源的存取控制。本文為您介紹KMS定義的資源類型、操作和策略條件。
阿里雲帳號對自己的資源擁有完整的操作許可權,RAM使用者和RAM角色則需要通過顯式授權擷取對應資源的操作許可權。
在瞭解如何使用RAM授權和訪問主要金鑰之前,請瞭解以下內容:
KMS定義的資源類型
下表列出了KMS定義的所有資源類型以及對應的資源名稱(ARN),用於RAM權限原則的Resource元素。
資源類型 | ARN |
抽象密鑰容器 | acs:kms:${region}:${account}:key |
抽象憑據容器 | acs:kms:${region}:${account}:secret |
抽象別名容器 | acs:kms:${region}:${account}:alias |
抽象認證容器 | acs:kms:${region}:${account}:certificate |
密鑰 | acs:kms:${region}:${account}:key/${key-id} |
憑據 | acs:kms:${region}:${account}:secret/${secret-name} |
別名 | acs:kms:${region}:${account}:alias/${alias-name} |
認證 | acs:kms:${region}:${account}:certificate/${id} |
KMS定義的操作
針對每一個需要進行存取控制的介面,KMS都定義了用於RAM權限原則的操作(Action),通常為
kms:<api-name>
。 說明 DescribeRegions不需要進行存取控制,只要請求可以通過認證校正,即可調用。調用者可以是阿里雲帳號、RAM使用者或RAM角色。
以下表格列出了KMS介面的對應RAM權限原則操作,以及介面所訪問的資源類型。
- 密鑰服務介面
KMS介面 Action 資源類型 ListKeys kms:ListKeys 抽象密鑰容器 CreateKey kms:CreateKey 抽象密鑰容器 DescribeKey kms:DescribeKey 密鑰 UpdateKeyDescription kms:UpdateKeyDescription 密鑰 EnableKey kms:EnableKey 密鑰 DisableKey kms:DisableKey 密鑰 ScheduleKeyDeletion kms:ScheduleKeyDeletion 密鑰 CancelKeyDeletion kms:CancelKeyDeletion 密鑰 GetParametersForImport kms:GetParametersForImport 密鑰 ImportKeyMaterial kms:ImportKeyMaterial 密鑰 DeleteKeyMaterial kms:DeleteKeyMaterial 密鑰 ListAliases kms:ListAliases 抽象別名容器 CreateAlias kms:CreateAlias 別名和密鑰 UpdateAlias kms:UpdateAlias 別名和密鑰 DeleteAlias kms:DeleteAlias 別名和密鑰 ListAliasesByKeyId kms:ListAliasesByKeyId 密鑰 CreateKeyVersion kms:CreateKeyVersion 密鑰 DescribeKeyVersion kms:DescribeKeyVersion 密鑰 ListKeyVersions kms:ListKeyVersions 密鑰 UpdateRotationPolicy kms:UpdateRotationPolicy 密鑰 Encrypt kms:Encrypt 密鑰 Decrypt kms:Decrypt 密鑰 ReEncrypt - kms:ReEncryptFrom
- kms:ReEncryptTo
- kms:ReEncrypt*
密鑰 GenerateDataKey kms:GenerateDataKey 密鑰 GenerateDataKeyWithoutPlaintext kms:GenerateDataKeyWithoutPlaintext 密鑰 ExportDataKey kms:ExportDataKey 密鑰 GenerateAndExportDataKey kms:GenerateAndExportDataKey 密鑰 AsymmetricSign kms:AsymmetricSign 密鑰 AsymmetricVerify kms:AsymmetricVerify 密鑰 AsymmetricEncrypt kms:AsymmetricEncrypt 密鑰 AsymmetricDecrypt kms:AsymmetricDecrypt 密鑰 GetPublicKey kms:GetPublicKey 密鑰 - 憑據管家介面
KMS 介面 Action 資源類型 CreateSecret kms:CreateSecret 抽象憑據容器 ListSecrets kms:ListSecrets 抽象憑據容器 DescribeSecret kms:DescribeSecret 憑據 DeleteSecret kms:DeleteSecret 憑據 UpdateSecret kms:UpdateSecret 憑據 RestoreSecret kms:RestoreSecret 憑據 GetSecretValue - kms:GetSecretValue
- kms:Decrypt
說明 僅當您使用自己建立的CMK作為通用憑據的加密主要金鑰時,需要驗證kms:Decrypt。憑據 PutSecretValue - kms:PutSecretValue
- kms:GenerateDataKey
說明 僅當您使用自己建立的CMK作為通用憑據的加密主要金鑰時,需要驗證kms:GenerateDataKey。憑據 ListSecretVersionIds kms:ListSecretVersionIds 憑據 UpdateSecretVersionStage kms:UpdateSecretVersionStage 憑據 GetRandomPassword kms:GetRandomPassword 無 - 認證管家介面
KMS 介面 Action 資源類型 CreateCertificate kms:CreateCertificate 認證 UploadCertificate kms:UploadCertificate 認證 GetCertificate kms:GetCertificate 認證 DescribeCertificate kms:DescribeCertificate 認證 UpdateCertificateStatue kms:UpdateCertificateStatue 認證 DeleteCertificate kms:DeleteCertificate 認證 CertificatePrivateKeySign kms:CertificatePrivateKeySign 認證 CertificatePublicKeyVerify kms:CertificatePublicKeyVerify 認證 CertificatePublicKeyEncrypt kms:CertificatePublicKeyEncrypt 認證 CertificatePrivateKeyDecrypt kms:CertificatePrivateKeyDecrypt 認證 - 標籤管理介面
KMS 介面 Action 資源類型 ListResourceTags kms:ListResourceTags 密鑰或憑據 UntagResource kms:UntagResource 密鑰或憑據 TagResource kms:TagResource 密鑰或憑據
KMS支援的策略條件
您可以在RAM權限原則中設定條件控制對KMS的訪問,只有當條件滿足時,許可權驗證才能通過。例如:您可以使用acs:CurrentTime
條件限制權限原則有效時間。
除了阿里雲全域條件,您也可以使用標籤作為條件關鍵字,限制對Encrypt、Decrypt、GenerateDataKey等密碼運算API的使用。條件關鍵字的格式為kms:tag/<tag-key>
。
更多資訊,請參見權限原則基本元素。
常見的授權策略樣本
- 允許訪問所有的KMS資源
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": [ "*" ] } ] }
- 密鑰唯讀存取權限,即列出和查看密鑰、查看別名以及使用密鑰許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ] } ] }
- 允許使用含有下欄標籤的密鑰進行密碼運算:
- 標籤鍵:
Project
- 標籤值:
Apollo
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ], "Condition": { "StringEqualsIgnoreCase": { "kms:tag/Project": [ "Apollo" ] } } } ] }
- 標籤鍵:
- 允許以下IP地址存取金鑰:
- 指定IP位址區段:192.168.0.0/16
- 指定IP地址:172.16.215.218
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "kms:*" ], "Resource": [ "*" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "192.168.0.0/16", "172.16.215.218" ] } } }] }
- 憑據唯讀存取權限,即列出和查看憑據、查看憑據版本、查看憑據內容以及產生隨機密碼的許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:GetSecretValue", "kms:Decrypt", "kms:GetRandomPassword" ], "Resource": [ "*" ] } ] }
- 認證唯讀存取權限,即列出和查看認證詳情的許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Get*" ], "Resource": [ "*" ] } ] }
- 認證簽名和驗簽許可權,即使用指定認證產生和驗證數位簽章的許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CertificatePrivateKeySign", "kms:CertificatePublicKeyVerify" ], "Resource": [ "*" ] } ] }