全部產品
Search
文件中心

Object Storage Service:阻止公用訪問

更新時間:Aug 15, 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. 開啟阻止公用訪問,按照頁面指引完成操作。

OSS 全域阻止公用訪問預設為關閉(BlockPublicAccess=false),即預設允許公用訪問。可以調用 GetPublicAccessBlock 介面查詢目前狀態,調用 PutPublicAccessBlock 介面或通過上述控制台開關開啟。

如果通過雲治理中心的 EnrollAccount 介面建立了資源帳號(ResourceAccount)類型的成員帳號,該成員帳號無法直接登入 OSS 控制台(控制台的登入、切換身份按鈕均為置灰狀態)。需要先為該成員帳號建立 RAM 角色,再通過 STS AssumeRole 切換身份擷取臨時訪問憑證,調用 PutPublicAccessBlock 介面為該帳號配置 OSS 全域阻止公用訪問。

雲治理中心的帳號基準不包含 OSS 阻止公用訪問配置項,因此無法通過帳號基準統一配置該功能,需按上述方式逐個成員帳號單獨配置。

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: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存取點開啟阻止公用訪問

變更影響與遷移指引

將 Bucket ACL 從公用讀取(public-read)改為私人(private)並開啟阻止公用訪問後,已有的匿名存取權限會被忽略,依賴匿名 URL 訪問 Object 的業務將中斷,請求返回403 Forbidden

AccessDenied
You have no right to access this object because of bucket acl.

替代匿名訪問的方案對比如下:

  • 簽名 URL:適用於臨時授權情境,需在產生時指定有效期間,有效期間內持有簽名 URL 的任何人均可訪問。

  • Bucket Policy:適用於長期授權特定來源、IP 或 Referer 的情境,可精細控制允許訪問的主體,無需為每次訪問單獨產生連結。

遷移建議:先在測試 Bucket 中驗證簽名 URL 或 Bucket Policy 可正常訪問,再選擇業務非高峰期變更 Bucket ACL 並開啟阻止公用訪問,確認業務無影響後,在生產環境執行相同操作。

常見問題

建立 Bucket Policy 時提示“已開啟阻止公用訪問”如何處理?

Bucket 開啟阻止公用訪問後,建立含公用訪問語義(如 Principal 設為*)的 Bucket Policy 會被拒絕,返回 403 錯誤,錯誤訊息為 Put public bucket policy is not allowed

如需建立含公用訪問語義的 Bucket Policy,先關閉阻止公用訪問,關閉後可正常建立。

如何關閉阻止公用訪問?

以 Bucket 層級為例,操作步驟如下:

  1. 前往Bucket 列表,單擊目標 Bucket 名稱。

  2. 在左側導覽列,選擇許可權控制 > 阻止公用訪問

  3. 關閉阻止公用訪問開關。

  4. 在彈出的“確定關閉阻止公用訪問?”對話方塊中,輸入“我確認關閉阻止公用訪問”,然後單擊確定

關閉後,已有的公用存取權限恢複生效:Bucket ACL 為公用讀取的 Bucket,匿名使用者可重新訪問 Object。

關閉阻止公用訪問後會有安全風險嗎?

關閉後,之前被忽略的 Bucket ACL 和 Bucket Policy 許可權立即恢複生效。關閉前請確認:

  • Bucket ACL 設定為私人(private)

  • Object ACL 設定為私人(private)

  • Bucket Policy 中不含意外的公用訪問授權

相關文檔

阻止公用訪問用於管控OSS全域、Bucket、存取點及對象FC存取點的許可權。

  • 如果需要細粒度地管控Bucket內的部分資源或單個Object的許可權,請結合使用Bucket PolicyObject ACL

  • 在多帳號情境下,如需強制統一開啟阻止公用訪問功能,請使用Control Policy進行集中管控。

監控警示配置

阻止公用訪問狀態變更屬於管控類操作,不會記錄在即時訪問日誌中,需要通過Action Trail事件跟蹤或 API 輪詢兩種方式監控狀態變更並配置警示。

Action Trail事件跟蹤(推薦)

  1. Action Trail控制台建立跟蹤,事件類型選擇管控事件,投遞到Log Service SLS

  2. 事件警示頁面建立警示規則,事件名稱設定為PutBucketPublicAccessBlockDeleteBucketPublicAccessBlock

  3. 阻止公用訪問狀態被修改時,將觸發警示通知。

API 輪詢

調用GetPublicAccessBlock介面擷取 OSS 全域阻止公用訪問配置狀態,將結果上報至CloudMonitor自訂指標,並配置閾值警示規則。