Amazon ECS 環境変数を使用して Systems Manager パラメータを取得する - Amazon Elastic Container Service

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 のコードサンプル」を参照してください。