大家好,
我们正在考虑改进 Discourse 处理 AWS [1] 身份验证的方式,在进行任何更改之前,我们希望能了解您当前的设置情况。
当前情况
目前,Discourse 中有几种配置 AWS 身份验证的方法:
选项 1:显式凭证(通过站点设置)
- 在您的站点设置中设置
s3_access_key_id和s3_secret_access_key - 身份验证是按站点进行的
选项 2:显式凭证(通过环境变量)
- 设置环境变量:
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY - 在多站点集群中,所有站点的身份验证方式相同
选项 3:“使用 IAM 配置文件”设置
- 启用
s3_use_iam_profile站点设置或设置环境变量DISCOURSE_S3_USE_IAM_PROFILE=true - 告诉 Discourse 让 AWS SDK 自动查找凭证
- 最初是为 EC2 实例和通过 IMDS 获取凭证而设计的,但在其他环境中也适用
我们希望改变的原因
1. 令人困惑的设置名称
s3_use_iam_profile 设置的名称具有误导性。它暗示它仅适用于 EC2 实例配置文件,但实际上它启用了任何 AWS SDK 凭证来源:
- EC2 实例配置文件
- ECS 任务角色
- 环境变量
- AWS 凭证文件
- IAM 角色假设
- 以及更多…
2. 安全性:静态密钥与角色假设
在我们的金属托管平台上,我们目前使用定期轮换的访问密钥。我们正计划将其切换为角色假设,以实现更好的隔离、更好的访问控制机会,并支持更好的内部流程。
当前方法的缺点:
- 访问密钥不会过期(直到轮换)
- 具有广泛的权限范围
- 如果泄露,可能会被泄露
- 需要手动轮换程序
改为使用角色假设的优点:
- 持久凭证可以通过 IP 地址进行限制
- 操作使用自动过期的临时凭证(通常为 1 小时)
- 即时访问,因为凭证仅在需要时存在
- 减少了爆炸半径,因为受损的临时凭证会很快过期
- 无需密钥轮换 - 角色假设过程处理刷新
- 更好的审计跟踪 - 每个会话都会单独跟踪
我们正在考虑的方案
我们正在考虑:
- 将设置重命名为更清晰的名称,例如
aws_credentials_from_environment - 完全删除该设置,并自动检测何时应从环境变量与站点设置中获取凭证
我们需要您的意见!
请告诉我们:
-
您如何进行 S3 身份验证?
- 站点设置中的显式访问密钥
- EC2 实例配置文件(启用了
s3_use_iam_profile) - ECS 任务角色(启用了
s3_use_iam_profile) - 环境变量(启用了
s3_use_iam_profile) - … 其他方式?
-
如果您使用
s3_use_iam_profile:- 您在什么环境中运行?(EC2、ECS、Docker、裸机等)
- 当前的名称/描述是否引起了任何混淆?
- 不同的名称是否会更清晰?
-
对此设置的更改有任何担忧吗?
- 担心破坏您当前的设置?
- 需要时间来测试更改?
- 其他考虑因素?
为什么这很重要
更好的 S3 身份验证意味着:
- 更安全 - 无需管理静态密钥
- 更轻松的设置 - 特别是对于云部署
- 更少的混淆 - 更清晰的设置和文档
- 更好地支持现代 AWS 身份验证模式
您的反馈将帮助我们做出对每个人都有益的改进。感谢您花时间分享您的设置!
此处阅读:您使用的任何 S3 兼容对象存储提供商 ↩︎