跳到主要内容

阿里云对象存储

本文介绍如何授权阿里云 BYOC 项目访问外部 OSS Bucket。您需要在 Bucket 所属阿里云账号中创建 RAM 权限策略和 RAM 角色,并使用 Zilliz Cloud 生成的可信主体与 External ID 配置信任策略。

📘说明

Zilliz Cloud 通过 STS 扮演您创建的 RAM 角色,并使用短期凭证访问指定 Bucket。请勿向 Zilliz Cloud 提供阿里云账号或 RAM 用户的 AccessKey。

访问流程

SRysw6rYahYMBPbvJu8cnfgYn4g

开始前准备

请确保:

  • 阿里云 BYOC 数据面处于运行状态。

  • 您在 Zilliz Cloud 项目中拥有 Organization Owner 或 Project Admin 权限。

  • 您可以在 Bucket 所属阿里云账号中创建自定义 RAM 权限策略和 RAM 角色。

  • 目标 OSS Bucket 已创建,并与将访问它的 BYOC 数据面位于同一地域。

📘说明

创建集成时选择的 Zilliz Cloud 地域必须与 OSS Bucket 地域一致。请使用 OSS Region ID,例如 cn-hangzhou,不要填写 Endpoint 或可用区。

步骤 1:在 Zilliz Cloud 中发起集成

2

打开目标阿里云 BYOC 项目,在左侧导航中选择集成

3

找到阿里云对象存储服务(OSS),单击添加配置

4

输入唯一的配置名称和可选的配置描述

5

选择 Bucket 权限

  • 只读:用于 External Volume 或 External Collection。

  • 读写:用于 Backup Export、Audit Log 或 Access Log 转发。

6

单击下一步

步骤 2:指定外部 OSS Bucket

1

Zilliz Cloud 集群地域中选择将访问 Bucket 的 BYOC 数据面地域。

2

打开 OSS 管理控制台,确认目标 Bucket 位于同一地域;如尚未创建,请先创建 Bucket。

3

Bucket 名称中仅输入 Bucket 名称。不要输入 oss://、Endpoint、对象前缀或结尾斜杠。

4

单击下一步

步骤 3:创建 RAM 权限策略

2

单击创建权限策略,切换到脚本编辑

3

复制 Zilliz Cloud 中生成的 JSON 策略并粘贴到编辑器。以下为读写示例。

4

<BUCKET_NAME> 替换为步骤 2 中的 Bucket 名称,然后保存策略。

json
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject",
"oss:PutObject",
"oss:GetBucketLocation",
"oss:HeadBucket"
],
"Resource": [
"acs:oss:oss-*:*:<BUCKET_NAME>",
"acs:oss:oss-*:*:<BUCKET_NAME>/*"
]
}
]
}
权限用途只读读写
oss:ListObjects列举 Bucket 中的对象和前缀。需要需要
oss:GetObject读取目标对象。需要需要
oss:PutObject写入导出文件或转发日志。不需要需要
oss:GetBucketLocation校验 Bucket 所在地域。需要需要
oss:HeadBucket检查 Bucket 是否存在且可访问。需要需要
📘说明

如果步骤 1 选择了只读,请使用 Zilliz Cloud 控制台生成的策略;该策略不包含 oss:PutObject。不要在控制台生成的策略之外扩大资源或操作范围。

步骤 4:创建 RAM 角色并绑定权限策略

1

打开 RAM 访问控制 > 角色,单击创建角色

2

选择信任主体类型:云账号。先按页面要求创建角色;下一步将使用 Zilliz Cloud 提供的精确信任主体更新信任策略。

3

输入角色名称,例如 ZillizExternalBucketRole,完成创建。

4

在角色详情页单击新增授权,绑定步骤 3 创建的自定义 RAM 权限策略。

5

复制角色 ARN,并粘贴到 Zilliz Cloud 的角色 ARN字段。

plaintext
acs:ram::<CUSTOMER_ACCOUNT_ID>:role/<ROLE_NAME>

步骤 5:配置角色信任策略

1

在 RAM 角色详情页打开信任策略页签,单击编辑信任策略并切换到脚本编辑。

2

返回 Zilliz Cloud,复制当前集成生成的 Zilliz Cloud RAM 角色 ARN和唯一 External ID

3

将这两个值填入下方信任策略并保存。不要修改 Principal.RAMsts:ExternalId 的结构。

json
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"<ZILLIZ_CLOUD_RAM_ROLE_ARN>"
]
},
"Condition": {
"StringEquals": {
"sts:ExternalId": "<EXTERNAL_ID_FROM_ZILLIZ_CLOUD>"
}
}
}
],
"Version": "1"
}
📘说明

不要复用其他项目、地域或 Bucket Integration 的角色 ARN 或 External ID。External ID 用于防止跨账号角色扮演中的 confused deputy 风险。

步骤 6:校验并添加集成

1

返回 Zilliz Cloud,单击校验集成

2

如果 RAM 策略刚刚保存,请等待权限传播后重试校验。

3

状态变为校验成功后,单击添加。该 OSS Bucket Integration 可供同一 Zilliz Cloud 项目和地域中的受支持工作流使用。

安全建议

  • 为每个外部 Bucket 创建独立 RAM 角色和独立权限策略。

  • 信任策略只允许 Zilliz Cloud 显示的具体 RAM 角色扮演,不要信任整个 Zilliz Cloud 阿里云账号。

  • 始终保留 External ID 条件,并为每个集成使用不同的 External ID。

  • 只读场景不要授予 oss:PutObject;任何场景都无需授予删除 Bucket、删除对象或管理 ACL 的权限。

  • 若 Bucket 使用 KMS 加密、访问点、资源目录管控策略或防火墙,请另外确认这些策略允许目标数据路径。

问题排查

校验结果可能原因检查项
assume role failed角色 ARN、可信主体或 External ID 不匹配。逐字符核对客户角色 ARN、Principal.RAMsts:ExternalId,不要添加空格或复用旧值。
bucket region not matchBucket 地域与所选 BYOC 数据面地域不同。在 OSS 控制台核对 Region ID,并在 Zilliz Cloud 选择完全相同的地域。
check bucket failed角色缺少读取 Bucket 元数据的权限。检查 oss:GetBucketLocationoss:HeadBucket 及 Bucket Resource。
校验成功,但后续任务无法读写对象权限与所选用途不一致,或有其他管控策略显式拒绝。检查 oss:GetObjectoss:ListObjects 和读写场景中的 oss:PutObject
Ctrl I