全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

空间策略(Bucket Policy)

最近更新时间:2023-11-13 10:08:58

空间策略(Bucket Policy)是KS3推出的针对Bucket的授权策略,您可以通过空间策略授权其他用户访问您指定的KS3资源。

空间策略包含以下几个元素:

元素名称 描述 是否必选
效果(Effect) 代表本条策略的效果,可以是允许或拒绝,对应Effect的值为Allow或者Deny
资源(Resource) 代表本条策略针对哪些资源起作用,可以设置为整个Bucket,也可以指定Object资源
被授权人(Principal) 代表授权给哪些用户,可选所有用户、主账号、子账号、角色名
权限(Action) 代表对于指定的资源授权了哪些权限
条件(Condition) 在授予权限时指定的条件。访问请求只有在满足指定条件时,访问策略才可以生效

下面是一条空间策略示例,此策略允许账户accountid下的子用户Dave在ip为101.226.XXX.185的条件下对examplebucket存储桶具有ks3:listbucketks3: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"]
        	}
      	 }
   }
  ]
}

下面依次对空间策略每个元素的配置方式进行说明。

效果(Effect)

包含允许(Allow)和拒绝(Deny)两种授权效果:

  • 允许(Allow):允许设定的用户访问指定资源。
  • 拒绝(Deny):拒绝设定的用户访问指定资源,即使有其他策略授予了该用户访问权限的情况下也会拒绝访问。

指定资源(Resource)

在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 仅在空间策略中起作用;用户策略中不必指定,因为用户策略直接附加到特定用户。下面是指定 Principal 的示例。

1. *表示所有用户。
2. krn:ksc:iam::(accountid):root //标识主账号,acountid是主账户id,root是固定值。
3. krn:ksc:iam::(acountid):user/(userName) //userName表示子账号,其中user是固定值,acountid是归属主账户id。
4. krn:ksc:iam::(acountid):role/(ruleNAME) //ruleNAME表示角色名称,其中role是定值,acountid是归属主账户id。

注意:在实际使用中,为了简化输入,在控制台写入Principal时,对于主账户只需要填入主账户ID即可;对于子用户,写入格式为“acountid/userName”,其中accountid为用户主账号ID,userName为子用户名。后台程序会自动将简化输入转换为标准输入。

权限(Action)

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:ListBucketsks3:ListBucketks3:GetObjectks3:GetBucketLocationks3:ListBucketMultipartUploadsks3:ListMultipartUploadPartsks3:GetBucketAclks3:GetObjectAclks3:PutObjectks3:DeleteObjectks3:PutObjectTagging
  • 如果子账号仅使用API访问,则无需为子账号配置以上最小权限,只需要配置相应操作对应的权限即可。

用户不同的操作需要拥有不同的权限,有关用户操作以及对应需要的权限说明如下所示:

Bucket级别

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 列出所有正在进行的分块上传任务,控制台读权限必须配置该策略

Object级别

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 块)中,可以指定策略生效的条件,Condition元素是可选的。如果在策略中指定了条件,那么用户的请求必须满足条件,策略才可以生效。

KS3支持的Condition如下:

Condition 功能
ksc:SourceIp 指定IP地址
ksc:RequestHeader 指定请求中带有的请求头
ksc:SubnetID 指定请求来自SubnetID对应的VPC子网

IP地址(ksc:SourceIp)支持的条件运算符如下:

条件运算符 value取值范围 说明
IpAddress 严格的IP地址格式和CIDR格式,只支持IPV4 客户请求的源IP地址等于某个IP地址或IP地址段,策略生效。多个IP地址间用半角逗号(,)分隔
NotIpAddress 严格的IP地址格式和CIDR格式,只支持IPV4 客户请求的源IP地址不等于某个IP地址或IP地址段,策略生效。多个IP地址间用半角逗号(,)分隔

请求头(ksc:RequestHeader)支持的条件运算符如下:

条件运算符 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值不模糊匹配(不区分大小写),策略生效

VPC子网ID(ksc:SubnetID)支持的条件运算符如下:

条件运算符 value取值范围 说明
StringEquals 严格的AccountID格式和SubnetID格式 客户的请求来自value中指定的SubnetID对应的VPC子网,策略生效
StringNotEquals 严格的AccountID格式和SubnetID格式 客户的请求不是来自value中指定的VPC子网,策略生效

操作方式

支持控制台和API两种操作方式:

操作方式 参考文档
控制台 空间策略
API
  • Put Bucket Policy
  • Get Bucket Policy
  • Delete Bucket Policy
  • SDK
  • Python
  • Android
  • 文档导读
    纯净模式常规模式

    纯净模式

    点击可全屏预览文档内容
    文档反馈