3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タスクロールとタスク実行ロールの違いについて

Posted at

AWSでコンテナを動かすサービス、ECS (Elastic Container Service)Fargate を使い始めると、必ずと言っていいほど遭遇するのが、「タスクロール」と「タスク実行ロール」という二つのIAMロールですが、名前が似ているので、「どっちがどっち?」「何が違うの?」と混乱する方が私の周りではとても多かったので、少しまとめてみました。

この二つのロールの役割を、役割分担という視点でできるだけ丁寧に解説してみます。


1. そもそも「タスク」って何?

タスクロールとタスク実行ロールを理解する前に、AWSにおける 「タスク (Task)」 のイメージを簡単に掴んでおくのが大事かなと思います。

ECSやFargateの世界では、「タスク」とは、「プログラムを動かすための最小単位の実行環境」 として考えるとわかりやすいです。

例えるなら、「荷物を運ぶトラック(コンテナ)」 と、「そのトラックを動かす運転手(実行環境)」 がセットになったものです。このタスクは、Dockerコンテナを実行し、Webサーバーを動かしたり、データを処理したりといった、実際の仕事(プログラム)を行います。


2. 二つのロールの役割分担

タスクロールとタスク実行ロールは、名前は似ていますが、それぞれ全く異なるタイミングと目的で使われます。

比較項目 タスク実行ロール (Task Execution) タスクロール (Task Role)
誰が使うか? AWSのECSエージェントFargateのシステム タスク(プログラム)自身
いつ使うか? タスクの準備 (起動前)の段階 タスクが実行中の段階
主な目的 「起動準備」 に関する権限 「実際の仕事」 に関する権限
権限の例 ECRからのイメージ取得、ログのCloudWatchへの送信 S3へのデータ保存、DynamoDBの読み書き

これを身近なものに例えるなら、「引越し作業」 とかがイメージしやすいかなと思います。

AWSロール 引越しの例え
タスク実行ロール 引越し業者(トラックの準備係)の権限
トラック(コンテナ)を準備し、荷物(プログラムの実行ファイル)を倉庫(ECR)から運び出す権限
タスクロール 引越し後の生活(プログラムの実行)の権限
新居で家具(S3)を使ったり、電気(RDS)を操作したりする権限

3. 【タスク実行ロール】: 起動のための準備係

タスク実行ロール (Task Execution Role) は、タスクが起動する前に、AWSのシステム側(ECSエージェントやFargate) が利用するための権限セットとなります。

そのため、ECSやFargateがコンテナを起動するためには、以下の「準備作業」を行う必要があります。

  1. コンテナイメージの取得: どこからコンテナのプログラム(イメージ)を持ってくるか?
    • 例: ECR (Elastic Container Registry) からイメージをプル(取得) する権限
  2. ログの送信: コンテナの起動ログなどをどこに書き込むか?
    • 例: CloudWatch Logs にログを 書き込む 権限

このロールを設定しないと、タスクはそもそも起動すらできないため、
ECS/Fargateが 「タスクの実行を任された」 という証拠と、その準備に必要な最低限の許可証のようなものになります。

📝 設定例 (最低限のポリシー)

タスク実行ロールには、通常、AWSが提供する管理ポリシーをアタッチします。
※参考例です

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

4. 【タスクロール】: 実際の仕事をする本体の権限

タスクロール (Task Role) は、タスク(コンテナ内で動いているプログラム)自身が、実行中にAWSの他のサービスへアクセスするために利用する権限セットのこと。

プログラムが、外部のAWSサービス(S3、DynamoDB、RDSなど)と連携して「実際の仕事」をするときに使われる。

💡 簡単なイメージ

例えば、Pythonで書いたWebサーバーのプログラムが、ユーザーからアップロードされた画像をS3に保存したいとします。

このとき、プログラムはS3に対して 「画像を保存させてください」というアクセスを試みます。このアクセスを許可するのが タスクロールの役割になります。

📝 設定例 (S3への読み書き権限)

タスクロールには、プログラムが実行する具体的な操作の権限を記述します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-application-bucket/*"
        }
    ]
}

このタスクロールをアタッチされたタスク(コンテナ)だけが、S3バケット my-application-bucket に対してファイルの読み込み (GetObject)書き込み (PutObject) ができるようになります。


5. まとめ: 使い分けのポイント

結局のところ、使い分けは非常にシンプルです。

シーン 使うロール 理由
ログをCloudWatchに送信したい タスク実行ロール システム側の起動準備・ログ収集の機能だから
S3から設定ファイルを読み込みたい タスクロール プログラム自身が行う「実際の仕事」だから
ECRからイメージをダウンロードしたい タスク実行ロール システム側のタスク起動準備だから
RDS (データベース) にデータを書き込みたい タスクロール プログラム自身が行う「実際の仕事」だから

タスク実行ロールは 「ECS/Fargateのための最低限の準備係」 、タスクロールは 「コンテナ内で動くプログラムのための仕事の許可証」 と覚えておけば、迷った時に答えを繋げる糸口にできるんじゃないかなと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?