Google cloud storage 谷歌云:使用gsutil将数据从AWS S3下载到地面军事系统
我们的一位合作者已经在AWS上提供了一些数据,我正试图使用gsutil将其放入我们的google云存储桶(只有一些文件对我们有用,所以我不想使用GCS上提供的GUI)。合作者向我们提供了AWS bucket ID、AWS访问密钥ID和AWS秘密访问密钥ID 我查阅了GCE上的文档,编辑了~/.botu文件,以便合并访问密钥。我重新启动了终端并尝试执行“ls”,但出现以下错误:Google cloud storage 谷歌云:使用gsutil将数据从AWS S3下载到地面军事系统,google-cloud-storage,gsutil,Google Cloud Storage,Gsutil,我们的一位合作者已经在AWS上提供了一些数据,我正试图使用gsutil将其放入我们的google云存储桶(只有一些文件对我们有用,所以我不想使用GCS上提供的GUI)。合作者向我们提供了AWS bucket ID、AWS访问密钥ID和AWS秘密访问密钥ID 我查阅了GCE上的文档,编辑了~/.botu文件,以便合并访问密钥。我重新启动了终端并尝试执行“ls”,但出现以下错误: gsutil ls s3://cccc-ffff-03210/ AccessDeniedException: 403 A
gsutil ls s3://cccc-ffff-03210/
AccessDeniedException: 403 AccessDenied
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied
我还需要配置/运行其他东西吗
谢谢
编辑:
谢谢你的回复
我安装了CloudSDK,可以访问并运行我的google云存储项目上的所有gsutil命令。我的问题是试图访问与我共享的AmazonS3(例如“ls”命令)
1。生成您的GCS凭证 如果您下载,然后运行
gcloud init
和gcloud auth login
,gcloud应该为您登录的帐户配置OAuth2凭据,允许您访问您的GCS存储桶(如果存在~/.boto
文件,它通过创建一个boto文件来加载)
如果您使用的是独立的gsutil,请运行gsutil config
在~/.boto
处生成一个配置文件
2。将您的AWS凭据添加到文件~/.boto
~/.boto
文件的[Credentials]部分应填充并取消注释以下两行:
aws_access_key_id = IDHERE
aws_secret_access_key = KEYHERE
如果您已经这样做了:
- 确保没有意外地交换key和id的值
- 验证您正在加载正确的boto文件-您可以通过
运行
并查找“配置路径:”行李>gsutil version-l
- 如果你仍然收到403,很可能他们也给了你 错误的bucket名称,或与帐户对应的密钥和id 没有列出该存储桶内容的权限
~/.boto
文件
AWS S3存储桶访问的IAM策略
必须通过授予用户的角色或附加到用户的内联策略应用这样的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::some-s3-bucket/*",
"arn:aws:s3:::some-s3-bucket"
]
}
]
}
重要的是,您有ListBucket
和GetObject
操作,这些操作的资源范围至少包括您希望从中读取的bucket(或其前缀)
.boto文件配置
服务提供者之间的互操作总是有点棘手。在撰写本文时,为了支持(所有AWS地区普遍支持的唯一属性),您必须在~/.boto
文件中添加两个额外的属性,而不仅仅是凭证,在[s3]
组中
[Credentials]
aws_access_key_id = [YOUR AKID]
aws_secret_access_key = [YOUR SECRET AK]
[s3]
use-sigv4=True
host=s3.us-east-2.amazonaws.com
use-sigv4
通过gsutil提示Boto对请求使用AWS签名V4。不幸的是,目前这需要在配置中指定主机。很容易找到主机名,因为它遵循s3.[BUCKET REGION].amazonaws.com
的模式
如果您有来自多个S3区域的rsync/cp工作,您可以用几种方法来处理它。您可以在运行命令之前设置环境变量,如BOTO\u CONFIG
,以便在多个文件之间进行更改。或者,可以使用顶级参数覆盖每次运行时的设置,如:
gsutil-os3:host=s3.us-east-2.amazonaws.com ls s3://some-s3-bucket
编辑:
只是想补充一下。。。另一个很酷的方法是。您是否在~/.boto中取消了AWS键的注释?尝试使用“-D”或“-DD”命令行选项来调试示例失败的原因。谢谢,它可以工作。需要use-sigv4=True属性和host属性才能在google colab中实现。
aws_access_key_id = IDHERE
aws_secret_access_key = KEYHERE
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::some-s3-bucket/*",
"arn:aws:s3:::some-s3-bucket"
]
}
]
}
[Credentials]
aws_access_key_id = [YOUR AKID]
aws_secret_access_key = [YOUR SECRET AK]
[s3]
use-sigv4=True
host=s3.us-east-2.amazonaws.com