从S3转移到Google存储 - 错误的密钥

Mys*_*yos 5 amazon-s3 file-transfer google-cloud-storage

我已经尝试过去几个小时来设置从S3到我的谷歌存储桶的转移.

创建传输时,我不断收到的错误是:"无效的访问密钥.确保S3存储桶的访问密钥正确,或将存储桶权限设置为"授予所有人".

鉴于它们当前正在生产中用于S3完全访问,因此访问密钥和秘密都是正确的.

有几点需要注意:

  1. 在S3存储桶上启用CORS
  2. 存储桶策略仅允许经过身份验证的AWS用户列出/查看其内容
  3. 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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

知道我哪里出错了?

编辑:我已经gsutil在google计算实例上设置了该工具,并在确切的存储桶上使用相同的AWS密钥进行了复制.工作就像一个魅力..

Jac*_*ner 6

我是转会服务的开发者之一.

您需要在权限中添加"s3:GetBucketLocation".

如果您收到的错误更具体地说是关于您的ACL,而不是无效的密钥,那将是更好的选择.我会调查一下.

编辑:在这篇文章中添加更多信息.有文档列出了此要求:https://cloud.google.com/storage/transfer/

以下是"配置访问"部分的引用:

"如果您的源数据是Amazon S3存储桶,则设置AWS身份和访问管理(IAM)用户,以便您可以让用户列出Amazon S3存储桶,获取存储桶的位置以及读取对象在桶里." [强调我的.]

EDIT2:这个答案提供的大部分信息对其他人都有用,所以它会留在这里,但John的答案实际上已经触及OP的问题.


小智 5

我是转运服务的工程师.您遇到此问题的原因是Transfer服务尚不支持AWS S3区域ap-southeast-1(新加坡),因为GCP在该区域中没有与AWS S3的网络安排.我们现在可以考虑支持该地区,但您的转移将比其他地区慢得多.

最后,我们正在修复以显示更清晰的错误消息.