密鑰管理服務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條件限制權限策略有效的時間。

除了阿里云全局條件,您也可以使用標簽作為條件關鍵字,限制對EncryptDecryptGenerateDataKey等密碼運算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": [
            "*"
          ]
        }
      ]
    }