跨账号同区域复制是指将账号A某个地域下源存储空间(Bucket)的文件(Object)的创建、更新和删除等操作自动、异步(近实时)地复制到账号B相同地域下的目标Bucket。本文介绍如何进行跨账号同区域复制。
前提条件
已在账号A下的某个地域创建Bucket A作为同区域复制的源Bucket,并记录账号A的UID、Bucket A的名称及所在地域。
已在账号B下的相同地域创建Bucket B作为同区域复制的目标Bucket,并记录账号B的UID、Bucket B的名称。
角色授权
跨账号复制任务涉及两个不同账号的Bucket,您需要按照以下说明完成RAM角色所需的信任策略和最小权限策略。
通过账号A完成以下操作。
创建普通服务角色。
重要您可以选择通过RAM用户创建角色,RAM用户必须拥有以下权限:
ram:CreateRole
、ram:GetRole
、ram:ListPoliciesForRole
、ram:AttachPolicyToRole
。但是考虑到授予RAM用户ram:CreateRole
、ram:GetRole
等角色相关的权限风险较大,您可以通过RAM用户关联的阿里云账号创建RAM角色并为相应的RAM角色完成授权。授权完成后,RAM用户可以直接复用阿里云账号创建的RAM角色。创建角色过程中,信任主体类型选择云服务,信任主体名称选择对象存储。具体步骤,请参见创建普通服务角色。
说明角色创建成功后,请记录基本信息区域的RAM角色ARN,以便后续添加权限时使用。
为角色授予源Bucket执行跨区域复制的权限。
您可以选择以下任意方式为角色授权。
为RAM角色授予系统策略
警告您可以选择为RAM角色授予系统策略
AliyunOSSFullAccess
。AliyunOSSFullAccess
默认拥有当前账号下所有Bucket的所有操作权限,请谨慎使用。为RAM角色授予自定义策略
通过RAM Policy的方式对RAM角色授予源Bucket(src-bucket)复制所需的最小权限。
说明实际使用时,请相应替换源Bucket名称。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "oss:ReplicateList", "oss:ReplicateGet" ], "Resource":[ "acs:oss:*:*:src-bucket", "acs:oss:*:*:src-bucket/*" ] } ] }
如果您希望将KMS加密的Object复制到目标Bucket,您还需要为角色授予
AliyunKMSFullAccess
系统策略。具体步骤,请参见为RAM角色授权。
通过账号B授予角色在目标Bucket接收复制对象的权限。
(推荐)方式一:按图形策略添加
登录OSS管理控制台。
在左侧导航栏,单击Bucket 列表,然后单击目标bucket名称
dest-bucket
。在左侧导航栏,选择
。在Bucket 授权策略页面的按图形策略添加页签,单击接收复制对象。
在接收复制对象面板,UID及RAM角色获取方式选中从源端复制RAM角色ARN获取,源端复制RAM角色ARN选择步骤1创建的角色ARN,授权用途选中跨账号跨区域复制。
单击生成 Policy。
方式二:按语法策略添加
在左侧导航栏,选择权限控制>Bucket 授权策略。
在Bucket 授权策略页面的按语法策略添加页签,单击编辑。
在语法策略输入框中,输入以下Bucket Policy。
重要通过Bucket Policy按语法策略的方式进行授权时,新添加的策略会覆盖已有的策略,请确保新添加策略包含已有策略的内容,否则可能导致关联已有策略的操作失败。
实际使用时,请相应替换自定义角色名称(如果自定义角色名称包含大写字母,需转换为对应的小写字母。例如已创建的角色名称为AliyunOssDrsRole,您需要转换为aliyunossdrsrole)、目标Bucket名称(dest-bucket)、源Bucket所属账号UID(137918634953xxxx)以及目标Bucket所属账号UID(111933544165xxxx)。UID必须填写阿里云账号UID。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "oss:ReplicateList", "oss:ReplicateGet", "oss:ReplicatePut", "oss:ReplicateDelete" ], "Principal": [ "arn:sts::137918634953xxxx:assumed-role/aliyunossdrsrole/*" ], "Resource":[ "acs:oss:*:111933544165xxxx:dest-bucket", "acs:oss:*:111933544165xxxx:dest-bucket/*" ] } ] }
单击保存。
复制KMS加密的Object
支持复制KMS加密的Object到以下目标地域:华东1(杭州)、华东2(上海)、华南1(深圳)、华南2(河源)、华南3(广州)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、西南1(成都)、华东2(上海金融云)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷)、日本(东京)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、英国(伦敦)。
如果您希望将账号A下源Bucket中KMS加密的Object复制到账号B下的目标Bucket,您需要使用目标Bucket所属账号B执行以下步骤。
登录密钥管理服务控制台的实例管理页面,在与目标Bucket相同的地域购买并启用KMS实例。购买KMS实例时,确保访问管理数量大于等于2,其他参数保留默认配置。具体步骤,请参见购买和启用KMS实例。
说明跨账号复制KMS加密的Object依赖于密钥管理服务,支持的地域受限于密钥管理服务。关于密钥管理服务支持的地域,请参见软件密钥管理支持的地域和接入地址。
在KMS实例下创建密钥。密钥类型限制为非默认密钥(建议软件密钥)。具体步骤,请参见创建软件密钥。
说明密钥创建成功后,请记录基本信息区域的密钥ARN,以便后续创建复制规则时使用。
为创建的密钥设置密钥策略。设置密钥策略时,选择其他账号使用者,并将其他账号使用者指定为上述步骤创建的角色ARN。具体步骤,请参见设置密钥策略。
重要跨账号复制KMS加密数据要求密钥策略至少包含解密(
kms:Decrypt
)和生成数据密钥(kms:GenerateDataKey
)的权限。通过控制台设置密钥策略时,默认包含这些权限。如果通过OpenAPI设置自定义密钥策略,需要确保至少包含kms:Decrypt
和kms:GenerateDataKey
权限。
操作步骤
使用OSS控制台
使用阿里云SDK
使用命令行工具ossutil
使用REST API
相关文档
同区域复制
同账号同区域复制
特殊场景下的复制行为
数据复制常见问题