Google cloud storage 谷歌云:使用gsutil将数据从AWS S3下载到地面军事系统

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

我们的一位合作者已经在AWS上提供了一些数据,我正试图使用gsutil将其放入我们的google云存储桶(只有一些文件对我们有用,所以我不想使用GCS上提供的GUI)。合作者向我们提供了AWS bucket ID、AWS访问密钥ID和AWS秘密访问密钥ID

我查阅了GCE上的文档,编辑了~/.botu文件,以便合并访问密钥。我重新启动了终端并尝试执行“ls”,但出现以下错误:

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”命令)


  • 我取消了~/.boto文件中的两行注释,并放置了访问密钥:



  • “gsutil版本-l”的输出:



  • 带有-DD选项的输出为:



  • 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 没有列出该存储桶内容的权限

    我假设您可以使用and或设置gcloud凭据,并且可以成功地向GCS列出/写入对象

    从那以后,你需要两样东西。正确配置的AWS IAM角色应用于您正在使用的AWS用户,以及正确配置的
    ~/.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