Amazon ECS タスク実行IAM ロール
タスク実行ロールは、ユーザーに代わって AWS API コールを実行するためのアクセス許可を Amazon ECS コンテナと Fargate エージェントに付与します。タスク実行 IAM ロールは、タスクの要件に応じて必要です。さまざまな目的とサービスのタスク実行ロールを、アカウントに複数関連付けることができます。
注記
これらのアクセス許可は、Amazon ECS が定期的にロールの一時的な認証情報を送信することで、インスタンスで実行されているエージェントが使用できるようになりますが、タスク内のコンテナからは直接アクセスできません。コンテナ内のアプリケーションコードの実行に必要な IAM 許可については、「Amazon ECS タスクの IAM ロール」を参照してください。
以下に示しているのは、タスク実行 IAM ロールの一般的なユースケースです。
-
タスクは AWS Fargate、Amazon ECS マネージドインスタンス、または外部インスタンスでホストされており、次の動作を行います。
-
Amazon ECR プライベートリポジトリからコンテナイメージをプルします。
-
タスクを実行するアカウントとは別のアカウントの Amazon ECR プライベートリポジトリからコンテナイメージをプルします。
-
awslogsログドライバーを使用して CloudWatch Logs にコンテナログを送信します。詳細については、「Amazon ECS ログを CloudWatch に送信する 」を参照してください。
-
-
タスクは、AWS Fargate または Amazon EC2 インスタンスでホストされています。また、
-
プライベートレジストリの認証を使用します。詳細については、「プライベートレジストリ認証のアクセス許可」を参照してください。
-
Runtime Monitoring を使用します。
-
タスク定義は、Secrets Manager のシークレットまたは AWS Systems Manager Parameter Store のパラメータを使用して機密データを参照します。詳細については、「Secrets Manager または Systems Manager のアクセス許可」を参照してください。
-
注記
タスク実行ロールは Amazon ECS コンテナエージェントバージョン 1.16.0 以降でサポートされています。
Amazon ECS は、AmazonECSTaskExecutionRolePolicy という管理ポリシーを提供します。このポリシーには、上記の一般的ユースケースで必要なアクセス許可が含まれています。詳細については、「AWS Managed Policy リファレンスガイド」の「AmazonECSTaskExecutionRolePolicy」を参照してください。特殊なユースケースでは、タスク実行ロールにインラインポリシーを追加する必要がある可能性があります。
Amazon ECS コンソールで、ECS タスク実行ロールを作成します。追加の機能や機能強化が導入された場合に Amazon ECS がそのアクセス許可を追加できるように、タスクのマネージド IAM ポリシーを手動でアタッチすることができます。IAM コンソールの検索を使用して ecsTaskExecutionRole を検索すると、アカウントにすでにタスク実行ロールがあるかどうかを確認できます。詳細については、「IAM ユーザーガイド」の「IAM コンソールの検索」を参照してください。
認証されたユーザーとしてイメージをプルすると、Docker Hub の使用量と制限
Amazon ECR と Amazon ECR パブリックを使用することで、Docker によって課せられる制限を回避できます。Amazon ECR からイメージをプルすると、ネットワークのプル時間を短縮し、トラフィックが VPC を離れる際のデータ転送の変更を減らすのにも役立ちます。
Fargate を使用するときは、repositoryCredentials を使用してプライベートイメージレジストリの認証を行う必要があります。Amazon ECS コンテナエージェントの環境変数である ECS_ENGINE_AUTH_TYPE および ECS_ENGINE_AUTH_DATA を設定したり、Fargate でホストされているタスクの ecs.config ファイルを変更したりすることはできません。詳細については、「タスクのプライベートレジストリの認証」を参照してください。
タスク実行 ロールの作成
アカウントにまだタスク実行ロールがない場合は、次のステップに従ってロールを作成します。
ロールを作成したら、次の機能のアクセス許可をロールに追加します。
| 機能 | 追加のアクセス許可 |
|---|---|
|
Secrets Manager 認証情報を使用して、AWS の外部のプライベートレジストリ (Docker Hub、Quay.io、独自のプライベートレジストリなど) からコンテナイメージをプルする |
|
| Systems Manager または Secrets Manager を使用して機密データを渡す | |
| Fargate タスクが、インターネットエンドポイントを介して Amazon ECR イメージをプルできるようにする | インターフェイスエンドポイントのアクセス許可によって Amazon ECR イメージをプルする Fargate タスクです。 |
| 設定ファイルを Amazon S3 バケットでホストする | |
| Amazon ECS ライフサイクルイベントを表示するように Container Insights を設定する |
Amazon ECS ライフサイクルイベントを Container Insights で表示するために必要なアクセス許可 |
| Container Insights に Amazon ECS ライフサイクルイベントを表示する |
Amazon ECS ライフサイクルイベントを Container Insights で表示するには、以下のアクセス許可が必要です。 |
プライベートレジストリ認証のアクセス許可
プライベートレジストリ認証を使用すると、Amazon ECS タスクは、認証情報を必要とする AWS の外部のプライベートレジストリ (Docker Hub、Quay.io、独自のプライベートレジストリなど) からコンテナイメージをプルできます。この機能は Secrets Manager を使用してレジストリ認証情報を安全に保存し、repositoryCredentials パラメータを使用してタスク定義で参照します。
プライベートレジストリ認証の設定の詳細については、「Amazon ECS での非 AWS コンテナイメージの使用」を参照してください。
プライベートレジストリ認証情報を含むシークレットにアクセスできるようにするには、以下のアクセス許可を、インラインポリシーとしてタスクの実行ロールに追加します。詳細については、「IAM ポリシーの追加と削除」を参照してください。
-
secretsmanager:GetSecretValue— Secrets Manager からプライベートレジストリ認証情報を取得するために必要です。 -
kms:Decrypt– シークレットでカスタムの KMS キーを使用し、デフォルトのキーを使用しない場合にのみ必須です。カスタムキーの Amazon リソースネーム (ARN) は、リソースとして追加する必要があります。
次の例では、インラインポリシーによりアクセス許可を追加しています。
Secrets Manager または Systems Manager のアクセス許可
コンテナエージェントが必要な AWS Systems Manager または Secrets Manager のリソースをプルできるようにするためのアクセス許可です。詳細については、「Amazon ECS コンテナに機密データを渡す」を参照してください。
Secrets Manager の使用
作成した Secrets Manager シークレットにアクセスできるようにするには、タスクの実行ロールに対し、以下のアクセス許可を手動により追加します。アクセス許可の管理の詳細については、「IAM ユーザーガイド」の「IAM ID のアクセス許可の追加および削除」を参照してください。
-
secretsmanager:GetSecretValue– Secrets Manager シークレットを参照する場合に必須です。Secrets Manager からシークレットを取得するための許可を追加します。
次のポリシーの例では、必須のアクセス許可を追加します。
Systems Manager の使用
重要
EC2 起動タイプを使用するタスクの場合、この機能を使用するには ECS エージェント設定変数 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true を使用する必要があります。コンテナインスタンスの作成時に ./etc/ecs/ecs.config ファイルに追加するか、既存のインスタンスに追加して ECS エージェントを再起動できます。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。
作成した Systems Manager Parameter Store のパラメータにアクセスできるようにするには、タスク実行ロールに対し、以下のアクセス許可を手動で追加する必要があります。アクセス許可の管理の詳細については、「IAM ユーザーガイド」の「IAM ID のアクセス許可の追加および削除」を参照してください。
-
ssm:GetParameters– Systems Manager Parameter Store のパラメータをタスク定義で参照している場合は必須です。Systems Manager パラメータを取得するための許可を追加します。 -
secretsmanager:GetSecretValue– Secrets Manager シークレットをユーザーが直接参照している、あるいは、Systems Manager Parameter Store のパラメータが、タスク定義で Secrets Manager シークレットを参照している場合は必須です。Secrets Manager からシークレットを取得するための許可を追加します。 -
kms:Decrypt– シークレットが、デフォルトのキーではなく、カスタマーマネージドのキーを使用している場合にのみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。カスタマーマネージドキーを復号するための許可を追加します。
次の例のポリシーでは、必須のアクセス許可を追加します。
インターフェイスエンドポイントのアクセス許可によって Amazon ECR イメージをプルする Fargate タスクです。
Amazon ECR がインターフェイス VPC エンドポイントを使用するように設定されている場合、Amazon ECR からイメージをプルする Fargate を使用するタスクを起動するときは、特定の VPC または VPC エンドポイントへのアクセスにタスクを制限できます。この操作を行うには、IAM 条件キーを使用するタスクのタスク実行ロールを作成します。
次の IAM グローバル条件キーを使用して、特定の VPC または VPC エンドポイントへのアクセスを制限します。詳細については、「AWSvグローバル条件コンテキストキー」を参照してください。
-
aws:SourceVpc- 特定の VPC へのアクセスを制限します。タスクとエンドポイントをホストする VPC に制限できます。 -
aws:SourceVpce- 特定の VPC エンドポイントへのアクセスを制限します。
次のタスク実行ロールポリシーは、条件キーを追加する方法の例を示しています。
Amazon ECR のアクセス許可
Amazon ECR プライベートリポジトリからコンテナイメージをプルする必要がある場合は、以下のアクセス許可が必要です。タスクの実行ロールには、Amazon ECS コンテナと Fargate エージェントがユーザーに代わってコンテナイメージをプルできるように、これらのアクセス許可が必要です。基本的な ECS 実装の場合、これらのアクセス許可は、タスクの IAM ロールではなく、タスクの実行ロールに追加する必要があります。
Amazon ECS タスクの実行ロール管理ポリシー (AmazonECSTaskExecutionRolePolicy) には、Amazon ECR からイメージをプルするために必要なアクセス許可が含まれています。マネージドポリシーを使用している場合は、これらのアクセス許可を個別に追加する必要はありません。
カスタムポリシーを作成する場合は、以下のアクセス許可を含めて、Amazon ECR からのイメージのプルを許可します。
これらのアクセス許可は、アプリケーションコードが Amazon ECR API と直接やり取りする必要がある場合に、タスクの IAM ロールで必要となるアクセス許可とは異なることに注意してください。Amazon ECR におけるタスクの IAM ロールのアクセス許可の詳細については、「Amazon ECR のアクセス許可」を参照してください。
Amazon S3 ファイルストレージのアクセス許可
Amazon S3 でホストされる設定ファイルを指定する場合、タスク実行ロールには、設定ファイルに対する s3:GetObject アクセス許可と、ファイルが格納されている Amazon S3 バケットでの s3:GetBucketLocation アクセス許可が含まれている必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 のポリシーアクション」を参照してください。
次のポリシーの例では、Amazon S3 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。
セキュリティに関する重要な考慮事項
Amazon S3 バケットと統合する Amazon ECS 機能を使用する場合は、バケットの所有権検証を実装して、バケット乗っ取り攻撃を防止します。適切な検証を実行しない場合、悪意のあるアクターが Amazon S3 バケットを削除し、同じ名前のバケットを再作成すると、知らないうちにタスクが悪意のある設定を読み込む、攻撃者が管理するバケットに機密データを送信するなどの事態が発生する可能性があります。
推奨される IAM ポリシー条件:
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "TRUSTED-ACCOUNT-ID"
}
}
TRUSTED–ACCOUNT–ID を、S3 バケットを所有する AWS アカウント ID に置き換えます。
この条件により、タスク実行ロールは、指定された信頼されたアカウントが所有する Amazon S3 バケットにのみアクセスできるようになります。