每个现代Web应用都有不想让人看到的秘密。API密钥、数据库密码、第三方服务的访问令牌——这些东西硬编码在代码里就是定时炸弹,传到GitHub上更是社死现场。AWS Secrets Manager专门解决这个痛点,但怎么让你的服务器实例安全地拿到这些密钥?很多人卡在这一步。

这篇延续之前的CloudFront+Terraform架构,把密钥管理完整接进去。完整代码已开源在GitHub的v7-secrets分支,可以直接克隆跟着做。

打开网易新闻 查看精彩图片

第一步是创建密钥本身。用AWS CLI一次性搞定:

aws secretsmanager create-secret \
--name "my_app/v1/credentials" \
--description "Application credentials" \
--secret-string '{"my_api_key": "your-api-key"}'

执行成功会返回ARN、Name和VersionId三个关键字段。这个ARN后面写IAM策略时会用到,建议复制保存。

密钥创建后需要更新值怎么办?手动去控制台点太low了。这里提供一个从.env文件自动同步的Bash脚本:

脚本先检查.env文件是否存在,然后逐行解析键值对,过滤掉空行和注释,最后拼成JSON格式。核心逻辑分两支:如果密钥已存在就调用update-secret,不存在则create-secret。这样本地开发环境改完配置,一条命令就能同步到云端。

实际跑通后,你的应用就能通过IAM角色关联的权限,在运行时从Secrets Manager动态拉取密钥。不需要把敏感信息写进镜像,不需要挂在文件系统上,更不需要在代码里到处硬编码。