機密性の高い環境変数を渡すための推奨される方法は何ですか。パスワード、to Amazon ECS タスク? Docker Composeを使用すると、 キーのみの環境変数 を使用できます。これにより、OS環境から値が読み取られます。 ECSタスク定義 に対応するメソッドが見つかりません。
投稿したタスク定義のリンクには、これを実行できる「環境」セクションがあります。それらはコンテナ内の環境変数になります。
タスク定義の外部に情報を保持したいが、そのタスクがそれを参照できる場合は、できません。その場合の最善の策は、コンテナーにその情報を外部ソースからプルさせ、ECSタスク構成にその情報を参照させないことです。
編集:パラメータストアが正しい方法であるため、この時点で反対票を投じています。当時、この答えが最も正しい方法でしたが、SSMを使用する他のソリューションが現在正しい方法です。
アプローチ1:
パラメータストア を使用して変数を保存できます。それらをSecureString
として保存すると、値は暗号化されます。
タスク定義で環境変数としてそれらを参照できます。
コンテナ起動スクリプトでそれらを取得する必要があります
value_from_parameter_store =`aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION `
環境変数としてparameter_store_key
を指定することもできます。 $parameter_store_key
を使用できるように
例
Dockerfile:
FROM ubuntu
//some other steps
CMD ["sh","/startup.sh"]
起動スクリプト:
#! /bin/bash
export db_password =`aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION `
// Please note that above line has `(backtick)
// Do other stuff and use this password
SSMにパラメーターを配置します。
aws ssm put-parameter --name 'db_password' --type "SecureString" --value 'P@ssW%rd#1'
Docker実行コマンド:
docker run -e parameter_store_key=db_password -e REGION=us-east-1 <docker_image>
アプローチ2:
最近、AWSはECSのContainerDefinitionでシークレットのサポートを発表しました ECSでシークレットを使用
パラメータストアは、KMSキーを使用して暗号化された変数を格納する方法です。
Amazonは、タスク定義でシークレットを指定するための 発表済み サポートを提供しています。 SSMのパラメーター値と環境変数を参照して、タスクで設定します。
{
....
"secrets": [
{
"name": "environment_variable_name",
"valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
}
]
}
公式ドキュメントを参照してください ここ 。
chamber というプロジェクトもあります。このプロジェクトは、SSMの特定のパスからすべてのパラメーターをロードし、それらを環境変数として設定できます。
環境変数を使用する場合、AWSコンソールにログインしたときにそれらを確認できます。 AWSは、機密データを非表示に保つために適切な「シークレット」を使用するためのガイドを作成しました。コンテナは、起動時にこれらをメモリベースの環境変数にロードします。ガイドは次のとおりです: https://aws.Amazon.com/blogs/security/how-to-manage-secrets-for-Amazon-ec2-container-service-based-applications-by-using-Amazon- s3-and-docker /
シークレット環境でベイクされたAWSがオプションでない場合は、docker entrypointを使用して、コンテナの実行時に次のようにシークレットを挿入することもできます https://medium.com/@zdk/simple-and-secure-way-to- pass-secrets-and-credentials-into-docker-containers-c2f66175b0a4