首页 > 解决方案 > 我可以在 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一个?

标签: amazon-web-servicesdockeramazon-ecsdocker-secrets

解决方案


有没有办法制作一个单独的文件或者我可以用于每个环境的东西,无论它是通过 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

推荐阅读