文档

跨账号备份

更新时间:

便于企业内部采用中心化统一策略进行数据灾备保护、合规性审计等,云备份支持跨阿里云账号进行数据源备份和恢复。本文介绍如何在阿里云账号B下创建RAM角色并授权给阿里云账号A,允许阿里云账号A服务关联角色SLR(AliyunServiceRoleForHbrCrossAccountBackup)扮演阿里云账号B的RAM角色来访问阿里云账号B的资源,从而实现阿里云账号A跨账号备份和恢复阿里云账号B的资源。

背景信息

在典型的LandingZone架构最佳实践中,企业内存在不同多个部门多个阿里云账号,开发或者测试环境需要隔离。而数据灾备保护、合规性审计等则采取中心化统一策略。更多信息,请参见Landing Zone企业上云架构

例如在某企业内,拥有两个独立的生产环境阿里云账号A和测试环境账号B。现需要统一备份A和B账号下的资源,且生产账号的数据可以恢复至测试账号作开发测试用途,测试账号的数据可恢复至生产账号做版本更新。此时可以新创建一个中心备份账号C,或挑选A或B中的一个作为中心备份账号。A和B通过RAM授权给中心备份账号进行备份,A和B中的数据也可以跨账号恢复。

image

授权原理

以阿里云账号A备份阿里云账号B资源为例,说明其授权原理:

  1. 账号A创建服务关联角色AliyunServiceRoleForHbrCrossAccountBackup,云备份用此角色来扮演账号B的RAM角色进行数据备份。

  2. 账号B创建RAM角色hbrcrossrole,然后:

    1. 精确授权:先授予RAM角色hbrcrossrole系统策略权限AliyunHBRRolePolicy。该策略拥有访问账号B资源的权限。AliyunHBRRolePolicy详细配置如下:

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "bssapi:QueryAvailableInstances",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "nas:DescribeFileSystems",
                      "nas:CreateMountTargetSpecial",
                      "nas:DeleteMountTargetSpecial",
                      "nas:DescribeMountTargets",
                      "nas:DescribeAccessGroups"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "cms:QueryMetricList",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "ots:ListInstances",
                      "ots:ListTable",
                      "ots:CreateTable",
                      "ots:UpdateTable",
                      "ots:DescribeTable",
                      "ots:BatchWriteRow",
                      "ots:CreateTunnel",
                      "ots:DeleteTunnel",
                      "ots:ListTunnel",
                      "ots:DescribeTunnel",
                      "ots:ConsumeTunnel",
                      "ots:GetRange",
                      "ots:ListStream",
                      "ots:DescribeStream"
                  ],
                  "Resource": "*"
              },
              {
                  "Action": [
                      "oss:ListBuckets",
                      "oss:GetBucketInventory",
                      "oss:ListObjects",
                      "oss:HeadBucket",
                      "oss:GetBucket",
                      "oss:GetBucketAcl",
                      "oss:GetBucketLocation",
                      "oss:GetBucketInfo",
                      "oss:PutObject",
                      "oss:CopyObject",
                      "oss:GetObject",
                      "oss:AppendObject",
                      "oss:GetObjectMeta",
                      "oss:PutObjectACL",
                      "oss:GetObjectACL",
                      "oss:PutObjectTagging",
                      "oss:GetObjectTagging",
                      "oss:InitiateMultipartUpload",
                      "oss:UploadPart",
                      "oss:UploadPartCopy",
                      "oss:CompleteMultipartUpload",
                      "oss:AbortMultipartUpload",
                      "oss:ListMultipartUploads",
                      "oss:ListParts"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "hcs-sgw:DescribeGateways",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "ecs:RunCommand",
                      "ecs:CreateCommand",
                      "ecs:InvokeCommand",
                      "ecs:DeleteCommand",
                      "ecs:DescribeCommands",
                      "ecs:StopInvocation",
                      "ecs:DescribeInvocationResults",
                      "ecs:DescribeCloudAssistantStatus",
                      "ecs:DescribeInstances",
                      "ecs:DescribeInstanceRamRole",
                      "ecs:DescribeInvocations",
                      "ecs:CreateSnapshotGroup",
                      "ecs:DescribeSnapshotGroups",
                      "ecs:DeleteSnapshotGroup"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "ecs:DescribeSecurityGroups",
                      "ecs:DescribeImages",
                      "ecs:CreateImage",
                      "ecs:DeleteImage",
                      "ecs:DescribeSnapshots",
                      "ecs:CreateSnapshot",
                      "ecs:DeleteSnapshot",
                      "ecs:DescribeSnapshotLinks",
                      "ecs:DescribeAvailableResource",
                      "ecs:ModifyInstanceAttribute",
                      "ecs:CreateInstance",
                      "ecs:DeleteInstance",
                      "ecs:AllocatePublicIpAddress",
                      "ecs:CreateDisk",
                      "ecs:DescribeDisks",
                      "ecs:AttachDisk",
                      "ecs:DetachDisk",
                      "ecs:DeleteDisk",
                      "ecs:ResetDisk",
                      "ecs:StartInstance",
                      "ecs:StopInstance",
                      "ecs:ReplaceSystemDisk",
                      "ecs:ModifyResourceMeta"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "ecs:AttachInstanceRamRole",
                      "ecs:DetachInstanceRamRole"
                  ],
                  "Resource": [
                      "acs:ecs:*:*:instance/*",
                      "acs:ram:*:*:role/aliyunecsaccessinghbrrole"
                  ],
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "ram:PassRole",
                      "ram:GetRole",
                      "ram:GetPolicy",
                      "ram:ListPoliciesForRole"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "vpc:DescribeVpcs",
                      "vpc:DescribeVSwitches"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "ram:DeleteServiceLinkedRole",
                  "Resource": "*",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "ram:ServiceName": [
                              "otsbackup.hbr.aliyuncs.com",
                              "ossbackup.hbr.aliyuncs.com",
                              "ecsbackup.hbr.aliyuncs.com",
                              "nasbackup.hbr.aliyuncs.com",
                              "csgbackup.hbr.aliyuncs.com"
                          ]
                      }
                  }
              }
          ]
      }
    2. 修改信任策略仅允许账号A的服务关联角色SLR(AliyunServiceRoleForHbrCrossAccountBackup)扮演账号B的RAM角色来访问阿里云账号B的资源。

  3. 在账号A的云备份控制台添加跨账号备份账号B,其中角色名称必须为获得授权的RAM角色hbrcrossrole

  4. 在账号A的云备份控制台切换到账号B,就可以使用账号A备份和恢复账号B的资源。

使用限制

重要

目前支持ECS文件备份、NAS备份、OSS备份、Tablestore备份和数据库备份场景使用跨账号备份功能。ECS整机备份跨账号备份后,恢复操作时只能恢复到原阿里云账号。具体支持场景请以云备份控制台提示为准。

费用说明

使用云备份提供的跨账号备份功能是免费的。但备份恢复产生的费用由备份管理账号(阿里云账号A)支付,其中ECS整机备份的快照服务费用、OSS请求费用仍由原账号(阿里云账号B)支付。更多信息,请参见计费方式与计费项

步骤一:为阿里云账号A创建服务关联角色

使用阿里云账号A进行跨账号备份和恢复,您需要为阿里云账号A授权服务关联角色AliyunServiceRoleForHbrCrossAccountBackup。

  • 角色名称:AliyunServiceRoleForHbrCrossAccountBackup

  • 权限策略:AliyunServiceRolePolicyForHbrCrossAccountBackup

  • 权限说明:允许备份服务跨账号访问其他被授权账号的资源,以进行跨账号备份和恢复。

重要

该操作只需要在首次进入时操作一次。

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在左侧导航栏,单击跨账号备份

    页面会弹出授权对话框,根据提示授权角色。

  3. 云备份服务授权对话框中,单击确认授权

    image.png更多信息,请参见云备份服务关联角色

步骤二:为阿里云账号B创建RAM角色

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

  2. 在左侧导航栏中,选择身份管理 > 角色

  3. 角色页面,单击创建角色

  4. 选择类型配置向导中,选择可信实体类型为阿里云账号,然后单击下一步

  5. 配置角色配置向导中,配置如下内容,然后单击完成

    参数

    说明

    角色名称

    输入RAM角色名称,例如hbrcrossrole

    备注

    输入创建RAM角色的备注信息。

    选择信任的云账号

    选择其它云账号。此处选择账号A的账号ID。

    说明

    您可以访问安全设置页面查看阿里云账号ID。

  6. 创建完成配置向导中,单击关闭

步骤三:为RAM角色授权

创建RAM角色后,您可以使用该RAM角色进行相关操作,但该RAM角色无任何权限。您需要为该RAM角色授予系统策略或自定义策略。其中,访问控制提供如下两种策略为角色进行授权,任选其中一种即可。

  • AdministratorAccess:授予目标账号管理所有云资源的权限。

  • AliyunHBRRolePolicy:授予云备份系统权限策略。该系统权限策略必须通过精确授权进行配置。

本文以为RAM角色授予AliyunHBRRolePolicy权限为例。

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

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

  3. 找到目标RAM角色(例如hbrcrossrole),进入目标RAM角色详情页。

  4. 权限管理页签,单击精确授权

  5. 精确授权面板,选择权限类型为系统策略,输入策略名称为AliyunHBRRolePolicy,然后单击确定

  6. 系统提示精确授权成功,单击关闭

  7. 修改该RAM角色的信任策略。

    1. 在当前角色的详情页面,单击信任策略

    2. 单击编辑信任策略

    3. 在编辑框中,将下述代码复制至文本框。其中目标账号ID为阿里云账号A的账号ID。

      该策略表示阿里云账号A有权限通过云备份获取临时Token来操作阿里云账号B的资源。

      说明

      您可以访问安全设置页面查看阿里云账号ID。

      {
       "Statement": [
           {
               "Action": "sts:AssumeRole",
               "Effect": "Allow",
               "Principal": {
                   "RAM": [
                       "acs:ram::目标账号ID:role/AliyunServiceRoleForHbrCrossAccountBackup"
                   ]
               }
           }
       ],
       "Version": "1"
      }
    4. 单击保存信任策略。配置完成。

步骤四:添加备份账号

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在顶部菜单栏,选择所在地域。

    重要

    如果您要备份阿里云账号B在地域regionC的ECS文件、NAS、OSS、Tablestore、数据库或ECS整机,请选择地域regionC。即待备份资源在哪个地域,就在哪个地域添加备份账号。

  3. 在左侧导航栏,单击跨账号备份

  4. 跨账号备份,单击添加备份账号

  5. 添加备份账号对话框,配置以下参数,然后单击确定

    image.png

    参数

    说明

    阿里云账号ID

    输入您的阿里云账号ID。此处填写账号B的账号ID。

    说明

    您可以访问安全设置页面查看阿里云账号ID。

    角色名称

    输入已创建的RAM角色名称。此处填写hbrcrossrole,即您在步骤二:为阿里云账号B创建RAM角色创建的RAM角色名称。

    重要

    您可以单击授权检查,检查之前配置授权是否正确。若提示错误,请检查之前配置后重试。通过检查时,界面会提示此角色已经授权您访问其所属资源的权限

    账号别名

    您可以任意设置账号别名,方便进行备份账号的管理。

    创建成功后,您可以看到已经增加一条跨账号备份记录。

    zhanghao

步骤五:开始跨账号备份

创建完成后,您就可以使用阿里云账号A登录控制台,切换账号,进行跨账号备份阿里云账号B的数据源。

  1. 使用阿里云账号A登录云备份管理控制台

  2. 在顶部菜单栏,选择待备份资源所在的地域。

  3. 单击登录账号,选择阿里云账号B。image.png

  4. 在左侧导航选择不同备份功能,就可以进行跨账号备份了。

    重要

    目前支持ECS文件备份、NAS备份、OSS备份、Tablestore备份和数据库备份场景使用跨账号备份功能。ECS整机备份跨账号备份后,恢复操作时只能恢复到原阿里云账号。具体支持场景请以云备份控制台提示为准。

    例如,当您选择ECS文件备份,就可以看到ECS实例列表中已经读取到阿里云账号B名下的ECS资产。备份完成后,阿里云账号B的数据源已经备份到阿里云账号A的备份库。

步骤六:跨账号恢复

您已完成了阿里云账号A备份阿里云账号B的数据源。此时,备份库包含了阿里云账号A(未进行跨账号备份之前的数据)和阿里云账号B的数据备份,备份库是通用的。您可以从备份库的任意历史备份点进行恢复,可以恢复至账号A,也可以恢复到账号B。

  1. 切换账号。

    备份库是通用的,阿里云账号A和B都可以使用备份库中的历史备份点进行恢复。您希望恢复哪个账号的数据,就切换到哪个账号。

  1. 创建恢复任务。创建恢复任务的操作步骤,与各数据源恢复步骤一致。

    image.png

如何取消跨账号备份功能

重要
  • 取消跨账号备份功能后,阿里云账号A无法再备份阿里云账号B的数据源。请谨慎评估后操作。

  • 建议您保留对其他账号的跨账号备份功能,不进行备份恢复操作,不会新增费用。

  • 之前已经备份的数据仍然保留在备份库,这些数据继续占用存储容量,云备份会继续收取容量费用。希望停止计费,请参见云备份服务如何停止计费?。注意删除备份后数据不可恢复。

  1. 切换到阿里云账号B,在对应数据源页面,卸载备份客户端(如果有)、注销实例、删除备份库等。具体操作,请参见云备份服务如何停止计费?

  2. 切换到阿里云账号A,在云备份控制台的跨账号备份页面,删除阿里云账号B。image.png

  3. 删除为阿里云账号B创建的RAM角色。

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

    2. 在左侧导航栏中,选择身份管理 > 角色

    3. 找到为阿里云账号B创建的RAM角色,例如hbrcrossrole。在其操作列,进行删除。

相关文档

  • 本页导读 (1)
文档反馈