使用 AzCopy 和 Microsoft Entra ID 授權 Blob 和檔案的存取權

您可以使用 Microsoft Entra ID 提供 AzCopy 授權認證。 如此一來,您就不需要將共用存取簽章 (SAS) 令牌附加至每個命令。

從驗證您的角色指派開始。 然後,選擇您想要授權的安全性 主體 類型。 使用者身分識別、受控識別和服務主體都是每種安全性主體類型。

若要授權存取權,您將設定記憶體內部環境變數。 然後執行任何 AzCopy 命令。 AzCopy 會擷取完成作業所需的驗證令牌。 作業完成之後,令牌就會從記憶體中消失。

AzCopy 會使用您提供的認證來擷取 OAuth 令牌。 或者,AzCopy 可以使用作用中 Azure CLI 或 Azure PowerShell 會話的 OAuth 令牌。

如需 AzCopy 的詳細資訊, 請開始使用 AzCopy

確認角色指派

您需要的授權層級取決於您打算上傳檔案或只下載檔案。

如果您只想要下載檔,請確認 儲存體 Blob 數據讀取者角色 (Azure Blob 儲存體) 或 儲存體 檔案數據特殊許可權讀取者角色 (Azure 檔案儲存體) 已指派給您的使用者身分識別、受控識別或服務主體。

如果您想要將檔案上傳至 Azure Blob 儲存體,請確認其中一個角色已指派給您的安全性主體。

如果您想要將檔案上傳至 Azure 檔案共用,請確認已將 儲存體 檔案數據特殊許可權讀取器指派給安全性主體。

這些角色可以指派給任何這些範圍的安全性主體:

  • 容器(檔案系統)或檔案共用
  • 儲存體帳戶
  • 資源群組
  • 訂用帳戶

若要瞭解如何驗證和指派角色,請參閱指派 Azure 角色以存取 Blob 資料(Blob 儲存體),或選擇如何授權存取 Azure 入口網站 中的檔案數據(Azure 檔案儲存體)。

注意

請記住,Azure 角色指派最多可能需要五分鐘的時間才能傳播。

如果您的安全性主體已新增至目標容器或目錄的訪問控制清單 (ACL),則不需要將其中一個角色指派給安全性主體。 在 ACL 中,您的安全性主體需要目標目錄的寫入許可權,以及對容器和每個父目錄執行許可權。

若要深入瞭解,請參閱 Azure Data Lake 儲存體 Gen2 中的訪問控制模型。

使用 AzCopy 授權

AzCopy 會使用您提供的認證來授權安全性主體。

授權使用者身分識別

確認您的使用者身分識別已獲得必要的授權等級之後,請輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=DEVICE

然後,執行任何 azcopy 命令 (例如: azcopy list https://contoso.blob.core.windows.net)。

此命令傳回驗證碼和網站的 URL。 開啟網站,提供程式碼,然後選擇 [下一步] 按鈕。

建立容器

隨即會出現登入視窗。 在該視窗中,使用您的 Azure 帳戶認證登入 Azure 帳戶。 成功登入之後,作業即可完成。

授權受控識別

如果您打算在腳本內使用 AzCopy,而不需用戶互動,而且腳本會從 Azure 虛擬機執行,則這是一個絕佳的選項。 使用此選項時,您不需要將任何認證儲存在 VM 上。

您可以使用已在 VM 上啟用的系統型受控識別,或使用您指派給 VM 之使用者指派受控識別的用戶端識別碼、物件識別碼或資源識別碼來登入您的帳戶。

若要深入瞭解如何啟用全系統受控識別或建立使用者指派的受控識別,請參閱使用 Azure 入口網站 在 VM 上設定 Azure 資源的受控識別。

使用全系統受控識別進行授權

首先,請確定您已在 VM 上啟用全系統受控識別。 請參閱 系統指派的受控識別

輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=MSI

然後,執行任何 azcopy 命令 (例如: azcopy list https://contoso.blob.core.windows.net)。

使用使用者指派的受控識別進行授權

首先,請確定您已在 VM 上啟用使用者指派的受控識別。 請參閱 使用者指派的受控識別

輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=MSI

然後,輸入下列任何命令,然後按 ENTER 鍵。

export AZCOPY_MSI_CLIENT_ID=<client-id>

<client-id> 佔位元取代為使用者指派受控識別的用戶端標識元。

export AZCOPY_MSI_OBJECT_ID=<object-id>

<object-id> 佔位元取代為使用者指派受控識別的物件識別碼。

export AZCOPY_MSI_RESOURCE_STRING=<resource-id>

<resource-id> 佔位元取代為使用者指派受控識別的資源標識元。

設定這些變數之後,您可以執行任何 azcopy 命令(例如: azcopy list https://contoso.blob.core.windows.net)。

授權服務主體

如果您打算在腳本中使用 AzCopy,而不需用戶互動,尤其是在內部部署執行時,這是一個很好的選項。 如果您打算在 Azure 中執行的 VM 上執行 AzCopy,受控服務識別更容易管理。 若要深入瞭解,請參閱 本文的授權受控識別 一節。

您可以使用客戶端密碼或使用與服務主體應用程式註冊相關聯的憑證密碼來登入您的帳戶。

若要深入瞭解如何建立服務主體,請參閱 如何:使用入口網站建立可存取資源的 Microsoft Entra 應用程式和服務主體。

若要深入瞭解一般服務主體,請參閱 Microsoft Entra ID 中的應用程式和服務主體物件

使用客戶端密碼授權服務主體

輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=SPN
export AZCOPY_SPA_APPLICATION_ID=<application-id>
export AZCOPY_SPA_CLIENT_SECRET=<client-secret>
export AZCOPY_TENANT_ID=<tenant-id>

<application-id> 服務主體應用程式註冊的應用程式識別碼取代 佔位元。 將 <client-secret> 佔位元取代為客戶端密碼。 將 <tenant-id> 佔位元取代為記憶體帳戶所屬組織的租用戶標識碼。 若要尋找租使用者標識碼,請在 Azure 入口網站 中選取 [Microsoft Entra ID > 屬性>目錄標識符]。

注意

請考慮使用提示從使用者收集密碼。 如此一來,您的密碼就不會出現在命令歷程記錄中。

然後,執行任何 azcopy 命令 (例如: azcopy list https://contoso.blob.core.windows.net)。

使用憑證授權服務主體

如果您想要使用自己的認證進行授權,您可以將憑證上傳至應用程式註冊,然後使用該憑證登入。

除了將憑證上傳至應用程式註冊之外,您還需要將憑證複本儲存到 AzCopy 執行所在的電腦或 VM。 此憑證複本應該位於 中。PFX 或 。PEM 格式,且必須包含私鑰。 私鑰應受到密碼保護。 如果您使用 Windows,而且您的憑證只存在於證書存儲中,請務必將憑證導出至 PFX 檔案(包括私鑰)。 如需指引,請參閱 Export-PfxCertificate

輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=SPN
export AZCOPY_SPA_APPLICATION_ID=<application-id>
export AZCOPY_SPA_CERT_PATH=<path-to-certificate-file>
export AZCOPY_SPA_CERT_PASSWORD=<certificate-password>
export AZCOPY_TENANT_ID=<tenant-id>

<application-id> 服務主體應用程式註冊的應用程式識別碼取代 佔位元。 將 <path-to-certificate-file> 佔位元取代為憑證檔案的相對或完整路徑。 AzCopy 會儲存此憑證的路徑,但不會儲存憑證的複本,因此請務必保留該憑證。 將 <certificate-password> 佔位元取代為憑證的密碼。 將 <tenant-id> 佔位元取代為記憶體帳戶所屬組織的租用戶標識碼。 若要尋找租使用者標識碼,請在 Azure 入口網站 中選取 [Microsoft Entra ID > 屬性>目錄標識符]。

注意

請考慮使用提示從使用者收集密碼。 如此一來,您的密碼就不會出現在命令歷程記錄中。

然後,執行任何 azcopy 命令 (例如: azcopy list https://contoso.blob.core.windows.net)。

使用 AzCopy 登入命令進行授權

除了使用記憶體內部變數,您也可以使用 azcopy login 命令來授權存取權。

azcopy login 命令會擷取 OAuth 令牌,然後將該令牌放入系統上的秘密存放區。 如果您的操作系統沒有Linux Keyring 之類的秘密存放區,azcopy login命令將無法運作,因為沒有可放置令牌的地方。

授權使用者身分識別 (azcopy login 命令)

確認您的使用者身分識別已獲得必要的授權層級之後,請開啟命令提示字元,輸入下列命令,然後按 ENTER 鍵。

azcopy login

如果您收到錯誤,請嘗試包含記憶體帳戶所屬組織的租用戶標識碼。

azcopy login --tenant-id=<tenant-id>

<tenant-id> 佔位元取代為記憶體帳戶所屬組織的租用戶標識碼。 若要尋找租使用者標識碼,請在 Azure 入口網站 中選取 [Microsoft Entra ID > 屬性>目錄標識符]。

此命令傳回驗證碼和網站的 URL。 開啟網站,提供程式碼,然後選擇 [下一步] 按鈕。

建立容器

隨即會出現登入視窗。 在該視窗中,使用您的 Azure 帳戶認證登入 Azure 帳戶。 順利登入之後,您可以關閉瀏覽器視窗,然後開始使用 AzCopy。

使用全系統受控識別進行授權 (azcopy login 命令)

首先,請確定您已在 VM 上啟用全系統受控識別。 請參閱 系統指派的受控識別

然後,在您的命令控制台中,輸入下列命令,然後按 ENTER 鍵。

azcopy login --identity

使用使用者指派的受控識別進行授權 (azcopy login 命令)

首先,請確定您已在 VM 上啟用使用者指派的受控識別。 請參閱 使用者指派的受控識別

然後,在您的命令控制台中,輸入下列任何命令,然後按 ENTER 鍵。

azcopy login --identity --identity-client-id "<client-id>"

<client-id> 佔位元取代為使用者指派受控識別的用戶端標識元。

azcopy login --identity --identity-object-id "<object-id>"

<object-id> 佔位元取代為使用者指派受控識別的物件識別碼。

azcopy login --identity --identity-resource-id "<resource-id>"

<resource-id> 佔位元取代為使用者指派受控識別的資源標識元。

授權服務主體 (azcopy login 命令)

執行腳本之前,您必須以互動方式登入至少一次,才能提供 AzCopy 的服務主體認證。 這些認證會儲存在安全且加密的檔案中,因此您的腳本不需要提供該敏感性資訊。

您可以使用客戶端密碼或使用與服務主體應用程式註冊相關聯的憑證密碼來登入您的帳戶。

若要深入瞭解如何建立服務主體,請參閱 如何:使用入口網站建立可存取資源的 Microsoft Entra 應用程式和服務主體。

使用用戶端密碼授權服務主體 (azcopy login 命令)

首先,將 AZCOPY_SPA_CLIENT_SECRET 環境變數設定為服務主體應用程式註冊的客戶端密碼。

注意

請務必從命令提示字元設定此值,而不是在操作系統的環境變數設定中設定此值。 如此一來,值就只能供目前的會話使用。

此範例示範如何在PowerShell中執行這項操作。

$env:AZCOPY_SPA_CLIENT_SECRET="$(Read-Host -prompt "Enter key")"

注意

請考慮使用此範例所示的提示。 如此一來,您的密碼就不會出現在控制台的命令歷程記錄中。

接下來,輸入下列命令,然後按 ENTER 鍵。

azcopy login --service-principal  --application-id application-id --tenant-id=tenant-id

<application-id> 服務主體應用程式註冊的應用程式識別碼取代 佔位元。 將 <tenant-id> 佔位元取代為記憶體帳戶所屬組織的租用戶標識碼。 若要尋找租使用者標識碼,請在 Azure 入口網站 中選取 [Microsoft Entra ID > 屬性>目錄標識符]。

使用憑證授權服務主體 (azcopy login 命令)

如果您想要使用自己的認證進行授權,您可以將憑證上傳至應用程式註冊,然後使用該憑證登入。

除了將憑證上傳至應用程式註冊之外,您還需要將憑證複本儲存到 AzCopy 執行所在的電腦或 VM。 此憑證複本應該位於 中。PFX 或 。PEM 格式,且必須包含私鑰。 私鑰應受到密碼保護。 如果您使用 Windows,而且您的憑證只存在於證書存儲中,請務必將憑證導出至 PFX 檔案(包括私鑰)。 如需指引,請參閱 Export-PfxCertificate

接下來,將 AZCOPY_SPA_CERT_PASSWORD 環境變數設定為憑證密碼。

注意

請務必從命令提示字元設定此值,而不是在操作系統的環境變數設定中設定此值。 如此一來,值就只能供目前的會話使用。

此範例示範如何在PowerShell中執行這項工作。

$env:AZCOPY_SPA_CERT_PASSWORD="$(Read-Host -prompt "Enter key")"

接下來,輸入下列命令,然後按 ENTER 鍵。

azcopy login --service-principal --application-id application-id --certificate-path <path-to-certificate-file> --tenant-id=<tenant-id>

<application-id> 服務主體應用程式註冊的應用程式識別碼取代 佔位元。 將 <path-to-certificate-file> 佔位元取代為憑證檔案的相對或完整路徑。 AzCopy 會儲存此憑證的路徑,但不會儲存憑證的複本,因此請務必保留該憑證。 將 <tenant-id> 佔位元取代為記憶體帳戶所屬組織的租用戶標識碼。 若要尋找租使用者標識碼,請選取 Azure 入口網站 中的 [Microsoft Entra ID > 屬性>目錄標識符]。

注意

請考慮使用此範例所示的提示。 如此一來,您的密碼就不會出現在控制台的命令歷程記錄中。

使用 Azure CLI 授權

如果您使用 Azure CLI 登入,則 Azure CLI 會取得 AzCopy 可用來授權作業的 OAuth 令牌。

若要讓 AzCopy 使用該令牌,請輸入下列命令,然後按 ENTER 鍵。

export AZCOPY_AUTO_LOGIN_TYPE=AZCLI

如需如何使用 Azure CLI 登入的詳細資訊,請參閱 使用 Azure CLI 登入。

使用 Azure PowerShell 授權

如果您使用 Azure PowerShell 登入,則 Azure PowerShell 會取得 AzCopy 可用來授權作業的 OAuth 令牌。

若要讓 AzCopy 使用該令牌,請輸入下列命令,然後按 ENTER 鍵。

$Env:AZCOPY_AUTO_LOGIN_TYPE="PSCRED"

如需如何使用 Azure PowerShell 登入的詳細資訊,請參閱 使用 Azure PowerShell 登入。

下一步