environment-variables - 如何在生产应用程序中处理配置值
问题描述
我是新手,最近一直在学习如何构建/部署 MEAN 堆栈应用程序,现在希望部署到 AWS(使用 EC2)。目前,我的 node.js API 使用环境变量 (process.env) 获取以下值:
- MongoDB URL(用于在端口 27017 上运行的进程)
- JWT 身份验证密钥
- 电子邮件服务的电子邮件和密码
- 运行节点的端口
将此应用程序部署到生产环境时,处理这些动态值的最佳方法是什么?我读过环境变量,虽然比明文值更安全,但在某些方面仍然不安全。我知道用于安全存储这些值的 AWS 参数存储之类的服务,但想知道在将应用程序部署到生产中以用于任何给定的部署选项时,是否有一些通用的最佳实践建议可用于存储此类配置变量。
谢谢
解决方案
与将凭证存储在配置文件或环境变量中相比,AWS Parameter Store 确实具有优势。要了解有关这 2 个潜在问题的更多信息,您可能需要查看此问题的答案https://stackoverflow.com/a/28329996/2579733
AWS Parameter Store 几乎不需要配置,因为它是 AWS 生态系统中的一个工具。
存储在 PS 中的秘密在传输和静止时都被加密。
基本上,您需要一个 IAM 角色ssm:GetParameter
和kms:Decrypt
权限,您可以将其分配给您的 EC2 实例。
然后基本的 node.js 实现可以是这样的:
const aws = require('aws-sdk')
async function getSecureValue(path) {
const ssm = new aws.SSM()
const ssmParams = {
Name: path,
WithDecryption: true,
}
const storeResponse = await ssm.getParameter(ssmParams).promise()
return storeResponse.Parameter.Value
}
const password = await ssm.getSecureValue(PASSWORD_SSM_PATH)
推荐阅读
- python - 按特定轴过滤元组列表
- java - 在使用 material.textfield.TextInputLayout 时,我的轮廓框涵盖了提示。如何在不覆盖我的盒子的情况下显示提示?
- r - `mstate`:将“long”格式数据准备成“mstate”格式数据
- javascript - 如何在图表中显示数据?
- java - 如何在 web.xml 中创建多个通配符 url 模式?
- html - 如何从该网站获取 href attr?
- db2 - 在 DB2 SQL 函数中,是否有等效于 JAVA 和 .Net.. 中的 finally 块?
- javascript - 将所有数组对象(firestore 时间戳)转换为日期
- python - 从 Pandas 列中提取嵌套字典
- javascript - Javascript 函数仅在其他 javascript 函数被禁用时才有效