禁止公開存取

設定方式

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

總覽

禁止公開存取功能可防止 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 組織政策限制決定:

    • 如果值區所在專案的 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、物件和代管資料夾:

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

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

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

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

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

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

後續步驟