ECS(EC2)で利用するIAMロールを整理する
こんにちわ、札幌のヨシエです。
最近、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ロール役割は把握できると対応が早くなるかと思います。