ECS中的跨账号密钥共享

如果您希望将用户主密钥共享至其他阿里云主账号,并确保被共享的密钥能够在ECS加密场景中正常使用,请参考本文档。本文详细介绍了共享方如何共享用户主密钥,以及被共享方如何在ECS场景中使用共享密钥的步骤。

使用场景

  • 多部门统一密钥管理,满足合规需求

    在企业组织架构中,由于行业监管政策或内部安全策略的要求,某些部门需要对敏感数据的加密密钥进行集中控制,共享密钥可以保证密钥权限集中在一个账号中,以便于密钥的审计、追溯和统一管理。

  • 密钥共享,优化成本

    在实际业务中,为了降低成本,企业可以选择在一个阿里云主账号中集中购买KMS实例,创建密钥,并将密钥共享给企业内其他不同团队或项目的阿里云主账号。其他主账号无需购买实例,即可实现加密资源的创建及使用。

使用流程

在跨账号密钥共享机制中,共享方通过将密钥共享给其他阿里云主账号下的 RAM 角色,实现密钥的跨账号共享。不同使用场景需要授权的RAM角色不同,经过共享密钥加密的快照和镜像依旧可以共享。

image

前提条件

角色

前提条件

共享方

  • 已记录被共享方的阿里云主账号UID。

  • 请确保共享方已满足以下条件:

    • 已在KMS(密钥管理服务)3.0 实例中创建用户主密钥

    • KMS实例访问管理数量需要大于密钥被共享的总次数,购买后您可通过升配KMS实例重新设置。

      访问管理数量是指一个KMS实例可以关联的VPC数量以及共享给其他阿里云主账号的数量配额。该配额直接影响KMS实例的使用范围和资源共享能力。

被共享方

被共享方需要根据不同使用需求,创建不同RAM角色。

  1. 使用RAM管理员登录RAM控制台

    选择身份管理 > 角色,搜索是否存在目标角色。

    • 如果需要利用共享密钥创建加密云盘、复制加密快照和加密镜像,则需要创建AliyunECSDiskEncryptDefaultRole角色。

    • 如果需要将加密镜像再次共享至其他账号,则需要创建AliyunECSShareEncryptImageDefaultRole角色。

    • 如果需要将加密快照再次共享至其他账号,则需要创建AliyunECSShareEncryptSnapshotDefaultRole角色。

  2. 如果您不存在目标角色,请选择权限管理 > 权限策略,单击创建权限策略,在脚本编辑界面新增策略。

    • AliyunECSDiskEncryptDefaultRole角色的权限。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:List*",
                      "kms:DescribeKey",
                      "kms:TagResource",
                      "kms:UntagResource"
                  ],
                  "Resource": [
                      "acs:kms:*:*:*",
                      "acs:kms:*:*:*/*"
                  ],
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:GenerateDataKey"
                  ],
                  "Resource": [
                      "acs:kms:*:*:*/*"
                  ],
                  "Effect": "Allow"
              }
          ]
      }
    • AliyunECSShareEncryptImageDefaultRoleAliyunECSShareEncryptSnapshotDefaultRole角色的策略。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "kms:List*",
                  "Resource": "acs:kms:<密钥归属地域ID>:<密钥归属用户UID>:key",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "kms:DescribeKey",
                      "kms:TagResource",
                      "kms:UntagResource",
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:GenerateDataKey"
                  ],
                  "Resource": "acs:kms:<密钥归属地域ID>:<密钥归属用户UID>:key/<关联的KMS加密密钥Key>",
                  "Effect": "Allow"
              }
          ]
      }
      说明

      其中<密钥归属地域ID><密钥归属用户UID><关联的KMS加密密钥Key>为变量,您需要分别修改为KMS密钥所在的地域ID、密钥共享方的阿里云主账号IDKMS密钥的密钥ID。

  3. 选择身份管理 > 角色,单击创建角色,信任主体类型选择云服务,信任主体名称选择云服务器ECS/ECS,输入目标角色名称后,单击确定

  4. 单击角色名称,进入目标角色的详情页下,单击权限管理 > 新增授权,选择创建的策略,并确认新增授权

  5. (条件必选)对于AliyunECSShareEncryptImageDefaultRoleAliyunECSShareEncryptSnapshotDefaultRole角色需要配置信任策略,在角色详情页中,单击信任策略 > 编辑信任策略,在脚本编辑后单击确定

    AliyunECSShareEncryptImageDefaultRoleAliyunECSShareEncryptSnapshotDefaultRole角色的信任策略。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "<UID>@ecs.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
    说明

    其中<UID>为变量,您需要修改为资源被共享方阿里云账号UID。

共享方配置跨账号密钥共享

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 密钥管理

  2. 密钥管理页面,选择用户主密钥页签,单击密钥ID,进入密钥详情页。

  3. 在密钥详情页,单击密钥策略,选择设置密钥策略

  4. 单击添加其他账号使用者ARN,输入授权主体ARN,单击确定。

    acs:ram::<被共享方阿里云主账号UID>:role/<ramrole>

    以将密钥共享至阿里云主账号UID119285303511****下的AliyunECSDiskEncryptDefaultRole为例,授权主体ARN应填写为:

    acs:ram::119285303511****:role/AliyunECSDiskEncryptDefaultRole

被共享方使用共享密钥

以单独创建加密云盘为例,加密复制快照复制镜像时选择密钥的操作步骤与此类似

在创建的加密资源详情页中,受到共享方给予的权限限制,仅可查看所使用的KMS密钥ID,不会展示KMSARN 或别名信息。该显示限制不会影响加密资源的正常使用。

控制台

本步骤仅描述创建云盘时如何配置加密选项,其余配置说明,请参见创建空数据盘

  1. 访问ECS-块存储

  2. 在页面左侧顶部,选择目标资源所在的资源组和地域。 地域

  3. 单击创建云盘。在云盘设置中勾选加密,下拉选择指定自定义KMS密钥后手动输入共享密钥ID。image

API

您可通过调用API接口CreateDisk 创建数据盘时,设置Encrypted值和KMSKeyId值,加密数据盘。

常见问题

密钥共享方配置密钥策略时,显示Rejected.ShareQuotaExceedLimit。

报错图片:image

原因及解决方法:KMS实例访问管理数量需要大于密钥被共享的总次数,购买后您可通过升配KMS实例重新设置。

访问管理数量是指一个KMS实例可以关联的VPC数量以及共享给其他阿里云主账号的数量配额。该配额直接影响KMS实例的使用范围和资源共享能力。

密钥共享方配置密钥策略时,显示InvalidParameter。

报错图片:image

原因及解决方法:被共享方相关角色未被创建,可参看前提条件创建并授权角色。

相关文档

  • 如果需要将加密快照再次共享至其他账号,可参考共享快照

  • 如果需要将加密镜像再次共享至其他账号,可参考共享自定义镜像