1

我在本地 VM 上启动了一个 Azurite docker,然后尝试通过 azcopy 和 az CLI 将数据复制到它,如下所示

export AZURE_STORAGE_ACCOUNT="devstoreaccount1"
export AZURE_STORAGE_ACCESS_KEY="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
azcopy copy /local/data/ http://localvm:10000/devstoreaccount1/data/test --from-to LocalBlob
INFO: Scanning...

failed to perform copy command due to error: Login Credentials missing. No SAS token or OAuth token is present and the resource is not public

我想使用帐户密钥和帐户名称进行身份验证,最好能够使用 azcopy 进行复制。我搜索了 GitHub 和堆栈,发现只有一个https://github.com/Azure/azure-storage-azcopy/issues/867问题,并且没有关于身份验证的内容。看起来我错过了一些明显的东西。您的帮助将不胜感激。

使用的版本是:azure-cli 2.11.1 azcopy 版本 10.7.0

4

3 回答 3

1

我能够使用 az cli 而不是 azcopy 逃脱。

export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azuritedockerhost:10000/devstoreaccount1;"
az storage blob upload -f local-file -c container-name -n dir/blob-name

希望这可以帮助某人。另外,能够使用 azcopy 真的很好,所以如果有人发现它会如何不胜感激。

于 2020-12-08T01:36:30.553 回答
1

Microsoft 文档“ AzCopy 入门”在“运行 AzCopy”标题下指出以下内容:

作为 Azure 存储帐户的所有者,不会自动为你分配访问数据的权限。在您可以对 AzCopy 执行任何有意义的操作之前,您需要决定如何向存储服务提供授权凭据。

在下一个标题“授权 AzCopy”下,文档指出:

可以使用 Azure Active Directory (AD) 或共享访问签名 (SAS) 令牌提供授权凭据。

即使您在本地计算机上访问本地存储模拟器 (Azurite),AzCopy 应用也需要 OAuth 令牌或 SAS 令牌。请参阅此链接以生成用于本地存储或在线存储的 SAS 令牌。

必须将SAS 令牌附加到azcopy copy命令中的目标参数。我使用 Active AD (OAuth token) 授权凭据选项,这样我就可以运行多个azcopy命令,而无需将 SAS 令牌附加到每个命令。

要解决您遇到的 AzCopy 错误,请在"Failed to perform copy command due to error: Login Credentials missing. No SAS token or OAuth token is present and the resource is not public"命令提示符或 Windows PowerShell 中输入以下内容:

azcopy login --tenant-id=<your-tenant-directory-id-from-azure-portal>

然后按照此命令返回的步骤进行操作。这里有一个参考azcopy login。来自本参考文献中的标题“授权没有秘密存储”:“

azcopy login 命令检索 OAuth 令牌,然后将该令牌放入系统上的机密存储中。

从“授权用户身份”标题:

成功登录后,您可以关闭浏览器窗口并开始使用 AzCopy。

在命令提示符下使用azcopy logout以停止更多 AzCopy 命令。

以下是登录过程的屏幕截图步骤,以及在哪里可以找到租户 ID 以启动 AzCopy 登录过程。

  1. 从 Azure 门户获取租户 ID。

在此处输入图像描述

  1. 在命令提示符中输入azcopy login命令和--tenant-id参数。

在此处输入图像描述

  1. 按照命令提示符中指示的步骤操作:“...使用 Web 浏览器打开页面https://microsoft.com/devicelogin并输入代码...”。

在此处输入图像描述

  1. “将出现一个登录窗口。在该窗口中,使用您的 Azure 帐户凭据登录您的 Azure 帐户。”

在此处输入图像描述

  1. “成功登录后,您可以关闭浏览器窗口并开始使用 AzCopy。”

在此处输入图像描述

azcopy copy /local/data/ http://localvm:10000/devstoreaccount1/data/test --from-to LocalBlob您无需export输入问题中的条目即可运行您的原件。

于 2021-10-08T19:56:59.910 回答
0

AzCopy 故意避免支持帐户密钥身份验证,因为帐户密钥具有完整的管理员权限:https ://github.com/Azure/azure-storage-azcopy/issues/186

到目前为止,我发现的唯一解决方法是在 Azure 存储资源管理器中生成一个 SAS(用于容器),然后将 SAS URL 与 AzCopy 一起使用。

于 2021-07-20T07:19:05.373 回答