首页 > 解决方案 > 允许在 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 或其他东西。

标签: amazon-web-servicesamazon-s3

解决方案


AWS 命令​​行界面 (CLI)需要 AWS 凭证才能运行。不能以匿名用户身份使用 AWS CLI。

因此,当您运行时aws s3 sync,它实际上是使用您之前存储的 Access Key 和 Secret Key。这些凭证识别您的 IAM 用户,因此它使用来自该 IAM 用户的权限,而不是匿名(公开)访问您的 S3 内容。

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

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


推荐阅读