全部產品
Search
文件中心

Object Storage Service:阻止公用訪問

更新時間:Jan 28, 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