Как следует отправлять секретные файлы в приложение 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 при развертывании приложения требуется два шага:
- Создайте файл конфигурации с расширением .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
так что вы, вероятно, распаковываете сборку, которая скоро будет заменена.