最近更新时间:2024-05-30 16:31:14
当您是空间的所有者时,可对KS3资源(整个Bucket或指定Object资源)设置访问控制策略。其他用户对KS3资源的访问请求都将受到空间策略的控制,这种访问控制表现为接受或拒绝请求。对访问请求是接受还是拒绝,取决于您在空间策略中的描述。
Policy在做权限判断时,每条Statement(策略)会有以下3种结果:
explicit deny
allow
default deny
Bucket Policy对于Policy中的多条Statement采用以下规则进行判定:Bucket Policy对Policy中包含的每条Statement都要进行Explicit Deny、Allow和Default Deny的判断,最终的判决结果遵循explicit deny>allow>default deny的规则:
Statement的顺序没有影响
如果没有显式的Deny和Allow,则该条Statement请求权限判别为Default Deny
显式的Deny覆盖Allow
Allow覆盖默认的Default Deny
如果多条Statement判断的最后结果是Default Deny,最终资源是否可以访问,还需要看资源的ACL是否公开
1. 登录KS3控制台,点击左侧存储空间,点击相应的空间名,点击空间设置 > 空间策略,点击添加策略。
2. 选择配置此条策略的效果是允许还是禁止:
3. 添加被授权人,最多可以添加10条:
注意不同用户类型对应的账号ID填写格式:
所有用户:用*表示
主账号:accountid
子用户:accountid/userName;accountld表示主账号id, userName表示用户用户名
角色名:accountid/roleName;accountld表示主账号id, roleName表示角色名
4. 选择资源,可以选择整个存储桶或者指定资源:
5. 指定权限:
每一个权限都会映射到特定的KS3操作,具体对应关系可以参考下表:
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的跨域资源共享规则 |
List Multipart Uploads | ks3:ListBucketMultipartUploads | 列出所有正在进行的分块上传任务 |
PUT Bucket Retention | ks3:PutBucketRetention | 开通、关闭及设置Bucket回收站功能 |
GET Bucket Retention | ks3:GetBucketRetention | 获取Bucket回收站配置规则 |
LIST Retention | ks3:ListBucketRetention | 获取Bucket回收站中Object列表 |
PUT Bucket Inventory | ks3:PutBucketInventory | 配置Bucket存储清单规则 |
List Bucket Inventory | ks3:ListBucketInventory | 批量获取Bucket中的所有清单任务 |
GET Bucket Inventory | ks3:GetBucketInventory | 查看某个Bucket中指定的清单任务 |
DELETE Bucket Inventory | ks3:DeleteBucketInventory | 删除Bucket中指定的清单任务 |
POST Bucket Saveas | ks3:PostProcessTask | 图片处理持久化 |
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的标签 |
CLEAR Object | ks3:ClearObject | 删除Bucket回收站中的Object |
Recover Object | ks3:RecoverObject | 恢复Bucket回收站中的Object |
注意:
不同级别的操作需要指定与之对等的资源。
如果您想授予
ks3:ListBucket
权限则其对应的资源必须为bucket, 例如:krn:ksc:ks3:::bucket01
代表名为bucket01的存储空间。如果您想授予
ks3:PutObject
权限,则需要指定文件资源,例如:krn:ksc:ks3:::bucket01/*
,代表bucket01中的所有文件。需要同时授权Bucket与Object级别权限需要同时指定两种对应的资源。
6. 添加条件,目前支持请求者的IP地址(ksc:SourceIp)、请求头(ksc:RequestHeader)和请求者所在VPC的子网ID作为条件:
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子网,策略生效 |
1. 登录KS3控制台,点击左侧存储空间,点击相应的空间名,点击空间设置 > 空间策略,点击策略语言。
2. 在弹出的策略编辑器中编辑Bucket Policy:
下面是一条空间策略示例,此策略允许所有用户在ip为10.1.1.1
的条件下对整个存储桶进行ks3:listbucket
和ks3:getobject
操作。
{
"Statement": [
{
"Condition": {
"IpAddress": {
"ksc:SourceIp": [
"10.1.1.1"
]
}
},
"Resource": [
"krn:ksc:ks3:::examplebucket",
"krn:ksc:ks3:::examplebucket/*"
],
"Principal": {
"KSC": [
"*"
]
},
"Action": [
"ks3:GetObject",
"ks3:ListBucket"
],
"Effect": "Allow"
}
]
}
3. 点击确定即可完成配置。
有关空间策略的更多详细信息,请参见文档:空间策略(Bucket Policy)。
纯净模式