amazon-web-services - 允许在 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 或其他东西。
解决方案
AWS 命令行界面 (CLI)需要 AWS 凭证才能运行。不能以匿名用户身份使用 AWS CLI。
因此,当您运行时aws s3 sync
,它实际上是使用您之前存储的 Access Key 和 Secret Key。这些凭证识别您的 IAM 用户,因此它使用来自该 IAM 用户的权限,而不是匿名(公开)访问您的 S3 内容。
实际上,该aws s3 sync
命令不能仅用于GetObject
访问,因为它还需要列出存储桶的内容以发现存在哪些文件。因此,它显然没有使用您定义的存储桶策略。
要回答您的问题...根据上述政策,有人无法下载您的整个存储桶,因为他们无法列出存储桶的内容。他们只能访问他们知道存在的对象。
推荐阅读
- sql - 将团购与窗口功能相结合?
- javascript - 在图像中查找十六进制颜色和 X、Y
- r - 循环遍历 R 中的空数据框并将值分配给列
- python - 提取特定文本时出现问题(自动交易程序的请求令牌)
- pyspark - 在 pycharm 中运行 pyspark 程序时出现 Pyspark 错误
- jquery - JQuery 修改一个克隆的变量(永远)
- java - 使用屏幕控制器进行角色移动不适用于 libgdx
- html - 为什么本地存储值会覆盖来自同一来源的不同 iframe?
- ios - 如何在领域中的查询本身中使用查询结果
- amazon-sagemaker - 将 Sagemaker 结果与输入列相关联