我在Docker容器中有一个Web应用程序,我想通过暴露给外部世界的另一个容器(运行NGINX)来代理它,并且只处理HTTPS流量。两个容器都将由ECS托管在同一EC2实例上。使NGINX容器从S3或IAM检索SSL私钥的最佳方法是什么?
请注意,出于安全原因,我不想在Docker映像中包含私钥。我想在创建容器时从S3或IAM检索私钥,从环境变量中获取AWS用户凭据。
Amazon Elastic Beanstalk has a nice way to achieve this,但我不认为ECS有类似的东西。我认为我需要编写一个Docker入口点(或包装Nginx命令)才能安装S3 / IAM客户端,然后使用环境中的凭据下载密钥。 AWS是否提供更好的方式?看起来Elastic Load Balancing是一个解决方案,但我无法找到有关LB和EC2实例之间安全措施的任何信息。
答案 0 :(得分:1)
问题有几个部分,
将Nginx和Web应用程序放在同一个实例上可以通过将两个容器定义为同一个ecs任务的一部分来实现。我建议创建一个从nginx到webapp容器的docker链接。这样可以避免在外部暴露webapp容器端口。暴露给主机的唯一端口是nginx端口。
在容器启动时安全检索密钥的方法之一是让自定义shell脚本在容器上启动nginx服务。为此,您需要构建自己的docker容器。在您的docker构建文件中,使用自定义shell脚本定义容器的开头。在shell脚本中,您可以使用aws cli从s3检索文件。检索后,您可以启动nginx服务。使用aws cli将允许您使用ec2实例上提供的凭据。 如果你的基础docker镜像没有aws cli,你需要添加它。