在火山引擎TOS中设置私有读写权限需三步:一是将Bucket ACL设为私有并关闭匿名访问;二是清除允许通配符访问的Bucket Policy;三是为子用户配置最小权限IAM策略,最后通过未授权访问返回403、授权操作成功及日志验证生效。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在火山引擎对象存储(TOS)中设置私有读写权限,是为了确保只有经过授权的用户或应用才能上传、下载或管理指定 Bucket 内的对象,防止敏感数据被未授权访问。默认情况下,新建 Bucket 的 ACL 为私有(private),但若此前已修改过权限或通过策略开放了公共访问,则必须显式重置为私有并禁用匿名访问路径。
确认 Bucket 当前 ACL 状态
登录火山引擎控制台 → 进入「对象存储 TOS」服务 → 在 Bucket 列表中找到目标 Bucket → 点击 Bucket 名称进入详情页 → 左侧导航栏选择「权限管理」→ 查看「ACL 设置」区域。若显示为「私有(private)」且下方「允许匿名访问」开关处于关闭状态,则 ACL 层面已满足私有读写前提。
【关键前提】 若此处显示为「公共读」或「公共读写」,请立即点击「编辑」→ 选择「私有」→ 保存。此操作不可逆,保存后所有未授权的 GET/PUT 请求将返回 403 错误。
禁用 Bucket 级别公共访问策略
即使 ACL 为私有,仍可能因附加了 Bucket Policy 而意外开放权限。需检查并清除可能导致泄露的显式允许语句。
在 Bucket 详情页 → 「权限管理」→ 切换至「Bucket Policy」标签页 → 若存在非空策略文档,逐条检查 Statement 中的 Effect 是否为 "Allow",Principal 是否包含 "*"(通配符)或未限定具体 IAM 用户/角色 ARN。
若发现类似 "Principal": "*" 且 "Action": ["s3:GetObject"] 的规则,必须删除该 Statement 或将其 Principal 替换为具体可信账号 ID。保留空策略文档等同于无策略,此时权限完全由 ACL 控制。
配置最小权限 IAM 策略(推荐)
对需要操作该 Bucket 的子用户或应用,应授予最小必要权限,而非使用主账号 AK/SK。
方法一:控制台快速绑定
在「访问控制 RAM」→「用户管理」中定位对应子用户 → 「添加权限」→ 选择「系统策略」→ 勾选 AliyunOSSReadOnlyAccess(仅读)或自定义策略(读写)。
方法二:自定义策略精确授权
创建新策略,内容示例:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": ["tos:GetObject","tos:PutObject","tos:DeleteObject"], "Resource": ["acs:tos:ap-southeast-3:1234567890123456:my-private-bucket/*"] } ] }
其中 ap-southeast-3 需替换为实际地域,1234567890123456 替换为实际主账号 ID,my-private-bucket 替换为实际 Bucket 名。该策略仅允许对指定 Bucket 下所有对象执行读、写、删操作,不涉及 ListBucket 或其他 Bucket 管理动作。
验证私有读写是否生效
第一步:使用未授权的临时凭证(如过期 AK/SK 或无权限子用户)尝试 curl 访问一个已存在的 Object URL:curl -I https://my-private-bucket.tos-s3-ap-southeast-3.volces.com/test.jpg
预期返回 HTTP 403 Forbidden,而非 200 或 302。
第二步:使用已授权子用户的 AK/SK 初始化 TOS SDK,执行 PutObject 和 GetObject 操作,确认可正常上传与下载。
第三步:检查 TOS 访问日志(需提前开启)→ 筛选 403 请求条目,确认来源 IP 与请求时间符合预期拦截行为。

















