Bucket policy导致阿里云账号无权限操作Bucket
当Bucket Policy中未设置条件时不会限制阿里云账号(主账号)的访问。如果在Bucket Policy中添加了条件,则阿里云账号也必须满足相应条件才能访问Bucket。设置条件前需确保阿里云账号能满足对应条件再修改Bucket Policy的权限,否则该Bucket将无法访问。请谨慎设置如下所示的Bucket Policy。

通过Bucket Policy授权后,仍无对应权限
接口授权级别不正确
ListObjects、GetBucketInfo等接口用于获取Bucket相关信息,接口授权的资源要授权到Bucket级别,GetObject、PutObject等接口是针对Object的操作,接口授权的资源要授权到Object级别。
Bucket级别资源的授权格式:
acs:oss:<bucket所属地域>:<账号uid>:<bucketName>object级别资源的授权格式:
acs:oss:<bucket所属地域>:<账号uid>:<bucketName>/<objectName>
其中
<bucket所属地域>、<账号uid>、<bucketName>和<objectName>均支持通配符星号(*),请根据实际替换。例如以下授权是无效的,ListObjectVersions是Bucket级别的操作,Resource的授权不能加/*,否则会授权到Object级别,导致该授权无效。
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:ListObjectVersions" ], "Principal": [ "209xxxxxxxxx441" ], "Resource": [ "acs:oss:*:*:bucketName/*" ] }] }角色授权有固定格式,不能直接写用户ID
当需要给RAM角色授权时,输入格式为
arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}。例如扮演的RAM角色为testrole,角色拥有者的账号UID为137918634953xxxx,角色会话名称RoleSessionName为testsession。此时应填写arn:sts::137918634953xxxx:assumed-role/testrole/testsession。当需要给所有RAM角色授权时,请使用通配符星号(*)。例如配置为
arn:sts::*:*/*/*。授权方式如下图所示,使用语法策略添加方式时可将
arn:sts::*:*/*/*添加到Principal元素中。
Bucket被匿名访问
当配置Principal为*的Bucket Policy时,匿名用户也会有对应操作的权限,风险较高,不建议此配置。
图形策略配置示例
使用如下图所示配置时,匿名用户也有读取Bucket文件的权限,相当于为Bucket开启公共读权限。

语法策略配置示例
使用如下图所示配置时,Principal为*,即使是匿名用户也有Bucket的ListObjectVersions权限。
