验证 azcopy 或 az storage cli 以上传到 Azurite docker 模拟器

Authenticating azcopy or az storage cli to upload to Azurite docker emulator

我在本地 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 问题,没有任何关于身份验证的问题。看起来我遗漏了一些显而易见的东西。非常感谢您的帮助。

使用的版本是: 天蓝色-CLI 2.11.1 azcopy 版本 10.7.0

我能够使用 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 也非常好,所以如果有人发现它会非常感激。

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

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

Microsoft 文档“Get started with AzCopy”在 'Run AzCopy' 标题下指出以下内容:

As an owner of your Azure Storage account, you aren't automatically assigned permissions to access data. Before you can do anything meaningful with AzCopy, you need to decide how you'll provide authorization credentials to the storage service.

在下一个标题 'Authorize AzCopy' 下,文档指出:

You can provide authorization credentials by using Azure Active Directory (AD), or by using a Shared Access Signature (SAS) token.

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

必须将 SAS token 附加到 azcopy copy 命令中的目标参数。我使用 Active AD(OAuth 令牌)授权凭据选项,这样我就可以 运行 多个 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>

然后按照此命令的步骤进行操作 returns。这是此参考文献中的 reference to azcopy login. From the heading 'Authorize without a secret store':“

The azcopy login command retrieves an OAuth token and then places that token into a secret store on your system.

来自“Authorize a user identitiy”标题:

After you've successfully signed in, you can close the browser window and begin using AzCopy.

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

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

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

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

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

  1. “将出现 sign-in window。在那个 window 中,使用您的 Azure 帐户凭据登录到您的 Azure 帐户。”

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

您可以 运行 您的原始 azcopy copy /local/data/ http://localvm:10000/devstoreaccount1/data/test --from-to LocalBlob 而不需要问题中的 export 条目。