当前位置: 首页 > 知识库问答 >
问题:

如何使用Elastic Beanstalk在部署时指定敏感环境变量

端木渝
2023-03-14

我正在使用Elastic Beanstalk部署一个Python Flask应用程序。我有一个配置文件/.ebextensions/01.config,其中我设置了一些环境变量,其中一些应该是机密的。

文件看起来像这样:

packages:
  yum:
    gcc: []
    git: []
    postgresql93-devel: []

option_settings:
  "aws:elasticbeanstalk:application:environment":
    SECRET_KEY: "sensitive"
    MAIL_USERNAME: "sensitive"
    MAIL_PASSWORD: "sensitive"
    SQLALCHEMY_DATABASE_URI: "sensitive"
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "app/static/"

对某些价值观保密的最佳做法是什么?目前,.ebextensions文件夹处于源代码管理之下,我喜欢它,因为它与所有人共享,但同时我不想将敏感值置于源代码管理之下。

有没有办法在部署时通过EB CLI工具指定一些环境变量(例如eb部署-config...)?或者AWS部署工具如何涵盖这个用例?

共有3个答案

乌学博
2023-03-14

您应该能够从eb web控制台:您的eb应用程序中将敏感值指定为环境变量-

或者,您也可以利用此功能:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html

编辑:虽然这是2015年被接受的答案,但这不应该是你们处理它的方式。现在,您可以使用AWS机密管理器实现此目的。

宇文鸿畴
2023-03-14

这个问题已经有了答案,但我想为这个问题贡献一个替代的解决方案。我不必在环境变量中保存秘密(然后必须在版本控制之外的某个地方进行管理和存储,另外您需要记住在部署时设置它们),而是将我所有的秘密放在加密的S3存储桶中,只能从EB角色访问是运行作为。然后我在启动时获取秘密。这样做的好处是将部署与配置完全分离,并且您再也不用在命令行中摆弄秘密了。

如果需要(例如,如果在应用程序安装过程中需要秘密,例如获取代码的存储库的密钥),您还可以使用带有S3Auth指令的. eb扩展名配置文件来轻松复制上述S3存储桶的内容到您的本地实例;否则,只需在启动时使用AWS SDK从应用程序获取所有机密。

编辑:截至2018年4月,AWS为机密管理提供专门的托管服务;AWS秘密经理。它以字符串或json格式、版本控制、阶段、轮换等方式方便安全地存储机密。当涉及到KMS、IAM等时,它还消除了一些配置,以便更快地进行设置。我认为没有真正的理由使用任何其他AWS服务来存储静态敏感数据,如私钥、密码等。

聂宜
2023-03-14

AWS文档建议将敏感信息存储在S3中,因为环境变量可能以各种方式暴露:

使用环境属性向应用程序提供连接信息是防止密码进入代码的好方法,但这不是一个完美的解决方案。环境属性可以在环境管理控制台中找到,并且任何有权描述环境配置设置的用户都可以查看环境属性。根据平台的不同,环境属性也可能出现在实例日志中。

下面的示例来自文档,您应该参考该文档以了解完整的详细信息。简而言之,您需要:

>

  • 以最小权限将文件上传到S3,可能是加密的。
  • 授予对弹力豆茎自动缩放组的实例配置文件的角色的读取访问权限。该政策将是这样的:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "database",
                "Action": [
                    "s3:GetObject"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::my-secret-bucket-123456789012/beanstalk-database.json"
                ]
            }
        ]
    }
    

    将名为s3 connection info file.config的文件添加到应用程序包根目录中的/.ebextensions,并包含以下内容:

    Resources:
      AWSEBAutoScalingGroup:
        Metadata:
          AWS::CloudFormation::Authentication:
            S3Auth:
              type: "s3"
              buckets: ["my-secret-bucket-123456789012"]
              roleName: "aws-elasticbeanstalk-ec2-role"
    
    files:
      "/tmp/beanstalk-database.json" :
        mode: "000644"
        owner: root
        group: root
        authentication: "S3Auth"
        source: https://s3-us-west-2.amazonaws.com/my-secret-bucket-123456789012/beanstalk-database.json
    

    然后更新应用程序代码,从文件/tmp/beanstalk database.json(或您决定将其放入实际配置的任何位置)中提取值

  •  类似资料:
    • 有没有人在使用环境变量开始的customer Docker实例部署Azure Webapps方面有一些经验?

    • 在开展实验之前,我们需要根据不同的平台提前安装相关依赖的软件包,具体需要的软件包如下: Rust 工具链 Rust 版本管理工具:rustup Rust 软件包管理工具:cargo Rust 编译器:rustc 等等 虚拟机软件:QEMU (版本至少支持 RISC-V 64) 具体安装的方法在不同平台上安装方式类似,但也有细微差别,后面会有具体说明。 安装 QEMU 根据不同平台,我们分为下面 3

    • 我们有一个正在工作的gcloud deploy命令,我们正在尝试添加一个新的环境变量。当前的工作示例如下所示: 现在,我们要添加的env变量是一个简单的列表,例如:MY_LIST=['val1','val2'],所以首先我们尝试了显而易见的: 但立即得到了错误: (gcloud.functions.deploy)无法识别的参数:val2] 因此,我们开始研究如何转义本文中指出的值 根据这篇文章,我

    • 问题内容: 当我对sudo使用任何命令时,环境变量不存在。例如,设置HTTP_PROXY后,如果不使用,该命令可以正常工作。但是,如果我键入它说它不能绕过代理设置。 问题答案: 技巧是通过命令将环境变量添加到文件并添加以下行: 摘自ArchLinux Wiki 。 对于Ubuntu 14,您需要在单独的行中指定,因为它会返回多变量行的错误:

    • 问题内容: 如何使用变量配置Web服务器(Linux服务器)? 如何设置使用? 问题答案: 是一些服务器和其他Java应用程序附加到执行命令的调用的标准环境变量。 例如在tomcat中,如果您定义,启动脚本将执行 如果您在Linux / OSX上运行,则可以在调用启动脚本之前通过执行以下操作来设置JAVA_OPTS: 只要打开控制台,此操作将一直持续。要使其更永久,可以将其添加到〜/ .profi

    • PWA 项目必须部署在 HTTPS 环境上才能够生效,主要是因为 Service Worker 只会在 HTTPS 环境下才能注册成功,我们不用担心在本地开发的时候 Service Worker 是否生效的问题,因为 Service Worker 在 localhost 和 127.0.0.1 的 host 下是能够注册成功的,这样可以确保我们在本地调试工作是能够顺利进行的。我们这里讲述的是如何部