桶策略是一种用于控制桶访问权限的策略,允许桶的所有者授权其他用户特定权限。通过桶策略,所有者可以灵活地定义和管理桶的访问权限。
约束与限制
桶策略(基础版)和桶策略(进阶版)支持的区域请参见产品能力地图,可根据需要选择其中一种,通过提工单申请权限。
桶策略(基础版)操作步骤
- 点击天翼云门户首页的“控制中心”,输入登录的用户名和密码,进入控制中心页面。
- 在控制台上方点击
,选择地域,以下操作选择华东-华东1。
- 在控制台首页,选择“存储>对象存储”。
- 在ZOS控制台,单击Bucket名称进入“概览”页面。
- 选择“权限管理”页面,找到“桶策略”,点击“设置”按钮。
- 在“桶策略”设置页面,点击“创建策略”,根据提示完成参数设置。
参数 | 说明 |
---|---|
授权账号类型 | 默认为用户邮箱。 |
授权账号 | 仅能输入一个账户。支持通配符( * ),表示对所有注册用户和匿名用户生效,为必选项。 |
授权策略 | 只读权限/读写权限/完全控制/拒绝对象访问/自定义权限,此项为单选且必选,默认只读权限。选择“自定义权限”时,需输入“授权范围”、“效果”、“授权操作”、“条件”四个内容。 |
授权资源 | 输入桶策略生效的对象或对象集,支持通配符( * )。仅输入通配符( * )时,表示桶策略对整个桶生效。 |
授权范围 | 选择“自定义权限”时,需输入“授权范围”内容。授权范围可选择桶内指定对象或配置到整个桶,为必选项。 |
效果 | 选择“自定义权限”时,需选择“效果”内容。可选允许或拒绝,为必选项。 |
授权操作 | 选择“自定义权限”时,需选择“授权操作”内容,为必选项且可多选。 |
条件 | 选择“自定义权限”时,需配置“条件”内容,为非必选项,最多可添加20条。 |
- 配置完成后,点击“确定”,桶策略创建成功。
桶策略(进阶版)操作步骤
1. 点击天翼云门户首页的“控制中心”,输入登录的用户名和密码,进入控制中心页面。
2. 在控制台上方点击,选择地域,以下操作选择华东-华东1。
3. 在控制台首页,选择“存储>对象存储”。
4. 在ZOS控制台,单击Bucket名称进入“概览”页面。
5. 选择“权限管理”页面,找到“桶策略”,点击“设置”按钮
6. 选择可视化视图配置,在“可视化视图”页签下,点击“创建策略”按钮,根据提示完成参数设置。
参数 | 说明 |
---|---|
策略名称 | 支持中英文、特殊字符、空格等。 |
效果 | 允许、拒绝,二选一。 允许:指定本条桶策略的权限为接受请求。 拒绝:指定本条桶策略的权限为拒绝请求。 |
授权用户 | 所有账号:所有账号包括当前主账号在内的任何用户,请谨慎选择。 子账号:当前主账号下的子账号,可多选。 其他账号:需要输入主账号ID或子账号ID,可授权给多个账号,需要分行输入。 |
授权范围 | 整个桶(包括桶内对象):授权资源为 bucketName、bucketName/,表示整个桶及桶内所有对象。 当前桶:授权资源为bucketName,表示当前桶。 桶内对象:表示桶内指定对象,授权资源为授权资源为bucketName/xxx,根据需要输入目录/对象名,例如“folderName/”,*表示所有对象。 |
授权策略 | 方式一:模版配置,根据已有策略模板配置,可以快速完成桶策略的配置。 方式二:自定义配置,不使用策略模板,自定义选择桶策略。 |
条件 | 条件是可选参数,用户可以根据业务需要选择是否使用。 当条件设置的表达式与访问请求中的值匹配时,桶策略才生效。 |
方式一:使用模板创建桶策略
ZOS控制台预置了五种常用典型场景的桶策略模板,授权策略时选择已有策略模板配置,可以快速完成桶策略的配置。
授权范围 | 授权策略模版 |
---|---|
整个桶(包括桶内对象) | 桶只读:s3:GetObject,s3:GetObjectAcl,s3:GetObjectVersion,s3:GetObjectVersionAcl,s3:ListBucket,s3:RestoreObject 桶读写:s3:GetObject,s3:PutObject,s3:GetObjectAcl,s3:PutObjectAcl,s3:AbortMultipartUpload,s3:ListMultipartUploadParts,s3:GetObjectVersion,s3:GetObjectVersionAcl,s3:ListBucket,s3:RestoreObject 完全控制:s3:* |
桶内对象 | 对象只读:s3:GetObject,s3:GetObjectAcl,s3:GetObjectVersion,s3:GetObjectVersionAcl,s3:RestoreObject 对象读写:s3:GetObject,s3:PutObject,s3:GetObjectAcl,s3:PutObjectAcl,s3:AbortMultipartUpload,s3:ListMultipartUploadParts,s3:GetObjectVersion,s3:GetObjectVersionAcl,s3:RestoreObject |
方式二:使用自定义配置创建桶策略
若实际业务场景存在定制化策略配置需求,可不选择已有的策略模板,在授权策略时通过自定义配置来选择策略。
通过点击“添加策略”,进入选择策略弹窗中选择具体的策略。
说明
如果“授权资源”仅选择“整个桶(包括桶内对象)”,可选择配置“通用操作”、“桶操作”和“对象操作”。
如果“授权资源”仅选择“当前桶”,可选择配置“通用操作”和“桶操作”。
如果“授权资源”仅选择“桶内对象”,可选择配置“通用操作”和“对象操作”。
如果“授权资源”同时选择“当前桶”和“桶内对象”,可选择配置“通用操作”、“桶操作”和“对象操作。
7. 点击“确定”,完成可视化视图策略的创建。
方式三:使用JSON视图创建桶策略
熟悉JSON以及桶策略语法结构的用户,可以直接使用JSON视图编辑桶策略。在“JSON视图”页签下,点击“编辑”按钮进行设置。
桶策略JSON格式如下:
{
"Statement": [
{
"Sid": "policyNamexxxx",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::buckename",
"arn:aws:s3:::bucketname/*"
],
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:ListBucket",
"s3:RestoreObject"
],
"Condition": {
"StringEquals": {
"aws:SourceVpce": [
"endpoint-r20l0nb8d8"
]
}
},
"Principal": {
"AWS": [
"arn:aws:iam:::user/c1117249994640a59eb3f2dfd47896a6"
]
}
}
]
}
参数说明如下:
参数 | 是否必填 | 说明 |
---|---|---|
Sid | 是 | string类型,策略名称标识。 |
Effect | 是 | string类型,只能填Allow或Deny。 |
Principal | 是 | map类型,Principal格式: "Principal": {"AWS": ["arn:aws:iam:::user/uid"]} 若授权用户为所有账号: "Principal":{"AWS": ["arn:aws:iam:::user/*"]} |
Action | 是 | 数组类型,桶策略授权操作,详见附录一。 |
Resource | 是 | 数组类型,桶策略作用的资源,Resource格式: "Resource": [ "arn:aws:s3:::bucketName", "arn:aws:s3:::bucketName/" ] 若策略对桶维度和对象维度都生效,"Resource": ["arn:aws:s3:::"] |
Condition | 否 | 本条statement生效的条件,详见附录二。 |
附录一:桶策略授权操作
- 通用操作
策略 | 说明 |
---|---|
s3:* | 高风险操作,请谨慎授权!表示能对授权资源进行任何操作。 |
s3:Get* | 表示能对授权资源进行所有的获取操作。 |
s3:Put* | 高风险操作,请谨慎授权!表示能对授权资源进行所有的设置操作。 |
s3:List* | 表示能对授权资源进行所有的列举操作。 |
- 桶操作
策略 | 说明 |
---|---|
s3:ListBucketMultipartUploads | 列举桶中正在进行的分段上传任务。 |
s3:ListBucket | 列举桶内对象列表(仅获取最新版本对象,不获取历史版本)。 |
s3:ListBucketVersions | 列举桶内所有对象(包括历史版本)。 |
s3:DeleteBucket | 高风险操作,请谨慎授权!删除桶。 |
s3:PutBucketPolicy | 高风险操作,请谨慎授权!设置桶策略,拥有此权限的用户可以任意更改桶策略,并通过此权限可以获取其他权限。 |
s3:GetBucketPolicy | 获取桶策略。 |
s3:DeleteBucketPolicy | 删除桶策略。 |
s3:PutBucketAcl | 高风险操作,请谨慎授权!设置桶ACL,拥有此权限的用户可以任意更改桶ACL。 |
s3:GetBucketAcl | 获取桶ACL。 |
s3:PutBucketLogging | 设置桶的日志转存。 |
s3:GetBucketLogging | 获取桶的访问日志。 |
s3:PutLifecycleConfiguration | 设置桶的生命周期规则。 |
s3:GetLifecycleConfiguration | 获取桶的生命周期规则。 |
s3:PutBucketWebsite | 设置桶的静态网站托管配置。 |
s3:GetBucketWebsite | 获取桶的静态网站托管配置。 |
s3:DeleteBucketWebsite | 删除桶的静态网站托管配置。 |
s3:PutBucketVersioning | 开启或暂停桶的版本控制。 |
s3:GetBucketVersioning | 获取桶的版本控制状态。 |
s3:PutBucketTagging | 设置桶标签。 |
s3:GetBucketTagging | 获取桶标签。 |
s3:PutBucketObjectLockConfiguration | 设置桶的合规保留策略。 |
s3:GetBucketObjectLockConfiguration | 获取桶的合规保留策略。 |
s3:BypassGovernanceRetention | 高风险操作,请谨慎授权!拥有该权限可以删除或覆盖合规保留期内的对象。 |
s3:PutBucketCORS | 设置桶的跨源资源共享(CORS)配置。 |
s3:GetBucketCORS | 获取桶的跨源资源共享(CORS)配置。 |
s3:PutBucketEncryption | 设置桶的加密配置。 |
s3:GetBucketEncryption | 获取桶的加密配置。 |
s3:PutInventoryConfiguration | 设置桶清单配置。 |
s3:GetInventoryConfiguration | 获取桶清单配置。 |
- 对象操作
策略 | 说明 |
---|---|
s3:PutObject | 上传对象。 |
s3:GetObject | 下载对象。 |
s3:DeleteObject | 删除对象。 |
s3:RestoreObject | 解冻归档对象。 |
s3:ListMultipartUploadParts | 列举已上传未合并的分段。 |
s3:AbortMultipartUpload | 取消分段上传任务。 |
s3:GetObjectVersion | 下载指定版本的对象。 |
s3:DeleteObjectVersion | 删除指定版本对象。 |
s3:PutObjectAcl | 高风险操作,请谨慎授权!设置对象ACL,拥有此权限的用户可以任意更改对象ACL。 |
s3:GetObjectAcl | 获取对象ACL。 |
s3:PutObjectVersionAcl | 设置指定版本对象的ACL。 |
s3:GetObjectVersionAcl | 获取指定版本对象的ACL。 |
s3:PutObjectTagging | 设置对象标签。 |
s3:GetObjectTagging | 获取对象标签。 |
s3:DeleteObjectTagging | 删除对象标签。 |
s3:PutObjectVersionTagging | 设置指定版本对象标签。 |
s3:GetObjectVersionTagging | 获取指定版本对象标签。 |
s3:DeleteObjectVersionTagging | 删除指定版本对象标签。 |
s3:PutObjectRetention | 设置对象合规保留策略。 |
s3:GetObjectRetention | 获取对象合规保留策略。 |
s3:GetObjectLegalHold | 获取对象依法保留策略。 |
s3:PutObjectLegalHold | 设置对象依法保留策略。 |
附录二:策略生效的条件
除了指定效力、被授权用户、资源、动作外,桶策略还可以指定生效条件。只有当条件设置的表达式与访问请求中的值匹配时,桶策略才生效。条件是可选参数,用户可以根据业务需要选择是否使用。
条件由条件运算符、条件键、条件值三部分组成,最终组成一个条件表达式,决定桶策略生效的条件。同一个条件运算符中,如果存在多个相同的键,则只会保留最后一个键。条件运算符、键两者之间存在互相限制的关联关系,例如:条件运算符选择了一个String类型的,比如StringEquals,键就只能选择String类型的,比如s3:x-amz-acl。键选择了一个Date类型,比如aws:CurrentTime ,条件运算符就只能选择Date类型的,比如DateEquals。
● 条件运算符:
类型 | 关键字 | 说明 |
---|---|---|
String | StringEquals | 判断字段值是否等于指定字符串。 |
String | StringEqualsIfExists | 仅当字段存在时才判断字段值是否等于指定字符串。 |
String | StringNotEquals | 判断字段值是否不等于指定字符串。 |
String | StringEqualsIgnoreCase | 判断字段值是否等于指定字符串,忽略大小写。 |
String | StringNotEqualsIgnoreCase | 判断字段值是否不等于指定字符串,忽略大小写。 |
String | StringLike | 兼容通配符 (* 和 ?) 进行字符串匹配,*代表任意多个字符,?代表单个字符。 |
String | StringLikeIfExists | 仅当字段存在时才兼容通配符 (* 和 ?) 进行字符串匹配。 |
String | StringNotLike | 判断字段值是否不匹配指定模式。 |
Numeric | NumericEquals | 相等。 |
Numeric | NumericNotEquals | 不相等。 |
Numeric | NumericLessThan | 小于。 |
Numeric | NumericLessThanEquals | 小于等于。 |
Numeric | NumericGreaterThan | 大于。 |
Numeric | NumericGreaterThanEquals | 大于等于。 |
Date | DateEquals | 日期时间相等。 |
Date | DateNotEquals | 日期时间不相等。 |
Date | DateLessThan | 日期时间小于。 |
Date | DateLessThanEquals | 日期时间小于等于。 |
Date | DateGreaterThan | 日期时间大于。 |
Date | DateGreaterThanEquals | 日期时间大于等于。 |
IP address | IpAddress | 指定的IP或IP范围。 |
IP address | NotIpAddress | 除指定的IP或IP范围外所有IP。 |
● 键值说明:
键 | 类型 | 值 | 描述 |
---|---|---|---|
aws:Referer | String | 输入字符串(URL) | 匹配请求的 Referer 标头,用于限制请求来源的网页。 |
aws:SourceVpce | String | VPC 端点 ID(如 "vpce-1a2b3c4d" ) | 限制请求通过特定的 VPC 端点发起。 |
aws:UserAgent | String | 字符串(如 "Mozilla/5.0" , "curl/7.68.0" ) | 匹配请求中的 User-Agent 标头,⽤于识别请求⼯具或浏览器。 |
aws:username | String | ⽤户名 | 限制请求来⾃特定的⽤户。 |
s3:x-amz-acl | String | "private" , "public-read" , "public-read-write" , "authenticatedread" , "bucket-owner-read" , "bucket-owner-full-control" | 限制对特定访问控制列表(ACL)的请求。 上传对象或者修改对象acl。 |
s3:x-amz-copy-source | String | 源对象路径(如 "/bucket/key" ) | 限制复制操作的源对象。 |
s3:x-amz-metadata-directive | String | "COPY" , "REPLACE" | 控制复制操作中是否保留源对象的元数据。 |
s3:prefix | String | 字符串(如 "123/" ) | 限制请求只能操作以特定前缀开头的对象。 |
s3:delimiter | String | 字符串(如 "/" ) | 在列出对象时使⽤指定的分隔符进⾏分组。 |
s3:max-keys | Numeric | 整数 | 限制列出对象时返回的最⼤键数。 |
aws:CurrentTime | Date | ⽇期时间字符串(如 "2024-08-20T00:00:00Z" ) | 匹配当前请求时间。 |
aws:EpochTime | Date | 时间戳(如 1596240000 ) | 匹配请求的时间。 |
aws:SourceIp | IP address | IP 地址或范围(如 "192.168.1.1" , "192.168.0.0/24" ) | 限制请求只能从指定的 IP 地址或 IP 范围内发起。 |