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

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

警告

當容器設定為公用存取時,任何用戶端都可以讀取該容器中的資料。 公用存取會帶來潛在的安全性風險,因此,如果您的案例不需要公用存取,Microsoft 建議您不允許儲存體帳戶的公用存取。 如需詳細資訊,請參閱防止對容器和 Blob 的匿名公用讀取存取

本文說明如何設定容器及其 Blob 的匿名公用讀取存取權限。 如需有關如何從用戶端應用程式匿名存取 Blob 資料的詳細資訊,請參閱使用 .Net 匿名存取公用容器和 Blob

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

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

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

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

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

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

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

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

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

不允許該儲存體帳戶的公用存取會防止對該帳戶中所有容器和 Blob 的匿名存取。 當帳戶不允許公用存取時,您無法設定容器的公用存取設定來允許匿名存取。 為了改善安全性,除非您的案例要求使用者匿名存取 Blob 資源,否則 Microsoft 建議您不要允許對您儲存體帳戶的公用存取。

重要

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

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

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

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

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

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

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

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

注意

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

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

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

允許或不允許 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 儲存體功能支援,以評估此功能的支援。

下一步