0

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

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

Docker 文档有类似的语言:

当容器从生成的图像运行时,使用 ENV 设置的环境变量将保持不变。您可以使用 docker inspect 查看值,并使用 docker run --env = 更改它们。

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

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

4

2 回答 2

1

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

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

Spring Cloud Config 支持从 Git、Vault 甚至AWS Parameter Store等各种来源提取配置。

我的应用容器 --> Spring Cloud Config Server 容器 --> 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 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性?

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

于 2019-04-02T19:09:43.570 回答
1

DockerFiles 可以使用 Github 上的代码签入。所以任何有权访问代码的人都可以看到这些秘密(dbUser 和 dbPassword)。万一回购意外公开,秘密也将被暴露。

如果使用 AWS ECS 环境变量,则只有有权访问 AWS 基础设施的用户才能看到这些秘密。它还可以轻松地在多个环境中运行。

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

于 2019-04-02T19:16:24.687 回答