阻止公共访问是OSS提供的安全防护功能。当需要防止数据被匿名用户访问时,可在OSS全局、Bucket、接入点或对象FC接入点维度开启此功能。开启后,已有的公共访问权限会被忽略,且无法创建新的公共访问权限。
工作原理
阻止公共访问通过多层级访问限制机制保护数据安全。开启后,OSS会忽略Bucket Policy和ACL中的公共访问权限配置,同时阻止创建新的公共访问权限;关闭后,已有权限恢复生效,并允许创建新的公共访问权限。
OSS支持在以下四个维度开启阻止公共访问,当不同维度的设置不一致时,遵循以下优先级:
OSS全局 > 单个Bucket > 单个接入点 > 单个对象FC接入点上层开启阻止公共访问后,下层无论如何设置都不允许公共访问:
如果希望单个Bucket允许公共访问,需关闭OSS全局和该Bucket的阻止公共访问。
如果希望单个接入点允许公共访问,需关闭OSS全局、接入点关联的Bucket和该接入点的阻止公共访问。
如果希望单个对象FC接入点允许公共访问,需关闭OSS全局、对象FC接入点关联的接入点、接入点关联的Bucket和该对象FC接入点的阻止公共访问。
开启方式
控制台
OSS全局
前往OSS管理控制台。
在左侧导航栏,选择。
开启阻止公共访问,按照页面指引完成操作。
Bucket
前往Bucket列表,单击目标Bucket名称。
在左侧导航栏,选择。
开启阻止公共访问,按照页面指引完成操作。
接入点
前往OSS管理控制台。
在左侧导航栏,单击接入点列表,然后单击目标接入点。
在接入点基础信息区域,开启阻止公共访问,按照页面指引完成操作。
对象FC接入点
前往OSS管理控制台。
在左侧导航栏,单击对象 FC 接入点列表,然后单击目标对象FC接入点。
在FC 接入点基础信息区域,开启阻止公共访问,按照页面指引完成操作。
命令行工具ossutil
可以使用命令行工具ossutil 2.0开启阻止公共访问。
OSS全局
put-public-access-block命令用于开启OSS全局阻止公共访问。
ossutil api put-public-access-block --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"Bucket
put-bucket-public-access-block命令用于开启Bucket的阻止公共访问。
ossutil api put-bucket-public-access-block --bucket example-bucket --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"接入点
put-access-point-public-access-block命令用于开启接入点的阻止公共访问。
ossutil api put-access-point-public-access-block --bucket example-bucket --access-point-name example-ap --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"判断是否包含公共访问语义
需要结合Bucket Policy和ACL(包括Bucket ACL和Object ACL)判断OSS资源是否包含公共访问的语义。如果存在任意一种包含公共访问的语义,资源可能存在安全风险,建议开启阻止公共访问功能。
Bucket Policy
(推荐)调用API接口判断
可以调用GetBucketPolicyStatus接口判断当前Bucket Policy是否包含公共访问的语义。
如果
IsPublic返回字段取值为true,表示当前Bucket Policy包含公共访问的语义。如果
IsPublic返回字段取值为false,表示当前Bucket Policy不包含公共访问的语义或者没有设置Bucket Policy。
自行判断
Bucket Policy中每条Statement的判定规则:满足以下任一条件即视为非公共访问,否则为公共访问。
Effect为Deny
Principal指定固定值(不含通配符
*)Condition包含以下任一限制条件:
Condition字段
取值要求
acs:SourceVpcId
指定固定值(不含通配符
*)acs:SourceVpc
指定固定值(不含通配符
*)acs:AccessId
指定固定值(不含通配符
*)acs:SourceVpcIp
IPv4掩码≥8,IPv6掩码≥32
acs:SourceIp
IPv4掩码≥8,IPv6掩码≥32
说明Action和Resource不作为判断公共访问的条件。
ACL
Bucket ACL或者Object ACL设置为公共读或者公共读写,允许公共访问。
Bucket ACL和Object ACL同时设置为私有,不允许公共访问。
配额与限制
RAM用户设置阻止公共访问需要以下权限:
阻止公共访问维度
所需权限
OSS全局
oss:PutPublicAccessBlock、oss:GetPublicAccessBlock、oss:DeletePublicAccessBlockBucket
oss:PutBucketPublicAccessBlock、oss:GetBucketPublicAccessBlock、oss:DeleteBucketPublicAccessBlock接入点
oss:PutAccessPointPublicAccessBlock、oss:GetAccessPointPublicAccessBlock、oss:DeleteAccessPointPublicAccessBlock对象FC接入点
oss:PutAccessPointConfigForObjectProcess、oss:GetAccessPointConfigForObjectProcess、oss:DeleteAccessPointForObjectProcess如果在Bucket Policy中设置了允许任何人操作接入点的管控API,即使该接入点开启了阻止公共访问,用户仍然可以通过Bucket三级域名修改该接入点的阻止公共访问,原因是通过Bucket三级域名访问的请求不受接入点的配置影响。
对于跨区域或者同区域复制,无论源Bucket和目标Bucket是否开启阻止公共访问,均不影响复制前后的Object ACL。如果目标Bucket开启了阻止公共访问,则复制到目标Bucket中ACL为公共读或者公共读写的Object,仍不允许公共访问。
API说明
如果程序自定义要求较高,可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。
API | 说明 |
OSS全局开启阻止公共访问 | |
Bucket开启阻止公共访问 | |
接入点开启阻止公共访问 | |
对象FC接入点开启阻止公共访问 |
相关文档
阻止公共访问用于集中管控OSS全局、Bucket、接入点及对象FC接入点的权限。如果需要细粒度地管控Bucket内的部分资源或单个Object的权限,请结合使用Bucket Policy和Object ACL。