ECSにおける3つのIAMロール
ECSフレームワーク内では、コンテナの動作方法を決定する3つの主要なIAMロールが存在します。これらの各ロールはそれぞれ独自の目的を果たし、コンテナのライフサイクルの異なる段階で使用されます。
コンテナインスタンスIAMロール
非Fargateのコンテキストでは、このIAMロールはコンテナの実行をサポートするEC2インスタンスに割り当てられます。ECSクラスタを作成する際に決定されます。コンテナインスタンスIAMロールにより、基礎となるEC2インスタンスは他のAWSサービスにAPI呼び出しを行うことができます。
タスク実行ロール
タスク実行ロールは、ECSが他のサービスに呼び出しを行い、アプリケーションのリソースを管理するためのIAMロールです。このロールはコンテナプロセス自体ではなく、ECSエージェントによって使用されます。これにより、ECRからコンテナイメージを取得したり、CloudWatch Logsストリームを作成および管理したり、Secret ManagerやSSMパラメータストアから値を取得したりするなど、さまざまな操作が可能になります。なお、このロールの範囲は、起動タイプがEC2またはFargateによって異なります。
タスクロール
タスクロールは、ECS上で実行されるコンテナ化されたアプリケーションによって使用される別のIAMロールです。このロールは、S3上のファイル操作やDynamoDBからのデータの読み書きなど、他のAWSサービスとの対話が必要な場合によく使用されます。タスク実行ロールとは異なり、タスクロールの動作は起動タイプによって変化しません。
起動タイプに基づく動作の違い
ECSのIAMロールの動作は、選択した起動タイプ(EC2またはFargate)によって異なる場合があります。
起動タイプ: EC2
-
コンテナインスタンスIAMロール
EC2起動タイプの文脈では、コンテナインスタンスIAMロールは主に、タスクの開始時にECRからイメージを取得し、コンテナログをCloudWatchLogsにエクスポートするための機能をサポートします。 -
タスク実行ロール
EC2の場合、タスク実行ロールはプライベートレジストリの認証やシークレットの取得などの機能をカバーしています。Secrets ManagerやSSMパラメータストアから機密データを取得し、それらを環境変数として設定することができます。 -
タスクロール
タスクロールは、コンテナ内で実行されるアプリケーションから開始される全てのAWS API呼び出しを実行するために使用されます。これには、S3上のファイル操作やDynamoDBからのデータの読み書きなどの操作が含まれます。
起動タイプ: Fargate
-
コンテナインスタンスIAMロール
Fargate起動タイプでは、コンテナインスタンスIAMロールの指定はありません。 -
タスク実行ロール
Fargateの場合、タスク実行ロールは広範な責任を持ち、通常はEC2起動タイプの場合にコンテナインスタンスIAMロールが処理する領域をカバーします。これには、タスクの開始時にECRからイメージを取得し、コンテナログをCloudWatchLogsにエクスポートする機能、プライベートレジストリの認証、およびシークレットの取得が含まれます。 -
タスクロール
EC2起動タイプと同様に、Fargate起動タイプの場合も、タスクロールはコンテナ内で実行されるアプリケーションから開始される全てのAWS API呼び出しを実行するために使用されます。
Fargateのタスク実行ロール
Fargateのサーバーレスアーキテクチャは、基礎となるEC2インスタンスを直接管理することを許可しません。通常はEC2起動タイプのコンテナインスタンスIAMロールに割り当てられる責任を、Fargateのコンテキストではタスク実行ロールに移しているということになります。
参考