访问公共 AWS s3 存储桶

Arp*_*t M 2 amazon-s3 amazon-web-services

我们一群朋友正在做一个 Map-Reduce 项目,并且正在处理一个通用数据集。我的朋友已使用他的 AWS 帐户将数据上传到 s3 存储桶,并将 s3 存储桶策略设置为:

{
    "Version": "2008-10-17",
    "Id": "Policy1417380373111",
    "Statement": [
        {
            "Sid": "Stmt1417380310953",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<bucket-name>/*"
        },
        {
            "Sid": "Stmt1417380367754",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<bucket-name>/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

注意:<bucket-name>上述策略中的设置为存储桶的名称。

现在我如何将此公共存储桶挂载为我的 aws 账户中的 s3 存储桶之一?

Joh*_*ein 5

显示的存储桶策略将允许任何人从指定的 Amazon S3 存储桶上传 ( PutObject) 和下载 ( )。GetObject

但是,它不允许列出存储桶,而这很可能是您的映射缩减操作所必需的。因此,我还建议授予ListBucket存储桶本身的权限:

{
  "Id": "SomeID",
  "Statement": [
    {
      "Sid": "SomeID",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::<bucket-name>",
        "arn:aws:s3:::<bucket-name>/*"
      ],
      "Principal": {
        "AWS": [
          "123456789012"
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

此外,不建议授予对您的存储桶的公共访问权限。相反,您的朋友应该在字段中输入您的帐号Principal,以便您可以访问数据,但其他人无法访问它。

所有这些都将使您的存储桶可访问,但它不会出现在您的 Amazon S3 管理控制台中,您也无法将存储桶“挂载”到您自己的账户。但是,您将能够列出、获取和放置对象。

您可以使用 AWS 命令​​行界面 (CLI) 对此进行测试。尝试列出共享存储桶的内容,或将文件复制到其中:

$ aws s3 ls s3://<bucket-name>
$ aws s3 cp file.txt s3://<bucket-name>/file.txt
Run Code Online (Sandbox Code Playgroud)