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

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

警告

當容器設定為匿名存取時,任何用戶端都可以讀取該容器中的資料。 匿名存取可能帶來安全風險,如果你的情況不需要匿名存取,請針對儲存帳號進行匿名存取的修復。

本文說明如何設定容器及其 Blob 的匿名讀取存取。 如需了解如何補救匿名存取以獲得最佳安全性,請參閱「補救 Blob 資料的匿名讀取存取」。

關於匿名讀取權限

預設情況下,對您資料的匿名存取一律禁止。 有兩個設定會影響匿名存取:

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

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

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

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

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

當儲存體帳戶允許匿名存取並設定為特定容器時,服務會接受該容器中無Authorization標題的 blob 讀取請求,並在回覆中回傳該 blob 的資料。 但是,如果請求具有Authorization標題,則服務會忽略對儲存體帳戶的匿名存取,並根據提供的憑證授權請求。

允許或禁止對儲存體帳戶的匿名讀取存取

當你允許儲存帳號匿名存取時,擁有適當權限的使用者可以修改容器的匿名存取設定,讓該容器中的資料能匿名存取。 除非使用者主動明確設定容器的匿名存取設定,否則 blob 資料永遠不會被匿名存取。

匿名存取容器預設是關閉的,且必須明確設定允許匿名請求。 無論儲存帳號的設定如何,除非有適當權限的使用者額外啟用匿名存取,否則你的資料永遠不會被匿名存取。

停用該儲存體帳戶的匿名存取,會覆寫該儲存體帳戶中所有容器的存取設定,進而防止匿名存取該帳戶中的 Blob 資料。 當你禁止該帳號的匿名存取時,你就無法設定容器的存取設定來允許匿名存取,未來對該帳號的任何匿名請求都會失敗。 在更改此設定前,請確保你了解可能匿名存取你儲存帳號資料的客戶應用程式所受到的影響。 如需詳細資訊,請參閱防止對容器和 Blob 的匿名讀取存取。

重要

當你禁止某個儲存帳號的匿名存取後,使用匿名承載挑戰的客戶會發現 Azure 儲存體 回傳的錯誤是 403 錯誤(禁止),而不是 401 錯誤(未授權)。 把所有容器設為私人,以減少這個問題。 如需修改容器匿名存取設定的詳細資訊,請參閱設定容器的存取層級。

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

不允許匿名存取的權限

要為儲存帳號設定 AllowBlobPublicAccess 屬性,你需要建立和管理儲存帳號的權限。 提供這些權限的 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. 請進入 Azure portal 的 storage 帳號。

  2. 在設定裡找到設定設定。

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

    以下是如何允許或禁止匿名存取儲存帳號的截圖。

注意

不允許儲存帳號匿名存取不會影響該儲存帳號中託管的靜態網站。 $web容器一律可以公開存取。

更新儲存帳號的匿名存取設定後,變更可能要花最多 30 秒才會完全傳入。

當容器設定為匿名存取時,要求讀取該容器中的 Blob 不需要獲得授權。 不過,你為儲存帳號設定的任何防火牆規則仍然有效,並且會阻擋與已設定 ACL 內的流量。

以下範例說明如何讀取儲存帳號的 AllowBlobPublicAccess 屬性,以判斷目前是否允許或禁止匿名存取。 若要了解如何驗證帳戶的匿名存取設定是否已設定為防止匿名存取,請參閱補救儲存體帳戶的匿名存取。

設定容器的匿名存取層級

若要為匿名使用者提供容器及其 Blob 的讀取存取權,請先允許儲存體帳戶的匿名存取,然後設定容器的匿名存取層級。 在開始之前,請確認帳號層級(透過 AllowBlobPublicAccess 屬性)允許匿名存取,並且你對容器擁有寫入權限。 如果儲存帳號被拒絕匿名存取,你就無法為容器設定匿名存取。

警告

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

當你允許儲存帳號匿名存取時,你可以設定一個容器,擁有以下權限:

  • 禁止公開閱讀( 入口網站: 私人;PowerShell: 關閉):容器及其 blob 只能透過授權請求存取。 此選項是所有新建容器的預設選項。
  • 僅對 blob 開放讀取 權限(入口網站與 PowerShell: Blob):容器內的 blob 可以透過匿名請求讀取,但容器資料無法匿名取得。 匿名客戶端無法列舉容器內的 Blob。
  • 容器及其 blob 的公開讀取權限(入口網站與 PowerShell:Container):容器與 blob 資料可透過匿名請求讀取,但容器權限設定與容器元資料除外。 客戶端可以透過匿名請求枚舉容器內的 blob,但無法在儲存帳號中枚舉容器。

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

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

  1. 請前往 Azure 入口網站的儲存帳戶總覽。

  2. 在功能表窗格的 資料儲存體 下方,選取 容器。

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

  4. 選擇 「變更存取等級 」以開啟匿名存取設定。

  5. 從匿名 存取層 級下拉選單選擇所需的匿名存取等級,並選擇 確定 ,將變更套用到所選容器上。

    截圖說明如何在傳送門中設定容器的匿名存取等級。

  6. 要驗證變更,請重新開啟 變更存取等級 ,並確認匿名 存取等級 顯示的是你所選的值。

當儲存帳號不允許匿名存取時,你就無法設定容器的匿名存取等級。 如果您嘗試設定容器的匿名存取層級,則會停用此設定,因為帳戶不允許匿名存取。

當帳號不允許匿名存取時,容器的匿名存取等級設定被封鎖的截圖。

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

你可以透過列出容器並查看匿名存取設定,來檢查一個或多個儲存帳號中哪些容器被設定為匿名存取。 當記憶體帳戶不包含大量容器,或當您在少數記憶體帳戶中檢查設定時,此方法是實用的選項。 然而,若嘗試枚舉大量容器,效能可能會受影響。

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

下一步