web-dev-qa-db-ja.com

シークレットファイルをEC2(AWS上)にプッシュする方法Ruby on Railsアプリケーション?

アマゾンウェブサービスとエラスティックビーンズトークを使用して、シークレットファイルをEC2 Ruby on Railsアプリケーションにどのようにプッシュする必要がありますか?

ファイルを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

そのリンクからの引用:

スニペットの例

次の例では、Amazon S3バケットからZipファイルをダウンロードし、/ 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

ただし、アプリケーションがデプロイされると、S3ホスト上のconfig.tar.gzファイルがコピーまたは抽出されることはありません。 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
3
nikc

タイプミスのようなにおいがします。

あなたがリンクした指示は、関連する部分で言う:

アプリケーションをデプロイするときにAWSElastic Beanstalk環境をカスタマイズするには、次の2つの手順が必要です。

  1. 拡張子が。configの構成ファイルを作成し、ソースバンドルの。ebextensionsトップレベルディレクトリに配置します。 。ebextensionsディレクトリに複数の構成ファイルを含めることができます。これらのファイルはアルファベット順に実行されます。たとえば、.ebextensions/01run.configは、.ebextensions /02do.configの前に実行されます。

ただし、.configファイルを.elasticbeanstalkディレクトリに配置したとのことです。ディレクトリ名を修正してみてください。

3
Michael Hampton

機密ファイルをS3に保存し、それらをBeanstalkインスタンスに自動的にコピーすることは可能です(そして簡単です)。

Beanstalkアプリケーションを作成すると、S3バケットが自動的に作成されます。このバケットは、アプリのバージョン、ログ、メタデータなどを保存するために使用されます。

Beanstalk環境に割り当てられているデフォルトのaws-elasticbeanstalk-ec2-roleには、このバケットへの読み取りアクセス権があります。

したがって、必要なのは、機密ファイルをそのバケット(バケットのルートまたは任意のディレクトリ構造)に配置し、.ebextension設定ファイルを作成して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

2
Pascal Bourque

S3cmdなどのコマンドラインユーティリティを使用して、bashスクリプトを実行し、必要なすべてのファイルをS3からダウンロードできます。

AWS ElasticBeanstalkのカスタマイズをカバーする一連の記事を書きました。

S3からのファイルのダウンロードの詳細については、 http://www.hudku.com/blog/security-credentials-setup-customizing/#aws-credentials-setup.sh を参照してください。

1
hudku

ソースのソースを/var/app/ondeckに設定してみてください。 IIRC、スクリプトはそこで実行され、すべてが完了すると、フォルダーの名前が/var/app/currentに変更されるため、置き換えられようとしているビルドに解凍している可能性があります。

0
darrenmonahan