禁止公開存取

設定方式

本頁面將討論禁止公開存取 bucket 設定,以及相關的禁止公開存取組織政策限制。使用這項設定或限制,可限制可獲授權存取資料的實體,例如透過網際網路存取的匿名使用者。如要瞭解存取控管選項,請參閱「存取控管總覽」。

總覽

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

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

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

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

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

強制執行時的行為

受公開存取預防措施限制的資源,會出現下列行為:

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

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

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

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

繼承

即使值區的設定未明確強制執行禁止公開存取,仍可能沿用禁止公開存取設定,如果值區所在的專案、資料夾或機構設定了組織政策限制 storage.publicAccessPrevention,就會發生這種情況。因此,bucket 狀態只能設為 enforced 或 inherited。

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

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

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

    • 如果值區所在專案的 storage.publicAccessPrevention 設為 False,則禁止公開存取功能不適用於該值區。

    • 如果包含 bucket 的專案未設定 storage.publicAccessPrevention,則公開存取預防措施會由包含專案的資料夾 (如有) 設定的 storage.publicAccessPrevention 值決定。

      • 同樣地,如果包含值區的資料夾也未設定 storage.publicAccessPrevention 的任何值,則禁止公開存取功能會根據包含專案的機構所設定的 storage.publicAccessPrevention 值來判斷。

      • 如果未針對任何資源設定 storage.publicAccessPrevention,則禁止公開存取功能不適用於值區。

停用時的行為

當資源不再適用禁止公開存取功能時,會發生下列情況:

  • 現有的 IAM 政策和 ACL 會生效,將存取權授予 allUsers 和 allAuthenticatedUsers,並開放資料給大眾存取。

  • 建立 IAM 政策或 ACL 的要求會成功,允許存取 allUsers 和 allAuthenticatedUsers。

  • 如果物件是在公開存取權預防措施下建立,且沒有公開 ACL,但建立位置是可公開存取的 bucket,則可能開放公開存取。

您隨時可以停用專案、資料夾或組織的公開存取權預防措施。即使您為包含 bucket 的專案、資料夾或機構停用這項設定,設為 enforced 的 bucket 仍會強制禁止公開存取。

注意事項

  • 對現有資源強制禁止公開存取時,系統會封鎖所有現有授權,以及新增的 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 秒,物件可能會在網際網路快取中保留該時間長度。

後續步驟