你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用服务主体授权 AzCopy 访问权限

服务主体为需要非交互式身份验证的应用程序和自动化场景授权AzCopy操作提供了一种安全的方法。 这种身份验证方法特别适合用于 Azure 之外运行的持续集成和持续部署流水线、计划任务,以及因缺少托管身份而运行的应用程序。

本文介绍如何使用服务主体及客户端机密或证书对 AzCopy 进行身份验证。 了解如何通过环境变量、AzCopy 登录命令或利用现有的 Azure CLI 或 Azure PowerShell 会话来配置身份验证。

注释

虽然服务主体为跨平台方案提供了灵活性,但Microsoft建议在 Azure 资源上运行时使用托管标识,以提高安全性和简化的凭据管理。 若要了解授权访问 AzCopy 的其他方法,请参阅 授权 AzCopy

验证角色分配

确保您的服务主体具有所需的 Azure 角色,以执行预期的操作。

对于进行下载操作,请使用 存储 Blob 数据读取器 (Blob 存储)或 存储文件数据特权读取器 (Azure 文件)。

对于上传操作,请使用 存储 Blob 数据参与者存储 Blob 数据所有者(Blob 存储)或者 存储文件数据特权参与者(Azure 文件系统)

有关角色分配说明,请参阅 “分配 Azure 角色以访问 Blob 数据 ”(Blob 存储),或 选择如何授权访问 Azure 门户中的文件数据(Azure 文件)。

注释

角色分配最多可能需要五分钟才能传播。

在具有分层命名空间的帐户中传输 Blob 时,如果将安全主体添加到目标容器或目录的访问控制列表(ACL),则无需为安全主体分配这些角色之一。 在 ACL 中,安全主体需要对目标目录拥有写入权限,并对容器和每个父目录拥有执行权限。 若要详细了解,请参阅 Azure Data Lake Storage 中的访问控制模型

使用环境变量授权

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

AzCopy 使用你提供的凭据检索 OAuth 令牌。 AzCopy 也可使用活动 Azure CLI 或 Azure PowerShell 会话的 OAuth 令牌。

如果计划在没有用户交互的情况下运行的脚本中使用 AzCopy,尤其是在本地运行时,此选项非常出色。 如果你打算在 Azure 中运行的 VM 上运行 AzCopy,则最好是使用托管服务标识,因为它更易于管理。 若要了解详细信息,请参阅本文的 “使用托管标识”部分授权对 AzCopy 的访问权限

注意

Microsoft建议使用可用的最安全的身份验证流。 此过程中所述的身份验证流要求对应用程序具有很高的信任度,并具有在其他流中不存在的风险。 仅当其他更安全的流(如托管标识)不可行时使用此流。

可以使用客户端密码或使用与服务主体的应用注册关联的证书的密码登录到帐户。

若要详细了解如何创建服务主体,请参阅如何:使用门户创建可访问资源的 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。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找应用程序 ID 和租户 ID,请参阅 登录应用程序

<client-secret> 占位符替换为客户端机密。 若要获取客户端密码,请参阅 “创建新客户端密码”。

注释

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

然后,运行任何 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> 占位符替换为服务主体应用注册的应用程序 ID。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找应用程序 ID 和租户 ID,请参阅 登录应用程序

请将 <path-to-certificate-file> 占位符替换为证书文件的相对路径或完全限定的路径。 AzCopy 将保存此证书的路径,但并不会保存此证书的副本,因此,请务必将此证书放在原有位置。 将 <certificate-password> 占位符替换为证书的密码。

注释

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

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

使用 AzCopy 登录命令授权

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

azcopy login 命令会检索 OAuth 令牌,然后将该令牌放入你系统上的机密存储。 如果操作系统没有机密存储(例如 Linux keyring),azcopy login 命令将无法运行,因为令牌无处可放。

授权服务主体

在运行脚本之前,需要至少一次以交互方式登录,以便向 AzCopy 提供服务主体的凭据。 AzCopy 将这些凭据存储在受保护的加密文件中,以便脚本无需提供该敏感信息。

可以使用客户端密码或使用与服务主体的应用注册关联的证书的密码登录到帐户。

若要详细了解如何创建服务主体,请参阅如何:使用门户创建可访问资源的 Microsoft Entra 应用程序和服务主体

注意

Microsoft建议使用可用的最安全的身份验证流。 此过程中所述的身份验证流要求对应用程序具有很高的信任度,并具有在其他流中不存在的风险。 仅当其他更安全的流(如托管标识)不可行时使用此流。

通过使用客户端密码来授权服务主体

首先将 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 占位符替换为服务主体应用注册的应用程序 ID。 请将 <tenant-id> 占位符替换为存储帐户所属组织的租户 ID。 若要查找应用程序 ID 和租户 ID,请参阅 登录应用程序

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

如果想要使用自己的凭据进行授权,可以将证书上传到应用注册,然后使用该证书登录。 若要了解如何上传证书,请参阅 “设置身份验证”。

除了将证书上传到应用注册之外,还需要将证书的副本保存到 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 占位符替换为服务主体应用注册的应用程序 ID。 请将 tenant-id 占位符替换为存储帐户所属组织的租户 ID。 若要查找应用程序 ID 和租户 ID,请参阅 登录应用程序

请将 <path-to-certificate-file> 占位符替换为证书文件的相对路径或完全限定的路径。 AzCopy 将保存此证书的路径,但并不会保存此证书的副本,因此,请务必将此证书放在原有位置。

注释

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

通过 Azure CLI 授权

使用 Azure CLI 登录时,Azure CLI 会获取 AzCopy 用于授权作的 OAuth 令牌。

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

export AZCOPY_AUTO_LOGIN_TYPE=AZCLI
export AZCOPY_TENANT_ID=<tenant-id>

有关如何使用 Azure CLI 登录的详细信息,请参阅 使用 Azure CLI 通过服务主体登录到 Azure

使用 Azure PowerShell 授权

使用 Azure PowerShell 登录时,Azure PowerShell 会获取 AzCopy 用于授权作的 OAuth 令牌。

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

$Env:AZCOPY_AUTO_LOGIN_TYPE="PSCRED"
$Env:AZCOPY_TENANT_ID="<tenant-id>"

有关如何使用 Azure PowerShell 登录的详细信息,请参阅 使用服务主体登录

后续步骤

  • 有关 AzCopy 的详细信息,请参阅 AzCopy 入门

  • 如果有疑问、问题或常规反馈,请在 GitHub 上提交。