使用在线迁移服务将数据迁移至阿里云 OSS 前,请依次完成操作账号、数据源和目的地址的准备。
步骤一:准备操作账号
1. 创建 RAM 用户
使用 RAM 用户操作在线迁移服务。建议在源 OSS Bucket 或目的 OSS Bucket 所属的阿里云账号下创建该用户。后续创建 RAM 角色、数据地址和迁移任务时,使用该 RAM 用户登录。
如果尚未创建 RAM 用户,请参见创建 RAM 用户并授权。已有用户可直接配置以下权限。
2. 为 RAM 用户授权
为 RAM 用户添加以下权限:
权限 | 用途 |
| 管理在线迁移服务 |
包含以下操作的自定义策略 | 创建和配置迁移使用的 RAM 角色及权限策略 |
自定义策略如下,创建方法请参见创建自定义权限策略。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:CreateRole",
"ram:CreatePolicy",
"ram:AttachPolicyToRole",
"ram:ListRoles"
],
"Resource": "*"
}
]
}本步骤配置操作迁移服务账号的权限。迁移服务读取源数据、读取清单文件和写入目的 OSS 所需的权限,分别在后续步骤中准备。
下文所述“本账号”,指该 RAM 用户所属的阿里云账号。同账号表示 Bucket 与该 RAM 用户属于同一阿里云账号;跨账号表示两者属于不同阿里云账号。
步骤二:准备数据源
根据实际数据源类型,选择对应标签页完成准备工作。
解冻归档数据(按需)
如果待迁移的源对象属于需要解冻后才能读取的归档类型,请先在源存储服务中完成解冻,再创建源数据地址和迁移任务。通过清单迁移时,也需要解冻清单中列出的源对象。
根据待迁移数据量和预计迁移耗时设置足够长的解冻有效期,确保迁移期间对象不会再次变为冻结状态。
解冻会产生数据取回费用,具体计费规则请咨询源存储服务提供商。
在线迁移服务不会自动解冻源对象。未解冻或仍在解冻中的对象无法读取,会导致相应文件迁移失败。
三方对象存储
本节适用于 AWS S3、腾讯云 COS、华为云 OBS 等第三方对象存储类型的场景。使用清单迁移时,请参见本步骤的“清单”部分。
准备事项 | 说明 |
存储位置 | 源 Bucket 名称,以及对应的地域、Endpoint 或其他访问地址 |
访问凭证 | 按源类型准备 AccessKey、SecretKey、SAS 等对应凭证,具体以该源类型的参数要求为准 |
访问权限 | 确保凭证具有列举待迁移对象、读取对象内容和所需元数据的权限 |
迁移范围 | 确定迁移整个 Bucket,或指定前缀下的对象 |
各厂商的参数名称和凭证形式不同,具体填写要求请参见迁移实施中对应源类型的说明。
访问凭证准备
Azure Blob:创建账户 SAS 时,允许的资源类型需包含
Container,权限需包含Read和List。有效期应覆盖整个迁移过程,避免凭证过期导致迁移失败。Google Cloud Storage:在 Google Cloud 控制台进入 Cloud Storage > 设置 > 互操作,创建用于迁移的账号 HMAC 访问密钥,并保存 Access ID 和 Secret。该账号需具有源 Bucket 的列举和读取权限。
阿里云 OSS
本节适用于 OSS 源,以及通过 OSS Inventory 或 Inventory 迁移 OSS 中数据的场景。
1. 准备源 Bucket 信息
记录源 Bucket 名称、所属地域和待迁移的对象前缀,并确认 Bucket 是否属于本账号。
2. 配置源 Bucket 访问权限
根据源 Bucket 是否属于本账号,选择对应的授权方式。
源 Bucket 归属于本账号
自动授权(推荐)
创建源数据地址时,在“授权角色”中完成自动授权,无需提前手动创建角色。
手动授权
需要复用角色管理多个 Bucket、角色数量受限或无法使用自动授权时,可选择手动授权。
创建 RAM 角色
使用步骤一准备的 RAM 用户登录 RAM 控制台,在角色页面创建角色:
信任主体类型选择云服务。
信任主体名称选择闪电立方(
mgw.aliyuncs.com)。输入角色名称,例如
role-test,并完成创建。
角色名称使用小写字母,支持数字、连字符(-)和点号(.),长度不超过 64 个字符。已有符合要求的角色时,可为该角色补充相应权限。
授予源 Bucket 读取权限
创建以下自定义策略并附加到 RAM 角色,将 <srcBucket> 替换为源 Bucket 的实际名称。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["oss:List*", "oss:Get*"],
"Resource": [
"acs:oss:*:*:<srcBucket>",
"acs:oss:*:*:<srcBucket>/*"
]
}
]
}源 Bucket 不归属于本账号
创建 RAM 角色
使用步骤一准备的 RAM 用户登录 RAM 控制台,在角色页面创建角色:
信任主体类型选择云服务。
信任主体名称选择闪电立方(
mgw.aliyuncs.com)。输入角色名称,例如
role-test,并完成创建。
角色名称使用小写字母,支持数字、连字符(-)和点号(.),长度不超过 64 个字符。已有符合要求的角色时,可为该角色补充相应权限。
配置源 Bucket Policy
使用源 Bucket 所属账号登录 OSS 管理控制台,选择源 Bucket,进入权限控制 > Bucket 授权策略,在按语法策略添加页签中添加以下授权。
占位符 | 替换内容 |
| 步骤一中 RAM 用户所属主账号的 UID |
| 源 Bucket 所属主账号的 UID |
| 在本账号下创建的 RAM 角色名称 |
| 源 Bucket 名称 |
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["oss:List*", "oss:Get*"],
"Principal": [
"arn:sts::<migrationUid>:assumed-role/<roleName>/*"
],
"Resource": [
"acs:oss:*:<bucketOwnerUid>:<srcBucket>",
"acs:oss:*:<bucketOwnerUid>:<srcBucket>/*"
]
}
]
}编辑 Bucket Policy 时,应保留已有策略,并合并新增授权,避免影响已有访问权限。
3. 配置 KMS 权限(按需)
如果待迁移的源对象使用 KMS 加密,为读取源数据的 RAM 角色授予 AliyunKMSFullAccess 系统策略。
跨账号访问使用自定义 KMS 密钥加密的对象时,还需由密钥所属账号配置密钥策略,在其他账号使用者中添加该角色的 ARN:
acs:ram::<migrationUid>:role/<roleName>具体操作请参见设置密钥策略。
清单
本节适用于 Inventory、OSS Inventory、S3 Inventory 和 HTTP/HTTPS 源。需要准备以下三项内容:
准备事项 | 说明 |
源数据访问 | 准备清单中所列对象的访问凭证和读取权限;HTTP/HTTPS 源需提供可访问的文件链接 |
清单文件 | 使用存储厂商原生清单,或按在线迁移服务要求制作自定义清单 |
清单访问 | 记录清单存放位置,并配置读取清单文件的权限 |
源 Bucket 存放待迁移数据,清单 Bucket 存放清单文件。两者不是同一个 Bucket 时,需要分别配置访问权限;两者是同一个 Bucket 时,只需授权一次,无需重复授权。
1. 准备源数据访问权限
清单中的源数据位于第三方对象存储时,准备该存储服务的连接信息、访问凭证及读取权限。
清单中的源数据位于 OSS 时,按本步骤“OSS 数据源”的说明完成授权。
使用 HTTP/HTTPS 源时,文件链接需支持直接通过 HTTP HEAD 获取元数据、通过 HTTP GET 下载内容。
2. 准备清单文件
根据创建源数据地址时选择的清单类型,完成相应准备。
检查自定义清单的文件编码
手工制作 Inventory 或 HTTP/HTTPS 清单时,manifest.json 和 CSV 文件均应使用 UTF-8 无 BOM 编码。BOM 是文件开头的三个字节 EF BB BF(0xEFBBBF),可能导致在线迁移服务解析异常。
在 Windows 下,部分版本的记事本可能会在保存 UTF-8 文件时自动添加 BOM。建议使用 Notepad++、Visual Studio Code 等编辑器创建或编辑文件,并明确选择 UTF-8 无 BOM 编码。
在 Linux 或 macOS 下,可执行以下命令检查文件的起始三个字节。请同时检查清单描述文件、编码前的 CSV 和最终用于压缩上传的 CSV;输出不应以 ef bb bf 开头。
od -An -tx1 -N3 manifest.json
od -An -tx1 -N3 plain_example.csv
od -An -tx1 -N3 example.csv也可以执行 od -c plain_example.csv | less 查看文件内容。若起始位置出现八进制字节 357 273 277,即表示包含 UTF-8 BOM。请先移除 BOM,再压缩、上传文件。
Inventory
通用清单(Inventory)支持自定义清单及已适配的存储厂商原生清单。
支持的源与原生清单
通用清单(Inventory)支持以下 13 种对象存储源。其中,原生清单的支持范围如下。
对象存储源 | 是否支持该厂商的原生清单 |
阿里云 OSS | 支持 |
亚马逊 AWS S3 | 支持 |
微软云 Azure Blob | 支持 |
谷歌云 Google Cloud Storage | 支持 |
七牛云 Qiniu Kodo | 支持 |
兼容 S3 协议的第三方存储(Compatible S3) | 不支持,使用自定义清单 |
腾讯云 COS | 支持 |
华为云 OBS | 支持 |
百度云 BOS | 支持 |
火山引擎 TOS | 支持 |
金山云 Kingsoft KS3 | 支持 |
又拍云 Youpai USS | 不支持,使用自定义清单 |
UCloud US3 | 不支持,使用自定义清单 |
使用厂商原生清单时,在源存储服务中配置清单生成规则,并等待文件生成。使用自定义清单时,按以下格式制作文件。
制作自定义清单
以下格式适用于 Inventory 自定义清单。使用厂商原生清单时,按厂商的清单功能生成文件。
自定义清单由一个 manifest.json 和一个或多个 .csv.gz 列表文件组成。每个列表文件记录一批待迁移对象,manifest.json 描述列表文件的位置和字段格式。
创建 CSV 列表文件
CSV 每行记录一个对象,各列以英文逗号分隔,字段如下。
字段 | 是否必填 | 含义 |
| 是 | 对象在源 Bucket 中的完整名称。不论源数据地址是否配置前缀,均填写完整名称,并进行 URL 编码。 |
| 否 | 源对象大小,单位为字节。用于统计迁移数据量;缺少该字段时,控制台的存储量图表不可用。 |
| 否 | 指定迁移后的目的对象名称,需进行 URL 编码。若目的数据地址配置前缀,最终名称为目的前缀与解码后的 |
URL 编码规则
对源对象的实际名称进行一次 URL 编码后,写入 Key,DestKey同理。
实际对象名称 | 写入 CSV 的值 |
|
|
|
|
|
|
加号、百分号和英文逗号分别编码为 %2B、%25 和 %2C。对象名本身包含百分号编码文本时,应保留其实际含义,再对整个名称编码。
中文、多语言和已含编码文本的对象名示例
编码前的 CSV 记录 | 写入清单的 CSV 记录 |
|
|
|
|
|
|
第三行的源对象名称实际包含 %2F 字符,编码时应将其中的百分号转换为 %25,不要先将它解码为斜杠。
文件格式要求
使用 UTF-8 编码,不包含 BOM。
每行必须以换行符结束,包括最后一行。
各行列数保持一致,并与
manifest.json中的fileSchema字段数量和顺序一致。CSV 只包含对象记录,不添加字段名称行;字段名称在
fileSchema中声明。
例如,采用 Key,Size 两列时,example.csv 内容如下:
path%2Fto%2F1.txt,1024
a%2Bb%25c%2Cd.file,2048需要指定目的对象名称时,可使用 Key,Size,DestKey 三列:
path%2Fto%2F1.txt,1024,archive%2F1.txt此时将 fileSchema 同步设为 Key,Size,DestKey。若目的前缀为 backup/,该对象迁移后的名称为 backup/archive/1.txt。
编码示例
以下 Python 3 示例读取未编码的 plain_example.csv,输出符合 Key,Size 格式的 example.csv。输入文件不包含字段名称行。
如果原始名称包含英文逗号,应按 CSV 规则用双引号包围该字段,例如:
path/to/1.txt,1024
"a+b%c,d.file",2048import csv
from urllib.parse import quote_plus
with open("plain_example.csv", encoding="utf-8-sig", newline="") as src, \
open("example.csv", "w", encoding="utf-8", newline="") as dst:
reader = csv.reader(src)
writer = csv.writer(dst, lineterminator="\n")
for line_number, row in enumerate(reader, start=1):
if len(row) != 2 or not row[0]:
raise ValueError(f"第 {line_number} 条记录必须包含非空 Key 和 Size 两列")
key, size = row
writer.writerow([quote_plus(key, safe=""), size])示例使用 CSV 解析器处理带引号和逗号的字段。需要添加 DestKey 时,在输入文件中增加对应列,并对该列执行相同的 URL 编码;同时更新 fileSchema。
压缩 CSV 文件
将各 CSV 文件分别压缩为 .csv.gz。单个压缩文件不得超过 100 MB。
gzip -c example.csv > example.csv.gz该命令保留原始 example.csv。存在多个 CSV 文件时,分别压缩,并在 manifest.json 的 files 数组中列出各压缩文件。
多个 CSV 文件的处理示例
在仅包含待压缩 CSV 文件的目录中,可执行以下命令逐个生成同名的 .csv.gz 文件,并保留原始 CSV:
for file in ./*.csv; do
[ -f "$file" ] || continue
gzip -c "$file" > "$file.gz"
done例如,将 example.csv.gz 和 example_part2.csv.gz 上传到清单 Bucket 的 inventory/ 目录后,可在同一个 manifest.json 中列出这两个文件:
{
"fileFormat": "CSV",
"fileSchema": "Key,Size",
"files": [
{"key": "inventory/example.csv.gz", "MD5checksum": "", "size": 0},
{"key": "inventory/example_part2.csv.gz", "MD5checksum": "", "size": 0}
],
"mgwInventoryVersion": "1.0"
}各 CSV 的字段数量和顺序必须一致,并与 fileSchema 保持一致。每个压缩文件均不得超过 100 MB。
创建 manifest.json
以下示例对应 Key,Size 两列的 CSV 文件:
{
"fileFormat": "CSV",
"fileSchema": "Key,Size",
"files": [
{
"key": "inventory/example.csv.gz",
"MD5checksum": "",
"size": 0
}
],
"mgwInventoryVersion": "1.0"
}字段 | 说明 |
| 列表格式,填写 |
| CSV 各列的字段名称,顺序与 CSV 保持一致 |
| 列表文件数组,可配置多个文件 |
|
|
| 列表文件的十六进制 MD5,不区分大小写;为空时不执行该项校验 |
| 列表文件大小;为 |
| 自定义清单格式版本,必须填写 |
Inventory 自定义清单必须包含 mgwInventoryVersion。缺少该字段时,服务会按厂商原生清单格式解析,可能导致解析失败。
上传并记录清单位置
将 manifest.json 和所有 .csv.gz 文件上传到清单存储位置。确保 files[].key 与实际上传路径一致,并记录 manifest.json 的路径。
上传完成后,按下文“配置清单访问权限”完成授权。
HTTP/HTTPS
HTTP/HTTPS 清单由一个 manifest.json 和一个或多个 .csv.gz 列表文件组成。每行指定文件的访问链接及迁移后的目的对象名称。
确认文件链接可以访问
迁移服务通过 HTTP GET 下载文件,通过 HTTP HEAD 获取文件元数据。列表中的原始链接需能直接完成这两类请求。在线迁移服务不支持通过重定向获取源文件。
请在迁移前使用原始文件链接分别测试 HEAD 和 GET 请求:
# 检查元数据请求
curl -I 'https://example.com/files/1.txt'
# 检查文件下载请求,丢弃响应正文并显示响应头
curl -sS -D - -o /dev/null 'https://example.com/files/1.txt'请将示例链接替换为实际文件链接,确认两类请求均成功。测试时不要添加 -L 参数,以免自动跟随重定向而掩盖问题。若返回 301、302 等重定向响应,请改用能够直接访问文件的最终链接。
对可正常访问的完整链接再进行一次 URL 编码后,写入 CSV 的 Url 字段。链接原本包含的百分号也需要编码。
例如,可访问链接中的路径包含 %E6%96%87 时,再次编码后该部分为 %25E6%2596%2587。
创建 CSV 列表文件
字段 | 是否必填 | 含义 |
| 是 | 文件的完整访问链接,对可访问的链接进行一次 URL 编码后填写 |
| 是 | 期望的目的对象名称,进行一次 URL 编码后填写。配置目的前缀时,最终名称为目的前缀与解码后的 |
| 否 | 文件大小,单位为字节。用于统计迁移数据量;缺少该字段时,控制台的存储量图表不可用 |
Inventory 清单中的 Key 表示源对象名称;HTTP/HTTPS 清单中的 Key 表示目的对象名称。制作清单时请按所选源类型填写。
例如,文件的原始链接为 https://example.com/files/1.txt,期望的目的对象名称为 archive/1.txt,采用 Url,Key 两列时,CSV 记录为:
https%3A%2F%2Fexample.com%2Ffiles%2F1.txt,archive%2F1.txt以上链接仅用于展示格式,使用时请替换为实际可访问的文件链接。
含中文、多语言路径的完整编码示例
以下原始 CSV 的第一列是可访问的完整链接,第二列是期望的目的对象名称:
https://example.com/files/%E6%96%87%E4%BB%B6.txt,archive/文件.txt
https://example.com/files/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt,archive/ファイル.txt对两列分别执行一次 URL 编码后,写入清单的记录为:
https%3A%2F%2Fexample.com%2Ffiles%2F%25E6%2596%2587%25E4%25BB%25B6.txt,archive%2F%E6%96%87%E4%BB%B6.txt
https%3A%2F%2Fexample.com%2Ffiles%2F%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB.txt,archive%2F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt原始链接中已有的百分号会编码为 %25。迁移服务解码清单后,得到的仍是原始可访问链接;不要先将链接解码后再制作清单。以上链接仅用于展示格式。
CSV 使用 UTF-8 编码,不包含 BOM 或字段名称行。每行均以换行符结束,各列数量和顺序与 fileSchema 一致。加号、百分号和英文逗号的编码规则见Inventory 标签页中“制作自定义清单”的 URL 编码规则。
压缩列表并创建 manifest.json
按Inventory 标签页中“制作自定义清单”中的压缩方法,将每个 CSV 分别压缩为 .csv.gz,单个压缩文件不得超过 100 MB。
以下 manifest.json 对应 Url,Key 两列的 CSV:
{
"fileFormat": "CSV",
"fileSchema": "Url,Key",
"files": [
{
"key": "inventory/example.csv.gz",
"MD5checksum": "",
"size": 0
}
]
}fileFormat、fileSchema 和 files 的含义见Inventory 标签页中“制作自定义清单”中的字段说明。HTTP/HTTPS 清单按本节示例填写,不套用 Inventory 自定义清单的版本字段。
上传清单
将 manifest.json 及其引用的 .csv.gz 文件上传到 OSS 或 AWS S3。确认列表文件路径与 files[].key 一致,并记录 manifest.json 的路径。
上传完成后,按下文“配置清单访问权限”配置读取清单所需的权限。
编码示例
以下 Python 3 示例读取未编码的 plain_example.csv,输出 Url,Key 两列的 example.csv。输入文件不包含字段名称行,包含英文逗号的字段按 CSV 规则加双引号。
import csv
from urllib.parse import quote_plus
with open("plain_example.csv", encoding="utf-8-sig", newline="") as src, \
open("example.csv", "w", encoding="utf-8", newline="") as dst:
reader = csv.reader(src)
writer = csv.writer(dst, lineterminator="\n")
for line_number, row in enumerate(reader, start=1):
if len(row) != 2 or not all(row):
raise ValueError(f"第 {line_number} 条记录必须包含非空 Url 和 Key 两列")
url, key = row
writer.writerow([quote_plus(url, safe=""), quote_plus(key, safe="")])OSS Inventory
在源 OSS Bucket 上配置存储空间清单,并等待清单文件生成。具体操作请参见存储空间清单。
记录清单所在的 Bucket 和清单路径,准备读取源对象及清单文件所需的权限。创建源数据地址时,按“OSS Inventory”类型填写清单参数。
S3 Inventory
在源 AWS S3 Bucket 上配置清单,并等待清单文件生成。具体操作请参见配置 Amazon S3 清单。
记录清单所在的 Bucket、地域和清单路径,准备读取源对象及清单文件所需的访问凭证和权限。创建源数据地址时,按“S3 Inventory”类型填写清单参数。
3. 配置清单访问权限
记录清单所在的存储服务、Bucket、地域或访问域名,以及 manifest.json 的路径。确认迁移服务能够读取清单及其引用的全部列表文件。
对于 Inventory 和 HTTP/HTTPS 源,按清单存放位置完成授权:
清单存放于本账号 OSS
创建源数据地址时,通过“列表授权角色”完成自动授权。
需要手动授权时,在本账号下创建或选择 RAM 角色,使用 阿里云 OSS 标签页中的同账号读取策略,将 <srcBucket> 替换为清单 Bucket 名称,授予列举和读取权限。
清单存放于其他账号 OSS
由清单 Bucket 所属账号配置 Bucket Policy,允许本账号下的 RAM 角色读取清单。
使用 阿里云 OSS 标签页中的跨账号读取策略,将 <srcBucket> 和 <bucketOwnerUid> 分别替换为清单 Bucket 名称及其所属主账号 UID。
清单存放于其他存储服务
准备对应存储服务的访问凭证,授予读取 manifest.json 及其引用的全部列表文件所需的权限。可选存储类型及填写方式见迁移实施。
HTTP/HTTPS 清单可存放于 OSS 或 AWS S3。Inventory 清单按控制台支持的清单存储类型配置。
如果 OSS 中的清单文件使用 KMS 加密,还需按 阿里云 OSS 标签页中“KMS 权限”的说明,为读取清单的角色及相应密钥配置权限。
OSS Inventory 和 S3 Inventory 的清单访问参数,按迁移实施中对应源类型的要求准备。
LocalFS
LocalFS 包括本地磁盘,以及挂载到本地的 NAS、CPFS 等文件系统。确定待迁移的源目录,并完成以下准备。
准备事项 | 说明 |
源目录 | 确认目录存在,并记录其绝对路径,例如 |
文件系统挂载 | 源数据位于 NAS、CPFS 等文件系统时,先完成挂载,并确认挂载目录中的文件可以正常访问 |
读取权限 | 确保运行迁移代理的操作系统用户具有源目录及其子目录的遍历权限,以及待迁移文件的读取权限 |
多代理访问 | 同一源数据地址关联多台代理时,确保所有代理通过所填写的目录路径访问同一份源数据 |
RAM 用户权限用于操作在线迁移服务控制台;本地目录和文件的访问权限由操作系统及文件系统控制,需要分别配置。
OSS-HDFS
本节适用于将 OSS-HDFS 中的数据迁移至阿里云 OSS 的场景。
创建 OSS-HDFS 数据地址需要先提交工单申请白名单。具体说明请参见背景信息。
1. 准备源 Bucket 和目录信息
准备事项 | 说明 |
源 Bucket | 记录已开通 OSS-HDFS 服务的 Bucket 名称和所属地域 |
HDFS 服务域名 | 在源 Bucket 的概览页获取 HDFS 服务的 Endpoint,例如 |
待迁移目录 | 记录待迁移目录的路径,例如 |
2. 准备访问凭证并授权
由源 Bucket 所属账号准备 RAM 用户,为该用户创建 AccessKey,并记录 AccessKey ID 和 AccessKey Secret,供创建源数据地址时填写。
为该 RAM 用户配置 OSS-HDFS 访问权限,确保可以列举源目录和读取待迁移文件。授权方法请参见授权访问 OSS-HDFS 服务中的“授权 RAM 用户通过非 EMR 集群接入 OSS-HDFS 服务”。
操作在线迁移服务的 RAM 用户与访问 OSS-HDFS 的 RAM 用户可以不同。创建 OSS-HDFS 数据地址时,使用已获授权的 RAM 用户的 AccessKey。
步骤三:准备目的地址
1. 准备目的 Bucket
选择用于接收迁移数据的 OSS Bucket。如需创建 Bucket,请参见创建存储空间。
记录目的 Bucket 名称、所属地域和所属账号,并确定数据写入 Bucket 根目录还是指定前缀。创建目的数据地址时需要填写相应信息。
2. 配置目的 Bucket 访问权限
根据目的 Bucket 是否属于本账号,选择对应的授权方式。
目的 Bucket 归属于本账号
自动授权(推荐)
创建目的数据地址时,在“授权角色”中完成自动授权,无需提前手动创建角色。
手动授权
使用步骤一准备的 RAM 用户登录 RAM 控制台,在角色页面创建角色:
信任主体类型选择云服务。
信任主体名称选择闪电立方(
mgw.aliyuncs.com)。输入角色名称,例如
role-test,并完成创建。
角色名称使用小写字母,支持数字、连字符(-)和点号(.),长度不超过 64 个字符。已有符合要求的角色时,可为该角色补充相应权限。
创建以下自定义策略并附加到 RAM 角色,将 <destBucket> 替换为目的 Bucket 的实际名称。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:List*",
"oss:Get*",
"oss:Put*",
"oss:AbortMultipartUpload"
],
"Resource": [
"acs:oss:*:*:<destBucket>",
"acs:oss:*:*:<destBucket>/*"
]
}
]
}目的 Bucket 不归属于本账号
创建 RAM 角色
使用步骤一准备的 RAM 用户登录 RAM 控制台,在角色页面创建角色:
信任主体类型选择云服务。
信任主体名称选择闪电立方(
mgw.aliyuncs.com)。输入角色名称,例如
role-test,并完成创建。
角色名称使用小写字母,支持数字、连字符(-)和点号(.),长度不超过 64 个字符。已有符合要求的角色时,可为该角色补充相应权限。
配置目的 Bucket Policy
使用目的 Bucket 所属账号登录 OSS 管理控制台,选择目的 Bucket,进入权限控制 > Bucket 授权策略,在按语法策略添加页签中添加以下授权。
占位符 | 替换内容 |
| 步骤一中 RAM 用户所属主账号的 UID |
| 目的 Bucket 所属主账号的 UID |
| 在本账号下创建的 RAM 角色名称 |
| 目的 Bucket 名称 |
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:List*",
"oss:Get*",
"oss:Put*",
"oss:AbortMultipartUpload"
],
"Principal": [
"arn:sts::<migrationUid>:assumed-role/<roleName>/*"
],
"Resource": [
"acs:oss:*:<bucketOwnerUid>:<destBucket>",
"acs:oss:*:<bucketOwnerUid>:<destBucket>/*"
]
}
]
}编辑 Bucket Policy 时,应保留已有策略,并合并新增授权。
3. 配置 KMS 权限(按需)
如果目的 Bucket 配置了服务端 KMS 加密,为访问目的 Bucket 的 RAM 角色授予 AliyunKMSFullAccess 系统策略。
跨账号场景下,还需由密钥所属账号在密钥策略中添加迁移角色,允许其使用该密钥。具体操作请参见设置密钥策略。