タスク IAM ロール
Amazon ECS タスクには IAM ロールを関連付けることができます。IAM ロールで付与される許可は、タスクで実行されているコンテナによって引き受けられます。Amazon ECS がコンテナイメージをプルしてタスクを実行するために必要な IAM 許可については、「Amazon ECS タスク実行IAM ロール」を参照してください。
コンテナ化したアプリケーションは AWS API を呼び出す必要がある場合、AWS 認証情報でそれらの AWS API リクエストに署名する必要があります。なお、タスクの IAM ロールは、アプリケーションを使用するための認証情報を管理する戦略を利用できます。これは、Amazon EC2 インスタンスプロファイルが Amazon EC2 インスタンスに認証情報を提供する方法と似ています。AWS 認証情報を作成してコンテナに配布したり、Amazon EC2 インスタンスのロールを使用したりする代わりに、IAM ロールを Amazon ECS のタスク定義または RunTask
API オペレーションに関連付けることができます。コンテナは、AWS SDK または AWS CLI を使用して認可された AWS サービスへの API リクエストを実行できます。
次の内容は、タスクで IAM ロールを使用する利点について説明します。
-
認証情報の分離: コンテナは、コンテナが属するタスク定義で定義された IAM ロールの認証情報のみを取得できます。コンテナは、別のタスクに属する別のコンテナを対象にした認証情報にアクセスすることはありません。
-
許可: 許可のないコンテナは別のタスク用に定義されている IAM ロール認証情報にアクセスできません。
-
監査性: CloudTrail にアクセスしイベントのログ記録を利用することで、遡及的な監査を確実に行えます。タスクの認証情報には、セッションにアタッチされている
taskArn
のコンテキストがあるため、CloudTrail ログではどのタスクがどのロールを使用しているかを表示できます。
注記
タスク用の IAM ロールを指定すると、そのタスクのコンテナ内の AWS CLI または他の SDK は、タスクロールによって提供された AWS 認証情報を排他的に使用し、Amazon EC2 または外部インスタンスで実行されていて、それらから IAM 許可を継承しなくなります。
タスク定義でタスク IAM ロールを定義するか、taskRoleArn
API オペレーションでタスクを手動で実行するときに RunTask
の上書きを使用できます。Amazon ECS エージェントは、ロール認証情報を含む追加のフィールドを使用してタスクを開始するペイロードメッセージを受け取ります。Amazon ECS エージェントは、一意のタスク認証情報 ID を識別トークンとして設定し、内部認証情報のキャッシュを更新して、タスクの識別トークンがペイロードで受け取ったロールの認証情報を指すようにします。Amazon ECS エージェントでは、次の相対 URI /
を使用して、このタスクに属するすべてのコンテナの credential_provider_version
/credentials?id=task_credential_id
Env
オブジェクト (docker inspect
container_id
コマンドで利用可能) に AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
環境変数を設定します。
コンテナ内から、以下のコマンドを使用して認証情報エンドポイントをクエリできます。
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
出力:
{
"AccessKeyId": "ACCESS_KEY_ID
",
"Expiration": "EXPIRATION_DATE
",
"RoleArn": "TASK_ROLE_ARN
",
"SecretAccessKey": "SECRET_ACCESS_KEY
",
"Token": "SECURITY_TOKEN_STRING
"
}
タスク用の IAM ロールとポリシーの作成
タスクで使用する IAM ポリシーを作成するときは、そのポリシーはタスクのコンテナが引き受けるタスクの許可を含める必要があります。既存の AWS マネージドポリシーを使用することもできます。または、特定のニーズを満たすカスタムポリシーを最初から作成できます。詳細については、IAM ユーザーガイド の「IAM ポリシーの作成」を参照してください。
重要
Amazon ECS タスク (すべての起動タイプ) では、タスクに IAM ポリシーとロールを使用することをお勧めします。これらの認証情報により、タスクは sts:AssumeRole
を呼び出してタスクに既に関連付けられているのと同じロールを引き受けることなく、AWS API リクエストを行うことができます。タスクでロールがそれ自体を引き受けることが必要な場合、そのロールがそれ自体を引き受けることを明示的に許可する信頼ポリシーを作成する必要があります。詳細については、「IAM ユーザーガイド」の「Modifying a role trust policy」(ロールの信頼ポリシーの変更) を参照してください。
IAM ポリシーを作成した後、Amazon ECS タスク定義で参照するポリシーを含む IAM ロールを作成できます。IAM コンソールで [Elastic Container Service Task] (Elastic Container Service タスク) ユースケースを使用してロールを作成できます。それから、タスクのコンテナに必要なアクセス許可を付与するロールに特定の IAM ポリシーをアタッチできます。次の手順では、これを行う方法について説明します。
IAM のアクセス許可を必要とする複数のタスク定義またはサービスがある場合は、各タスクに提供するアクセスを最小限に抑えるために、タスクを操作するために必要な最小限のアクセス許可で特定のタスク定義またはサービスごとにロールを作成することを検討してください。
リージョンのサービスエンドポイントの詳細については、「Amazon Web Services 全般のリファレンス リファレンスガイド」の「サービスエンドポイント」を参照してください。
IAM タスクロールは、ecs-tasks.amazonaws.com
サービスを特定する信頼ポリシーが必要です。sts:AssumeRole
許可は、Amazon EC2 インスタンスが使用するロールとは異なる IAM ロールをタスクに引き受けられるようにします。これにより、タスクは Amazon EC2 インスタンスに関連付けられたロールを継承しません。混乱する副セキュリティ問題を防ぐために、許可をさらにスコープするために aws:SourceAccount
または aws:SourceArn
条件キーを使用することをお勧めします。これらの条件キーは、信頼関係、またはロールに関連付けられた IAM ポリシーで指定できます。混乱した代理の問題と、お客様の AWS アカウントの保護方法の詳細について学ぶためには、[The confused deputy problem] (IAM ユーザーガイド) の[IAM User Guide] (混乱した代理の問題) を参照してください。
以下に示しているのは、信頼ポリシーの例です。リージョン識別子を置き換えて、タスク起動時に使用する AWS アカウント番号を特定する必要があります。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:
us-west-2
:111122223333
:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333
" } } } ] }
重要
タスク IAM ロールを作成するときは、信頼関係またはロールに関連付けられた IAM ポリシーで aws:SourceAccount
または aws:SourceArn
のいずれかの条件キーを使用して、混乱した副セキュリティ問題を防止します。特定のクラスターを指定する aws:SourceArn
条件キーの使用は現在サポートされていません。ワイルドカードを使用してすべてのクラスターを指定する必要があります。混乱した代理の問題と、お客様の AWS アカウントの保護方法の詳細について学ぶためには、[The confused deputy problem] (IAM ユーザーガイド) の[IAM User Guide] (混乱した代理の問題) を参照してください。
タスク用の IAM ポリシーを作成するには (AWS Management Console)
この例では、Amazon S3 バケットへの読み取り専用アクセスを許可するポリシーを作成します。データベース認証情報または他の秘密情報をバケットに保存し、タスクのコンテナによってバケットからの認証情報の読み取りとアプリケーションへのロードを実行できます。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、[Policies (ポリシー)] を選択し、次に [Create Policy (ポリシーの作成)] を選択します。
-
以下のいずれかのタブの手順に従って、ビジュアルのエディタまたは JSON エディタの使用方法を示します。
タスク用の IAM ロールを作成するには (AWS Management Console)
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [ロール]、[ロールの作成] の順に選択します。
-
[Select trusted entity] (信頼されたエンティティを選択) セクションで、[AWS Service] を選択します。
-
ドロップダウンメニューを使用して [Use case] (ユースケース) を使用する場合、Elastic Container Service を選択して、[Elastic Container Service Task] (Elastic Container Service タスク) ユースケースの後に、[Next] (次) を選択します。
-
[Add permissions] (許可を追加) の場合、タスクで使用するポリシーを検索して選択します (この例では
AmazonECSTaskS3BucketPolicy
を選択し、[Next] (次) を選択します)。 -
[Step 3: Name, review, and create] (ステップ 3: 名前を付けて、確認、作成) で、次の操作を実行します。
-
[ロール名] に、ロールの名前を入力します。この例では、
AmazonECSTaskS3BucketRole
と入力してロールに名前を付けます。 -
(オプション) [Description] (説明) の場合、この IAM ロールの説明を指定します。
-
ロールの信頼済みエンティティと許可ポリシーを確認します。
-
[Add tags (Optional) ] (タグの追加 (オプション) ) の場合、IAM ロールに関連付けるメタデータ タグを入力したら、[Create role] (ロールを作成) を選択します。
-
ECS Exec に必要な IAM アクセス許可
ECS Exec 機能には、マネージド型 SSM エージェント (execute-command
エージェント) と SSM サービス間の通信に必要なアクセス許可をコンテナに付与するためのタスク IAM ロール ロールが必要です。次のアクセス許可をタスク IAM ロールに追加し、タスク定義にタスク IAM ロールを含める必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。
タスク IAM ロールに次のポリシーを使用して、必要な SSM アクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
タスク用の IAM ロールを指定する
ロールを作成し、そのロールにポリシーをアタッチした後、そのロールを引き受けるタスクを実行できます。これには複数の方法があります。
-
タスク定義でタスク用の IAM ロールを指定します。新しいタスク定義または既存のタスク定義の新しいリビジョンを作成して、前に作成したロールを指定できます。コンソールを使用してタスク定義を作成する場合、[Task Role (タスクロール)] フィールドで IAM ロールを選択します。AWS CLI または SDK を使用する場合、
taskRoleArn
パラメータを使用してタスクロールの Amazon リソースネーム (ARN) を指定します。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。注記
このオプションは、Amazon ECS サービスで IAM タスクロールを使用する場合に必要です。
-
タスクを実行する際に、IAM タスクロールの上書きを指定します。タスクを実行する際に IAM タスクロールの上書きを指定できます。クラシックコンソールを使用してタスクを実行する場合、[Advanced Options] (詳細オプション) を選択し、[Task Role] (タスクロール) フィールドで IAM ロールを選択します。AWS CLI または SDK を使用する場合、
overrides
JSON オブジェクトのtaskRoleArn
パラメータを使用してタスクロールの ARN を指定します。詳細については、「クラシック Amazon ECS コンソールを使用してスタンドアロンタスクを実行する方法」を参照してください。
注記
タスクおよびサービスを実行するために必要な標準の Amazon ECS アクセス権限を付与するだけでなく、ユーザーにはタスクの IAM ロールを使用する iam:PassRole
アクセス権限も必要です。