将敏感环境变量包括到 AWS EB Django 应用程序

Posted

技术标签:

【中文标题】将敏感环境变量包括到 AWS EB Django 应用程序【英文标题】:Include sensitive environment variables to AWS EB Django app 【发布时间】:2020-09-18 20:54:50 【问题描述】:

我正在将一个 django 应用程序部署到 AWS Elastic Beanstalk,最初我在 .ebextensions/django.config 中定义我的环境变量

其中一些变量是敏感的,我不想将它们推送到 Git,所以我想将这些变量封装在一个不会被推送到 Git 的文件中(例如:.env)。

A 计划:

一种在我的配置文件中包含 .env 的方法,但我没有找到一种方法来实现它,应该是这样的:

option_settings:
  aws:elasticbeanstalk:application:environment:
    include .env
  aws:elasticbeanstalk:container:python:
    WSGIPath: mydjangoapp.wsgi:application

缺点:

环境变量在 Elastic Beanstalk > Environments > my-environment > Configuration > Environment properties 的 AWS 控制台中以纯文本形式显示,尽管我知道只有拥有权限的授权 AWS 用户才能读取它们。

优点:

能够仅直接从 AWS 控制台更新环境变量,而无需进行新的部署。

B 计划:

与计划 A 几乎相同,但在配置文件中不包含 .env 文件。是使用eb setenv来设置敏感环境,但是应该是一个一个显式的输入,而不是从外部文件中输入,所以很多的话会很头疼

C 计划:

从我的配置文件中完全删除敏感变量并从我的 django 应用程序本身加载 .env 文件。

缺点:

如果我想更新这些变量中的任何一个,我必须部署我的应用程序的新版本。 虽然.env文件不会推送到Git,可以在开发者内部共享,但是应该和部署包一起推送,会出现在应用的ec2实例目录中。

优点:

即使在 AWS 控制台中也能隐藏敏感信息

问题:

A 计划是否适用?我可以在谷歌云应用引擎 yaml 文件中做同样的事情,但我找不到在 AWS EB 配置中做到这一点的方法https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/beanstalk-environment-configuration-advanced.html 这里的最佳做法是什么?还有其他计划吗?

【问题讨论】:

【参考方案1】:

关于计划 B - this answer 展示了一种将 .env 中的所有变量转储到 eb setenv ... command 的好方法!

【讨论】:

以上是关于将敏感环境变量包括到 AWS EB Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

AWS EB CLI Django

当 EB 环境为 python 3.6 时,使用 python 2.7 安装要求时出现 AWS 错误

AWS EB 环境配置文件应该放在哪里?

将 SSL 添加到使用 aws eb cli 构建的 Web 应用程序

Laravel 4.2 AWS SQS 队列设置使用 EB 工作环境

aws elasticbeanstalk:无法通过 eb cli 部署到工作环境