Amazon ECS コンテナインスタンスの IAM ロール
Amazon ECS コンテナインスタンス(Amazon EC2 と外部インスタンスの両方を含む)では、Amazon ECS コンテナエージェントを実行し、エージェントがユーザーに属していることをサービスに伝える IAM ロールが必要です。コンテナインスタンスを起動してクラスターに登録する前に、使用するコンテナインスタンス用の IAM ロールを作成する必要があります。ロールは、コンソールへのログインまたは AWS CLI コマンドの実行に使用するアカウントで作成されます。
Amazon ECS では、AmazonEC2ContainerServiceforEC2Role
管理 IAM ポリシーを提供し、これには Amazon ECS の完全な機能セットを使用するために必要なアクセス権限が含まれます。この管理ポリシーは、IAM ロールにアタッチし、コンテナインスタンスに関連付けることができます。または、使用するカスタムポリシーを作成するときに、管理ポリシーをガイドとして使用することもできます。コンテナインスタンスロールには、Amazon ECS コンテナエージェントと Docker デーモンがユーザーに変わって AWS API を呼び出すために必要な許可があります。管理ポリシーの詳細については、「AmazonEC2ContainerServiceforEC2Role」を参照してください。
コンテナインスタンスロールを作成する
機能や機能強化が今後導入されたときに Amazon ECS がそれらに対するアクセス許可を追加できるように、手動でロールを作成し、その IAM 管理ポリシーをコンテナインスタンスにアタッチできます。必要に応じて、以下の手順を使用してマネージド IAM ポリシーをアタッチします。
- AWS Management Console
-
Elastic Container Service のサービスロールを作成するには (IAM コンソール)
AWS Management Console にサインインして、IAM コンソール https://console.aws.amazon.com/iam/ を開きます。
-
IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。
-
信頼できるエンティティタイプ で、AWS のサービス を選択します。
-
[サービスまたはユースケース] で [エラスティックコンテナサービス] を選択し、次に [エラスティックコンテナサービスのユースケースの EC2 ロール] を選択します。
-
[次へ] を選択します。
-
[アクセス許可ポリシー] セクションで、[AmazonEC2ContainerServiceforEC2Role] ポリシーが選択されていることを確認します。
AmazonEC2ContainerServiceforEC2Role 管理ポリシーは、コンテナインスタンス IAM ロールにアタッチする必要があります。アタッチされていない場合、AWS Management Console をクリックして、クラスターを作成します。
-
[次へ] を選択します。
-
[ロール名] には、[ecsInstanceRole] と入力します。
-
ロールを確認したら、[ロールを作成] を選択します。
- AWS CLI
-
すべてのユーザー入力
を自分の値に置き換えてください。
-
instance-role-trust-policy.json
というファイルを次の内容で作成します。
JSON
- JSON
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
]
}
-
信頼ポリシードキュメントを使用してインスタンスの IAM ロールを作成するには、次のコマンドを使用します。
aws iam create-role \
--role-name ecsInstanceRole \
--assume-role-policy-document file://instance-role-trust-policy.json
-
create-instance-profile コマンドを使用して、ecsInstanceRole-profile
という名前のインスタンスプロファイルを作成します。
aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile
レスポンスの例
{
"InstanceProfile": {
"InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE",
"Roles": [],
"CreateDate": "2022-04-12T23:53:34.093Z",
"InstanceProfileName": "ecsInstanceRole-profile",
"Path": "/",
"Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile"
}
}
-
ecsInstanceRole
インスタンスプロファイルに ecsInstanceRole-profile
ロールを追加します。
aws iam add-role-to-instance-profile \
--instance-profile-name ecsInstanceRole-profile \
--role-name ecsInstanceRole
-
次のコマンドを使用して、AmazonEC2ContainerServiceRoleForEC2Role
マネージドポリシーをロールにアタッチします。
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
--role-name ecsInstanceRole
ロールを作成したら、次の機能のアクセス許可をロールに追加します。
Amazon ECR のアクセス許可
コンテナインスタンスで使用する Amazon ECS コンテナインスタンスロールには、Amazon ECR に対する以下の IAM ポリシーのアクセス許可が必要です。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer",
"ecr:GetAuthorizationToken"
],
"Resource": "*"
}
]
}
コンテナインスタンスに AmazonEC2ContainerServiceforEC2Role
管理ポリシーを使用すると、ロールに適切なアクセス権限が付与されます。ロールが Amazon ECR をサポートすることを確認するには、Amazon Elastic Container Service デベロッパーガイドの「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。
awsvpcTrunking アカウント設定の設定に必要なアクセス許可
Amazon ECS は、サポートされている Amazon EC2 インスタンスタイプを使用して、ENI 密度が高いコンテナインスタンスの起動をサポートします。この機能を使用する場合は、2 つのコンテナインスタンスロールを作成することをお勧めします。1 つのロールで awsvpcTrunking
アカウント設定を有効にし、そのロールを ENI トランキングを必要とするタスクに使用します。awsvpcTrunking
アカウント設定については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。
コンテナインスタンスで使用するコンテナインスタンスロールには、アカウント設定を設定するための次の IAM ポリシーのアクセス許可が必要です
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ListAccountSettings",
"ecs:ListAttributes",
"ecs:PutAccountSetting"
],
"Resource": "*"
}
]
}
コンテナインスタンスロールを使用するには、インスタンスユーザーデータに以下を追加します。
#!/bin/bash
aws ecs put-account-setting --name awsvpcTrunking --value enabled --region region
ECS_CLUSTER=MyCluster
>> /etc/ecs/ecs.config
EOF
EC2 インスタンスへのユーザーデータの追加の詳細については、「Amazon EC2 ユーザーガイド」の「起動時に Linux インスタンスでコマンドを実行する」を参照してください。
Amazon S3 への読み取り専用アクセス
設定情報を Amazon S3 のプライベートバケットに保存し、コンテナインスタンスの IAM ロールに読み取り専用アクセス権限を付与するのが、コンテナインスタンスの起動時に設定を許可する安全で便利な方法です。ecs.config
ファイルのコピーをプライベートバケットに保存し、Amazon EC2 ユーザーデータを使用して AWS CLI をインストールします。その後、インスタンスの起動時に設定情報を /etc/ecs/ecs.config
にコピーします。
ecs.config
ファイルの作成と Amazon S3 への保存、およびこの構成を使用したインスタンスの起動の詳細については、「Amazon S3 に Amazon ECS コンテナインスタンスの設定を保存する」を参照してください。
次の AWS CLI コマンドを使用すると、Amazon S3 の読み取り専用アクセス許可をコンテナインスタンスのロールに許可できます。前に作成したロールの名前で ecsInstanceRole
を置き換えます。
aws iam attach-role-policy \
--role-name ecsInstanceRole
\
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAM コンソールを使用して、Amazon S3 の読み取り専用アクセス許可 (AmazonS3ReadOnlyAccess
) をロールに追加することもできます。詳細については、「AWS Identity and Access Management ユーザーガイド」の「ロールに対するアクセス許可を更新する」を参照してください。
awsvpcTrunking アカウント設定の設定に必要なアクセス許可
コンテナインスタンスで使用する Amazon ECS コンテナインスタンスロールには、アカウント設定を完了するために、次の IAM ポリシーのアクセス許可が必要です
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ListAccountSettings",
"ecs:ListAttributes",
"ecs:PutAccountSetting"
],
"Resource": "*"
}
]
}
コンテナインスタンスのモニタリングに必要なアクセス許可
コンテナインスタンスが CloudWatch Logs にログデータを送信する前に、Amazon ECS エージェントがお客様のアプリケーションログを CloudWatch に書き込むことを許可する IAM ポリシーを作成する必要があります (通常は awslogs
ドライバーを介して処理されます)。作成が完了したポリシーは、ecsInstanceRole
にアタッチします。
- AWS Management Console
-
JSON ポリシーエディタでポリシーを作成するには
AWS Management Console にサインインして、IAM コンソール https://console.aws.amazon.com/iam/ を開きます。
-
左側のナビゲーションペインで、[ポリシー] を選択します。
初めて [ポリシー] を選択する場合には、[管理ポリシーにようこそ] ページが表示されます。[今すぐ始める] を選択します。
-
ページの上部で、[ポリシーを作成] を選択します。
-
[ポリシーエディタ] セクションで、[JSON] オプションを選択します。
-
次の JSON ポリシードキュメントを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": ["arn:aws:logs:*:*:*"]
}
]
}
-
[次へ] をクリックします。
いつでも [Visual] と [JSON] エディタオプションを切り替えることができます。ただし、[Visual] エディタで [次へ] に変更または選択した場合、IAM はポリシーを再構成して visual エディタに合わせて最適化することがあります。詳細については、「IAM ユーザーガイド」の「ポリシーの再構成」を参照してください。
-
[確認と作成] ページで、作成するポリシーの [ポリシー名] と [説明] (オプション) を入力します。[このポリシーで定義されているアクセス許可] を確認して、ポリシーによって付与されたアクセス許可を確認します。
-
[ポリシーの作成] をクリックして、新しいポリシーを保存します。
ポリシーを作成したら、そのポリシーをコンテナインスタンスロールにアタッチします。ポリシーをロールにアタッチする方法については、「AWS Identity and Access Management ユーザーガイド」の「ロールに対するアクセス許可を更新する」を参照してください。
- AWS CLI
-
-
instance-cw-logs.json
というファイルを次の内容で作成します。
JSON
- JSON
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": ["arn:aws:logs:*:*:*"]
}
]
}
-
JSON ポリシードキュメントファイルを使用して IAM ポリシーを作成するには、次の コマンドを使用します。
aws iam create-policy \
--policy-name cwlogspolicy
\
--policy-document file://instance-cw-logs.json
-
次のコマンドを使用して、作成した IAM ポリシーの ARN を取得します。cwlogspolicy
は、作成したポリシーの名前に置き換えます。
aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogspolicy
`].Arn'
-
ポリシー ARN を使用してコンテナインスタンスの IAM ロールにポリシーをアタッチするには、次のコマンドを使用します。
aws iam attach-role-policy \
--role-name ecsInstanceRole
\
--policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy