設定對容器和 Blob 的匿名公用讀取存取 (部分機器翻譯)

Azure 儲存體支援對容器和 Blob 的選擇性匿名公用讀取存取。 根據預設,對您的資料進行匿名存取是永遠不允許的。 除非您明確啟用匿名存取,否則對容器及其 Blob 的所有要求都必須獲得授權。 當您將容器的公用存取層級設定為允許匿名存取時,用戶端不經授權要求即可讀取該容器中的資料。

警告

當容器設定為公用存取時,任何用戶端都可以讀取該容器中的資料。 公用存取會產生潛在的安全性風險,因此如果您的案例不需要,建議您禁止儲存體帳戶使用。

本文說明如何設定容器及其 Blob 的匿名公用讀取存取權限。 如需如何補救匿名存取以獲得最佳安全性的詳細資訊,請參閱下列其中一篇文章:

關於匿名公用讀取存取權限

根據預設,公用存取您的資料是一律禁止的。 有兩項不同的設定會影響公用存取:

  1. 允許儲存體帳戶的公用存取。 根據預設,Azure Resource Manager儲存體帳戶可讓使用者具有適當的許可權來啟用容器的公用存取權。 除非使用者採取額外步驟來明確設定容器的公用存取設定,否則 Blob 資料不可供公用存取。
  2. 設定容器的公用存取設定。 根據預設,容器的公用存取是停用的,這表示每個對容器或其資料的要求都需要授權。 只在允許儲存體帳戶進行匿名存取時,具有適當權限的使用者才可以修改容器的公用存取設定以啟用匿名存取。

下表摘要說明這兩項設定如何共同影響容器的公用存取。

容器的公用存取層級設定為私用 (預設設定) 容器的公用存取層級設定為容器 容器的公用存取層級設定為 Blob
儲存體帳戶不允許公用存取 沒有對儲存體帳戶中任何容器的公用存取權。 沒有對儲存體帳戶中任何容器的公用存取權。 儲存體帳戶設定會覆寫容器設定。 沒有對儲存體帳戶中任何容器的公用存取權。 儲存體帳戶設定會覆寫容器設定。
允許儲存體帳戶的公用存取 (預設設定) 沒有對此容器的公用存取權 (預設設定)。 允許對此容器及其 Blob 的公用存取。 允許公用存取此容器中的 Blob,但無法存取容器本身。

當匿名公用存取獲允許用於儲存體帳戶且針對特定容器進行設定,則讀取該容器中 Blob 的要求會以無 Authorization 標頭的方式傳遞,服務會接受要求,在回應中傳回 Blob 的資料。

允許或不允許儲存體帳戶的公用讀取存取權限

根據預設,儲存體帳戶設定為允許具有適當權限的使用者啟用容器的公用存取。 允許公開存取時,具有適當權限的使用者可以修改容器的公用存取設定,以啟用對該容器中資料的匿名公用存取權。 除非使用者採取額外步驟來明確設定容器的公用存取設定,否則 Blob 資料絕不可供公用存取。

請記住,容器的公用存取一律預設為關閉,若要允許匿名要求就必須進行明確設定。 無論儲存體帳戶上的設定為何,除非具有適當權限的使用者採用此額外步驟來啟用容器的公用存取,否則您的資料永遠不會提供公開存取。

不允許儲存體帳戶的公用存取會覆寫該儲存體帳戶中所有容器的公用存取設定,以防止匿名存取該帳戶中的 Blob 資料。 當帳戶不允許公用存取時,無法設定容器的公用存取設定以允許匿名存取,而該帳戶的任何未來匿名要求都會失敗。 變更此設定之前,請務必了解這可能會對匿名存取您儲存體帳戶中資料的用戶端應用程式造成什麼影響。 如需詳細資訊,請參閱防止對容器和 Blob 的匿名公用讀取存取

重要

不允許儲存體帳戶進行匿名公用存取之後,使用匿名持有人挑戰的用戶端會發現 Azure 儲存體會傳回 403 錯誤 (禁止) ,而不是在未經授權) (401 錯誤。 我們建議您將所有容器設為私人,以減輕此問題。 如需修改容器之公用存取設定的詳細資訊,請參閱 設定容器的公用存取層級

允許或不允許 Blob 公用存取需要 Azure 儲存體資源提供者的 2019-04-01 版或更新版本。 如需詳細資訊,請參閱 Azure 儲存體資源提供者 REST API

不允許公用存取的許可權

若要設定儲存體帳戶的 AllowBlobPublicAccess 屬性,使用者必須具有建立及管理儲存體帳戶的權限。 Azure 角色型存取控制 (Azure RBAC) 提供這些許可權的角色包括Microsoft。Storage/storageAccounts/write動作。 具有此動作的內建角色包括:

角色指派的範圍必須限定為儲存體帳戶的層級或更高層級,才能允許使用者不允許儲存體帳戶的公用存取。 如需角色範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍

請小心,只將這些角色指派給需要建立儲存體帳戶或更新其屬性的系統管理使用者。 使用最低權限原則,以確保使用者具有完成其工作所需的最低權限。 如需使用 Azure RBAC 管理存取權的詳細資訊,請參閱 Azure RBAC 的最佳做法

這些角色無法透過 Azure Active Directory (Azure AD),提供儲存體帳戶中資料的存取權。 不過,這些角色包含 Microsoft.Storage/storageAccounts/listkeys/action,可授與帳戶存取金鑰的存取權。 使用此權限時,使用者可以使用帳戶存取金鑰來存取儲存體帳戶中的所有資料。

Microsoft。Storage/storageAccounts/listkeys/action本身會透過帳戶金鑰授與資料存取權,但不會授與使用者變更儲存體帳戶的 AllowBlobPublicAccess屬性的能力。 對於需要存取儲存體帳戶中資料但不應變更儲存體帳戶設定的使用者,請考慮指派儲存體 Blob 資料參與者、儲存體 Blob 資料讀取 讀取器和資料存取等角色。

注意

傳統訂用帳戶管理員角色「服務管理員」和「共同管理員」含有 Azure Resource Manager 擁有者角色的相等權限。 擁有者角色包含所有動作,因此具有其中一個系統管理角色的使用者也可以建立儲存體帳戶和管理帳戶設定。 如需詳細資訊,請參閱傳統訂用帳戶管理員角色、Azure 角色和 Azure AD 管理員角色

設定儲存體帳戶的 AllowBlobPublicAccess 屬性

若要允許或不允許儲存體帳戶的公用存取,請設定帳戶的 AllowBlobPublicAccess 屬性。 此屬性適用於使用 Azure Resource Manager 部署模型建立的所有儲存體帳戶。 如需詳細資訊,請參閱儲存體帳戶概觀

預設不會針對儲存體帳戶設定 AllowBlobPublicAccess 屬性,而且在您明確設定此屬性之前,不會傳回任何值。 當屬性值為 nulltrue 時,儲存體帳戶允許公用存取。

若要允許或不允許 Azure 入口網站中儲存體帳戶的公用存取,請遵循下列步驟:

  1. 在 Azure 入口網站中巡覽至您的儲存體帳戶。

  2. 尋找設定底下的組態設定。

  3. Blob 公用存取設定為已啟用已停用

    此螢幕擷取畫面顯示如何允許或禁止帳戶的 Blob 公用存取

注意

不允許儲存體帳戶的公用存取不會影響該儲存體帳戶中裝載的任何靜態網站。 $web容器一律可以公開存取。

在您更新儲存體帳戶的公開存取設定之後,最多可能需要 30 秒的時間,變更才會完全傳播。

當容器設定為匿名公用存取時,讀取該容器中 Blob 的要求不需要獲得授權。 不過,針對儲存體帳戶設定的任何防火牆規則都會保持作用中,並且會封鎖內嵌于已設定 ACL 的流量。

允許或不允許 Blob 公用存取需要 Azure 儲存體資源提供者的 2019-04-01 版或更新版本。 如需詳細資訊,請參閱 Azure 儲存體資源提供者 REST API

本節中的範例示範如何藉由讀取儲存體帳戶的 AllowBlobPublicAccess 屬性以判斷目前允許或不允許公用存取。 若要深入瞭解如何確認帳戶的公用存取設定已設定為防止 匿名存取,請參閱補救儲存體帳戶的匿名公用存取

設定容器的公用存取層級

若要為匿名使用者提供容器及其 Blob 的讀取存取權,請先允許儲存體帳戶的公用存取,然後設定容器的公用存取層級。 如果存取儲存體帳戶的公用存取遭到拒絕,您將無法設定容器的公用存取。

當儲存體帳戶的公用存取受到允許時,您可以為容器設定下列權限:

  • 無公用讀取權限︰只能以授權的要求來存取容器和其 Blob。 此選項是所有新建容器的預設選項。
  • 僅對 Blob 有公用讀取權限:您可以透過匿名要求讀取容器內的 Blob,但您無法匿名使用容器資料。 匿名用戶端無法列舉容器內的 Blob。
  • 容器及其 Blob 的公用讀取存取權限:匿名要求可以讀取除了容器權限設定和容器中繼資料以外的容器和 Blob 資料。 用戶端可以透過匿名要求列舉容器內的 Blob,但無法列舉儲存體帳戶內的容器。

您無法變更個別 Blob 的公用存取層級。 公用存取層級只會在容器層級上進行設定。 您可以在建立容器時設定容器的公用存取層級,也可以更新現有容器上的設定。

若要更新 Azure 入口網站中一或多個現有容器的公用存取層級,請遵循下列步驟:

  1. 在 Azure 入口網站中巡覽至您的儲存體帳戶概觀。

  2. 在 [資料存放區] 底下的功能表刀鋒視窗上選取 [Blob 容器]。

  3. 選取您要設定公用存取層級的容器。

  4. 使用 [變更存取層級] 按鈕以顯示公用存取設定。

  5. 從 [公用存取層級] 下拉式清單中選取所需的公用存取層級,然後按一下 [確定] 按鈕,將變更套用至選取的容器。

    此螢幕擷取畫面顯示如何在入口網站中設定公用存取層級。

當儲存體帳戶的公用存取不受允許時,無法設定容器的公用存取層級。 如果您嘗試設定容器的公用存取層級,您會看到設定已停用,因為帳戶的公用存取不受允許。

顯示在禁止公用存取時無法設定容器公用存取層級的螢幕擷取畫面

檢查一組容器的公用存取設定

您可以藉由列出容器並檢查公用存取設定,以檢查一或多個儲存體帳戶中哪些容器已設定為公開存取。 當儲存體帳戶未包含大量容器,或當您在少量的儲存體帳戶之間檢查設定時,此方法是個可行的選項。 但是,如果您嘗試列舉大量的容器,效能可能會受到影響。

下列範例會使用 PowerShell 來取得儲存體帳戶中所有容器的公用存取設定。 請記得使用您自己的值來取代括弧中的預留位置值:

$rgName = "<resource-group>"
$accountName = "<storage-account>"
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。

如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

下一步