AWS ECS 环境变量

AWS ECS environment variables

我花了一些时间对此进行研究,但仍然不清楚 ECS 环境变量在安全性方面如何安全使用,但是 docker 的 ENV 和 ENV-FILE 选项是否安全?

例如:AWS ECS documentation声明将机密添加到任务定义中,它们将作为容器环境变量可用。

Docker documentation 有相似的语言:

The environment variables set using ENV will persist when a container is run from the resulting image. You can view the values using docker inspect, and change them using docker run --env =.

现在,我找不到答案的问题是,如果两个选项都在容器内设置环境变量(这意味着用户可以在 docker 检查时查看),那么去的好处是什么使用 AWS ECS 环境变量?

从 AWS 参数存储(或)SSM 获取变量(如 dbuser、dbpassword)但不要将它们设置为容器环境变量的最佳策略是什么(如果可能,不使用 docker entryscript) ?

一种选择是在启动期间通过远程协议(通过 HTTP API)在您的应用程序中提取变量配置。

示例 - 我在 ECS 下有 Spring 基于引导 Java 的 docker 容器 运行 我正在提取我的配置例如使用 Spring Cloud Config 的 dbuser 和 dbpassword。当我的 spring 引导容器启动时,它们会使用 Spring Cloud Config 加载必要的配置并初始化应用程序。

Spring Cloud Config 支持从各种来源提取配置,例如 Git、Vault 甚至 AWS Parameter Store.

My App Container --> Spring Cloud Config Server Container --> Git/Vault/AWS Parameter Store

这是将 Spring Cloud 与 AWS Parameter Store 集成的示例指南和一些包含示例 Github 存储库的 SO 问题。 https://blog.trifork.com/2018/07/20/integrating-the-aws-parameter-store-with-spring-cloud/

现在这可能不适用于其他平台容器,但您也可以将类似的概念应用于您的平台。示例:Spring Cloud Config 公开了一个通用的 HTTP Rest API,您可以从这个 API 中使用其他编程语言等编写的应用程序中提取必要的配置,

可以使用 Github 上的代码签入 DockerFiles。所以任何有权访问代码的人都可以看到秘密(dbUser 和 dbPassword)。万一回购变成 public 不小心秘密也会被暴露。

如果使用 AWS ECS 环境变量,只有有权访问 AWS infra 的用户才能看到机密。它还使在多个环境中 运行 变得容易。

正如 Imran 所建议的那样,您始终可以在进程开始之前从第三方配置管理器中提取配置。