我在Docker容器中有一个web应用程序,我想通过另一个容器(运行NGINX)代理它,该容器对外公开,只处理HTTPS流量。两个容器都将由ECS托管在同一个EC2实例上。让NGINX容器从S3或IAM检索SSL私钥的最佳方法是什么?
请注意,出于安全原因,我不想在Docker映像中包含私钥。我想在创建容器时从S3或IAM中检索私钥,从环境变量中获取AWS用户凭据。
Amazon Elastic Beanstalk有一个很好的方法来实现这一点,但我认为ECS没有这样的方法。我想我需要编写一个Docker入口点(或包装Nginx命令),以便安装S3/IAM客户端,然后使用环境中的凭据下载密钥。AWS提供了更好的方式吗?看起来弹性负载平衡是一个解决方案,但我找不到任何关于LB和EC2实例之间的安全措施的信息。
这个问题有几个部分,
将Nginx和web应用程序放在同一个实例上可以通过将两个容器定义为同一ecs任务的一部分来实现。我建议创建一个从nginx到webapp容器的docker链接。这将使您能够避免将webapp容器端口暴露在外部。唯一暴露给主机的端口将是nginx端口。
在容器启动时安全地检索密钥的方法之一是让一个自定义shell脚本在容器上启动nginx服务。为此,您需要构建自己的docker容器。在docker构建文件中,使用自定义shell脚本定义容器的开始。在shell脚本中,您可以拥有使用aws-cli从s3检索文件的逻辑。检索完成后,您可以启动nginx服务。使用aws-cli将允许您使用ec2实例上可用的凭据。如果您的基本docker映像没有aws-cli,则需要添加它。