3

Я развертываю приложение PFC-фляги с эластичным бобовым стеком. У меня есть файл конфигурации /.ebextensions/01.config, где среди прочего я устанавливаю некоторые переменные среды - некоторые из которых должны быть секретными.Как указать чувствительные переменные среды во время развертывания с помощью эластичного beanstalk

файл выглядит примерно так:

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?

ответ

1

Вы должны быть в состоянии определить чувствительные значения в качестве переменных окружения из веб-консоли ЭБ: Ваше приложение EB -> Ваше окружение EB -> Конфигурация -> Конфигурация программного обеспечения -> Environment Properties

В качестве альтернативы, вы можете использовать это: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html

0

Я использую другой сценарий оболочки, что-то ./deploy_production.sh, чтобы установить переменные среды. В сценарии оболочки вы можете использовать «eb setenv NAME1 = VAR1 NAME2 = VAR2 ...» для установки env var.

И этот файл не нужно входить в git repo.

+0

Есть ли способ сделать это из aws cli? – Jordan

+0

Как вы запускаете его на своих экземплярах, если он не находится в репозитории git? –

6

У этого вопроса уже есть ответ, но я хочу внести альтернативное решение этой проблемы. Вместо того, чтобы хранить секреты в переменных среды (которые затем должны управляться и храниться где-то вне контроля версий, а также вам нужно помнить, чтобы их устанавливать при развертывании), я помещаю все свои секреты в зашифрованное ведро S3, доступное только из роль EB работает как. Затем я прихожу к секретам при запуске. Это дает возможность полностью развязать развертывание из конфигурации, и вам никогда не придется снова заниматься секретами в командной строке.

При необходимости (например, если секреты необходимы во время установки приложения, таких как ключи к хранилищам, где код забирается) вы также можете использовать файл .ebextensions конфигурации с S3Auth директивой легко скопировать содержимое указанного S3 ведро с вашим локальный экземпляр; иначе просто используйте AWS SDK для извлечения всех секретов из приложения при запуске.

5

AWS documentation recommends storing sensitive information in S3 потому, что переменные окружения могут быть подвержены различным образом:

Предоставление информации о соединении с приложением с окружающей средой свойствами, является хорошим способом, чтобы сохранить пароли из вашего кода, но это не идеальный решение. Свойства среды можно обнаружить в Консоль управления средой и могут быть просмотрены любым пользователем, который имеет разрешение для описания параметров конфигурации в вашей среде. В зависимости от платформы, свойства среды могут также отображаться в журналах экземпляров .

Приведенный ниже пример из документации, на которую вы должны обратиться за подробной информацией.Короче говоря, вам необходимо:

  1. Загрузите файл к S3 с минимальными разрешениями, possibly encrypted.
  2. Предоставить доступ к роли профиля экземпляра для вашей группы автомасштабирования эластичных бобовых стекол. Политика была бы как:

    { 
        "Version": "2012-10-17", 
        "Statement": [ 
         { 
          "Sid": "database", 
          "Action": [ 
           "s3:GetObject" 
          ], 
          "Effect": "Allow", 
          "Resource": [ 
           "arn:aws:s3:::my-secret-bucket-123456789012/beanstalk-database.json" 
          ] 
         } 
        ] 
    } 
    
  3. Добавить файл с таким именем, как 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 (или там, где вы решили разместить его в своей реальной конфигурации.)