最近更新时间:2024-06-26 21:01:44
空间策略(Bucket Policy)是KS3推出的针对Bucket的授权策略,您可以通过空间策略授权其他用户访问您指定的KS3资源。
空间策略包含以下几个元素:
元素名称 | 描述 | 是否必选 |
---|---|---|
效果(Effect) | 代表本条策略的效果,可以是允许或拒绝,对应Effect的值为Allow或者Deny | 是 |
资源(Resource) | 代表本条策略针对哪些资源起作用,可以设置为整个Bucket,也可以指定Object资源 | 是 |
被授权人(Principal) | 代表授权给哪些用户,可选所有用户、主账号、子账号、角色名 | 是 |
权限(Action) | 代表对于指定的资源授权了哪些权限 | 是 |
条件(Condition) | 在授予权限时指定的条件。访问请求只有在满足指定条件时,访问策略才可以生效 | 否 |
下面是一条空间策略示例,此策略允许账户accountid
下的子用户Dave
在ip为101.226.XXX.185
的条件下对examplebucket存储桶具有ks3:listbucket
和ks3:getobject
的权限。
{
"Version":"2015-11-01",
"Statement": [
{
"Sid":"1",
"Effect":"Allow",
"Principal":{krn:ksc:iam::(accountid):user/Dave},
"Action":[
"ks3:ListBucket",
"ks3:GetObject"
],
"Resource":["krn:ksc:ks3:::examplebucket","krn:ksc:ks3:::examplebucket/*"],
"Condition": {
"IpAddress": {
"ksc:SourceIp": ["101.226.XXX.185"]
}
}
}
]
}
下面依次对空间策略每个元素的配置方式进行说明。
包含允许(Allow)和拒绝(Deny)两种授权效果:
允许(Allow):允许设定的用户访问指定资源。
拒绝(Deny):拒绝设定的用户访问指定资源,即使有其他策略授予了该用户访问权限的情况下也会拒绝访问。
在KS3中,使用资源名称(KRN)来标识资源,KRN的格式如下:
krn:ksc:ks3:::bucketname
krn:ksc:ks3:::bucketname/keyname
其中bucketname
表示存储空间名称,keyname
表示对象/文件(Object)的名称,支持通配符*
(匹配多个字符)和?
(匹配单个字符)。
以下为 KS3 资源KRN的示例:
表示mybucket
存储空间
krn:ksc:ks3:::mybucket
表示mybucket
存储空间中全部对象
krn:ksc:ks3:::mybucket/*
表示您拥有的所有存储空间与对象
krn:ksc:ks3:::*
注意:
在实际使用中,为了简化输入,在控制台写入Resource时,只需要写入空间名称和文件名称,可省略前面的
krn:ksc:ks3:::
。后台程序会自动将简化输入转换为标准输入。Bucket与Object级别的操作需要对应与之相匹配的权限表示,详见权限。
Principal 元素用于指定被允许或拒绝访问资源的所有用户、主账号、子账号、角色。元素 Principal 仅在空间策略中起作用;用户策略中不必指定,因为用户策略直接附加到特定用户。下面是指定 Principal 的示例。
1. *表示所有用户。
2. krn:ksc:iam::(accountid):root //标识主账号,acountid是主账户id,root是固定值。
3. krn:ksc:iam::(accountid):user/(userName) //userName表示子账号,其中user是固定值,acountid是归属主账户id。
4. krn:ksc:iam::(accountid):role/(ruleNAME) //ruleNAME表示角色名称,其中role是定值,acountid是归属主账户id。
注意:在实际使用中,为了简化输入,在控制台写入Principal时,对于主账户只需要填入主账户ID即可;对于子用户,写入格式为“acountid/userName”,其中accountid为用户主账号ID,userName为子用户名。后台程序会自动将简化输入转换为标准输入。
Action为KS3在策略中指定的一组权限,每一个权限都会映射到特定的KS3操作。Action分为Bucket和Object级别的权限。
主账号默认拥有所有权限,并且可以根据业务需求为子账号分配不同的权限。如果想让子账号在控制台只读,至少需要给子账号配置以下权限。
Action | 描述 |
---|---|
ks3:ListBuckets | 查询Bucket列表,注意该权限为User Policy权限,主账号需要到IAM平台中为子账号配置 |
ks3:ListBucket | 列举Bucket中所有Object的信息 |
ks3:GetObject | 获取Object |
ks3:GetBucketLocation | 查看用户Bucket所属区域 |
ks3:ListBucketMultipartUploads | 列出所有正在进行的分块上传任务 |
ks3:ListMultipartUploadParts | 列出指定上传任务中所有已上传的块 |
ks3:GetBucketAcl | 获取Bucket ACL |
ks3:GetObjectAcl | 获取Object ACL |
注意:
以上为子账号在控制台只读需要配置的最小权限,如果子账号需要额外拥有获取Object标签信息的权限,需要在以上权限的基础上增加
ks3:GetObjectTagging
权限。如果想让子账号在控制台拥有写权限,需要在以上最小读权限的基础上增加相应的写权限。比如子账号需要拥有上传、删除、设置标签的权限,则主账号需要为子账号分配的权限有:
ks3:ListBuckets
、ks3:ListBucket
、ks3:GetObject
、ks3:GetBucketLocation
、ks3:ListBucketMultipartUploads
、ks3:ListMultipartUploadParts
、ks3:GetBucketAcl
、ks3:GetObjectAcl
、ks3:PutObject
、ks3:DeleteObject
、ks3:PutObjectTagging
。如果子账号仅使用API访问,则无需为子账号配置以上最小权限,只需要配置相应操作对应的权限即可。
用户不同的操作需要拥有不同的权限,有关用户操作以及对应需要的权限说明如下所示:
API | Action | 接口描述 |
---|---|---|
GET Bucket(ListObjects) | ks3:ListBucket | 列举Bucket中所有Object的信息,控制台读权限必须配置该策略 |
List Object V2 | ks3:ListBucket | 列举Bucket中所有Object的信息,控制台读权限必须配置该策略 |
GET Bucket Location | ks3:GetBucketLocation | 查看用户Bucket所属区域,控制台读权限必须配置该策略 |
DELETE Bucket | ks3:DeleteBucket | 删除某个Bucket |
PUT Bucket ACL | ks3:PutBucketAcl | 设置或修改Bucket ACL |
GET Bucket ACL | ks3:GetBucketAcl | 获取Bucket ACL,控制台读权限必须配置该策略 |
PUT Bucket Replication | ks3:PutBucketReplication | 设置复制规则 |
GET Bucket Replication | ks3:GetBucketReplication | 查看复制规则 |
DELETE Bucket Replication | ks3:DeleteBucketReplication | 删除复制规则 |
PUT Bucket Logging | ks3:PutBucketLogging | 开启Bucket的日志功能 |
GET Bucket Logging | ks3:GetBucketLogging | 查看Bucket的日志记录状态 |
PUT Bucket CORS | ks3:PutBucketCORS | 设置指定Bucket的跨域资源共享规则 |
GET Bucket CORS | ks3:GetBucketCORS | 获取指定Bucket的跨域资源共享规则 |
DELETE Bucket CORS | ks3:PutBucketCORS | 删除指定Bucket的跨域资源共享规则 |
PUT Bucket Inventory | ks3:PutBucketInventory | 配置Bucket的清单规则 |
GET Bucket Inventory | ks3:GetBucketInventory | 查看Bucket中指定的清单任务 |
List Bucket Inventory | ks3:ListBucketInventory | 查看Bucket中所有清单任务 |
DELETE Bucket Inventory | ks3:DeleteBucketInventory | 删除Bucket中指定的清单任务 |
List Multipart Uploads | ks3:ListBucketMultipartUploads | 列出所有正在进行的分块上传任务,控制台读权限必须配置该策略 |
API | Action | 接口描述 |
---|---|---|
PUT Object | ks3:PutObject | 上传Object |
PUT Object Copy | ks3:PutObject, ks3:GetObject | 拷贝同一地域下相同或不同Bucket之间的Object |
POST Object | ks3:PutObject | 通过HTML表单上传的方式将Object上传到指定Bucket |
Initiate Multipart Upload | ks3:PutObject | 初始化分块上传 |
Upload Part | ks3:PutObject | 上传分块 |
Complete Multipart Upload | ks3:PutObject | 完成分块上传 |
Abort Multipart Upload | ks3:AbortMultipartUpload | 取消分块上传任务 |
List Parts | ks3:ListMultipartUploadParts | 列出指定上传任务中所有已上传的块,控制台读权限必须配置该策略 |
Upload Part Copy | ks3:PutObject, ks3:GetObject | 从一个已存在的Object中拷贝数据来上传一个块 |
GET Object | ks3:GetObject | 获取Object |
HEAD Object | ks3:GetObject | 获取Object的元数据信息,控制台读权限必须配置该策略 |
DELETE Object | ks3:DeleteObject | 删除Object |
Restore Object | ks3:PostObjectRestore | 解冻归档Object |
PUT Object ACL | ks3:PutObjectAcl | 设置Bucket下某个Object的ACL |
GET Object ACL | ks3:GetObjectAcl | 获取Bucket下某个Object的ACL,控制台读权限必须配置该策略 |
PUT Object Tagging | ks3:PutObjectTagging | 添加/更新Object的标签 |
GET Object Tagging | ks3:GetObjectTagging | 获取Object的标签 |
DELETE Object Tagging | ks3:DeleteObjectTagging | 删除Object的标签 |
注意:
不同级别的操作需要指定与之对等的资源。
如果您想授予
ks3:ListBucket
权限则其对应的资源必须为bucket, 例如:krn:ksc:ks3:::bucket01
代表名为bucket01的存储空间。如果您想授予
ks3:PutObject
权限,则需要指定文件资源,例如:krn:ksc:ks3:::bucket01/*
,代表bucket01中的所有文件。需要同时授权Bucket与Object级别权限需要同时指定两种对应的资源。
访问策略语言支持在授予权限时指定该策略生效的条件。在Condition元素(或 Condition 块)中,可以指定策略生效的条件,Condition元素是可选的。如果在策略中指定了条件,那么用户的请求必须满足条件,策略才可以生效。
KS3支持的Condition如下:
Condition | 功能 |
---|---|
ksc:SourceIp | 指定IP地址 |
ksc:RequestHeader | 指定请求中带有的请求头 |
ksc:SubnetID | 指定请求来自SubnetID对应的VPC子网 |
条件运算符 | value取值范围 | 说明 |
---|---|---|
IpAddress | 严格的IP地址格式和CIDR格式,只支持IPV4 | 客户请求的源IP地址等于某个IP地址或IP地址段,策略生效。多个IP地址间用半角逗号(,)分隔 |
NotIpAddress | 严格的IP地址格式和CIDR格式,只支持IPV4 | 客户请求的源IP地址不等于某个IP地址或IP地址段,策略生效。多个IP地址间用半角逗号(,)分隔 |
条件运算符 | value取值范围 | 说明 |
---|---|---|
StringEquals | 键值对形式的字符串,如"x-kss-cdn:kingsoftcdn" | 客户请求中带有指定header,并且请求头的value值恰好匹配(区分大小写),策略生效 |
StringNotEquals | 键值对形式的字符串,如"x-kss-cdn:kingsoftcdn" | 客户请求中带有指定header,并且请求头的value值不匹配(区分大小写),策略生效 |
StringEqualsIgnoreCase | 键值对形式的字符串,如"x-kss-cdn:kingsoftcdn" | 客户请求中带有指定header,并且请求头的value值恰好匹配(不区分大小写),策略生效 |
StringNotEqualsIgnoreCase | 键值对形式的字符串,如"x-kss-cdn:kingsoftcdn" | 客户请求中带有指定header,并且请求头的value值不匹配(不区分大小写),策略生效 |
StringLike | 键值对形式的字符串,可包括字符串中任何一个多字符匹配的通配符 (*) 或单字符匹配的通配符 (?),如"x-kss-cdn:*" | 客户请求中带有指定header,并且请求头的value值可模糊匹配(区分大小写),策略生效 |
StringNotLike | 键值对形式的字符串,可包括字符串中任何一个多字符匹配的通配符 (*) 或单字符匹配的通配符 (?),如"x-kss-cdn:*" | 客户请求中带有指定header,并且请求头的value值不模糊匹配(不区分大小写),策略生效 |
条件运算符 | value取值范围 | 说明 |
---|---|---|
StringEquals | 严格的AccountID格式和SubnetID格式 | 客户的请求来自value中指定的SubnetID对应的VPC子网,策略生效 |
StringNotEquals | 严格的AccountID格式和SubnetID格式 | 客户的请求不是来自value中指定的VPC子网,策略生效 |
支持控制台和API两种操作方式:
操作方式 | 参考文档 |
---|---|
控制台 | |
API | |
SDK |
纯净模式