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

チュートリアル: Secrets Manager シークレットを使用した機密データの指定

Amazon ECS を使用すると、AWS Secrets Manager シークレットに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。詳細については、「機密データの指定」を参照してください。

以下のチュートリアルでは、Secrets Manager シークレットを作成して Amazon ECS タスク定義でシークレットを参照する方法を示し、コンテナ内の環境変数をクエリすることでシークレットの内容を表示して正しく動作することを確認します。

前提条件

このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。

  • Amazon ECS でのセットアップ」のステップを完了していること。

  • AWS ユーザーに、このチュートリアルで説明される Secrets Manager と Amazon ECS リソースを作成するために必要な IAM アクセス許可があること。

ステップ 1: 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. [このシークレットに保存するキーと値のペアを指定します] で、[プレーンテキスト] タブを選択し、既存のテキストを以下のテキストに置き換えます。ここで指定したテキストの値は、チュートリアルの最後にコンテナに存在する環境変数の値になります。

    password_value
  5. [Next] を選択します。

  6. [シークレット名] に「username_value」と入力し、[次へ] を選択します。ここで指定したシークレット名の値は、チュートリアルの最後にコンテナに存在する環境変数の名前になります。

  7. [自動ローテーションの設定] で [自動ローテーションを無効化] を選択したままにしておき、[次へ] を選択します。

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

  9. 先ほど作成したシークレットを選択して [シークレット ARN] を保存し、後のステップのタスク実行 IAM ポリシーとタスク定義で参照できるようにします。

ステップ 2: タスク実行 IAM ロールを更新する

Amazon ECS で Secrets Manager シークレットから機密データを取得するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要な Secrets Manager リソースをコンテナエージェントがプルできます。タスク実行 IAM ロールをまだ作成していない場合は、「Amazon ECS タスク実行 IAM ロール」を参照してください。

以下の手順は、タスク実行 IAM ロールが既に作成され、適切に設定されていることを前提としてます。

タスク実行 IAM ロールを更新するには

IAM コンソールを使用して、必要なアクセス許可を持つタスク実行ロールを更新します。

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

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. ロールの一覧で ecsTaskExecutionRole を探し、選択します。

  4. [アクセス許可]、[Add inline policy (インラインポリシーの追加)] の順に選択します。

  5. [JSON] タブを選択して以下の JSON テキストを指定し、ステップ 1 で作成した Secrets Manager シークレットの完全な ARN を指定していることを確認します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K" ] } ] }
  6. [ポリシーの確認] を選択します。[名前] で ECSSecretsTutorial を指定し、[ポリシーの作成] を選択します。

ステップ 3: Amazon ECS タスク定義を作成する

Amazon ECS コンソールを使用して、Secrets Manager シークレットを参照するタスク定義を作成します。

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

IAM コンソールを使用して、必要なアクセス許可を持つタスク実行ロールを更新します。

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

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

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

  4. [Configure via JSON (JSON による設定)] を選択して以下のタスク定義 JSON テキストを入力し、ステップ 1 で作成した Secrets Manager シークレットの完全な ARN と、ステップ 2 で更新したタスク定義 IAM ロールを指定していることを確認します。[Save] を選択します。

    重要

    タスク定義のシークレット名の値は、シークレットを作成した際にシークレット名で指定した名前と一致する必要があります。

    { "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "entryPoint": [ "sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "cpu": 10, "secrets": [ { "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }
  5. 設定を確認し、[Create (作成)] を選択します。

ステップ 4: Amazon ECS クラスターを作成する

Amazon ECS コンソールを使用してコンテナインスタンスを含むクラスターを作成し、タスクを実行します。利用可能なリソースを使用して登録された少なくとも 1 つのコンテナインスタンスを持つ既存のクラスターがあり、このチュートリアル用に作成されたタスク定義の 1 つのインスタンスを実行できる場合は、次のステップに進みます。

このチュートリアルでは Amazon ECS-optimized Amazon Linux 2 AMI を使用して、1 つの t2.micro コンテナインスタンスを持つクラスターを作成します。

クラスターを作成するには

Amazon ECS コンソールを使用してクラスターを作成し、1 つのコンテナインスタンスを登録します。

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

  2. ナビゲーションバーで、作成した Secrets Manager シークレットと Amazon ECS タスク定義の両方が含まれるリージョンを選択します。

  3. ナビゲーションペインで [Clusters] を選択します。

  4. [Clusters] ページで、[Create Cluster] を選択します。

  5. [EC2 instance type (EC2 インスタンスタイプ)] で [t2.micro] を選択します。

  6. [Key pair (キーペア)] で、コンテナインスタンスに追加するキーペアを選択します。

    重要

    このチュートリアルを完了するにはキーペアが必要です。そのため、作成したキーペアをまだ持っていない場合は、EC2 コンソールのリンクをクリックしてキーペアを作成してください。

  7. 他のすべてのフィールドはデフォルト値のままにして、[Create (作成)] を選択します。

ステップ 5: Amazon ECS タスクを実行する

Amazon ECS コンソールを使用し、作成したタスク定義を使用してタスクを実行できます。このチュートリアルでは、前のステップで作成したクラスターを使用し、EC2 起動タイプを使用してタスクを実行します。

タスクを実行するには

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

  2. ナビゲーションペインで [Task Definitions (タスク定義)] を選択し、作成した [ecs-secrets-tutorial] タスク定義を選択します。

  3. タスク定義の最新のリビジョンを選択し、[Actions (アクション)]、[Run Task (タスクの実行)] の順に選択します。

  4. [起動タイプ] で、[EC2] を選択します。

  5. [Cluster (クラスター)] で、前のステップで作成した [ecs-secrets-tutorial] クラスターを選択します。

  6. [Task tagging configuration (タスクのタグ付け設定)] で [Enable ECS managed tags (ECS で管理されたタグを有効にする)] を選択解除します。これらは、このチュートリアルでは必要ありません。

  7. タスク情報を確認し、[Run Task] を選択します。

    注記

    タスクが PENDING から STOPPED に移行した場合、または PENDING ステータスが表示された後、リストされているタスクから消えた場合、エラーで停止した可能性があります。詳細については、トラブルシューティングセクションの「停止されたタスクでのエラーの確認」を参照してください。

ステップ 6: 確認する

以下のステップを使用して、すべてのステップが正常に完了し、コンテナに環境変数が適切に作成されたことを確認できます。

環境変数が作成されたことを確認するには

  1. コンテナインスタンスのパブリック IP アドレスまたは DNS アドレスを見つけます。

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

    2. コンテナインスタンスをホストする ecs-secrets-tutorial クラスターを選択します。

    3. [Cluster] ページで、[ECS Instances] を選択します。

    4. [Container Instance] 列で、接続するコンテナインスタンスを選択します。

    5. [Container Instance] ページで、インスタンスの [Public IP] または [Public DNS] を記録します。

  2. macOS または Linux コンピュータを使用している場合は、以下のコマンドでインスタンスに接続します (パスとアドレスはプライベートキーへのパスとインスタンスのパブリックアドレスに置き換えます)。

    $ ssh -i /path/to/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

    Windows コンピュータを使用している場合は、Linux インスタンス用 Amazon EC2 ユーザーガイド の「PuTTY を使用した Windows からの接続」を参照してください。

    重要

    インスタンス接続時の問題の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「インスタンスへの接続に関するトラブルシューティング」を参照してください。

  3. インスタンスで実行するコンテナを一覧表示します。ecs-secrets-tutorial コンテナのコンテナ ID をメモしておきます。

    docker ps
  4. 前のステップの出力のコンテナ ID を使用して ecs-secrets-tutorial コンテナに接続します。

    docker exec -it container_ID /bin/bash
  5. echo コマンドを使用して環境変数の値を出力します。

    echo $username_value

    このチュートリアルが成功すると、次のような出力が表示されます。

    password_value

    注記

    あるいは、env (または printenv) コマンドを使用して、コンテナ内の環境変数をすべて一覧表示できます。

ステップ 7: クリーンアップ

このチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

リソースをクリーンアップするには

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

  2. 作成した [ecs-secrets-tutorial] クラスターを選択します。

  3. [Cluster (クラスター)] ページで [Delete Cluster (クラスターの削除)] を選択します。

  4. クラスターの削除を確認するフレーズを入力し、[Delete (削除)] を選択します。これには数分かかりますが、Amazon ECS クラスターのリソースがすべてクリーンアップされます。

  5. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  6. ナビゲーションペインで [Roles (ロール) ] を選択します。

  7. ロールの一覧で ecsTaskExecutionRole を探し、選択します。

  8. [Permissions (アクセス許可)] を選択し、ECSSecretsTutorial の横にある [X] を選択します。[Remove (削除)] を選択してインラインポリシーの削除を確定します。

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

  10. 作成した [username_value] シークレットを選択し、[Actions (アクション)]、[Delete secret (シークレットの削除)] の順に選択します。