本頁面說明禁止公開存取值區設定,以及相關的禁止公開存取組織政策限制。使用這項設定或限制,可以限制哪些實體 (例如網際網路上的匿名使用者) 能取得資料存取權。如要瞭解存取控管選項,請參閱「存取控管總覽」。
總覽
禁止公開存取功能可防止 Cloud Storage bucket 和物件意外公開。強制執行公開存取權防護機制後,任何人都無法透過 IAM 政策或 ACL 公開適用 bucket 中的資料。強制執行公開存取防範措施的方法有兩種:
您可以對個別 bucket 強制執行禁止公開存取功能。
如果 bucket 位於組織內,您可以在專案、資料夾或組織層級,使用組織政策限制
storage.publicAccessPrevention,強制執行禁止公開存取功能。
是否應使用禁止公開存取功能?
如果您確定資料不應公開至網際網路,請使用禁止公開存取功能。為盡可能保護資源,請在組織的最高層級強制執行公開存取防範措施。
您可以搭配使用禁止公開存取功能和私人 bucket 存取權。禁止公開存取功能可防止資料意外公開,而私人 bucket 存取權則可讓您託管公開內容,但僅允許透過 Cloud Load Balancing 和 Cloud CDN 存取。
如果您為了託管靜態網站等用途而將 bucket 設為公開,就不應使用禁止公開存取功能。如要在強制執行禁止公開存取的組織中,為這類 bucket 設定例外狀況,請在包含該 bucket 的特定專案中停用禁止公開存取功能。
強制執行時的行為
受公開存取預防措施限制的資源,會出現下列行為:
使用
allUsers和allAuthenticatedUsers授權的值區和物件要求會失敗,並傳回 HTTP401或403狀態碼。現有 IAM 政策和 ACL 仍會將存取權授予
allUsers和allAuthenticatedUsers,但會遭到公開存取防護機制覆寫。如果要求建立的值區或物件,其 IAM 政策或 ACL 含有
allUsers和allAuthenticatedUsers,則要求會失敗,但下列情況除外:- 如果 bucket 的預設物件 ACL 包含
allUsers,在該 bucket 中建立物件的要求就會成功。這類物件的 ACL 包含allUsers,但allUsers會遭到公開存取預防措施覆寫。
- 如果 bucket 的預設物件 ACL 包含
如果要求將
allUsers和allAuthenticatedUsers新增至 IAM 政策或 ACL,會失敗並傳回412 Precondition Failed。
繼承
即使 bucket 的設定未明確強制執行禁止公開存取,仍可能沿用禁止公開存取,前提是 bucket 所在的專案、資料夾或組織已設定組織政策限制 storage.publicAccessPrevention。因此,bucket 狀態只能設為 enforced 或 inherited。
如果 bucket 的公開存取防護中繼資料設為
enforced,則該 bucket 會套用公開存取防護。如果 bucket 的公開存取權防護中繼資料設為
inherited,則公開存取權防護由storage.publicAccessPrevention組織政策限制決定:如果值區所在專案的
storage.publicAccessPrevention設為True,則該值區會套用禁止公開存取功能。如果值區所在專案的
storage.publicAccessPrevention設為False,則禁止公開存取功能不適用於該值區。如果包含 bucket 的專案未設定
storage.publicAccessPrevention,則公開存取預防措施會由包含專案的資料夾 (如有) 設定的storage.publicAccessPrevention值決定。同樣地,如果值區所在的資料夾也未設定
storage.publicAccessPrevention的任何值,則公開存取預防措施會由包含專案的組織所設定的storage.publicAccessPrevention值決定。如果未針對任何資源設定
storage.publicAccessPrevention,則禁止公開存取功能不適用於值區。
停用時的行為
當資源不再適用禁止公開存取功能時,會發生下列情況:
現有的 IAM 政策和 ACL 會生效,將存取權授予
allUsers和allAuthenticatedUsers,並開放資料給大眾存取。要求建立 IAM 政策或 ACL,允許存取
allUsers和allAuthenticatedUsers,並成功執行。如果物件是在公開存取權預防措施下建立,且沒有公開 ACL,但建立位置是可公開存取的 bucket,則可能開放公開存取。
您隨時可以停用專案、資料夾或組織的公開存取權預防措施。即使您為包含值區的專案、資料夾或組織停用 enforced 設定,值區仍會強制執行禁止公開存取。
注意事項
對現有資源強制執行公開存取權防護措施時,系統會封鎖所有現有授權,以及新加入的
allUsers和allAuthenticatedUsers。這可能會對 bucket 造成下列影響:如果應用程式需要
allUsers和allAuthenticatedUsers才能存取資料或建立公開資源,啟用禁止公開存取功能可能會導致應用程式中斷。如要瞭解如何找出其他應用程式可能依賴的公開資源,請展開下列內容:如何辨識公開資源
強制禁止公開存取前,建議您先盤點公開資源,確保不會中斷其他依賴公開資料的工作負載。您可以使用下列方法,找出公開的 bucket、物件和代管資料夾:
- 如要找出可能存取公開資料的工作負載,請設定使用記錄,這類記錄可提供公開資源資料存取要求的相關資訊。
-
如要判斷 bucket 是否可供大眾存取,請檢查 bucket 的 IAM 政策。如果政策將角色授予主體
allUsers或allAuthenticatedUsers,可能導致值區開放給大眾存取。除了取得個別 bucket 的 IAM 政策,您也可以使用 Cloud Asset Inventory 查看專案、資料夾或組織中所有 bucket 的政策。如果 bucket 中有代管資料夾,建議您一併檢查代管資料夾的 IAM 政策,找出哪些代管資料夾可能可供公開存取。
- 如要判斷個別物件是否可供公開存取,請檢查物件的 ACL。如果 ACL 將存取權授予主體
allUsers或allAuthenticatedUsers,物件可能就會開放給大眾存取。
Cloud 稽核記錄不會追蹤公開物件的存取活動。如果在強制執行禁止公開存取時啟用資料存取記錄,記錄產生量可能會增加,這會計入記錄擷取配額,並可能產生 Cloud 稽核記錄 費用。之所以會增加,是因為先前公開且未記錄的存取權,可能會與特定授權建立關聯,而這些授權會記錄下來。
經簽署的網址可讓使用者在有限時間內存取特定範圍,不受禁止公開存取功能影響。
私人 bucket 存取權可讓您將 bucket 做為後端,僅透過 Cloud Load Balancing 和 Cloud CDN 提供內容,不受禁止公開存取設定影響。請參閱全域外部應用程式負載平衡器的私人 bucket 存取權、傳統版應用程式負載平衡器的私人 bucket 存取權,以及 Cloud CDN 的私人 bucket 存取權。
未與組織建立關聯的專案無法使用組織政策。這類專案中的 bucket 應使用 bucket 層級設定。
公開存取防護機制在更新後讀取時會同步一致,但可能需要 10 分鐘才會生效。
強制執行後,物件可能仍會在一段時間內透過網際網路快取公開存取,具體取決於物件的
Cache-Control設定。舉例來說,如果物件的Cache-Control:max-age設為預設值 3600 秒,物件可能會在網際網路快取中保留該時間長度。
後續步驟
- 瞭解如何使用禁止公開存取功能。
- 進一步瞭解組織政策。