amazon-web-services - 我可以在 AWS ECS 基础设施中使用 docker 密钥吗?
问题描述
我正在努力寻找将秘密配置数据传递给我的 Node.Js 应用程序的最佳方式。
问题是我需要它在我的本地机器上运行,在 CI 环境中进行测试和登台,以及在生产 (AWS) 上运行。
我正在考虑使用此处描述的 docker 机密: https ://medium.com/better-programming/how-to-handle-docker-secrets-in-node-js-3aa04d5bf46e
问题在于,它仅在您将 Docker 作为服务(通过 Swarm)运行时才有效,我可以在本地执行此操作,但不能在 AWS ECS 和 CI 上执行。(或者我在那里遗漏了什么?)
然后我也可以使用 Amazon 机密,但我如何在我的 CI 环境和本地环境中获取它们?或者如果我没有互联网?
有没有一种方法可以制作一个单独的文件或者我可以在每个环境中使用的东西,无论它是我的本地文件docker run
还是CI
一个或AWS ECS
一个?
解决方案
有没有办法制作一个单独的文件或者我可以用于每个环境的东西,无论它是通过 docker run 运行的本地文件还是 CI 文件或 AWS ECS 文件?或者如果我没有互联网?
以无互联网为目标的 N-Environment很难在 AWS 服务上进行中继以保密,例如存储参数等。
我可以建议的是使用dot env这将是环境独立的,所有你需要处理来自不同来源的不同环境,例如
- 在 AWS 上的暂存和生产上运行时从 s3 拉取
- 在开发机器上工作时绑定本地 .env 以处理无互联网情况
- 从 s3 拉取或为 CI 生成动态点环境
因此,处理这个每个环境都会消耗适当的 Dot ENV 文件,您可以在Docker 入口点添加逻辑。
#!/bin/sh
if [ "${NODE_ENV}" == "production" ];then
# in production we are in aws and we can pull dot env file from s3
aws s3 cp s3://mybucket/production/.env /app/.env
elif [ "${NODE_ENV}" == "staging" ];then
# in staging we also assume that we are in aws and we can pull dot env file from s3
aws s3 cp s3://mybucket/staging/.env /app/.env
elif [ "${NODE_ENV}" == "ci" ];then
# generate dynamic ENV or pull from s3
aws s3 cp s3://mybucket/ci/.env
else
echo "running against local env, please dot env file like docker run -it $PWD/.env:/app/.env ..."
fi
echo "Startin node application"
exec node "$@
在 s3 上启用加密,加上只有生产环境应该能够提取生产环境文件,更强大的策略将导致更安全的机制。
对于本地设置,您可以尝试
docker run -it -e NODE_ENV="local" --rm $PWD/.env:/app/.env myapp
推荐阅读
- java - 如何实现一个引用主对象中定义的父对象的静态方法?
- symfony - PhpStorm 无法识别 KernelBrowser getResponse 函数
- reactjs - 我可以控制台记录我的状态,但我仍然得到“无法读取未定义的属性'数据'”。为什么?
- python - 如何从excel文件中更改xml值
- uwp - 在所有 3 个平台(x86、x64、ARM)中将 UWP 应用上传到 Microsoft Store
- python - 在没有大数据基础设施的情况下,如何最有效地平均 Python 中数百个文件的各个列?
- python - 在从 Excel 范围填充的嵌套元组上使用 join()
- android - RecyclerView 不显示任何项目
- python - 如何从 excel 表中复制数据并粘贴到谷歌浏览器中?
- sharepoint - PowerApps 中 Sharepoint 项目的点赞和支持按钮