密鑰管理服務KMS(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": [ "*" ] } ] }