全部产品
Search
文档中心

对象存储 OSS:阻止公共访问

更新时间:Jan 27, 2026

阻止公共访问是OSS提供的安全防护功能。当需要防止数据被匿名用户访问时,可在OSS全局、Bucket、接入点或对象FC接入点维度开启此功能。开启后,已有的公共访问权限会被忽略,且无法创建新的公共访问权限。

工作原理

阻止公共访问通过多层级访问限制机制保护数据安全。开启后,OSS会忽略Bucket Policy和ACL中的公共访问权限配置,同时阻止创建新的公共访问权限;关闭后,已有权限恢复生效,并允许创建新的公共访问权限。

OSS支持在以下四个维度开启阻止公共访问,当不同维度的设置不一致时,遵循以下优先级:

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

上层开启阻止公共访问后,下层无论如何设置都不允许公共访问:

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

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

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

开启方式

控制台

OSS全局

  1. 前往OSS管理控制台

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

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

Bucket

  1. 前往Bucket列表,单击目标Bucket名称。

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

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

接入点

  1. 前往OSS管理控制台

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

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

对象FC接入点

  1. 前往OSS管理控制台

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

  3. 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不作为判断公共访问的条件。

点击查看非公共访问/公共访问Bucket Policy示例

非公共访问

Principal指定了固定用户UID,视为非公共访问。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject"
      ],
      "Principal": [
        "20214760404935xxxx"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:examplebucket/*"
      ]
    }
  ]
}

公共访问

  • 示例1:Principal为通配符*且无限制条件,视为公共访问。

    {
      "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": "*"
        }
      ]
    }

ACL

  • Bucket ACL或者Object ACL设置为公共读或者公共读写,允许公共访问。

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

配额与限制

  • 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是否开启阻止公共访问,均不影响复制前后的Object ACL。如果目标Bucket开启了阻止公共访问,则复制到目标Bucket中ACL为公共读或者公共读写的Object,仍不允许公共访问。

API说明

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

API

说明

PutPublicAccessBlock

OSS全局开启阻止公共访问

PutBucketPublicAccessBlock

Bucket开启阻止公共访问

PutAccessPointPublicAccessBlock

接入点开启阻止公共访问

PutAccessPointConfigForObjectProcess

对象FC接入点开启阻止公共访问

相关文档

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