2016-01-13 81 views
2

我在一個Docker容器中有一個Web應用程序,我想通過另一個容器(運行NGINX)代理它,這個容器暴露在外面,只處理HTTPS流量。這兩個容器將由ECS在相同的EC2實例上託管。讓NGINX容器從S3或IAM獲取SSL私鑰的最佳方式是什麼?如何在Amazon ECS中設置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

我會說在一個VPC內部使用帶有ECS EC2實例的SSL處理的外部ALB是一個相當安全的解決方案,但這一切都取決於您的要求。 – Bram

回答

1

有幾個部分的問題,

配售的Nginx和Web應用程序在相同的情況下,可以通過定義兩個容器一樣ECS任務的一部分來實現。我建議創建一個從nginx到webapp容器的docker鏈接。這將允許您避免在外部暴露webapp容器端口。暴露給主機的唯一端口將是nginx端口。

在容器啓動時安全地檢索Keys的方法之一是讓一個自定義shell腳本啓動容器上的nginx服務。爲此,您需要構建自己的碼頭集裝箱。在你的docker build文件中使用一個自定義的shell腳本來定義容器的開始。在shell腳本中,可以使用aws cli從s3檢索文件。檢索後,您可以啓動nginx服務。使用aws cli將允許您使用ec2實例上可用的憑證。 如果您的基礎碼頭圖像沒有aws cli,則需要添加它。