PAI DSW/DLC/EAS 实例可挂载其他阿里云主账号的 OSS Bucket。通过 Bucket Policy(OSS 侧授权)或 RAM 角色(RAM 侧授权)实现。本文说明两种方案的配置步骤和差异。
本文以 DSW 为例,DLC/EAS 的操作方式相同。EAS 信任的云服务为eas.pai.aliyuncs.com。
方案概述
场景:主账号 A 拥有 OSS Bucket,主账号 B 的 PAI DSW 实例需挂载该 Bucket。
核心原理:跨账号挂载的本质是让 B 的 DSW 实例有权限访问 A 的 OSS。两种方案都通过 RAM 角色实现:创建 DSW 实例时指定一个角色,DSW 服务扮演该角色访问 OSS。差异在于角色由谁创建以及权限授予方式:
-
方案一:Bucket Policy 授权(推荐)——B 创建角色,A 在 OSS 侧通过 Bucket Policy 允许该角色访问。
-
方案二:RAM 角色授权——A 创建角色并授予 OSS 权限,同时信任 B 的 PAI 服务扮演。
具体差异对比如下:
|
方案一:Bucket Policy 授权(推荐) |
方案二:RAM 角色授权 |
|
|
角色创建 |
账号 B 创建 |
账号 A 创建 |
|
权限配置 |
A 在 OSS 控制台配置 Bucket Policy |
A 在 RAM 控制台给 RAM 角色授予 OSS 权限 |
|
授权粒度 |
单个 Bucket 维度,多 Bucket 需逐个配置 |
角色维度,一条权限策略可覆盖多个 Bucket |
|
适用场景 |
Bucket 数量少,A 希望在 OSS 侧直接管理访问授权 |
Bucket 数量多,或需要多账号复用同一角色集中管理权限 |
操作步骤
一、创建 RAM 角色并授权
方案一:Bucket Policy 授权(推荐)
1. 账号 B 创建 RAM 角色
账号 B 创建可信实体为云服务的 RAM 角色。DSW 服务将扮演该角色访问 A 的 OSS。
-
登录RAM控制台,在左侧导航栏,选择。
-
单击创建角色:
-
信任主体类型:选择云服务。
-
信任主体名称:选择人工智能平台 PAI / PAI pai.aliyuncs.com。(在 EAS 中挂载请选择 eas.pai.aliyuncs.com)
-
-
单击确定,填写角色名称(如
oss-access),再次确定。
生成的信任策略允许 PAI 服务扮演该角色:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": ["pai.aliyuncs.com"]
}
}
],
"Version": "1"
}
2. 账号 A 配置 Bucket Policy 授权
操作步骤如下,详细说明参考 OSS 文档:Bucket Policy:
-
账号 A 登录OSS管理控制台,在Bucket 列表中单击目标 Bucket。
-
在左侧菜单栏单击。
-
选择按图形策略添加,单击新增授权,按实际需要添加授权规则。注意:
-
授权用户:选择其他账号。
-
在文本框中填写 PAI 服务扮演 RAM 角色后获得的临时身份 ARN,格式:
arn:sts::<B的阿里云UID>:assumed-role/<B角色名称>/*
-
方案二:RAM 角色授权
1. 账号 A 创建 RAM 角色
账号 A 创建信任账号 B 下 PAI 服务的 RAM 角色。B 的 DSW 服务将扮演该角色访问 A 的 OSS。
-
登录RAM控制台,在左侧导航栏,选择。
-
单击创建角色,在页面右上角选择切换编辑器。
-
在可视化编辑模式下,主体选择云服务,单击编辑添加主体:
-
云账号选择其他云账号,并输入 B 账号的 UID。
-
云服务选择人工智能平台 PAI / PAI pai.aliyuncs.com。(在 EAS 中挂载请选择 eas.pai.aliyuncs.com)
-
-
单击确定,填写角色名称(如
oss-access-for-B),再次确定。 -
创建完成后,在角色详情页复制 ARN 给账号 B。B 将使用该 ARN 挂载 OSS。格式为:
acs:ram::<A-账号UID>:role/<角色名>
生成的信任策略如下:
{
"Statement": [
{
"Action": [
"sts:AssumeRole"
],
"Effect": "Allow",
"Principal": {
"Service": "<B-账号UID>@pai.aliyuncs.com"
}
}
]
}
可按需添加其他主体。
2. 账号 A 为角色授予 OSS 权限
为刚创建的角色 oss-access-for-B 添加如下权限策略:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:ListObjects",
"oss:PutObject",
"oss:DeleteObject"
],
"Resource": [
"acs:oss:*:<A-账号UID>:<bucket名称>",
"acs:oss:*:<A-账号UID>:<bucket名称>/*"
]
}
]
}
按实际需要调整 Action 范围。只读场景只保留GetObject和ListObjects。
二、创建 DSW 实例并挂载 OSS
-
授权(仅适用 RAM 用户)
如果使用 RAM 用户(阿里云子账号)创建 DSW 实例,请让阿里云主账号为其授权。RAM 用户默认没有将角色交给云服务扮演的权限。
具体操作请参见管理RAM用户的权限。自定义权限策略示例如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::<角色所属的主账号id>:role/<角色名称>" } ] }其中,
<角色所属的主账号id>、<角色名称>替换为刚创建的 RAM 角色名称和所属主账号 ID。 -
创建 DSW 实例并挂载 OSS
方式一:通过 PAI 控制台(推荐)
-
登录PAI控制台,在左侧导航栏,选择模型开发与训练 > 交互式建模(DSW)。
如有多个工作空间,请选择目标工作空间。
-
单击新建实例,在环境信息区域的存储挂载选择 OSS。
-
选择 OSS 挂载,填入 A 的 Bucket 路径:
-
Uri:填入 A 的 Bucket 路径,格式为
oss://{bucket-name}.oss-{region}-internal.aliyuncs.com/{path}/。 -
挂载路径:如
/mnt/data。 -
RAM 角色:选择已被 A 授权的角色。该角色决定 DSW 以谁的权限访问 A 的 OSS。
若下拉列表无选项,请手动输入 ARN。
-
方式二:通过 API / CLI 创建
调用
CreateInstanceAPI,在Datasets参数中指定RoleArn:aliyun pai-dsw create-instance \ --region cn-hangzhou \ --workspace-id {B的工作空间ID} \ --instance-name cross-account-oss-demo \ --ecs-spec ecs.gn6v-c8g1.2xlarge \ --image-url registry.cn-hangzhou.aliyuncs.com/pai-dlc/pytorch-training:2.0-gpu-py310-cu118-ubuntu20.04 \ --accessibility PRIVATE \ --datasets '[{ "Uri": "oss://{A的Bucket名称}.oss-cn-hangzhou-internal.aliyuncs.com/data/", "MountPath": "/mnt/data", "MountAccess": "RO", "RoleArn": "<有OSS访问权限的RAM角色>" }]'关键参数说明:
参数
说明
Uri账号 A 的 OSS Bucket 路径。使用 内网域名(
oss-{region}-internal.aliyuncs.com),内网传输免流量费。MountPath容器内挂载路径,如
/mnt/data。MountAccessRO= 只读,RW= 读写。RoleArnDSW 服务要扮演的角色 ARN。
-
方案一:账号 B 下的 RAM 角色 ARN,如
acs:ram::<B的阿里云UID>:role/<角色名称> -
方案二:账号 A 下的 RAM 角色 ARN,如
acs:ram::<A的阿里云UID>:role/<角色名称>
-
三、验证
DSW 实例启动后,进入 Terminal,检查挂载是否成功:
ls /mnt/data
如果能看到 A 账号 OSS Bucket 中的文件,跨账号挂载成功。
注意事项
-
最小权限:只授予必要的 Bucket 和 Action 权限。只读场景只给
GetObject和ListObjects。 -
使用内网域名:Uri 中使用
-internal域名,避免公网流出流量费用。 -
RoleArn 也可用于更新:已有实例可通过
UpdateInstance修改 Datasets 配置来添加 RoleArn。 -
与 Options 的关系:如需配置 JindoFuse 参数(如缓存策略),可通过
Options字段设置,与RoleArn可同时使用。 -
定期审计:在 RAM 控制台查看角色的访问记录,确认无异常使用。
常见问题
|
问题 |
原因 |
解决 |
|
挂载后 |
Bucket Policy 未正确配置,或 Principal 写错 |
检查 Bucket Policy 中 Principal 是否精确指向 B 的角色 ARN |
|
DSW 实例启动失败,报 RoleArn 相关错误 |
B 的角色信任策略未包含 |
在角色信任策略中添加 PAI 服务 |
|
只能读不能写 |
OSS 权限只给了 GetObject |
添加 PutObject、DeleteObject 等写入 Action |
|
挂载路径为空 |
Uri 路径不存在,或没有对应前缀对象 |
确认 OSS 中该路径下确实有文件,且路径以 |