Amazon ECS 環境変数を使用して Systems Manager パラメータを取得する
Amazon ECS を使用すると、AWS Systems Manager Parameter Store のパラメータに機密データを保存した上で、コンテナの定義からそれを参照することによって、コンテナに機密データを取り込むことができます。
環境変数を使用して、コンテナに Systems Manager シークレットを注入する場合は、以下を考慮する必要があります。
-
重要なデータは、コンテナが最初に開始されたときにコンテナに挿入されます。シークレットを後で更新またはローテーションすると、コンテナには更新された値が自動的に送信されなくなります。この場合は、新しいタスクを起動する必要があります。または、タスクがサービスの一部である場合は、サービスを更新し、[Force new deployment] (新しいデプロイの強制) オプションを使用して、新しいタスクの起動をサービスに強制できます。
-
AWS Fargate 上の Amazon ECS タスクでは、以下の点を考慮する必要があります。
-
シークレットの内容全体を環境変数として挿入したり、ログ設定にシークレットを挿入したりするには、プラットフォームバージョン
1.3.0
以降を使用する必要があります。詳細については、Amazon ECS 向け Fargate プラットフォームバージョン を参照してください。 -
特定の JSON キーまたはシークレットのバージョンを環境変数またはログ設定に挿入するには、プラットフォームバージョン
1.4.0
以降 (Linux) または1.0.0
(Windows) を使用する必要があります。詳細については、Amazon ECS 向け Fargate プラットフォームバージョン を参照してください。
-
-
EC2 上の Amazon ECS タスクでは、以下の点を考慮する必要があります。
-
シークレットの特定の JSON キーやバージョンを使用してシークレットを挿入するには、コンテナインスタンスにバージョン
1.37.0
以降のコンテナエージェントが必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。シークレットの内容全体を環境変数として挿入したり、ログ設定にシークレットを挿入したりするには、コンテナインスタンスにバージョン
1.22.0
以降のコンテナエージェントが必要です。
-
-
セキュリティ制御を強化するために、インターフェイス VPC エンドポイントを使用します。Systems Manager 用に、インターフェイス VPC エンドポイントを作成する必要があります。VPC エンドポイントについては、「AWS Systems Manager ユーザーガイド」の「Systems Manager のために VPC エンドポイントを使用して EC2 インスタンスのセキュリティを強化する」を参照してください。
-
タスク定義では、Secrets Manager の追加アクセス許可を持つタスク実行ロールを使用する必要があります。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。
-
awslogs
ログドライバーを使用するように設定された Windows タスクの場合は、コンテナインスタンスでECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE
環境変数も設定する必要があります。次の構文を使用します。<powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
Systems Manager パラメータを作成する
Systems Manager コンソールを使用すると、機密データ用に Systems Manager Parameter Store のパラメータを作成できます。詳細については、「AWS Systems Manager ユーザーガイド」の「Systems Manager パラメータを作成する (コンソール)」または「Systems Manager パラメータを作成する (AWS CLI)」を参照してください。
コンテナ定義に環境変数を追加します。
タスク定義でのコンテナ定義内では、コンテナに設定する環境変数の名前と、コンテナに渡す機密データが含まれている Systems Manager Parameter Store パラメータの ARN 全体を使用して secrets
を指定します。詳細については、「secrets」を参照してください。
以下に示すのは、Systems Manager パラメータストアのパラメータを参照するときの形式を示すタスク定義のスニペットです。起動するタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、パラメータの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:ssm:region
:aws_account_id
:parameter/parameter_name
" }] }] }
環境変数で指定されたシークレットを使用してタスク定義を作成する方法については、「コンソールを使用した Amazon ECS タスク定義の作成」を参照してください。
Systems Manager Parameter Store のシークレットをプログラムで取得するようにアプリケーションを更新する
Systems Manager Parameter Store のパラメータに保存されている機密データを取得するには、「AWS SDK コードサンプルコードライブラリ」の「AWS SDK を使用した Systems Manager のコードサンプル」を参照してください。