設定容器和 Blob 的匿名讀取存取

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

警告

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

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

關於匿名讀取存取

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

  1. 儲存體帳戶的匿名存取設定。 Azure Resource Manager 儲存體帳戶提供一個設定,允許或不允許帳戶的匿名存取。 Microsoft 建議不允許儲存體帳戶的匿名存取,以獲得最佳安全性。

    在帳戶層級允許匿名存取時,除非用戶採取其他步驟來明確設定容器的匿名存取設定,否則 Blob 資料不適用於匿名讀取存取。

  2. 設定容器的匿名存取設定。 根據預設,容器的匿名存取是停用的,這表示每個對容器或其資料的要求都需要授權。 只在允許儲存體帳戶進行匿名存取時,具有適當權限的使用者才可以修改容器的匿名存取設定以啟用匿名存取。

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

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

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

允許或不允許儲存體帳戶的匿名讀取存取

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

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

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

重要

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

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

不允許匿名存取的權限

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

角色指派的範圍必須設定為儲存體帳戶或更高的層級,以允許使用者禁止儲存體帳戶的匿名存取。 如需角色範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍

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

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

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

注意

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

設定儲存體帳戶的 AllowBlobPublicAccess 屬性

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

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

  1. 瀏覽至您的儲存體帳戶。

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

  3. 將 [允許 Blob 匿名存取] 設定為 [已啟用] 或 [已停用]

    Screenshot showing how to allow or disallow anonymous access for account

注意

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

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

當容器設定為匿名存取時,讀取該容器中 Blob 的要求不需要獲得授權。 不過,針對儲存體帳戶設定的任何防火牆規則仍有效,而且會使用設定的 ACL 封鎖流量內嵌。

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

本節中的範例示範如何藉由讀取儲存體帳戶的 AllowBlobPublicAccess 屬性,以判斷目前允許還是不允許匿名存取。 若要了解如何驗證帳戶的匿名存取設定是否已設定為防止匿名存取,請參閱補救儲存體帳戶的匿名存取

設定容器的匿名存取層級

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

警告

Microsoft 建議反對允許匿名存取儲存體帳戶中的 Blob 資料。

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

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

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

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

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

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

  3. 選取要設定匿名存取層級的容器。

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

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

    Screenshot showing how to set anonymous access level in the portal.

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

Screenshot showing that setting a container's anonymous access level is blocked when anonymous access disallowed for the account

檢查一組容器的匿名存取設定

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

下列範例會使用 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 儲存體功能支援,以評估此功能的支援。

下一步