密钥管理服务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": [
            "*"
          ]
        }
      ]
    }