Amazon ECS の Secrets Manager シークレットを使用した機密データの指定
Amazon ECS では、機密データを AWS Secrets Manager シークレットに保存し、コンテナ定義でそれを参照することで、機密データをコンテナに挿入することができます。詳細については、「Amazon ECS コンテナに機密データを渡す」を参照してください。
Secrets Manager シークレットを作成して、Amazon ECS タスク定義でシークレットを参照し、コンテナ内の環境変数をクエリすることでシークレットの内容を表示して正しく動作したことを確認する方法について説明します。
前提条件
このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。
-
「Amazon ECS を使用するようにセットアップする」のステップを完了していること。
-
ユーザーに、Secrets Manager および Amazon ECS リソースを作成するのに必要な IAM アクセス許可があります。
ステップ 1:Secrets Manager シークレットを作成する
Secrets Manager コンソールを使用して、機密データ用のシークレットを作成できます。このチュートリアルでは、後にコンテナで参照するユーザー名とパスワードを保存するための基本的なシークレットを作成します。詳細については、AWS Secrets Manager ユーザーガイドの「Create an AWS Secrets Manager secret」を参照してください。
[key/value pairs to be stored in this secret] (このシークレットに格納されたキーおよび値のペア) は、チュートリアルの最後にコンテナに存在する環境変数の値です。
[Secret ARN] (シークレット ARN) を保存し、後のステップのタスク実行 IAM ポリシーとタスク定義で参照できるようにします。
ステップ 2: タスク実行ロールにシークレットアクセス許可を追加する
Amazon ECS で Secrets Manager シークレットから機密データを取得するには、タスク実行ロールにシークレットアクセス許可が必要です。詳細については、「Secrets Manager または Systems Manager のアクセス許可」を参照してください。
ステップ 3: タスク定義を作成する
Amazon ECS コンソールを使用して、Secrets Manager シークレットを参照するタスク定義を作成します。
シークレットを指定するタスク定義を作成するには
IAM コンソールを使用して、必要なアクセス許可を持つタスク実行ロールを更新します。
コンソール (https://console.aws.amazon.com/ecs/v2
) を開きます。 -
ナビゲーションペインで、タスクの定義 を選択します。
-
[Create new task definition] (新しいタスク定義の作成)、[Create new task definition with JSON] (JSON で新しいタスク定義を作成) の順に選択します。
-
JSON エディタボックスで、以下のタスク定義 JSON テキストを入力して、ステップ 1 で作成した Secrets Manager シークレットの完全な ARN と、ステップ 2 で更新したタスク定義ロールを指定します。[Save] を選択します。
-
{ "executionRoleArn": "
arn:aws:iam::
", "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": "aws_account_id
:role/ecsTaskExecutionRolearn:aws:secretsmanager:
", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }region
:aws_account_id
:secret:username_value -
[Create] (作成) を選択します。
ステップ 4: クラスターを作成する
Amazon ECS コンソールを使用してコンテナインスタンスを含むクラスターを作成し、タスクを実行します。利用可能なリソースを使用して登録された少なくとも 1 つのコンテナインスタンスを持つ既存のクラスターがあり、このチュートリアル用に作成されたタスク定義の 1 つのインスタンスを実行できる場合は、次のステップに進みます。
このチュートリアルでは、Amazon ECS最適化Amazon Linux 2 AMIを使用して、1つのt2.micro
コンテナ・インスタンスでクラスタを作成します。
EC2 起動タイプ用にクラスターを作成する方法については、「Amazon EC2 起動タイプ用の Amazon ECS クラスターの作成」を参照してください。
ステップ 5: タスクを実行する
Amazon ECS コンソールを使用し、作成したタスク定義を使用してタスクを実行できます。このチュートリアルでは、前のステップで作成したクラスターを使用し、EC2 起動タイプを使用してタスクを実行します。
タスクを実行する方法については、「Amazon ECS タスクとしてのアプリケーションの実行」を参照してください。
ステップ 6: 確認する
以下のステップを使用して、すべてのステップが正常に完了し、コンテナに環境変数が適切に作成されたことを確認できます。
環境変数が作成されたことを確認するには
-
コンテナインスタンスのパブリック IP アドレスまたは DNS アドレスを見つけます。
コンソール (https://console.aws.amazon.com/ecs/v2
) を開きます。 -
ナビゲーションペインで [クラスター] を選択した後、作成してあるクラスターを選択します。
-
[インフラストラクチャ] を選択した後、コンテナインスタンスを選択します。
-
インスタンスの [パブリック IP] または [パブリック DNS] を記録します。
-
macOS または Linux コンピュータを使用している場合は、以下のコマンドでインスタンスに接続します (パスとアドレスはプライベートキーへのパスとインスタンスのパブリックアドレスに置き換えます)。
$
ssh -i/path/to/my-key-pair
.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
Windows コンピュータを使用している場合は、「Amazon EC2 ユーザーガイド」の「PuTTY を使用して Linux インスタンスに接続する」を参照してください。
重要
インスタンス接続時の問題の詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスへの接続に関するトラブルシューティング」を参照してください。
-
インスタンスで実行するコンテナを一覧表示します。
ecs-secrets-tutorial
コンテナのコンテナ ID をメモしておきます。docker ps
-
前のステップの出力のコンテナ ID を使用して
ecs-secrets-tutorial
コンテナに接続します。docker exec -it
container_ID
/bin/bash -
echo
コマンドを使用して環境変数の値を出力します。echo $username_value
このチュートリアルが成功すると、次のような出力が表示されます。
password_value
注記
あるいは、
env
(またはprintenv
) コマンドを使用して、コンテナ内の環境変数をすべて一覧表示できます。
ステップ 7: クリーンアップする
このチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。
リソースをクリーンアップするには
コンソール (https://console.aws.amazon.com/ecs/v2
) を開きます。 -
ナビゲーションペインで [Clusters] (クラスター) を選択します。
-
[Clusters] (クラスター) ページで、クラスターを選択します。
-
[Delete Cluster] を選択します。
-
確認ボックスで、delete
cluster name
と入力し、[削除] を選択します。 IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles] (ロール) を選択します。
-
ロールの一覧で
ecsTaskExecutionRole
を探し、選択します。 -
[アクセス許可] を選択した後、[ECSSecrets チュートリアル] の横にある [X] を選択します。[削除] を選択します。
-
[https://console.aws.amazon.com/secretsmanager/
]で、Secrets Manager コンソール を開きます。 -
作成した [username_value] シークレットを選択し、[Actions (アクション)]、[Delete secret (シークレットの削除)] の順に選択します。