禁止公開存取

設定方式

本頁面說明禁止公開存取值區設定,以及相關的禁止公開存取組織政策限制。使用這項設定或限制,可以限制哪些實體 (例如網際網路上的匿名使用者) 能取得資料存取權。如需存取控管選項總覽,請參閱「存取控管總覽」。

總覽

禁止公開存取功能可防止 Cloud Storage bucket 和物件意外公開。強制執行公開存取防範措施後,任何人都無法透過 IAM 政策或 ACL 公開適用 bucket 中的資料。強制執行公開存取防範措施的方法有兩種:

是否應使用禁止公開存取功能?

如果您確定資料不應在公開網際網路上公開,請使用禁止公開存取功能。為盡可能保護資源,請在組織的最高層級強制執行禁止公開存取功能。

您可以搭配使用禁止公開存取功能和私人 bucket 存取權。禁止公開存取功能可防止資料意外公開,而私人 bucket 存取權則可讓您託管公開可見的內容,但僅允許透過 Cloud Load Balancing 和 Cloud CDN 存取。

如果為了託管靜態網站等用途而將 bucket 設為公開,請勿使用禁止公開存取功能。如要在強制執行禁止公開存取的組織中,為這類 bucket 設定例外狀況,請在包含該 bucket 的特定專案中,停用禁止公開存取功能。

強制執行時的行為

受禁止公開存取功能限制的資源,會出現下列行為:

  • 使用 allUsers 和 allAuthenticatedUsers 授權的值區和物件要求會失敗,並傳回 HTTP 401 或 403 狀態碼。

  • 現有 IAM 政策和 ACL 仍會授予 allUsers 和 allAuthenticatedUsers 存取權,但會遭到禁止公開存取設定覆寫。

  • 如果要求建立的值區或物件,其 IAM 政策或 ACL 含有 allUsers 和 allAuthenticatedUsers,則要求會失敗,但下列情況除外:

    • 如果 bucket 的預設物件 ACL 包含 allUsers,在該 bucket 中建立物件的要求就會成功。這類物件的 ACL 包含 allUsers,但 allUsers 會遭到公開存取預防措施覆寫。
  • 如果要求將 allUsers 和 allAuthenticatedUsers 新增至 IAM 政策或 ACL,會失敗並傳回 412 Precondition Failed。

繼承

即使 bucket 的設定未明確強制執行禁止公開存取,仍可能沿用禁止公開存取,前提是 bucket 所在的專案、資料夾或組織已設定組織政策限制 storage.publicAccessPrevention。因此,bucket 狀態只能設為 enforced 或 inherited。

  • 如果 bucket 的公開存取權防護中繼資料設為 enforced,則該 bucket 會套用公開存取權防護。

  • 如果 bucket 的公開存取預防中繼資料設為 inherited,則公開存取預防功能會由 storage.publicAccessPrevention 組織政策限制決定:

    • 如果包含 bucket 的專案將 storage.publicAccessPrevention 設為 True,則禁止公開存取功能會套用至 bucket。

    • 如果包含 bucket 的專案將 storage.publicAccessPrevention 設為 False,則 bucket 不會套用禁止公開存取功能。

    • 如果包含 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、物件和代管資料夾:

    • Cloud 稽核記錄不會追蹤公開物件的存取活動。如果在強制執行禁止公開存取時啟用資料存取記錄,記錄產生量可能會增加,這會計入記錄擷取配額,並可能產生 Cloud 稽核記錄費用。這項增加可能是因為先前公開且未記錄的存取權,可能與特定授權相關聯,而該授權已記錄。

  • 經簽署的網址可讓使用者在有限時間內存取特定範圍,不受禁止公開存取設定影響。

  • 私人 bucket 存取權可讓您將 bucket 做為後端,僅透過 Cloud Load Balancing 和 Cloud CDN 提供內容,不受禁止公開存取設定影響。請參閱全域外部應用程式負載平衡器的私人 bucket 存取權、傳統版應用程式負載平衡器的私人 bucket 存取權,以及 Cloud CDN 的私人 bucket 存取權。

  • 未與組織建立關聯的專案無法使用組織政策。這類專案中的 bucket 應使用 bucket 層級設定。

  • 公開存取防護機制在更新後讀取時會同步一致,但可能需要 10 分鐘才會生效。

  • 強制執行後,物件可能仍會在一段時間內透過網際網路快取公開存取,具體取決於物件的 Cache-Control 設定。舉例來說,如果物件的 Cache-Control:max-age 設為預設值 3600 秒,則物件可能會在網際網路快取中保留該時間長度。

後續步驟