Systems Manager Parameter Store を使用して機密データを指定する - Amazon ECS

Systems Manager Parameter Store を使用して機密データを指定する

Amazon ECS を使用すると、AWS Systems Manager Parameter Store のパラメータに機密データを保存した上で、コンテナの定義からそれを参照することによって、コンテナに機密データを取り込むことができます。

Systems Manager パラメータストアを使用した機密データの指定に関する考慮事項

Systems Manager Parameter Store のパラメータを使用してコンテナの機密データを指定する場合は、以下の点を考慮してください。

  • Systems Manager パラメータストアパラメータは、タスクが実行されるのと同じアカウントに存在する必要があります。

  • Fargate でホストされるタスクでは、この機能を使用するには、タスクでプラットフォームバージョン 1.3.0 以降 (Linux) または 1.0.0 以降 (Windows) を使用する必要があります。詳細については、AWS Fargateプラットフォームのバージョン を参照してください。

  • 重要なデータは、コンテナが最初に開始されたときにコンテナに挿入されます。シークレットまたは Parameter Store パラメータが後で更新またはローテーションされたときに、コンテナは更新された値を自動的に受け取りません。この場合は、新しいタスクを起動する必要があります。または、タスクがサービスの一部である場合は、サービスを更新し、[Force new deployment] (新しいデプロイの強制) オプションを使用して、新しいタスクの起動をサービスに強制できます。

Amazon ECS シークレットで必須の IAM アクセス許可

この機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。これにより、コンテナエージェントは必要な AWS Systems Manager リソースをプルすることを許可されます。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

作成した AWS Systems Manager パラメータストアパラメータにアクセスできるように、タスク実行ロールに以下の許可をインラインポリシーとして手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。

  • ssm:GetParameters— Systems Managerパラメータストアのパラメータをタスク定義で参照する場合は必須です。

  • secretsmanager:GetSecretValue — Secrets Manager シークレットを直接参照するか、Systems Manager パラメータストアのパラメータがタスク定義で Secrets Manager シークレットを参照している場合は必須です。

  • kms:Decrypt – シークレットでカスタムの KMS キーを使用し、デフォルトのキーを使用しない場合にのみ必須です。このカスタムキーの ARN が、リソースとして追加されている必要があります。

次の例のインラインポリシーでは必須許可を追加しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter_name>", "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

環境変数としての機密データの挿入

コンテナの定義内で、コンテナに設定する環境変数の名前と、コンテナに渡す機密データが含まれている Systems Manager Parameter Store のパラメータの完全な Amazon リソースネーム (ARN) を使用して secrets を指定します。

以下のタスク定義のスニペットに、Systems Manager Parameter Store のパラメータを参照する際の形式を示します。起動するタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、パラメータの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

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

ログ設定への機密データの挿入

コンテナの定義内で logConfiguration を指定する際に、コンテナに設定するログドライバーオプションの名前と、コンテナに渡す機密データが含まれている Systems Manager Parameter Store のパラメータの完全な Amazon リソースネーム (ARN) を使用して secretOptions を指定します。

重要

起動するタスクと同じ AWS リージョン に Systems Manager Parameter Store のパラメータが存在する場合は、パラメータの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

以下に示すのは、Systems Manager パラメータストアのパラメータを参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }] }

AWS Systems Manager パラメータストア パラメータの作成

Systems Manager コンソールを使用して、機密データ用の AWS Systems Manager パラメータストア パラメータを作成できます。詳細については、AWS Systems Managerユーザーガイドの「コマンドでパラメータを作成して使用する (コンソール)を参照してください。

パラメータストア パラメータを作成するには

  1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

  2. ナビゲーションペインで [Parameter Store] (パラメータストア)、[Create parameter] (パラメータの作成) の順に選択します。

  3. [Name] (名前) に、階層とパラメータ名を入力します (例: /test/database_password)。

  4. [Description] (説明) に説明を入力します (省略可能)。

  5. [Type] (タイプ) として、[String][StringList][SecureString] のいずれかを選択します。

    注記
    • [SecureString] を選択すると、[KMS Key ID] フィールドが表示されます。KMS キー ID、KMS キー ARN、エイリアス名、またはエイリアス ARN が指定されていない場合、システムは alias/aws/ssm を使用します。これは、Systems Manager 用のデフォルトの KMS キーです。このキーを使用しない場合は、カスタムキーを選択します。詳細については、AWS Systems Managerユーザーガイドの「Secure String パラメータを使用する」を参照してください。

    • コンソールで key-id パラメータにカスタム KMS キーエイリアス名またはエイリアス ARN のいずれかを指定して Secure String パラメータを作成する場合は、そのエイリアスの前にプレフィックス alias/ を指定する必要があります。ARN の例を次に示します。

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      エイリアス名の例を次に示します。

      alias/MyAliasName
  6. [Value] (値) に値を入力します。例えば、MyFirstParameter です。[SecureString] を選択している場合、入力した値はマスクされます。

  7. [Create parameter] (パラメータの作成) を選択します。

機密データを参照するクラシックコンソールでのタスク定義の作成

Amazon ECS コンソールを使用して、Systems Manager パラメータストア パラメータを参照するタスク定義を作成できます。

シークレットを指定するタスク定義を作成するには

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs/) を開きます。

  2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク定義の作成)] の順に選択します。

  3. [Select launch type compatibility] (起動タイプの互換性の選択) ページで、タスクの起動タイプを選択してから [Next step] (次のステップ) を選択します。

  4. [Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

  5. [Task execution role] (タスク実行ロール) では、既存のタスク実行ロールを選択するか、[Create new role] (新しいロールの作成) を選択します。作成されたロールにより、Amazon ECS がタスクのプライベートイメージをプルすることを認証できます。詳細については、「プライベートレジストリの認証で必須の IAM アクセス許可」を参照してください。

    重要

    [Task execution role] (タスク実行ロール) フィールドが表示されない場合は、[Configure via JSON] (JSON による設定) を選択し executionRoleArn フィールドを追加して、タスク実行ロールを指定します。次のコードは構文を示しています。

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. タスク定義で作成するコンテナごとに、以下のステップを実行します。

    1. [Container Definitions] (コンテナの定義) で [Add container] (コンテナの追加) を選択します。

    2. [Container name] (コンテナ名) に、コンテナの名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

    3. [Image (イメージ)] に、イメージ名、またはプライベートイメージのパスを入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

    4. [Advanced container configuration (詳細コンテナ設定)] を展開します。

    5. 環境変数として挿入する機密データの場合は、[Environment] (環境) の [Environment variables] (環境変数) で、以下のフィールドに入力します。

      1. [Key] (キー) に、コンテナ内で設定する環境変数の名前を入力します。これは、コンテナ定義内の secrets セクションにある name フィールドに相当します。

      2. [Value] (値) で、ValueFrom を選択します。[Add value] (値の追加) に、環境変数としてコンテナに渡すデータが含まれている AWS Systems Manager Parameter Store パラメータの完全な Amazon リソースネーム (ARN) を入力します。

        注記

        起動しているタスクと同じ AWS リージョン に Systems Manager Parameter Store のパラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

    6. シークレットをコンテナのログ設定で参照する場合は、[Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、以下のフィールドに入力します。

      1. Auto-configure CloudWatch Logs(CloudWatch Logsの自動設定) オプションをオフにします。

      2. [Log options] (ログオプション) の [Key] (キー) に、設定するログ設定オプションの名前を入力します。

      3. [Value] (値) で、ValueFrom を選択します。[Add value (値の追加)] に、ログオプションとしてログ設定に渡すデータが含まれている AWS Systems Manager パラメータストアのパラメータの名前または ARN 全体を入力します。

        注記

        起動しているタスクと同じ AWS リージョン に Systems Manager Parameter Store のパラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

    7. コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration] (詳細コンテナ設定) メニューより設定できます。詳細については、「タスク定義パラメータ」を参照してください。

    8. [Add] (追加) を選択します。

  7. コンテナが追加されたら、[作成] を選択します。