web-dev-qa-db-ja.com

機密性の高い環境変数をAmazonECSタスクに渡すにはどうすればよいですか?

機密性の高い環境変数を渡すための推奨される方法は何ですか。パスワード、to Amazon ECS タスク? Docker Composeを使用すると、 キーのみの環境変数 を使用できます。これにより、OS環境から値が読み取られます。 ECSタスク定義 に対応するメソッドが見つかりません。

15
aknuds1

投稿したタスク定義のリンクには、これを実行できる「環境」セクションがあります。それらはコンテナ内の環境変数になります。

タスク定義の外部に情報を保持したいが、そのタスクがそれを参照できる場合は、できません。その場合の最善の策は、コンテナーにその情報を外部ソースからプルさせ、ECSタスク構成にその情報を参照させないことです。

編集:パラメータストアが正しい方法であるため、この時点で反対票を投じています。当時、この答えが最も正しい方法でしたが、SSMを使用する他のソリューションが現在正しい方法です。

4
Marc Young

アプローチ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でシークレットを使用

12
Gangaraju

パラメータストアは、KMSキーを使用して暗号化された変数を格納する方法です。

Amazonは、タスク定義でシークレットを指定するための 発表済み サポートを提供しています。 SSMのパラメーター値と環境変数を参照して、タスクで設定します。

{
        ....
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }

公式ドキュメントを参照してください ここ

chamber というプロジェクトもあります。このプロジェクトは、SSMの特定のパスからすべてのパラメーターをロードし、それらを環境変数として設定できます。

6
LiorH

環境変数を使用する場合、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 /

4
Phil Atkinson
3
pocheptsov

シークレット環境でベイクされたAWSがオプションでない場合は、docker entrypointを使用して、コンテナの実行時に次のようにシークレットを挿入することもできます https://medium.com/@zdk/simple-and-secure-way-to- pass-secrets-and-credentials-into-docker-containers-c2f66175b0a4

0
zdk