技術ブログ

ECSのタスクロールとタスク実行ロールの違い

2020年10月14日

Amazon ECS

ECS を利用すると「タスクロール」と「タスク実行ロール」というものが出てきます。名前が似ている上に、どのように設定するのが良いか分かりづらかったので調べたことをメモ。

EC2 起動タイプと Fargate 起動タイプの順に説明します。

目次

  1. EC2 起動タイプの場合
  2. Fargate 起動タイプの場合
  3. まとめ

EC2 起動タイプの場合

EC2 起動タイプの場合、以下の IAM ロールが使われます。

  • コンテナインスタンスの IAM ロール
  • タスク用の IAM ロール
  • タスク実行 IAM ロール

順番に見ていきましょう

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

EC2 起動タイプを使っているとき、EC2 インスタンスに設定される IAM ロールです。EC2 インスタンスから AWS サービスを利用する際に使われます。

マネジメントコンソールで ECS のクラスタを作成するときに「新しいロールの作成」を選択すると ecsInstanceRole 作成されるので、これをそのまま利用するのが良いです。ecsInstanceRole には AWS マネージドポリシーの AmazonEC2ContainerServiceforEC2Role がアタッチされており、AWS により自動でメンテナンスされます。

AmazonEC2ContainerServiceforEC2Role(2020年10月時点)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeTags",
                "ecs:CreateCluster",
                "ecs:DeregisterContainerInstance",
                "ecs:DiscoverPollEndpoint",
                "ecs:Poll",
                "ecs:RegisterContainerInstance",
                "ecs:StartTelemetrySession",
                "ecs:UpdateContainerInstancesState",
                "ecs:Submit*",
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

詳細は Amazon ECS コンテナインスタンス IAM ロール - Amazon Elastic Container Service を参照。

タスク用の IAM ロール

コンテナで利用される IAM ロールです。コンテナの中のアプリケーションから AWS のサービスを利用する場合にこのロールを設定します。

たとえば、コンテナの中のアプリケーションから S3 を利用する場合にはここを設定します。コンテナから AWS サービスを利用しない場合は「なし」で良いです。EC2 インスタンスに設定する IAM ロールのコンテナ版をイメージすると理解しやすいと思います。

詳細は タスク用の IAM ロール - Amazon Elastic Container Service を参照。

タスク実行 IAM ロール

ECS コンテナエージェント が利用する IAM ロールです。タスクの要件に応じて設定する必要があります。

ここが少し分かりづらいですが、タスク定義で AWS サービスを利用する設定を行ったときに、タスク実行ロールに権限を設定する必要があります。ドキュメントには以下の例が紹介されています。

上記の下2つ「ECR にあるコンテナイメージを使う」「CloudWatch Logs にログを保存」についてはすでにポリシーが用意されていて、マネジメントコンソールで ECS のタスク定義を作成するときに、タスク実行ロールで「新しいロールの作成」を選択すると ecsTaskExecutionRole 作成されるので、これを利用するのが良いです。

AmazonECSTaskExecutionRolePolicy(2020年10月時点)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

「タスク IAM 実行ロール」は、タスクを実行(起動)するときに必要なロールを定義するところ、とイメージをすると名前と役割が一致して理解しやすいと思います。タスクがエラーで起動しない場合はここの権限が不足していることが多いです。詳細は Amazon ECS タスク実行 IAM ロール - Amazon Elastic Container Service を参照。

Fargate 起動タイプの場合

Fargate 起動タイプの場合は以下 2 つの IAM ロールが使われます。

  • タスク用の IAM ロール
  • タスク実行 IAM ロール

タスク用の IAM ロール

コンテナで利用される IAM ロールです。EC2 起動タイプと同様、コンテナの中のアプリケーションから AWS のサービスを利用する場合はこのロールを設定しましょう。コンテナから AWS サービスを利用しない場合は「なし」で良いです。

詳細は タスク用の IAM ロール - Amazon Elastic Container Service を参照。

タスク実行 IAM ロール

Fargate エージェントが利用する IAM ロールです。EC2 起動タイプと同様に ecsTaskExecutionRole を基本に、必要に応じて追加で設定が必要です。

タスク実行 IAM ロールの詳細は Amazon ECS タスク実行 IAM ロール - Amazon Elastic Container Service を参照してください。

まとめ

  • コンテナインスタンスの IAM ロールは、 EC2 起動モードのときに、土台となる EC2 インスタンスが利用するもの。ここは ecsInstanceRole を設定し、基本的にはいじらない。
  • タスクロールはコンテナの中のアプリケーションから AWS サービスを利用するときに設定する。
  • タスク実行ロールはタスク定義で AWS サービスを利用する設定をしたときに設定が必要。ecsTaskExecutionRole を基本に、タスク定義の内容に応じて設定。

-技術ブログ
-

© 2020 karakaram-blog