選擇如何使用 Azure CLI 來授與 Blob 資料的存取權

Azure 儲存體提供適用於 Azure CLI 的延伸模組,可讓您指定如何授權 Blob 資料的相關作業。 您可以透過下列方式授權資料作業:

  • 使用 Microsoft Entra 安全性主體。 Microsoft 建議使用 Microsoft Entra 認證,以提高安全性和使用的方便性。
  • 使用帳戶存取金鑰或共用存取簽章 (SAS) 權杖。

指定如何授權資料作業

使用 Azure CLI 命令來讀取和寫入 Blob 資料,包括選用的 --auth-mode 參數。 指定此參數以指出如何授權資料作業:

  • --auth-mode 參數設為 login,以使用 Microsoft Entra 安全性主體登入 (建議)。
  • --auth-mode 參數設為舊版 key 值,嘗試擷取用於授權的帳戶存取金鑰。 如果您省略 --auth-mode 參數,則 Azure CLI 也會嘗試擷取存取金鑰。

若要使用 --auth-mode 參數,請確定您已安裝 Azure CLI 2.0.46 版或更新版本。 執行 az --version 來檢查您安裝的版本。

注意

使用 Azure Resource Manager ReadOnly 鎖定來鎖住儲存體帳戶時,不允許該儲存體帳戶執行列出金鑰作業。 List Keys 是一個 POST 作業,而在帳戶設定了 ReadOnly 鎖定時,所有 POST 作業都無法執行。 因此,使用 ReadOnly 鎖定來鎖住帳戶時,尚未擁有帳戶金鑰的使用者必須使用 Microsoft Entra 認證來存取 Blob 資料。

重要

如果您省略 --auth-mode 參數或將它設定為 key,則 Azure CLI 會嘗試使用帳戶存取金鑰來進行授權。 在此情況下,Microsoft 建議您在命令或 AZURE_STORAGE_KEY 環境變數中提供存取金鑰。 如需環境變數的詳細資訊,請參閱設定授權參數的環境變數一節。

如果您沒有提供存取金鑰,則 Azure CLI 會嘗試呼叫 Azure 儲存體資源提供者,以擷取金鑰進行每一項作業。 許多資料作業的執行都需要呼叫資源提供者,可能因而造成節流。 如需資源提供者限制的詳細資訊,請參閱 Azure 儲存體資源提供者的可擴縮性和效能目標

使用 Microsoft Entra 認證進行授權

當您使用 Microsoft Entra 認證登入 Azure CLI 時,會傳回 OAuth 2.0 存取權杖。 Azure CLI 會自動使用該權杖,授權 Blob 或佇列儲存體中的後續資料作業。 針對支援的作業,您不需要再使用命令傳遞帳戶金鑰或 SAS 權杖。

您可以透過 Azure 角色型存取控制 (Azure RBAC),將 Blob 資料的權限指派給 Microsoft Entra 安全性主體。 如需有關指派 Azure 角色的詳細資訊,請參閱 Azure 儲存體中的指派存取 Blob 資料的 Azure 角色

呼叫資料作業的權限

Blob 資料的作業支援 Azure 儲存體延伸模組。 您可呼叫的作業取決於您用來登入 Azure CLI 的 Microsoft Entra 安全性主體所獲得授與的權限。 Azure 儲存體容器的權限是透過 Azure RBAC 指派的。 例如,如果您被指派儲存體 Blob 資料讀者角色,則您可以執行從容器讀取資料的指令碼命令。 如果您被指派儲存體 Blob 資料參與者角色,則您可以執行讀取、寫入或刪除容器或所含資料的指令碼命令。

如需有關容器上每個 Azure 儲存體作業所需權限的詳細資訊,請參閱使用 OAuth 權杖呼叫儲存體作業

範例:授權作業使用 Microsoft Entra 認證建立容器

下列範例示範如何使用 Microsoft Entra 認證,從 Azure CLI 建立容器。 若要建立容器,您必須登入 Azure CLI,且需要資源群組和儲存體帳戶。 若要了解如何建立這些資源,請參閱快速入門:使用 Azure CLI 建立、下載及列出 Blob

  1. 建立容器之前,請將 儲存體 Blob 資料參與者 角色指派給自己。 即使您是帳戶擁有者,您還是需要明確的權限,才能對儲存體帳戶執行資料作業。 如需有關指派 Azure 角色的詳細資訊,請參閱指派存取 Blob 資料的 Azure 角色

    重要

    Azure 角色指派可能需要數分鐘的時間傳播。

  2. 呼叫 az storage container create 命令,並將 --auth-mode 參數設為 login,以使用您的 Microsoft Entra 認證來建立容器。 請記得以您自己的值取代角括號中的預留位置值:

    az storage container create \
        --account-name <storage-account> \
        --name sample-container \
        --auth-mode login
    

使用帳戶存取金鑰進行授權

如果您擁有帳戶金鑰,就可以呼叫任何 Azure 儲存體資料作業。 一般情況下,使用帳戶金鑰較不安全。 如果帳戶金鑰遭到盜用,您帳戶中的所有資料都可能會遭到入侵。

下列範例顯示如何使用帳戶存取金鑰來建立容器。 指定帳戶金鑰,並提供具有 key 值的 --auth-mode 參數:

az storage container create \
    --account-name <storage-account> \
    --name sample-container \
    --account-key <key>
    --auth-mode key

重要

使用 Azure Resource Manager ReadOnly 鎖定來鎖住儲存體帳戶時,不允許該儲存體帳戶執行列出金鑰作業。 List Keys 是一個 POST 作業,而在帳戶設定了 ReadOnly 鎖定時,所有 POST 作業都無法執行。 因此,使用 ReadOnly 鎖定來鎖住帳戶時,使用者必須使用 Microsoft Entra 認證來存取資料。

使用 SAS 權杖進行授權

如果您擁有 SAS 權杖,則可以呼叫 SAS 允許的資料作業。 下列範例說明如何使用 SAS 權杖建立容器:

az storage container create \
    --account-name <storage-account> \
    --name sample-container \
    --sas-token <token>

設定授權參數的環境變數

您可以在環境變數中指定授權參數,以避免在每次呼叫 Azure 儲存體資料作業時包含這些參數。 下表說明可用的環境變數。

環境變數 描述
AZURE_STORAGE_ACCOUNT 儲存體帳戶名稱。 此變數應與儲存體帳戶金鑰或 SAS 權杖一起使用。 如果兩者都不存在,Azure CLI 會嘗試使用已驗證的 Microsoft Entra 帳戶來擷取儲存體帳戶存取金鑰。 如果一次執行大量命令,可能會達到 Azure 儲存體資源提供者節流限制。 如需資源提供者限制的詳細資訊,請參閱 Azure 儲存體資源提供者的可擴縮性和效能目標
AZURE_STORAGE_KEY 儲存體帳戶金鑰。 此變數必須與儲存體帳戶名稱一起使用。
AZURE_STORAGE_CONNECTION_STRING 包含儲存體帳戶金鑰或 SAS 權杖的連接字串。 此變數必須與儲存體帳戶名稱一起使用。
AZURE_STORAGE_SAS_TOKEN 共用存取簽章 (SAS) 權杖。 此變數必須與儲存體帳戶名稱一起使用。
AZURE_STORAGE_AUTH_MODE 用來執行命令的授權模式。 允許的值為 login (建議) 或 key。 如果您指定 login,Azure CLI 會使用您的 Microsoft Entra 認證來授權資料作業。 如果您指定舊版 key 模式,Azure CLI 會嘗試查詢帳戶存取金鑰,並使用該金鑰來授權命令。

下一步