过去几个小时我一直试图设置从S3到谷歌存储桶的转移。
创建传输时我不断收到的错误是:“无效的访问密钥。确保S3存储桶的访问密钥正确,或将存储桶权限设置为”授予所有人“。
访问密钥和密码都是正确的,因为它们目前正在生产中用于S3完全访问。
需要注意的事项:
广告管理政策:
{
"Version": "2008-10-17",
"Id": "Policy234234234",
"Statement": [
{
"Sid": "Stmt234234",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObjectAcl",
"s3:RestoreObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectVersionAcl"
],
"Resource": "arn:aws:s3:::mybucket/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xyzmatey"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*"
},
{
"Sid": "3",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::mybucket"
}
]
}
CORS政策
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://www.mywebsite.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>AUTHORIZATION</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>AUTHORIZATION</AllowedHeader>
</CORSRule>
</CORSConfiguration>
知道我哪里出错了?
编辑:我在google计算实例上设置了gsutil
工具,并在确切的存储桶上使用相同的AWS密钥进行了复制。工作就像一个魅力..
答案 0 :(得分:6)
我是转会服务的开发者之一。
您需要在权限中添加“s3:GetBucketLocation”。
如果您收到的错误更具体地说是关于您的ACL,而不是无效的密钥,那将是更好的选择。我会调查一下。
编辑:在此帖子中添加更多信息。有文档列出了这一要求:https://cloud.google.com/storage/transfer/
以下是“配置访问权限”部分的引用:
“如果您的源数据是Amazon S3存储桶,则设置AWS身份和访问管理(IAM)用户,以便您为用户提供列出Amazon S3存储桶的能力,获取该位置存储桶,并读取存储桶中的对象。“ [强调我的。]
EDIT2:这个答案中提供的大部分信息对其他人有用,所以它会留在这里,但John的回答实际上已经触及OP的问题。
答案 1 :(得分:5)
我是转会服务的工程师。 您遇到此问题的原因是Transfer服务尚不支持AWS S3区域ap-southeast-1(新加坡),因为GCP在该区域中没有与AWS S3的网络安排。我们现在可以考虑支持该地区,但您的转移将比其他地区慢得多。
最后,我们正在修复以显示更清晰的错误消息。
答案 2 :(得分:3)
您还可以获取“无效的访问密钥”&#39;如果您尝试传输子目录而不是根S3存储桶,则会出错。例如,尽管我为整个S3存储桶提供了google的读取权限,但我尝试传输s3://my-bucket/my-subdirectory
并且仍然无法使用无效的访问密钥错误。事实证明,谷歌转移服务不支持转移S3存储桶的子目录,您必须指定根作为转移的来源:s3://my-bucket
。
答案 3 :(得分:2)
可能这可以帮助:
首先,在 boto 配置文件中指定 S3_host ,即包含endpoint-url的区域(如果该区域为us,则无需指定s3-host- east-1,默认)。例如,
vi~ / .boto
s3_host = s3-us-west-1.amazonaws.com
就是这样, 现在您可以继续执行以下任何一个命令:
gsutil -m cp -r s3:// bucket-name / folder-name gs:// Bucket /
gsutil -m cp -r s3:// bucket-name / folder-name / specific-file-name gs:// Bucket /
gsutil -m cp -r s3:// bucket-name / folder-name / gs:// Bucket / *
gsutil -m cp -r s3:// bucket-name / folder-name / file-name-Prefix gs:// Bucket / **
您还可以尝试 rsync 。
答案 4 :(得分:0)
几分钟前我遇到了同样的问题。而且我很容易通过提供管理员访问密钥和密钥来解决它。
它对我有用。仅供参考,我的s3水桶是北弗吉尼亚州。