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 デプロイメントツールでどのようにカバーされていますか?
ベストアンサー1
のAWSのドキュメントでは機密情報をS3に保存することを推奨している環境変数はさまざまな方法で公開される可能性があるためです。
環境プロパティを使用してアプリケーションに接続情報を提供することは、コードにパスワードが含まれないようにするための良い方法ですが、完璧な解決策ではありません。環境プロパティは、環境管理コンソールで検出でき、環境の構成設定を記述する権限を持つすべてのユーザーが表示できます。プラットフォームによっては、環境プロパティがインスタンス ログに表示されることもあります。
以下の例はドキュメントからの抜粋です。詳細についてはドキュメントを参照してください。簡単に言うと、次の操作が必要です。
- 最小限の権限でファイルを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
(または実際の構成内の任意の場所) から値を抽出します。