首页 > 解决方案 > 如果文件可使用 s3 命​​令公开访问,如何显示?

问题描述

我尝试了以下命令来显示我的 S3 存储桶中存在的所有文件: aws s3 ls -a s3://project-files

我得到的输出是:

2021-06-21 19:18:27     184163 1624283306646-Plastic_challenge.pdf
2021-06-21 19:25:29     184163 1624283728863-water_toxic_challenge.pdf
2021-06-21 19:26:21     184163 1624283780648-water_toxic_challenge.pdf
2021-06-21 19:38:17     184163 1624284496754-plastic_solution.pdf

但在这里,它并没有暗示哪些文件可以公开访问。我需要看到如下内容:

2021-06-21 19:18:27     184163 PUBLIC 1624283306646-Plastic_challenge.pdf
2021-06-21 19:25:29     184163 Can be made Public 1624283728863-water_toxic_challenge.pdf
2021-06-21 19:26:21     184163 PUBLIC 1624283780648-water_toxic_challenge.pdf
2021-06-21 19:38:17     184163 Can be made Public 1624284496754-plastic_solution.pdf

标签: linuxamazon-web-servicesamazon-s3aws-cli

解决方案


对象可以通过两种方式公开访问:

  • 对象本身的访问控制列表 (ACL) 设置可能为public,
  • 存储桶可以有一个存储桶策略,允许公共访问存储桶或存储桶的一部分

没有一个 API 调用可以列出对象确定它们是否具有公共 ACL。需要单独调用来检索每个对象的权限以确定它们是否是公共的。

同样,没有任何 API 调用可以列出存储桶中的对象并确定存储桶策略是否将它们公开。需要解析存储桶策略中的逻辑以确定存储桶的哪些部分是公开的。存储桶策略中的其他规则可能会使这进一步复杂化,例如,这些规则可能仅使对象可以从给定的 IP 地址公开访问。

如果您希望专门阻止公共访问,则可以在存储桶上激活Block S3 Public Access,这可以禁用通过存储桶策略或通过对象级 ACL 授予的公共访问权限。

另请参阅:列出具有公共读取权限的 S3 对象(在私有存储桶中) - Thinbug


推荐阅读