ECS(EC2)で利用するIAMロールを整理する

2019.12.06

こんにちわ、札幌のヨシエです。

最近、youtubeでクルマのシートを洗浄する機器に興味があってレンタル出来ないか調べ続けてます。 今回、AWS ECS(EC2)で使用されるIAMロールについて各役割を整理しました。

前提として、今回はEC2をホストインスタンスとしたECSを想定して書いております。 Fargateとは異なる点がございますのでご注意ください。

どういうIAMロールが存在するのか?

まずはECSで利用されるIAMロールを列挙します。

ロール名 役割概要 備考
ECS コンテナインスタンスロール ECS(EC2)を利用時にホストインスタンスへ適用されるIAMロール ホストインスタンスが他AWSサービスと連携する際に必要となる
ECSタスク実行 ロール 起動されるECSコンテナエージェントで使用されるIAMロール AWS管理ポリシーにてECSコンテナエージェントの機能は実現されていると考えられ、変更は不要と考えられる
ECSタスクロール コンテナで使用されるIAMロール コンテナが他AWSサービスと連携する際に変更が必要

ECS コンテナインスタンス IAMロール

コンテナを動作させるホストインスタンスに適用されるIAMロールとなります。

ECSでコンテナを配置するホストインスタンスがEC2を利用している時にECSクラスターへ参加を行う際に必要となるIAMロールで、もしecs.configのような設定ファイルを配置する際にはS3へのアクセス権限をこちらのIAMロールに付与することで対応が可能かと思います。

このIAMロールに適用されるIAMポリシーとしてAmazonEC2ContainerServiceforEC2Roleは最低限必要になります。 ポリシーより、ECSでホストインスタンス情報を取得するために使用される権限がポリシーとして付与されております。

ecs:CreateCluster
ecs:DeregisterContainerInstance
ecs:DiscoverPollEndpoint
ecs:Poll
ecs:RegisterContainerInstance
ecs:StartTelemetrySession
ecs:Submit*
ecr:GetAuthorizationToken
ecr:BatchCheckLayerAvailability
ecr:GetDownloadUrlForLayer
ecr:BatchGetImage
logs:CreateLogStream
logs:PutLogEvents

タスク実行ロール

ECSコンテナエージェント(=ECS-Agent)がECS APIを実行するために使用されるIAMロールとなります。

このIAMロールを使用するのはホストインスタンス上で実行されるECSコンテナエージェントとなります。 ECSコンテナエージェントの役割はECSにて指定されたサービス定義を実行することが目的なので以下のようなアクション権限を割り当てられます。 ECSコンテナエージェントがECRからコンテナイメージを取得することに必要な認証、コンテナイメージダウンロード、CloudwatchLogsへのログ出力権限が付与されております。

ecr:GetAuthorizationToken
ecr:BatchCheckLayerAvailability
ecr:GetDownloadUrlForLayer
ecr:BatchGetImage
logs:CreateLogStream
logs:PutLogEvents"

タスクロール

これはECSのタスクで定義されてたコンテナ自体が使用できるIAMロールとなります。

注意が必要なのはECSコンテナインスタンスIAMロールと異なる点です。 コンテナ自身がS3にアクセスしたい時などのEC2インスタンスIAMロールと同じような使い方になりますので、実際に処理でAWSサービスを利用する権限はタスクロールに付与するようにしましょう。

最後に

ECSの作業をマネジメントコンソールで行なうと、次々とIAMロールの指定を求められます。 また、個人的に似ている名称が続く点で自分リファレンスが欲しいという気持ちで整理しました。 IAMロールの役割は非常に大きいところを締め、「コンテナが起動しない」といった事象時の一因になることがしばしばございますので、それぞれのIAMロール役割は把握できると対応が早くなるかと思います。