访问公共AWS s3存储桶

时间:2014-11-30 21:01:40

标签: amazon-web-services amazon-s3 amazon

我们一群朋友在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>/*"
        }
    ]
}

注意:上述策略中的内容设置为存储桶的名称。

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

1 个答案:

答案 0 :(得分:0)

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

但是,它不允许列出存储桶,这很可能是map-reduce操作所必需的。所以,我还建议在存储桶本身上授予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"
        ]
      }
    }
  ]
}

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

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

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

$ aws s3 ls s3://<bucket-name>
$ aws s3 cp file.txt s3://<bucket-name>/file.txt