允许在S3存储桶中公开读取与允许下载存储桶内容相同吗?

时间:2018-10-17 07:15:18

标签: amazon-web-services amazon-s3

我已经公开了一个S3存储桶:

  BucketPolicy:
    Type: "AWS::S3::BucketPolicy"
    Properties:
      Bucket:
        Ref: Bucket
      PolicyDocument:
        Statement:
          - Action:
              - "s3:GetObject"
            Effect: "Allow"
            Resource:
              Fn::Join:  ["", ["arn:aws:s3:::", Ref: "Bucket", "/*"]]
            Principal:
              AWS: "*"
            Sid: "AllowPublicRead"

现在我有一个公共存储桶,可以通过公共URL从中访问对象。 现在,我尝试在本地下载存储分区的全部内容:

aws s3 sync s3://bucket . 

这也可以。我可以下载此存储桶的全部内容,这正常吗?我知道我公开了它,但是共享一些对象而不是下载整个存储桶是更多的事情。

我想我还需要listobject之类的东西。

1 个答案:

答案 0 :(得分:0)

AWS Command-Line Interface (CLI)需要AWS凭证才能运行。不能将AWS CLI作为匿名用户使用。

因此,当您运行aws s3 sync时,它实际上是在使用您先前存储的访问密钥和秘密密钥。这些凭据标识了您的IAM用户,因此它使用该IAM用户的权限,而不是匿名(公开)访问您的S3内容。

实际上,aws s3 sync命令不能仅用于GetObject访问,因为它还需要列出存储桶的内容以发现存在的文件。因此,很明显,它没有使用您定义的存储桶策略。

要回答您的问题...根据上述政策, 某人可能无法下载整个存储桶,因为他们无法列出存储桶的内容 。他们只能访问他们知道存在的对象。