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