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

2020年10月14日

Amazon ECS

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

目次

  1. タスクロール
  2. タスク実行ロール
  3. 番外編:EC2 起動タイプのコンテナインスタンスの IAM ロール
  4. まとめ

タスクロール

ECS タスクロール

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

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

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

タスク実行ロール

タスク実行ロールとは

ECS タスク実行ロール

AWS ドキュメントの Amazon ECS タスク実行 IAM ロール によると ECS コンテナエージェント が利用する IAM ロールという説明があります。タスクの要件に応じて設定する必要があるとのことです。

ECS コンテナエージェントと言われてもよく分からないので、具体例を見ていきましょう。

よく使う例

上記 2 つはよく利用するためにデフォルトの IAM ロール ecsTaskExecutionRole が用意されています。ecsTaskExecutionRole は、マネジメントコンソールで ECS のタスク定義を作成するときに、タスク実行ロールで「新しいロールの作成」を選択すると自動で作成されます。

ECS タスク実行ロール新規作成

CloudFormation や Terraform で ECS を構築していてマネジメントコンソールを使わない環境ではこのロールが存在していないことがあるので、その場合は、マネジメントコンソールで操作をして IAM ロールを作成しましょう。

ecsTaskExecutionRole にアタッチされているポリシー

ecsTaskExecutionRole には AWS マネージドポリシーの AmazonECSTaskExecutionRolePolicy がアタッチされており、AWS により自動でメンテナンスされます。

AmazonECSTaskExecutionRolePolicy(2020年10月時点)

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

他によく使う例

他によく使う例として、タスク定義の環境変数に AWS System Manager パラメータストアの値を利用する例があります。DB の接続情報をパラメータストアに入れておいて、ECS の環境変数や Secret に情報を送り込むときなどに使います。詳細は Amazon ECS シークレットで必須の IAM アクセス許可 を参照。

タスク実行ロールまとめ

「タスク実行ロール」は、ECS コンテナエージェントがタスクを実行(起動)するときに必要なロールを定義するところ、とイメージをすると、名前と動作が一致して覚えやすいと思います。タスクが権限エラーで起動しない場合はタスク定義で AWS サービスを使っていないか確認をして、「タスク実行ロール」の権限不足を疑ってみるとよいと思います。

タスク実行ロールの詳細は Amazon ECS タスク実行 IAM ロール を参照。

番外編:EC2 起動タイプのコンテナインスタンスの IAM ロール

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

番外編としてもうひとつ。EC2 起動タイプの ECS クラスターを作成するときに「コンテナインスタンスの IAM ロール」というものがでてきます。これは ECS タスクを動かす土台となる EC2 インスタンスに設定される IAM ロールです。EC2 インスタンスから AWS サービスを利用する際に使われます。

デフォルトとして AWS があらかじめ用意してくれている IAM ロール ecsInstanceRole があるので、ほとんどの場合はこれを使えば OK です。ecsInstanceRole は、マネジメントコンソールで EC2 起動タイプを選択して ECS のクラスタを作成するとき「新しいロールの作成」を選択すると作成されます。

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 を参照。

まとめ

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

-技術ブログ
-