使用 AzCopy 在网络受到限制的 Azure 存储帐户之间复制 Blob

本文介绍如何使用 AzCopy 命令行实用工具在存储帐户之间复制 Blob。 它还介绍了在为存储帐户配置网络限制时如何实现复制操作。

背景

在两个存储帐户之间复制 Blob 文件是许多 Azure 用户的常见要求。 Azure 存储支持使用 AzCopy 命令行实用工具将 blob 从一个存储帐户直接复制到另一个存储帐户。 用户无需将文件下载到本地磁盘或缓冲区,然后再次上传文件。

使用 AzCopy 在两个存储帐户之间复制 Blob 并不依赖于本地计算机的网络带宽。 此方法可以利用存储帐户和 Azure 虚拟网络的性能,以实现比下载和上传文件更好的吞吐量。 如果两个存储帐户位于同一区域,则不会产生带宽费用。

用于在存储帐户之间复制 blob 的 AzCopy 命令

  • 如果使用 Microsoft Entra ID 提供授权凭据,请使用以下命令:

    azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>'
    

    在此方案中,需要确保Microsoft Entra 标识对源帐户和目标帐户具有适当的角色分配。

  • 如果使用共享访问签名(SAS)令牌,请使用以下命令:

    azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>'
    

    在此方案中,需要将 SAS 令牌追加到 AzCopy 命令中使用的源 URL 和目标 URL。

有关详细信息,请参阅 使用 AzCopy v10 在 Azure 存储帐户之间复制 Blob。

在有访问限制的存储账户之间复制 blob

如果需要通过存储防火墙限制对源存储帐户和目标存储帐户的访问,则可能需要使用 AzCopy 在存储帐户之间复制 Blob 的更多配置。 这是因为两个存储帐户之间的复制请求使用专用 IP 地址,IP 地址是动态的。

下面是两种受支持的方案:

方案 1:客户端使用公共终结点访问存储帐户

在此方案中,必须将客户端的公共 IP 地址或虚拟网络(VNet)添加到源存储帐户和目标存储帐户中的防火墙允许列表。

下图显示了在此方案中在存储帐户之间复制 Blob 的过程:

此图显示了在方案 1 中应对存储帐户之间的 Blob 的过程。

在此方案中,不需要防火墙允许列表。

下图显示了在此方案中在存储帐户之间复制 Blob 的过程:

此图显示了在方案 2 中应对存储帐户之间的 Blob 的过程。

下面是这两种方案的此机制的完整过程:

  1. 客户端将 PutBlockfromURL 请求发送到目标存储。
  2. 目标存储接收请求,并尝试从给定的源 URL 获取块。 但是,由于源防火墙不允许目标存储,因此会收到“403 禁止访问”错误。
  3. 目标存储收到“403 禁止访问”错误后,它会代表客户端发送另一个 GetBlob 请求。 如果客户端有权访问源存储,则目标将能够从源获取块,并向客户端返回成功响应代码。
  4. 客户端将 PutBlockList 发送到目标存储,以提交块,并在从请求收到成功响应代码后完成该过程。

使用专用终结点在中心辐射型体系结构中的存储帐户之间复制 Blob

使用 AzCopy 从中心 VNet 中的 VM 将连接到不同辐射 VNet 中的专用终结点的存储帐户之间复制 Blob 时,会发生 403 错误。 可以在 AzCopy 日志或Azure 存储日志中找到“403 此请求无权执行此操作 - CannotVerfiyCopySource”错误。 以下体系结构关系图显示了发生错误的场景。

此图显示了使用专用终结点在中心辐射体系结构中的存储帐户之间复制 Blob 的 403 错误。

解决方法 1:在源 VNet 中为目标存储帐户创建专用终结点

可能的解决方法是为源 VNet 中的目标存储帐户创建专用终结点。 此配置允许 VM 使用 AzCopy 成功复制存储帐户之间的 Blob。 以下体系结构关系图显示了在解决方法 1 中的存储帐户之间复制 Blob 的过程。

此图显示了在解决方法 1 中存储帐户之间复制 Blob 的过程。

解决方法 2:将 VM 放置在与源存储帐户相同的 VNet 中,并将 VNet 与目标 VNet 对等互连

另一个选项是将 VM 放置在与源存储帐户相同的 VNet 中。 然后,在此 VNet 与目标 VNet 之间建立对等互连。 以下体系结构关系图显示了在解决方法 2 中的存储帐户之间复制 Blob 的过程。

此图显示了在解决方法 2 中存储帐户之间复制 Blob 的过程。

解决方法 3:使用临时暂存帐户复制数据

如果无法实现上述解决方法,或者无法更改存储帐户或 VNet 的现有网络配置,则可以使用临时暂存帐户复制数据:

  1. 在源存储帐户和目标存储帐户所在的同一区域中创建临时存储帐户。
  2. 使用 AzCopy 将数据从源存储帐户复制到临时存储帐户。
  3. 将数据从临时存储帐户复制到目标存储帐户。 在执行数据传输之前,请确保临时存储帐户与目标存储帐户位于同一 VNet 中的专用终结点。

解决方法 4:使用 VM 并将数据下载到 VM,然后将数据上传到目标存储帐户

仅当其他方法不可行时,才使用此解决方法。 使用 VM 从源存储帐户下载数据,然后将其上传到目标存储帐户。 这可以通过 AzCopy 完成。 确保 VM 的大小和磁盘容量适用于数据传输过程。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区