本文列举了桶策略支持的授权动作、授权模板及授权参数说明。
支持动作
通用动作
动作 | 说明 |
---|
* | 通配符,表示该资源能进行的所有动作。 |
Get* | 表示该资源能进行的所有获取动作。 |
Put* | 表示该资源能进行的所有设置动作。 |
List* | 表示该资源能进行的所有列举动作。 |
桶动作
类别 | 动作 | 说明 |
---|
桶操作 | ListBucket | 列举桶内对象。 |
HeadBucket | 判断桶是否存在,获取桶元数据。 |
DeleteBucket | 删除桶。 |
桶 ACL | GetBucketACL | 获取桶 ACL 的相关信息。 |
PutBucketACL | 设置桶 ACL。 |
桶策略 | GetBucketPolicy | 获取桶策略。 |
PutBucketPolicy | 设置桶策略,拥有此权限的用户可以任意更改桶策略,并可以通过此权限获取其他权限。 |
DeleteBucketPolicy | 删除桶策略。 |
生命周期规则 | GetLifecycleConfiguration | 获取桶生命周期规则。 |
PutLifecycleConfiguration | 设置桶生命周期规则。 |
桶版本 | GetBucketVersioning | 获取桶多版本的相关信息。 |
PutBucketVersioning | 设置多版本。 |
ListBucketVersions | 列举桶内多版本对象。 |
跨域访问 CORS 规则 | GetBucketCORS | 获取桶 CORS 配置的相关信息。 |
PutBucketCORS | 设置桶 CORS。 |
消息通知 | PutBucketNotification | 设置桶事件通知。 |
GetBucketNotification | 获取桶事件通知。 |
图片样式 | PutBucketImageStyle | 设置桶图片样式。 |
GetBucketImageStyle | 获取桶图片样式。 |
ListBucketImageStyle | 列举桶图片样式。 |
DeleteBucketImageStyle | 删除桶图片样式。 |
桶存储策略 | PutBucketStoragePolicy | 设置桶默认存储类别。 |
其他 | ListBucketMultipartUploads | 列举多段上传任务。 |
对象动作
类别 | 动作 | 说明 |
---|
对象操作 | GetObject | 可用作于获取对象内容,获取对象元数据。 |
PutObject | 可用作于 PUT 上传,上传段,初始化上传段任务,合并段。 |
DeleteObject | 删除对象。 |
RestoreObject | 恢复归档、冷归档和深度冷归档存储对象。 |
对象 ACL | GetObjectAcl | 获取对象 ACL 的相关信息。 |
PutObjectAcl | 设置对象 ACL。 |
对象版本 | GetObjectVersion | 可用作于获取指定版本对象内容,获取指定版本对象元数据。 |
DeleteObjectVersion | 删除对象(针对特定版本的对象)。 |
对象标签 | GetObjectTagging | 获取对象标签。 |
PutObjectTagging | 设置对象标签。 |
DeleteObjectTagging | 删除对象标签。 |
其他 | AbortMultipartUpload | 取消多段上传任务。 |
ListMultipartUploadParts | 列举已上传段。 |
桶策略模板
TOS 控制台预置了七种常用典型场景的桶策略模板,您可以使用模板创建桶策略,快速完成桶策略配置。
选择使用模板创建时,部分模板需要指定被授权用户或资源范围,您也可以在原模板基础上修改被授权用户、资源范围、模板动作以及增加桶策略执行的条件。
注意
公共只读和公共读写权限的存储桶直接暴露在公网,任何人均可对桶内文件进行读取,同时产生流量费用,存在财产损失和数据泄露风险。
模板名称 | 被授权用户 | 资源范围 | 模板动作 |
---|
桶只读 | 待指定:需指定授权用户 | 包含当前桶和桶内所有对象 | 允许指定用户对当前桶和桶内所有对象执行以下动作: - Get*:所有获取操作。
- List*:所有列举操作。
- HeadBucket:判断桶是否存在,获取桶元数据。
|
桶读写 | 待指定:需指定授权用户 | 包含当前桶和桶内所有对象 | 允许指定用户对当前桶和桶内所有对象执行以下动作: - Get*:所有获取操作。
- List*:所有列举操作。
- HeadBucket:判断桶是否存在,获取桶元数据。
- PutLifecycleConfiguration:设置桶生命周期规则。
- PutBucketVersioning:设置多版本。
- PutBucketCORS:设置桶 CORS。
- PutObject:PUT 上传,POST 上传,上传段,初始化上传段任务,合并段。
- DeleteObject:删除对象。
- PutObjectAcl:设置对象 ACL。
- DeleteObjectVersion:删除指定版本的对象。
- AbortMultipartUpload:取消多段上传任务。
|
文件夹只读 | 待指定:需指定授权用户 | 待指定:需指定对象前缀 | 允许指定用户对当前桶和桶内指定资源执行以下动作: - ListBucket:列举桶内对象。
- HeadBucket:判断桶是否存在,获取桶元数据。
- ListBucketVersions:列举桶内多版本对象。
- GetObject:获取对象内容、获取对象元数据。
- GetObjectAcl:获取对象 ACL。
- GetObjectVersion:获取指定版本对象内容、获取指定版本对象元数据。
|
文件夹读写 | 待指定:需指定授权用户 | 待指定:需指定对象前缀 | 允许指定用户对当前桶和桶内指定资源执行以下动作: - ListBucket:列举桶内对象。
- HeadBucket:判断桶是否存在,获取桶元数据。
- ListBucketVersions:列举桶内多版本对象。
- ListBucketMultipartUploads:列举多段上传任务。
- GetObject:获取对象内容、获取对象元数据。
- PutObject:PUT 上传,POST 上传,上传段,初始化上传段任务,合并段。
- GetObjectAcl:获取对象 ACL。
- PutObjectAcl:设置对象 ACL。
- GetObjectVersion:获取指定版本对象内容、获取指定版本对象元数据。
- AbortMultipartUpload:取消多段上传任务。
- ListMultipartUploadParts:列举已上传段。
|
公共只读(包含 ListBucket 操作) | 所有用户:表示所有互联网用户 | 包含当前桶和桶内所有对象 | 允许所有用户:所有互联网用户对当前桶和桶内所有对象执行以下动作: - ListBucket:列举桶内对象。
- HeadBucket:判断桶是否存在,获取桶元数据。
- ListBucketVersions:列举桶内多版本对象。
- GetObject:获取对象内容、获取对象元数据。
- GetObjectVersion:获取指定版本对象内容、获取指定版本对象元数据。
|
公共只读(不包含 ListBucket 操作) | 所有用户:表示所有互联网用户 | 包含当前桶和桶内所有对象 | 允许所有用户:所有互联网用户对当前桶和桶内所有对象执行以下动作: - HeadBucket:判断桶是否存在,获取桶元数据。
- GetObject:获取对象内容、获取对象元数据。
- GetObjectVersion:获取指定版本对象内容、获取指定版本对象元数据。
|
公共读写 | 所有用户:表示所有互联网用户 | 包含当前桶和桶内所有对象 | 允许所有用户:所有互联网用户对当前桶和桶内所有对象执行以下动作: - ListBucket:列举桶内对象。
- HeadBucket:判断桶是否存在,获取桶元数据。
- ListBucketVersions:列举桶内多版本对象。
- GetObject:获取对象内容、获取对象元数据。
- PutObject:PUT 上传,POST 上传,上传段,初始化上传段任务,合并段。
- GetObjectAcl:获取对象 ACL。
- PutObjectAcl:设置对象 ACL。
- GetObjectVersion:获取指定版本对象内容、获取指定版本对象元数据。
- AbortMultipartUpload:取消多段上传任务。
- ListMultipartUploadParts:列举已上传段。
|
桶策略参数说明
Statement 是主要策略元素的容器,可以在一个策略中包含多个语句,每个 Statement 包含以下参数。
参数 | 是否必选 | 说明 | 示例 |
---|
Sid | 可选 | 策略名称,以区分不同的策略。 | "Sid": "test"
|
Effect | 必填 | 指示策略是允许还是拒绝访问,取值范围为: | "Effect": "Allow"
|
Principal | 可选 说明 当 Effect 为 Allow 时,Principal 参数为必选参数。 | 指定需要授权的用户。 - 指定用户:设置需要授权的账号 ID,如果需要给该账号下的 IAM 用户授权,可用
/ 。 - 所有用户:使用通配符
* 。
| "Principal":["200000****/IAMUserName"]
"Principal":["*"]
|
NotPrincipal | 可选 | 该参数必须和 "Effect":"Deny" 一起使用。搭配 "Effect":"Deny" 使用后,除了 NotPrincipal 指定的用户以外,将拒绝其他用户的访问。关于 NotPrincipal 的典型授权场景的介绍,请参见使用 NotPrincipal 和 NotResource 拒绝访问 。 说明 - 不支持单独使用通配符
* 拒绝所有用户,即不支持使用 "NotPrincipal":["*"] 。 - 如果需要给该账号下的 IAM 用户授权,可用
/ 。
| "NotPrincipal":["200000****/IAMUserName"]
|
Action | 可选 说明 当 Effect 为 Allow 时,Action 参数为必选参数。 | 指定策略允许或拒绝的操作列表,TOS 支持的操作列表请参见动作说明。 - 以字符串形式表示,动作格式为
tos:ActionName ,不区分大小写。 - 支持通配符
* ,表示该资源能进行的所有操作。例如:"Action":["tos:List*" ] 。
| "Action": [
"tos:Get*",
"tos:List*",
"tos:HeadBucket"
]
|
NotAction | 可选 | 该参数必须和 "Effect":"Deny" 一起使用。搭配 "Effect":"Deny" 使用后,除了 NotAction 指定的操作以外,将拒绝其他操作。
该参数值以字符串形式表示,动作格式为 tos:ActionName ,不区分大小写。 说明 - 不支持单独使用通配符
* 拒绝所有操作,即不支持使用 "NotAction":["*"] 。 - TOS 支持的操作列表,请参见动作说明。
| "NotAction": ["tos:Get*","tos:List*","tos:HeadBucket"]
|
Resource | 可选 说明 当 Effect 为 Allow 时,Resource 参数为必选参数。 | 指定策略作用的资源范围,设置规则说明如下: - 如果您只需要对桶执行相应操作,则资源只设置桶名,例如
trn:tos:::bucketname 。 - 如果您只需要对桶中对象执行相应操作,则需要设置桶内资源,例如
trn:tos:::bucketname/objectname 。桶内对象支持通配符* ,表示桶内所有资源。
| "Resource": [
"trn:tos:::bucketname",
"trn:tos:::bucketname/*"
]
|
NotResource | 可选 | 该参数必须和"Effect":"Deny" 一起使用。搭配"Effect":"Deny" 使用后,除了NotResource 指定的资源以外,将拒绝访问其他资源。设置规则说明如下: - 如果您只需要对桶执行相应操作,则资源只设置桶名,例如
trn:tos:::bucketname 。 - 如果您只需要对桶中对象执行相应操作,则需要设置桶内资源,例如
trn:tos:::bucketname/objectname 。桶内对象支持通配符* ,表示桶内所有资源。
关于 NotResource 的典型授权场景的介绍,请参见使用 NotPrincipal 和 NotResource 拒绝访问。
说明 不支持单独使用通配符 * 拒绝所有资源,即不支持使用 "NotResource":["*"] 。 | "NotResource": "trn:tos:::bucketname/*"
|
Condition | 可选 | 指定策略在哪些情况下授予权限。关于条件的详细说明,请参见条件说明。 | "Condition": {
"IpAddress": {
"SourceIp": [
"192.168.0.1",
"192.168.0.3"
]
}
}
|
示例
{
"Statement": [
{
"Sid": "IPtest",
"Effect": "Allow",
"Principal":["*"],
"Action": [
"tos:Get*",
"tos:List*",
"tos:HeadBucket"
],
"Resource":[
"trn:tos:::bucketname",
"trn:tos:::bucketname/*"
],
"Condition": {
"IpAddress": {
"SourceIp": [
"192.168.0.1",
"192.168.0.3"
]
}
}
}
]
}
条件说明
支持条件
条件决定桶策略生效的要求,只有请求信息满足条件时,桶策略才会生效。条件由键、条件运算符及值组成。条件运算符、键及支持的动作之间存在限制关系。TOS 支持的条件及说明如下所示。
键 | 类型 | 是否通用 | 键说明 | 值说明 |
---|
prefix | String | 否 | 列举对象时,用于指定前缀,仅以下动作支持设置: - List*
- ListBucket
- ListBucketVersions
| 输入具体的前缀和通配符(*)。
例如设置条件为 prefix 不等于 dr1/ ,则被授予桶策略的账号列举对象时,必须在 Query 处设置 prefix 参数为除了 dr1/ 以外的其他值,否则桶策略不会生效。 |
delimiter | String | 否 | 列举对象时,对 Object 名字进行分组的字符,仅以下动作支持设置: - List*
- ListBucket
- ListBucketVersions
| 输入常见的分隔符。
例如设置条件为 delimiter 等于 / ,则被授予桶策略的账号列举对象时,必须在 Query 处设置 delimiter 参数为 / ,否则桶策略不会生效。 |
max-keys | String | 否 | 列举对象时,返回对象的最大数量,仅以下动作支持设置: - List*
- ListBucket
- ListBucketVersions
| 输入数字,有效范围为 [1-1000]。
例如设置条件为 max-keys 等于 10 ,则被授予桶策略的账号列举对象时,必须在 Query 处设置 max-keys 参数为10 ,否则桶策略不会生效。 |
versionid | String | 否 | 指定对象版本,仅以下动作支持设置: - Delete*
- Get*
- DeleteObjectVersion
- GetObjectVersion
| 输入对象的具体版本号。
例如设置条件为 versionid 等于 570731267015922DACF8 ,则被授予桶策略的账号执行相应动作时,必须在 Query 处设置 versionId 参数为570731267015922DACF8 ,否则桶策略不会生效。 |
x-tos-acl | String | 否 | 上传对象或者设置 ACL 时,用于在头域中声明对象的 ACL,仅以下动作支持设置: - Put*
- PutBucketAcl
- PutObject
- PutObjectAcl
| 输入有效的 ACL,取值范围为: - private
- public-read
- public-read-write
- bucket-owner-read
- bucket-owner-full-control
- authenticated-read
- bucket-owner-entrusted
例如设置条件为 x-tos-acl 等于 public-read ,则被授予桶策略的账号上传对象或设置 ACL 时,必须在 Header 处设置 x-tos-acl 参数为 public-read ,否则桶策略不会生效。 |
x-tos-copy-source | String | 否 | 复制对象时,用来指定源桶名和源对象名,仅以下动作支持设置: | 输入有效的源对象的路径。
例如设置条件为 x-tos-copy-source 等于 /bucket/object ,则被授予桶策略的账号调用 CopyObject 接口时,必须在 Header 处设置 x-tos-copy-source 参数为 /bucket/object ,否则桶策略不会生效。 |
x-tos-metadata-directive | String | 否 | 指定是从源对象复制元数据还是使用请求中提供的元数据替换元数据,仅以下动作支持设置: | 输入元数据复制策略,取值 COPY 或 REPLACE ,说明如下: - COPY:从源对象复制元数据。
- REPLACE:使用请求中提供的元数据替换对象元数据。
例如设置条件为 x-tos-metadata-directive 等于 COPY ,则被授予桶策略的账号调用 CopyObject 接口时,必须在 Header 处设置 x-tos-metadata-directive 参数为 COPY ,否则桶策略不会生效。 |
x-tos-server-side-encryption-kms-key-id | String | 否 | 指定 SSE-KMS 加密对象使用的主密钥 ID,仅 PutObject 动作支持设置该键。 | 输入 KMS 的密钥 ID。
例如设置条件为x-tos-server-side-encryption-kms-key-id 等于 trn:kms:cn-beijing:200000****:keyrings/ring-test/keys/key-test ,则被授予桶策略的账号上传对象时,必须在 Header 处设置 x-tos-server-side-encryption-kms-key-id 参数为 trn:kms:cn-beijing:200000****:keyrings/ring-test/keys/key-test ,否则桶策略不会生效。 |
CurrentTime | Date | 是 | 服务器接收请求的时间,UTC 时间,格式必须为 ISO 8601,基本格式为 yyyy-MM-ddTHH:mmZ(UTC 时间)。 | 输入 ISO 8601 格式的日期。
例如设置条件为 CurrentTime 大于 2023-10-13T15:00:00Z ,则被授予桶策略的账号执行相应动作时,请求时间必须大于 2023-10-13T15:00:00Z,否则桶策略不会生效。 |
EpochTime | Numeric | 是 | 自 1970 年 1 月 1 日(UTC/GMT 午夜)来经过的秒数,不包括闰秒。 | 输入秒数。
例如设置条件为 EpochTime 大于 1697187692 ,则被授予桶策略的账号执行相应动作时,请求时间必须大于 1697187692,否则桶策略不会生效。 |
SecureTransport | Boolean | 是 | 请求是否使用 SSL 加密。 | 输入 true 或 false ,取值说明如下: - true:使用 SSL 加密。
- false:不使用 SSL 加密。
例如设置条件为 SecureTransport bool true ,则被授予桶策略的账号执行相应动作时,请求必须使用 SSL 加密,否则桶策略不会生效。 |
SourceIp | String | 是 | 请求发起的源 IP。 | 输入 IP 地址或者 IP 段,如有多个 IP 请以英文逗号分隔。
例如设置条件为 SourceIp 等于 192.168.0.1 ,则被授予桶策略的账号执行相应动作时,请求发起的源 IP 必须为 192.168.0.1,否则桶策略不会生效。 |
UserAgent | String | 是 | 请求的客户端代理程序。 | 输入 Agent 详细信息和通配符(*)。
例如设置条件为 UserAgent 等于 tos go sdk v2.6.0 ,则被授予桶策略的账号执行相应动作时,请求的客户端代理程序必须为 tos go sdk v2.6.0,否则桶策略不会生效。 |
Referer | String | 是 | 请求发起的链接。 | 输入 URL。
例如设置条件为 Referer 等于 http://console.volcengine.com ,则被授予桶策略的账号执行相应动作时,请求头必须为 http://console.volcengine.com ,否则桶策略不会生效。 |
SourceVpc | String | 是 | 请求所在的 VPC。 | 输入 VPC ID。
例如设置条件为 SourceVpc 等于 vpc-2d****ez0n ,则被授予桶策略的账号执行相应动作时,请求所在的 VPC 必须是 vpc-2d****ez0n ,否则桶策略不会生效。 |
rolename | String | 是 | 角色名称,用于指定其他云服务或 TOS 内部请求。 | 输入角色名称**。**
例如设置条件为 rolename 等于ServiceRoleforReplicationAccessTOS ,访问TOS 时,扮演的角色名称必须是 ServiceRoleforReplicationAccessTOS,否则桶策略不会生效。 |
NetPlane | String | 是 | 请求来源的网络平面。 | 仅支持配置 public ,表示请求来源为公网。
例如设置条件为 NetPlane 等于 public ,则被授予桶策略的账号执行相应动作时,请求来源必须为公网,否则桶策略不会生效。 |
运算符说明
授权策略中不同的条件对应了不同的运算符,详细说明如下所示。
适用条件 | 运算符说明 |
---|
- prefix
- delimiter
- versionid
- x-tos-acl
- x-tos-copy-source
- x-tos-metadata-directive
- UserAgent
- Referer
- x-tos-server-side-encryption-kms-key-id
- SourceVPC
- rolename
| - 等于:与设置的条件值完全匹配。
- 不等于:与设置的条件值不匹配。
- 等于(不区分大小写):忽略大小写后,与设置的条件值完全匹配。
- 不等于(不区分大小写):忽略大小写后,与设置的条件值不完全匹配。
- Like:支持通配符(*)的正则匹配,例如
like abc* ,就是以 abc 开头的所有字符,区分大小写。 - Not Like:支持通配符(*)的正则匹配,例如
Not like abc* ,就是除以 abc 开头的所有字符,区分大小写。
|
- max-keys
- CurrentTime
- EpochTime
| - 等于:与设置的条件值相等。
- 不等于:与设置的条件值不相等。
- 小于:小于设置的条件值。
- 小于等于:小于等于设置的条件值。
- 大于:大于设置的条件值。
- 大于等于:大于等于设置的条件值。
|
| - 等于:指定的 IP 或者 IP 范围。
- 不等于:除了指定的 IP 或者 IP 范围之外的所有 IP。
|
SecureTransport | 布尔值,取值说明如下: - true:使用 SSL 加密。
- false:不使用 SSL 加密。
|
注意
- 配置 prefix、delimiter、max-keys 后,执行 List 操作时需要带上符合条件的键值对信息,桶策略才生效。
- 当您需要设置多个值时,您可以用英文逗号(,)分隔。
- 如果您的值中含有英文逗号(,),您可以用
/
转义。