【发布时间】:2016-05-14 11:58:15
【问题描述】:
过去几个小时我一直在尝试设置从 S3 到我的谷歌存储桶的传输。
我在创建传输时不断收到的错误是:“无效的访问密钥。确保您的 S3 存储桶的访问密钥正确,或将存储桶权限设置为授予所有人。”
访问密钥和秘密都是正确的,因为它们当前正在生产中用于 S3 完全访问。
需要注意的几点:
- 在 S3 存储桶上启用了 CORS
- 存储桶策略仅允许经过身份验证的 AWS 用户列出/查看其内容
- S3 需要签名 URL 才能访问
存储桶政策:
{
"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 密钥进行了复制。像魅力一样工作..
【问题讨论】:
-
您的存储桶策略不包括“s3:ListBucket”。我猜传输服务可能需要它来获取要传输的对象列表。尝试将其添加到列表中?当然,这并不能解释 gsutil 如何设法复制存储桶,所以这可能是错误的。
-
嘿,布兰登,我添加了您上面提到的政策。相同的结果:无效的密钥。看看我是否能掌握谷歌的支持人员。谢谢。
标签: amazon-s3 google-cloud-storage file-transfer