Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用Elastic Beanstalk在部署时指定敏感环境变量_Amazon Web Services_Amazon Elastic Beanstalk - Fatal编程技术网

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

Amazon web services 如何使用Elastic Beanstalk在部署时指定敏感环境变量,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,我正在使用Elastic Beanstalk部署一个Python Flask应用程序。我有一个配置文件/.ebextensions/01.config,其中我设置了一些环境变量,其中一些应该是机密的 该文件如下所示: packages: yum: gcc: [] git: [] postgresql93-devel: [] option_settings: "aws:elasticbeanstalk:application:environment": S

我正在使用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 deploy-config…
)?或者AWS部署工具是如何涵盖此用例的

您应该能够从eb web控制台将敏感值指定为环境变量:您的eb应用程序->您的eb环境->配置->软件配置->环境属性

或者,您也可以利用此功能:


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

我一直在使用另一个shell脚本,比如./deploy\u production.sh来设置特定于环境的变量。在shell脚本中,可以使用“eb setenv NAME1=VAR1 NAME2=VAR2…”来设置env var


这个文件不需要进入git repo。

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

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

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

因为环境变量可能以各种方式公开:

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

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

  • 以最小权限将文件上载到S3
  • 授予对Elastic Beanstalk自动缩放组的实例配置文件角色的读取权限。政策是:

    {
        "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
    (或您决定将其放入实际配置的任何位置)中提取值。

    其他一些答案提到,使用参数存储/机密管理器可能有更好的方法


    我在下面的回答中描述了我如何使用AWS Systems Manager参数存储(它也为您提供了一个到Secrets Manager的接口)实现这一点:。基本上,您可以让Beanstalk ECS IAM角色访问相关参数,然后在启动时从应用程序代码中加载它。

    有没有办法从aws cli执行此操作?如果它不在git repo中,您如何在实例上运行它?我刚刚偶然发现,这可能也是存储敏感信息的解决方案(但不是具体的环境变量。)它“为配置数据管理和机密管理提供安全、分层存储。”看起来很像HashiCorp的执政官。如何修改环境属性,环境属性列表不可见。我想更新我已经设置的环境属性,应用程序也正在运行。我已经按照你的回答完成了。我是新手。PS。坏习惯。请使用AWS机密管理器来完成此操作。@Manuel yup right.since这篇文章是在2015年发表的,我继续使用参数存储,最终使用了secrets manager。太好了!只是想提醒未来的读者。最近的Codecov security Undecent实际上表明,环境变量很容易暴露。