我已经公开了一个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之类的东西。
答案 0 :(得分:0)
AWS Command-Line Interface (CLI)需要AWS凭证才能运行。不能将AWS CLI作为匿名用户使用。
因此,当您运行aws s3 sync
时,它实际上是在使用您先前存储的访问密钥和秘密密钥。这些凭据标识了您的IAM用户,因此它使用该IAM用户的权限,而不是匿名(公开)访问您的S3内容。
实际上,aws s3 sync
命令不能仅用于GetObject
访问,因为它还需要列出存储桶的内容以发现存在的文件。因此,很明显,它没有使用您定义的存储桶策略。
要回答您的问题...根据上述政策, 某人可能无法下载整个存储桶,因为他们无法列出存储桶的内容 。他们只能访问他们知道存在的对象。