Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

機密データの指定

Amazon ECS を使用すると、AWS Secrets Manager シークレットまたは AWS Systems Manager パラメータストアのパラメータに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。この機能は、EC2 および Fargate の両方の起動タイプを使用するタスクでサポートされています。

以下の方法でシークレットをコンテナに公開できます。

  • 機密データを環境変数としてコンテナに挿入するには、secrets コンテナ定義パラメータを使用します。

  • コンテナのログ設定内の機密情報を参照するには、secretOptions コンテナ定義パラメータを使用します。

重要なデータを指定するための考慮事項

コンテナの重要なデータを指定する際には、次の点に注意する必要があります。

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

  • EC2 起動タイプを使用するタスクの場合、この機能では、コンテナインスタンスに、バージョン 1.22.0 以降のコンテナエージェントが必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。

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

  • この機能は GovCloud (米国東部) リージョンでは利用できません。

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

コンテナの定義内で、コンテナに設定する環境変数の名前で secrets を指定し、コンテナに渡す機密データを含む Secrets Manager シークレットまたは Systems Manager パラメータストアのパラメータの完全な ARN を指定します。参照するパラメータは同じアカウント内にあることが必要ですが、そのパラメータを使用するコンテナは別のリージョンにあってもかまいません。

重要

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

Secrets Manager シークレットを作成して、それを環境変数としてコンテナに挿入するための完全なチュートリアルについては、「チュートリアル: Secrets Manager シークレットを使用した機密データの指定」を参照してください。

以下に示すのは、Secrets Manager シークレットを参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }

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

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

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

コンテナの定義内で、logConfiguration を指定するときに、コンテナに設定するログドライバオプションの名前を指定し、コンテナに渡す機密データを含む Secrets Manager シークレットまたは Systems Manager パラメータストアのパラメータの完全 ARN を指定することで、secretOptions を指定できます。参照するパラメータは同じアカウント内にあることが必要ですが、そのパラメータを使用するコンテナは別のリージョンにあってもかまいません。

重要

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

以下に示すのは、Secrets Manager シークレットを参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

以下に示すのは、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" }] }] }] }

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

この機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要な AWS Systems Manager または Secrets 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" ] } ] }

AWS Secrets Manager シークレットの作成

Secrets Manager コンソールを使用して、機密データ用のシークレットを作成できます。詳細については、AWS Secrets Manager ユーザーガイドの「基本的なシークレットの作成」を参照してください。

基本的なシークレットを作成するには

機密データのシークレットを作成するには、Secrets Manager を使用します。

  1. Secrets Manager コンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。

  2. [新しいシークレットの保存] を選択します。

  3. [Select secret type (シークレットタイプの選択)] で、[Other type of secrets (他の種類のシークレット)] を選択します。

  4. カスタムシークレットの詳細を [キー] と [] のペアの形式で指定します。たとえば、キーとして UserName を指定し、その値として適切なユーザー名を指定できます。パスワードの名前とパスワードのテキストを値として持つ 2 番目のキーを追加します。データベース名、サーバーアドレス、TCP ポートなどのエントリを追加することもできます。必要な情報を格納するのに必要な数だけペアを追加できます。

    または、[プレーンテキスト] タブを選択して、任意の方法でシークレット値を入力することもできます。

  5. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するアクセス許可が必要です。

  6. [次へ] を選択します。

  7. [Secret name (シークレット名)] に、オプションのパスと名前 (例: production/MyAwesomeAppSecret または development/TestSecret) を入力し、[] を選択します。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。

    シークレット名に使用できるのは、ASCII 文字、数字、または次の記号のみです: /_+=.@-

  8. (オプション) この時点で、シークレットのローテーションを設定することができます。この手順では、[Disable automatic rotation (自動ローテーションを無効化)] は無効のままにし、[] を選択します。

    新規または既存のシークレットでローテーションを設定する方法については、「AWS Secrets Manager シークレットの更新」を参照してください。

  9. 設定を確認し、次に [Store secret (シークレットの保存)] を選択して入力した内容すべてを Secrets Manager の新しいシークレットとして保存します。

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

AWS Systems Manager コンソールを使用して、機密データ用の 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 CMK ID、KMS CMK ARN、エイリアス名、またはエイリアス ARN が指定されていない場合、システムでは Systems Manager のデフォルト KMS CMK である alias/aws/ssm が使用されます。このキーを使用しない場合は、カスタムキーを選択します。詳細については、AWS Systems Manager ユーザーガイド の「Secure String パラメータを使用する」を参照してください。

    • コンソールで key-id パラメータにカスタム KMS CMK エイリアス名またはエイリアス 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 コンソールを使用して、Secrets Manager シークレットまたは Systems Manager パラメータストアのパラメータを参照するタスク定義を作成できます。

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

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

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

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

    注記

    このステップは、AWS Fargate を使用する Amazon ECS が現在サポートされているリージョンにのみ適用されます。詳細については、「AWS Fargate での Amazon ECS」を参照してください。

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

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

    5. コンテナシークレットを環境変数として参照する場合は、[環境] の [環境変数] で、以下のフィールドに入力します。

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

      2. [Value (値)] で、[ValueFrom] を選択します。[Add value (値の追加)] に、完全な ARN または Secrets Manager のシークレット、あるいはコンテナに入れるデータが含まれている AWS Systems Manager パラメータストアのパラメータの名前または完全な ARN を環境変数として入力します。

        注記

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

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

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

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

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

        注記

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

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

    8. [Add] を選択します。

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