阻止公共访问

更新时间:2025-02-07 06:28:38

OSS支持通过设置Bucket PolicyACL来实现公共访问。公共访问无需特定权限或身份验证,容易引发数据泄露和外网下行流量的风险。OSS支持在OSS全局、单个Bucket、单个接入点和单个对象FC接入点的维度一键开启阻止公共访问,以避免公共访问可能带来的风险。开启后,已有的公共访问权限会被忽略,且不允许创建新的公共访问权限,从而确保数据安全。

判断是否包含公共访问语义

您需要结合Bucket PolicyACL(包括Bucket ACLObject ACL)判断OSS资源是否包含公共访问的语义。如果任意一种包含公共访问的语义,您的资源可能存在安全风险,建议开启阻止公共访问功能。

Bucket Policy
ACL
(推荐)调用API接口判断
自行判断

您可以调用GetBucketPolicyStatus接口判断当前Bucket Policy是否包含公共访问的语义。

  • 如果IsPublic返回字段取值为true,表示当前Bucket Policy包含公共访问的语义。

  • 如果IsPublic返回字段取值为false,表示当前Bucket Policy不包含公共访问的语义或者没有设置Bucket Policy。

更多信息,请参见GetBucketPolicyStatus

非公共访问判断条件和示例
公共访问判断条件和示例
  • Bucket Policy满足以下条件时,视为非公共访问。

    说明
    • ActionResource不作为判断是否为公共访问的条件。

    • 如果Bucket Policy中的EffectDeny,则被视为非公共访问。

    元素

    字段

    取值

    Principal

    不适用

    针对一项或多项指定一个或多个固定值,即取值不包含通配符星号(*)

    Condition

    acs:SourceVpcId

    acs:SourceVpcIp

    acs:SourceVpc

    acs:AccessId

    acs:SourceIp

    • 如果是IPv4地址,掩码大于等于8。

    • 如果是IPv6地址,掩码大于等于32。

  • 非公共访问示例

    {
        "Version":"1",
        "Statement":[
            {
                "Action":[
                    "oss:GetObject",
                    "oss:GetObjectAcl",
                    "oss:GetObjectVersion",
                    "oss:GetObjectVersionAcl"
                ],
                "Effect":"Allow",
                "Principal":[
                    "20214760404935xxxx"
                ],
                "Resource":[
                    "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                    "acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*"
                ]
            },
            {
                "Action":[
                    "oss:ListObjects",
                    "oss:ListObjectVersions"
                ],
                "Condition":{
                    "StringLike":{
                        "oss:Prefix":[
                            "hangzhou/2020/*",
                            "shanghai/2015/*"
                        ]
                    }
                },
                "Effect":"Allow",
                "Principal":[
                    "20214760404935xxxx"
                ],
                "Resource":[
                    "acs:oss:*:174649585760xxxx:examplebucket"
                ]
            }
        ]
    }

不满足非公共访问条件的Bucket Policy视为公共访问。示例如下:

  • 示例1

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:GetObject",
                "Principal": "*",
                "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*"
            }
        ]
    }
  • 示例2

    Policy中同时包含公共访问(允许所有VPC访问)和非公共访问(仅允许指定用户访问)的策略时,最终判断结果仍被视为公共访问。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "oss:GetObject",
                "Principal": "*",
                "Resource": "acs:oss:*:17464958576xxxx:examplebucket/*",
                "Condition": {
                    "StringLike": {
                        "acs:SourceVpc": [
                            "vpc-*"
                            ]
                    }
                }
            },
          	{
                "Effect": "Allow",
                "Action": "oss:*",
                "Principal": "27464958576xxxx",
                "Resource": "*"
            }
        ]
    }
  • Bucket ACL或者Object ACL设置为公共读或者公共读写,允许公共访问。

  • Bucket ACLObject ACL同时设置为私有,不允许公共访问。

不同维度阻止公共访问的优先级说明

OSS支持对OSS全局、单个Bucket、单个接入点和单个对象FC接入点开启阻止公共访问功能。当不同维度的阻止公共访问设置不一致时,OSS将遵循以下优先级来确定最终访问效果。

OSS全局 > 单个Bucket > 单个接入点 > 单个对象FC接入点

根据以上优先级顺序,下一层级是否允许公共访问取决于上一层级的阻止公共访问设置。只要OSS全局开启了阻止公共访问,则单个Bucket、接入点以及对象FC接入点均不允许公共访问。

  • 如果希望单个Bucket允许公共访问,则需关闭OSS全局和该Bucket的阻止公共访问。

  • 如果希望单个接入点允许公共访问,则需关闭OSS全局、接入点关联的Bucket和该接入点的阻止公共访问。

  • 如果希望单个对象FC接入点允许公共访问,则需关闭OSS全局、对象FC接入点关联的接入点、接入点关联的Bucket和该对象FC接入点的阻止公共访问。

注意事项

  • RAM用户需要以下权限来阻止公共访问:

    • OSS全局:oss:PutPublicAccessBlockoss:GetPublicAccessBlockoss:DeletePublicAccessBlock

    • Bucket级别:oss:PutBucketPublicAccessBlockoss:GetBucketPublicAccessBlockoss:DeleteBucketPublicAccessBlock

    • 接入点级别:oss:PutAccessPointPublicAccessBlockoss:GetAccessPointPublicAccessBlockoss:DeleteAccessPointPublicAccessBlock

    • 对象FC接入点级别:oss:PutAccessPointConfigForObjectProcessoss:GetAccessPointConfigForObjectProcessoss:DeleteAccessPointForObjectProcess

  • 开启阻止公共访问时,已有的公共访问权限会被忽略,且无法创建新的公共访问权限。关闭时,已有权限仍生效,并允许创建新的公共访问权限。

  • 如果您在Bucket Policy中设置了允许任何人操作接入点的管控API,即使该接入点开启了阻止公共访问,用户仍然可以通过Bucket三级域名修改该接入点的阻止公共访问,原因是通过Bucket三级域名访问的请求不受接入点的配置影响。

  • 对于跨区域或者同区域复制,无论源Bucket和目标Bucket是否开启阻止公共访问,均不影响复制前后ObjectACL。如果目标Bucket开启了阻止公共访问,则复制到目标BucketACL为公共读或者公共读写的Object,仍不允许公共访问。

操作方式

使用OSS控制台

为OSS全局开启阻止公共访问
为Bucket开启阻止公共访问
为接入点开启阻止公共访问
为对象FC接入点开启阻止公共访问
  1. 登录OSS管理控制台

  2. 在左侧导航栏,选择数据服务 > 阻止公共访问

  3. 阻止公共访问页面,开启阻止公共访问,然后按照页面指引完成开启操作。

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择权限控制 > 阻止公共访问

  4. 阻止公共访问页签,开启阻止公共访问,然后按照页面指引完成开启操作。

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击接入点列表,然后单击目标接入点。

  3. 接入点基础信息区域,开启阻止公共访问,然后按照页面指引完成开启操作。

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击对象 FC 接入点列表,然后单击目标对象FC接入点。

  3. FC 接入点基础信息,开启阻止公共访问,然后按照页面指引完成开启操作。

使用命令行工具ossutil

您可以使用命令行工具ossutil来设置阻止公共访问,ossutil的安装请参见安装ossutil

  • 以下命令用于开启OSS全局阻止公共访问的配置信息。

    ossutil api put-public-access-block --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-public-access-block

  • 以下命令用于开启存储空间examplebucket阻止公共访问的配置信息。

    ossutil api put-bucket-public-access-block --bucket examplebucket --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-bucket-public-access-block

  • 以下命令用于开启OSS全局阻止公共访问的配置信息。

    ossutil api put-access-point-public-access-block --bucket examplebucket --access-point-name ap-01 --public-access-block-configuration "{\"BlockPublicAccess\":\"true\"}"

    关于该命令的更多信息,请参见put-access-point-public-access-block

相关API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。

相关文档

阻止公共访问用于集中管控OSS全局、Bucket、接入点及对象FC接入点的权限。如果您需要细粒度地管控Bucket内的部分资源或单个Object的权限,请结合使用Bucket Policy设置Object ACL

  • 本页导读 (1)
  • 判断是否包含公共访问语义
  • 不同维度阻止公共访问的优先级说明
  • 注意事项
  • 操作方式
  • 使用OSS控制台
  • 使用命令行工具ossutil
  • 相关API
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等