gsutil - 使用联合用户 AWS 密钥时出现 cp、rsync 问题

use*_*500 1 amazon-s3 amazon-web-services google-cloud-storage gsutil google-cloud-platform

我正在尝试从 AWS S3 到 GCP 存储的简单 rsync(或 cp)。例如

gsutil rsync -d -r -n s3://mycustomer-src gs://mycustomer-target
Run Code Online (Sandbox Code Playgroud)

在 GCP 上的 VM 上尝试此操作时,我收到如下错误消息。请注意,如果我在 VM 上安装 aws cli,那么我可以很好地访问/浏览 AWS S3 内容。AWS 凭证存储在 ~/.aws/credentials 文件中。

Building synchronization state...
Caught non-retryable exception while listing s3://musiclab-etl-dev/: AccessDeniedException: 403 InvalidAccessKeyId
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>ASIAJ3XGCQ7RGZYPD5UA</AWSAccessKeyId><RequestId>CE8919045C68DEC4</RequestId><HostId>i7oMBM61US3FyePJka8O+rjoHSo1rIZbRGnVZvIGkjEVPh6lXdbp03pZOtJ68F3pPdAAW1UvF5s=</HostId></Error>
CommandException: Caught non-retryable exception - aborting rsync
Run Code Online (Sandbox Code Playgroud)

这是 gsutil 中的错误吗?任何解决方法或提示表示赞赏。

注意 - 客户的 AWS 账户是为联合访问设置的,需要使用使用类似于此的脚本获得的 AWS 密钥 - https://aws.amazon.com/blogs/security/how-to-implement-a-general-solution -for-federated-apicli-access-using-saml-2-0/ 当会话令牌过期时,AWS 密钥设置为过期。

如果我使用具有典型 AWS 密钥(非过期)的不同 AWS 帐户(无联合),则 rsync(或 cp)可以正常工作。

小智 6

看来 gsutil 仍然使用旧版AWS_SECURITY_TOKEN而不是AWS_SESSION_TOKEN. 如果您的脚本没有自动设置,您可以像这样手动设置:

export AWS_SECURITY_TOKEN=$AWS_SESSION_TOKEN
Run Code Online (Sandbox Code Playgroud)

在此之后,您应该能够正常使用 gsutil。