首页 密钥管理服务 安全合规 使用RAM实现对资源的访问控制

使用RAM实现对资源的访问控制

更新时间: 2023-08-29 17:54:10

阿里云账号(主账号)对该账号下的所有资源拥有完整的操作权限,为保障业务数据安全,您可以为用户创建不同的RAM(Resource Access Management)用户(子账号),通过授予RAM用户系统权限策略和自定义权限策略,实现账号权限的精细化管理。本文介绍如何授权RAM用户对KMS资源的访问控制。

前提条件

已创建RAM用户。具体操作,请参见创建RAM用户

授予RAM用户系统策略

阿里云提供了部分与密钥管理服务KMS(Key Management Service)相关的系统权限策略,您可以按需授予指定的RAM用户。如果默认的系统权限策略无法满足您的权限分配需求,您可以自定义访问权限策略。具体操作,请参见授予RAM用户自定义策略

阿里云默认提供的KMS相关系统权限如下:

  • AliyunKMSFullAccess:管理KMS的所有权限。

  • AliyunKMSReadOnlyAccess:只读访问KMS的权限。

  • AliyunKMSCryptoAdminAccess:在KMS中管理密钥的权限。

  • AliyunKMSCryptoUserAccess:使用KMS的密钥进行密码运算的权限。

  • AliyunKMSSecretUserAccess:获取KMS中的凭据的权限。

  • AliyunKMSSecretAdminAccess:在KMS中管理凭据的权限。

  1. 使用阿里云账号登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 用户页面,找到目标RAM用户,在操作列单击添加权限

  4. 添加权限面板,配置授权范围和授权主体。

    配置项

    说明

    授权范围

    选择权限在当前阿里云账号生效或者在指定资源组内生效。目前KMS还未支持资源组功能,请选择整个云账号

    授权主体

    需要授权的RAM用户。系统自动填入您选择的RAM用户,您也可以手动添加其他RAM用户。

  5. 单击系统策略,根据使用场景选择系统权限策略,然后单击确定

  6. 确认授权范围和权限策略,单击完成

授予RAM用户自定义策略

如果默认的系统权限策略无法满足您的需求,您可以通过创建自定义权限策略实现精细化权限管理。

  1. 使用阿里云账号登录RAM控制台

  2. 创建自定义的权限策略。

    1. 在左侧导航栏,选择权限管理 > 权限策略

    2. 权限策略页面,单击创建权限策略

    3. 创建权限策略页面,单击脚本编辑页签。

      说明

      RAM提供可视化编辑和脚本编辑方式来创建权限策略。创建KMS资源的自定义权限策略时,您需要使用脚本编辑方式,可视化编辑方式仅支持选择KMS的全部资源和全部操作。

    4. 编辑权限策略脚本,然后单击继续编辑基本信息

      编写KMS权限策略脚本时,您需要自定义授权语句,包括效果(Effect)、操作(Action)、资源(Resource)以及条件(Condition,可选项)。更多信息,请参见KMS定义的RAM权限策略常见的授权策略示例

      说明

      关于权限策略语法结构的详情,请参见权限策略语法和结构

    5. 输入权限策略名称和备注信息,根据页面提示检查并优化权限策略内容。

    6. 单击确定

  3. 授予RAM用户自定义的权限策略。

    1. 在左侧导航栏,选择身份管理 > 用户

    2. 用户页面,找到目标RAM用户,在操作列单击添加权限

    3. 添加权限面板,配置授权范围和授权主体。

      配置项

      说明

      授权范围

      选择权限在当前阿里云账号生效或者在指定资源组内生效。目前KMS还未支持资源组功能,请选择整个云账号

      授权主体

      需要授权的RAM用户。系统自动填入您选择的RAM用户,您也可以手动添加其他RAM用户。

    4. 单击自定义策略,根据使用场景选择自定义的权限策略,然后单击确定

  4. 确认授权范围和权限策略,单击完成

KMS定义的RAM权限策略

资源(Resource)

KMS定义的资源类型包括抽象密钥容器、抽象凭据容器、抽象别名容器、抽象证书容器、密钥、凭据、别名和证书,您可以通过以下方式获取资源对应的资源名称ARN(Aliyun Resource Names),用于RAM权限策略的Resource元素。

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击密钥管理页面。

  2. 用户主密钥页签,定位到目标密钥,单击操作列的详情,在密钥详情页面获取ARN。密钥详情不同资源类型对应的ARN格式不同,具体信息,如下表所示。

    资源类型

    ARN

    抽象密钥容器

    acs:kms:${region}:${account}:key

    抽象凭据容器

    acs:kms:${region}:${account}:secret

    抽象别名容器

    acs:kms:${region}:${account}:alias

    密钥

    acs:kms:${region}:${account}:key/${key-id}

    说明

    密钥资源的ARN支持通配符*。例如:

    • acs:kms:${region}:${account}:key/*:表示对应地域和账号下的所有密钥。

    • acs:kms:*:${account}:key/*:表示对应账号下所有地域的所有密钥。

    凭据

    acs:kms:${region}:${account}:secret/${secret-name}

    说明

    凭据资源的ARN支持以下两种通配方式:

    • acs:kms:${region}:${account}:secret/*:表示对应地域和账号下的所有凭据。

    • acs:kms:${region}:${account}:secret/prefix*:表示对应地域和账号下凭据名称前缀为prefix的所有凭据。

    别名

    acs:kms:${region}:${account}:alias/${alias-name}

    证书

    acs:kms:${region}:${account}:certificate/${id}

操作(Action)

针对每一个需要进行访问控制的接口,KMS都定义了用于RAM权限策略的操作(Action),通常为kms:<api-name>

说明

DescribeRegions不需要进行访问控制,只要请求可以通过认证校验,即可调用。调用者可以是阿里云账号、RAM用户或RAM角色。

以下表格列出了KMS接口的对应RAM权限策略操作,以及接口所访问的资源类型。

  • 密钥服务接口

    KMS接口

    Action

    资源类型

    ARN

    ListKeys

    kms:ListKeys

    抽象密钥容器

    acs:kms:${region}:${account}:key

    CreateKey

    kms:CreateKey

    DescribeKey

    kms:DescribeKey

    密钥

    acs:kms:${region}:${account}:key/${key-id}

    UpdateKeyDescription

    kms:UpdateKeyDescription

    EnableKey

    kms:EnableKey

    DisableKey

    kms:DisableKey

    ScheduleKeyDeletion

    kms:ScheduleKeyDeletion

    CancelKeyDeletion

    kms:CancelKeyDeletion

    GetParametersForImport

    kms:GetParametersForImport

    ImportKeyMaterial

    kms:ImportKeyMaterial

    DeleteKeyMaterial

    kms:DeleteKeyMaterial

    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

    ListAliases

    kms:ListAliases

    抽象别名容器

    acs:kms:${region}:${account}:alias

    CreateAlias

    kms:CreateAlias

    别名和密钥

    • 别名:acs:kms:${region}:${account}:alias/${alias-name}

    • 密钥:acs:kms:${region}:${account}:key/${key-id}

    UpdateAlias

    kms:UpdateAlias

    DeleteAlias

    kms:DeleteAlias

  • 凭据管家接口

    KMS 接口

    Action

    资源类型

    ARN

    CreateSecret

    kms:CreateSecret

    抽象凭据容器

    acs:kms:${region}:${account}:secret

    ListSecrets

    kms:ListSecrets

    DescribeSecret

    kms:DescribeSecret

    凭据

    acs:kms:${region}:${account}:secret/${secret-name}

    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

    资源类型

    ARN

    CreateCertificate

    kms:CreateCertificate

    证书

    acs:kms:${region}:${account}:certificate/${id}

    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

    资源类型

    ARN

    ListResourceTags

    kms:ListResourceTags

    密钥

    • 密钥:acs:kms:${region}:${account}:key/${key-id}

    • 凭据:acs:kms:${region}:${account}:secret/${secret-name}

    UntagResource

    kms:UntagResource

    密钥或凭据

    TagResource

    kms:TagResource

条件(Condition)

Condition元素用于指定授权生效的限制条件,是可选元素。您可以在RAM权限策略中设定条件关键字控制对KMS的访问,只有当条件满足时,权限验证才能通过。

  • 使用阿里云通用条件关键字:命名格式为acs:<condition-key>。例如,您可以使用acs:CurrentTime条件限制权限策略有效的时间。

    更多信息,请参见权限策略基本元素

  • 使用标签作为条件关键字:命名格式为kms:tag/<tag-key>。您可以使用标签限制对EncryptDecryptGenerateDataKey等密码运算API的使用。

    您可以通过以下方式查询密钥的标签:

    • 通过控制台获取密钥的标签

      1. 登录密钥管理服务控制台,在页面左上角选择地域信息后,在左侧导航栏单击密钥管理页面。

      2. 密钥管理页面,根据您要处理的密钥管理类型,单击软件密钥管理页签或硬件密钥管理页签。

      3. 单击实例名称,在实例详情页面,找到目标密钥。

      4. 单击密钥名称,在密钥详情页面的标签区域,查看密钥的标签键和标签值。

    • 通过调用ListResourceTags接口获取密钥的标签。

常见的授权策略示例

场景

策略脚本

允许访问所有的KMS资源

重要

为保障数据安全,不推荐您配置允许访问KMS所有资源的权限策略。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}               

允许指定的IP地址段或IP地址访问KMS所有资源

以下代码以192.168.0.0/16、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"
        ]
      }
    }
  }]
}

列出和查看密钥,使用密钥进行加密、解密和生成数据密钥

说明

请将${region}${account}替换为您实际的地域和阿里云账号,您也可以根据需求缩小资源范围。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:Describe*"
      ],
      "Resource": [
        "acs:kms:${region}:${account}:key",
        "acs:kms:${region}:${account}:key/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "acs:kms:${region}:${account}:key/*"
    }
  ]
}

允许使用含有指定标签的密钥进行信封加密、解密和生成数据密钥

以下代码以标签键为Project、标签值为Apollo为例。

说明

请将${region}${account}替换为您实际的地域和阿里云账号,您也可以根据需求缩小资源范围。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey"
            ],
            "Resource": [
                "acs:kms:${region}:${account}:key/*"
            ],
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "kms:tag/Project": [
                        "Apollo"
                    ]
                }
            }
        }
    ]
}               

列举凭据、读取凭据属性权限

说明

请将${region}${account}替换为您实际的地域和阿里云账号,您也可以根据需求缩小资源范围。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:List*",
                "kms:Describe*"
            ],
            "Resource": [
                "acs:kms:${region}:${account}:secret",
                "acs:kms:${region}:${account}:secret/*"
            ]
        }
    ]
}      

获取指定凭据名称的凭据值

以下代码以example-secret凭据名称为例,并且该凭据通过密钥ID为keyId-example的密钥加密。

说明

请将${region}${account}替换为您实际的地域和阿里云账号,您也可以根据需求缩小资源范围。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kms:GetSecretValue",
            "Resource": "acs:kms:${region}:${account}:secret/example-secret"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "acs:kms:${region}:${account}:key/keyId-example"
        }
    ]
}

证书签名和验签权限,即使用指定证书生成和验证数字签名的权限

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CertificatePrivateKeySign",
        "kms:CertificatePublicKeyVerify"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

阿里云首页 密钥管理服务 相关技术圈