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

时间:2016-02-04 18:06:11

标签: amazon-s3 google-cloud-storage file-transfer

过去几个小时我一直试图设置从S3到谷歌存储桶的转移。

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

访问密钥和密码都是正确的,因为它们目前正在生产中用于S3完全访问。

需要注意的事项:

  1. 在S3存储桶上启用CORS
  2. 存储桶策略仅允许经过身份验证的AWS用户列出/查看其内容
  3. S3需要用于访问的签名网址
  4. 广告管理政策:

    {
        "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密钥进行了复制。工作就像一个魅力..

5 个答案:

答案 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

https://cloud.google.com/storage/docs/gsutil/commands/rsync

答案 4 :(得分:0)

几分钟前我遇到了同样的问题。而且我很容易通过提供管理员访问密钥和密钥来解决它。

它对我有用。仅供参考,我的s3水桶是北弗吉尼亚州。