空间策略(Bucket Policy)

最近更新时间:2021-11-10 13:56:38

查看PDF

空间策略作用于所配置的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::(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为子用户名。后台程序会自动将简化输入转换为标准输入。

指定权限

KS3在策略中指定的一组权限。每一个权限,都会映射到特定 KS3 操作。

权限关键字 对应的KS3操作 操作级别
ks3:ListBucket 列举bucket下的文件和查询bucket信息 Bucket 级别
ks3:DeleteBucket 删除当前Bucket Bucket 级别
ks3:GetBucketAcl 获取Bucket的ACL信息 Bucket 级别
ks3:PutBucketAcl 设置Bucket的ACL信息 Bucket 级别
ks3:GetBucketCORS 获取bucket的CORS配置信息 Bucket 级别
ks3:PutBucketCORS 设置Bucket的CORS Bucket 级别
ks3:ListBucketMultipartUploads 列出分段上传 Bucket 级别
ks3:PutObject 上传文件,包含post、PUT和分块上传 Object 级别
ks3:DeleteObject 删除文件 Object 级别
ks3:GetObject GET Object 和 HEAD Object Object 级别
ks3:GetObjectAcl 获取文件的ACL信息 Object 级别
ks3:PutObjectAcl 设置文件的ACL Object 级别
ks3:ListMultipartUploadParts 列出分段 Object 级别
ks3:AbortMultipartUpload 取消分块上传 Object 级别
ks3:PostObjectRestore 解冻归档存储对象 Object 级别
ks3:PutObjectTagging 添加/更新对象的标签 Object 级别
ks3:GetObjectTagging 查询对象的标签 Object 级别
ks3:DeleteObjectTagging 删除对象的标签 Object 级别

注意:
不同级别的操作需要指定与之对等的资源。
1.如您想授权ks3:ListBucket操作则其对应的资源必须为bucket, 例如:krn:ksc:ks3:::bucket01代表名为bucket01的存储空间;
2.如果您想授权ks3:PutObject操作,则需要指定文件资源,例如:krn:ksc:ks3:::bucket01/*,代表bucket01中的所有文件;
3.需要同时授权Bucket与Object级别权限需要同时指定两种对应的资源。

指定条件

访问策略语言支持在授予权限时指定该策略生效的条件。在Condition 元素(或 Condition 块)中,可以指定策略生效的条件。Condition 元素是可选的。

如果在策略中指定了条件,那么用户的请求必须满足条件,策略才可以生效。

KS3支持的Condition如下:

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

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

条件运算符 value取值范围 说明
IpAddress 严格的IP地址格式和CIDR格式,只支持IPV4 客户请求的源IP地址是value中指定的IP地址或范围内的地址,策略生效
NotIpAddress 严格的IP地址格式和CIDR格式,只支持IPV4 客户的请求的源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:*" KS3的请求中带有指定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
  • 文档内容是否对您有帮助?

    根本没帮助
    文档较差
    文档一般
    文档不错
    文档很好

    在文档使用中是否遇到以下问题

    内容不全,不深入
    内容更新不及时
    描述不清晰,比较混乱
    系统或功能太复杂,缺乏足够的引导
    内容冗长

    更多建议

    0/200

    评价建议不能为空

    提交成功!

    非常感谢您的反馈,我们会继续努力做到更好!

    问题反馈