Назад | Перейти на главную страницу

Как следует передать секретные файлы в приложение Ruby on Rails EC2 (на AWS)?

Как следует отправлять секретные файлы в приложение EC2 Ruby on Rails с помощью веб-служб Amazon с их эластичным beanstalk?

Я добавляю файлы в репозиторий git и нажимаю на github, но хочу, чтобы мои секретные файлы не попадали в репозиторий git. Я развертываю на aws, используя:

git aws.push

Следующие файлы находятся в .gitignore:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb

По этой ссылке я попытался добавить файл S3 в свое развертывание: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html

Цитата из этой ссылки:

Пример фрагмента

В следующем примере загружается zip-файл из корзины Amazon S3 и распаковывается в / etc / myapp:

sources:  
    /etc/myapp: http://s3.amazonaws.com/mybucket/myobject 

Следуя этим указаниям, я загрузил файл в корзину S3 и добавил следующее в файл private.config в папке .elasticbeanstalk Каталог .ebextensions:

sources:
  /var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz

Этот файл config.tar.gz будет извлечен в:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb

Однако при развертывании приложения файл config.tar.gz на хосте S3 никогда не копируется и не извлекается. Я по-прежнему получаю сообщения об ошибках, что не удалось найти файл database.yml, а в журнале EC2 нет записи о файле конфигурации, вот сообщение об ошибке:

Error message:
  No such file or directory - /var/app/current/config/database.yml
Exception class:
  Errno::ENOENT
Application root:
  /var/app/current

Пахнет опечаткой.

Инструкции, на которые вы ссылаетесь, говорят в соответствующей части:

Для настройки среды AWS Elastic Beanstalk при развертывании приложения требуется два шага:

  1. Создайте файл конфигурации с расширением .config и поместите его в .ebextensions каталог верхнего уровня исходного пакета. У вас может быть несколько файлов конфигурации в вашем .ebextensions каталог. Эти файлы выполняются в алфавитном порядке. Например, .ebextensions / 01run.config выполняется перед .ebextensions / 02do.config.

Однако вы сказали, что разместили .config файл в .elasticbeanstalk каталог. Попробуйте исправить имя каталога.

Можно (и легко) хранить конфиденциальные файлы в S3 и автоматически копировать их в экземпляры Beanstalk.

Когда вы создаете приложение Beanstalk, автоматически создается корзина S3. Эта корзина используется для хранения версий приложений, журналов, метаданных и т. Д.

По умолчанию aws-elasticbeanstalk-ec2-role который назначен вашей среде Beanstalk, имеет доступ для чтения к этому сегменту.

Итак, все, что вам нужно сделать, это поместить ваши конфиденциальные файлы в эту корзину (либо в корень корзины, либо в любую структуру каталогов по вашему желанию) и создать .ebextension config, чтобы скопировать их в свои экземпляры EC2.

Вот пример:

# .ebextensions/sensitive_files.config

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-east-1-XXX"] # Replace with your bucket name
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role" # This is the default role created for you when creating a new Beanstalk environment. Change it if you are using a custom role

files:
  /etc/pki/tls/certs/server.key: # This is where the file will be copied on the EC2 instances
    mode: "000400" # Apply restrictive permissions to the file
    owner: root # Or nodejs, or whatever suits your needs
    group: root # Or nodejs, or whatever suits your needs
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-east-1-XXX/server.key # URL to the file in S3

Это описано здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html

Вы можете запустить сценарий bash и загрузить все необходимые файлы с S3 с помощью утилиты командной строки, такой как s3cmd.

Я написал серию статей, посвященных настройке AWS Elastic Beanstalk.

Для получения подробной информации о загрузке файлов с S3 вы можете обратиться к http://www.hudku.com/blog/security-credentials-setup-customizing/#aws-credentials-setup.sh

Попробуйте установить источник ваших источников на /var/app/ondeck. IIRC, скрипт запускается там, и как только все будет сделано, папка будет переименована в /var/app/current так что вы, вероятно, распаковываете сборку, которая скоро будет заменена.