我们在设置中,在 AWS EKS 集群中运行 Discourse,并期望使用同一 AWS 账户中的 S3 存储桶进行媒体存储。运行 Discourse 的 EKS pod 提供了 Kubernetes 服务账户和 IAM 角色。S3 存储桶已阻止所有公共访问,其 ACL 仅授予存储桶所有者(AWS 账户)读/写访问权限。
通过启用 Discourse 站点设置“启用 S3 上传”、“S3 使用 IAM 配置文件”和“安全媒体上传”,我们可以使用我们的设置将媒体上传到 Discourse 主题。但是,由于 UploadCreator 模块中的检查,任何与站点设置相关的上传(例如徽标等)都会失败,因为它们尝试使用 S3 API 的 private_acl 参数设置为“false”来上传媒体。启用“安全媒体上传”后,所有内容都以 private_acl 设置为 true 的方式上传,这难道不更合理吗?
Falco
(Falco)
2
即使是在完全私有的实例中,如 Logo 和 Favicon 等设置上传项也会显示在登录页面上,并被视为公开的。这些项也经常被不进行身份验证的工具下载,例如进行 OpenGraph 嵌入的网站、PWA 安装、Google 搜索结果等。
1 个赞
在这种情况下,将其依赖于“s3 使用 IAM 配置文件”标志是否启用是否更有意义?如果启用了 IAM 配置文件使用,那么我们就等于确认存储分区没有公共访问权限,因此需要使用私有 ACL 进行访问。我可能是错的,但我看不出在 Discourse 中使用此设置的任何理由,除非他们无法公开他们的存储分区。
Falco
(Falco)
4
不,那不符合逻辑。
本网站使用 s3 use iam profile,并且也有一个公共存储桶。两者之间根本没有任何关联。
s3 use iam profile 只意味着“我不想传递密钥/密钥对,请直接从 AWS 内部 API 自动获取”。
够了。那么我想我们唯一的解决方案是设置另一个标志来指定 s3 存储桶 ACL 为私有,或者这听起来不合逻辑?
Falco
(Falco)
6
这可以满足您的需求,但我们并未计划在路线图中进行此项操作,因为目前我们使用公共存储桶并禁用文件列表,同时为实际文件设置单独的私有 ACL 运行良好。
为什么在您的用例中无法使用带有私有文件的公共存储桶?
3 个赞
嗯,这在我们公司是一个高层级的决定。所有资产,包括存储桶,都应该是私有的,并通过 IAM 角色进行访问。为了将存储桶对象传递给 Discourse 前端,我们在同一个 EKS 集群中构建了一个 S3 代理应用程序,并将其配置为 Discourse 设置中的 CDN。现在,所有剩余的工作是能够将站点设置资产(如徽标等)作为私有文件上传,为此我们需要这个标志。默认情况下,Discourse 会尝试将此类资产作为公共文件上传,而我希望通过这个新标志来覆盖它。
1 个赞
phil22
(Philip)
11
我们为我们的 discourse 实例使用了出色的 安全上传 功能,它运行良好,但如果能支持阻止对存储桶的所有公共访问那就更好了。
最近我一直在尝试解决 AWS Security Hub 提出的所有“AWS 基础安全最佳实践”问题。其中之一是“S3 通用存储桶应阻止公共访问”。
我想有不少公司正在经历同样的过程,试图应用“AWS 基础安全最佳实践”并遇到此问题。
不指望近期会优先处理,但我找到了这个帖子,并认为我应该为它添加一个“+1”。
这是 AWS FSBP 建议:Security Hub controls for Amazon S3 - AWS Security Hub
1 个赞