使用 AzCopy 和 Microsoft Entra ID 授权访问 blob 和文件

你可以通过使用 Microsoft Entra ID 来向 AzCopy 提供授权凭据。 这样就无需为每个命令都追加共享访问签名 (SAS) 令牌。

首先请验证你的角色分配。 然后,选择要授权的安全主体类型。 用户标识托管标识服务主体,每一种都是安全主体类型。

要授权访问,你将设置内存中环境变量。 然后运行任何 AzCopy 命令。 AzCopy 将检索完成操作所需的 Auth 令牌。 操作完成后,令牌将从内存中消失。

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 Storage 中的访问控制模型

通过 AzCopy 授权

AzCopy 使用你提供的凭据来授权安全主体。

授权用户标识

验证你的用户标识已获得所需的授权级别后,键入以下命令并按 Enter。

export AZCOPY_AUTO_LOGIN_TYPE=DEVICE

然后,运行任何 azcopy 命令(例如 azcopy list https://contoso.blob.core.chinacloudapi.cn)。

此命令返回身份验证代码和网站的 URL。 打开网站,提供代码,然后选择“下一步”按钮。

创建容器

此时会出现登录窗口。 在该窗口中,使用 Azure 帐户凭据登录到 Azure 帐户。 成功登录后,操作即可完成。

授权托管标识

如果你打算在无需用户交互即可运行的脚本以及从 Azure 虚拟机 (VM) 运行的脚本中使用 AzCopy,此选项非常有用。 使用此选项时,无需在 VM 上存储任何凭据。

通过使用已在 VM 上启用的系统范围的托管标识,或者通过使用已分配到 VM 的用户分配托管标识的客户端 ID、对象 ID 或资源 ID,可以登录到帐户。

若要详细了解如何启用系统范围的托管标识或创建用户分配的托管标识,请参阅使用 Azure 门户为 VM 上的 Azure 资源配置托管标识

通过使用系统范围的托管标识来授权

首先,确保已在 VM 上启用系统范围的托管标识。 请参阅系统分配的托管标识

键入以下命令,然后按 Enter。

export AZCOPY_AUTO_LOGIN_TYPE=MSI

然后,运行任何 azcopy 命令(例如 azcopy list https://contoso.blob.core.chinacloudapi.cn)。

通过使用用户分配的托管标识来授权

首先,确保已在 VM 上启用用户分配的托管标识。 请参阅用户分配的托管标识

键入以下命令,然后按 Enter。

export AZCOPY_AUTO_LOGIN_TYPE=MSI

然后,键入以下任何命令并按 Enter。

export AZCOPY_MSI_CLIENT_ID=<client-id>

请将 <client-id> 占位符替换为用户分配的托管标识的客户端 ID。

export AZCOPY_MSI_OBJECT_ID=<object-id>

请将 <object-id> 占位符替换为用户分配的托管标识的对象 ID。

export AZCOPY_MSI_RESOURCE_STRING=<resource-id>

请将 <resource-id> 占位符替换为用户分配的托管标识的资源 ID。

设置这些变量后,可以运行任何 azcopy 命令(例如 azcopy list https://contoso.blob.core.chinacloudapi.cn)。

授权服务主体

如果你打算在无需用户交互即可运行(尤其是在本地运行)的脚本中使用 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> 占位符替换为服务主体应用注册的应用程序 ID。 将 <client-secret> 占位符替换为客户端机密。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找租户 ID,请在 Azure 门户中选择“Microsoft Entra ID > 属性 > 目录 ID”。

注意

考虑使用提示从用户处收集密码。 这样,密码就不会显示在命令历史记录中。

然后,运行任何 azcopy 命令(例如 azcopy list https://contoso.blob.core.chinacloudapi.cn)。

通过使用证书来授权服务主体

如果希望使用自己的凭据进行授权,可将证书上传到应用注册,然后使用该证书来登录。

除了将证书上传到应用注册以外,还需要在运行 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> 占位符替换为服务主体应用注册的应用程序 ID。 请将 <path-to-certificate-file> 占位符替换为证书文件的相对路径或完全限定的路径。 AzCopy 将保存此证书的路径,但并不会保存此证书的副本,因此,请务必将此证书放在原有位置。 将 <certificate-password> 占位符替换为证书的密码。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找租户 ID,请在 Azure 门户中选择“Microsoft Entra ID > 属性 > 目录 ID”。

注意

考虑使用提示从用户处收集密码。 这样,密码就不会显示在命令历史记录中。

然后,运行任何 azcopy 命令(例如 azcopy list https://contoso.blob.core.chinacloudapi.cn)。

使用 AzCopy login 命令授权

作为使用内存中变量的替代方法,可以使用 azcopy login 命令授权访问。

azcopy login 命令会检索 OAuth 令牌,然后将该令牌放入你系统上的机密存储。 如果你的操作系统没有机密存储(如 Linux keyring),则 azcopy login 命令将不起作用,因为没有地方可以放置令牌。

授权用户标识(azcopy login 命令)

验证你的用户标识已获得所需的授权级别后,打开命令提示符,然后键入以下命令并按 ENTER 键。

azcopy login --aad-endpoint https://login.partner.microsoftonline.cn

如果收到错误,请尝试包括存储帐户所属组织的租户 ID。

azcopy login --tenant-id=<tenant-id> --aad-endpoint https://login.partner.microsoftonline.cn

请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找租户 ID,请在 Azure 门户中选择“Microsoft Entra ID > 属性 > 目录 ID”。

此命令返回身份验证代码和网站的 URL。 打开网站,提供代码,然后选择“下一步”按钮。

创建容器

此时会出现登录窗口。 在该窗口中,使用 Azure 帐户凭据登录到 Azure 帐户。 成功登录后,可以关闭浏览器窗口,开始使用 AzCopy。

使用系统范围的托管标识授权(azcopy login 命令)

首先,确保已在 VM 上启用系统范围的托管标识。 请参阅系统分配的托管标识

然后,在命令控制台中,键入以下命令并按 ENTER 键。

azcopy login --identity --aad-endpoint https://login.partner.microsoftonline.cn

使用用户分配的托管标识授权(azcopy login 命令)

首先,确保已在 VM 上启用用户分配的托管标识。 请参阅用户分配的托管标识

然后,在命令控制台中,键入以下任意命令并按 ENTER 键。

azcopy login --identity --identity-client-id "<client-id>" --aad-endpoint https://login.partner.microsoftonline.cn

请将 <client-id> 占位符替换为用户分配的托管标识的客户端 ID。

azcopy login --identity --identity-object-id "<object-id>" --aad-endpoint https://login.partner.microsoftonline.cn

请将 <object-id> 占位符替换为用户分配的托管标识的对象 ID。

azcopy login --identity --identity-resource-id "<resource-id>" --aad-endpoint https://login.partner.microsoftonline.cn

请将 <resource-id> 占位符替换为用户分配的托管标识的资源 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 --aad-endpoint https://login.partner.microsoftonline.cn

请将 <application-id> 占位符替换为服务主体应用注册的应用程序 ID。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找租户 ID,请在 Azure 门户中选择“Microsoft Entra ID > 属性 > 目录 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> --aad-endpoint https://login.partner.microsoftonline.cn

请将 <application-id> 占位符替换为服务主体应用注册的应用程序 ID。 请将 <path-to-certificate-file> 占位符替换为证书文件的相对路径或完全限定的路径。 AzCopy 将保存此证书的路径,但并不会保存此证书的副本,因此,请务必将此证书放在原有位置。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找租户 ID,请在 Azure 门户中选择“Microsoft Entra ID > 属性 > 目录 ID”。

注意

考虑使用本示例中所示的提示符。 这样,密码就不会显示在控制台的命令历史记录中。

通过 Azure CLI 授权

如果你使用 Azure CLI 登录,则 Azure CLI 会获取 OAuth 令牌,AzCopy 可使用该令牌来授权操作。

若要使 AzCopy 能够使用该令牌,请键入以下命令,然后按 Enter 键。

export AZCOPY_AUTO_LOGIN_TYPE=AZCLI

若要详细了解如何使用 Azure CLI 登录,请参阅使用 Azure CLI 登录

使用 Azure PowerShell 授权

如果你使用 Azure PowerShell 登录,则 Azure PowerShell 会获取 OAuth 令牌,AzCopy 可使用该令牌来授权操作。

若要使 AzCopy 能够使用该令牌,请键入以下命令,然后按 Enter 键。

$Env:AZCOPY_AUTO_LOGIN_TYPE="PSCRED"

若要详细了解如何使用 Azure PowerShell 登录,请参阅使用 Azure PowerShell 登录

后续步骤