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

Posted

技术标签:

【中文标题】gsutil - 使用联合用户 AWS 密钥时 cp、rsync 的问题【英文标题】:gsutil - issue with cp, rsync when using federated user AWS keys 【发布时间】:2017-09-25 16:35:05 【问题描述】:

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

gsutil rsync -d -r -n s3://mycustomer-src gs://mycustomer-target

在 GCP 上的虚拟机上尝试此操作时,我收到如下错误消息。 请注意,如果我在 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

这是 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)可以正常工作。

【问题讨论】:

在我看来,除了 aws_access_key_id 和 aws_secret_access_key 之外,'gsutil' 不考虑也用于凭证验证的 aws_session_token 在试用 Cloud Storage Transfer 功能时似乎也存在此问题。 【参考方案1】:

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

export AWS_SECURITY_TOKEN=$AWS_SESSION_TOKEN

之后你应该可以正常使用gsutil了。

【讨论】:

以上是关于gsutil - 使用联合用户 AWS 密钥时 cp、rsync 的问题的主要内容,如果未能解决你的问题,请参考以下文章

配置 gsutil .boto 文件以使用 AWS STS 假设角色

gsutil 是不是支持 aws s3 的 sigv4?

如何使用 gsutil 通过 http 链接从谷歌云存储下载到 AWS 实例或 s3 存储桶?

更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?

在 React 中使用 aws-amplify 将文件上传到具有联合身份的 S3 时出错

gsutil rsync Google Store 与 AWS S3 400 ExcessHeaderValues