翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon ECS タスクでの IAM ロールの使用
タスクに IAM ロールを割り当てることをお勧めします。そのロールは、実行されている Amazon EC2 インスタンスのロールと区別できます。各タスクにロールを割り当てることは、権限の最小化アクセスの原則と一致し、アクションとリソースをより細かく制御できます。
タスクに IAM ロールを割り当てるときは、各タスクが EC2 インスタンスで使用する IAM ロールとは異なる IAM ロールを引き受けることができるように、次の信頼ポリシーを使用する必要があります。この方法では、タスクが EC2 インスタンスのロールを継承しません。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
タスク定義にタスクロールを追加すると、Amazon ECS コンテナエージェントは、一意の認証情報 ID を持つトークンを自動的に作成します(12345678-90ab-cdef-1234-567890abcdef
) を選択します。このトークンとロール認証情報は、エージェントの内部キャッシュに追加されます。エージェントは、環境変数AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
をクレデンシャル ID の URI でコンテナー内に格納します (たとえば、/v2/credentials/12345678-90ab-cdef-1234-567890abcdef
).
Amazon ECS コンテナエージェントの IP アドレスに環境変数を追加し、curl
コマンドを実行します。
curl 192.0.2.0$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
予想される出力は次のようになります。
{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }
新しいバージョンのAWSSDK は、これらの認証情報を自動的にAWS_CONTAINER_CREDENTIALS_RELATIVE_URI
作成時の環境変動AWSAPI コール。
出力には、アプリケーションがアクセスするために使用するシークレットアクセスキー ID とシークレットキーからなるアクセスキーペアが含まれます。AWSリソースの使用料金を見積もることができます。また、トークンも含まれています。AWSが、認証情報が有効であることを確認します。既定では、タスクロールを使用してタスクに割り当てられた資格情報は 6 時間有効です。その後、Amazon ECS コンテナエージェントによって自動的に回転されます。
タスク実行ロール
タスク実行ロールは、Amazon ECS コンテナエージェントに、特定のAWSAPI アクションをユーザーに代わって実行します。たとえば、使用する場合AWS Fargateでは、Fargate には、Amazon ECR からイメージを取得し、CloudWatch Logs にログを書き込むことができる IAM ロールが必要です。IAM ロールは、タスクがAWS Secrets Managerなど、画像のプルシークレットなど。
注記
認証されたユーザーとして画像を取得する場合、Docker Hubのプルレート制限
Amazon ECR と Amazon ECR パブリックを使用することで、Docker によって課される制限を回避できます。Amazon ECR からイメージをプルすると、ネットワークのプル時間を短縮し、トラフィックが VPC から離れたときのデータ転送の変更を減らすことができます。
重要
Fargate を使用する場合、プライベートイメージレジストリーへの認証はrepositoryCredentials
。Amazon ECS コンテナエージェントの環境変数を設定することはできませんECS_ENGINE_AUTH_TYPE
またはECS_ENGINE_AUTH_DATA
を変更するか、ecs.config
ファイルは、Fargate でホストされているタスク用です。詳細については、「」を参照してください。タスクのプライベートレジストリの認証。
Amazon EC2 コンテナインスタンスのロール
Amazon ECS コンテナエージェントは、Amazon ECS クラスター内の各 Amazon EC2 インスタンスで実行されるコンテナです。これは、Amazon ECS の外部でinit
コマンドは、オペレーティングシステム上で使用できます。そのため、タスクロールを通じてアクセス許可を付与することはできません。代わりに、エージェントが実行される Amazon EC2 インスタンスに権限を割り当てる必要があります。例のアクションリストAmazonEC2ContainerServiceforEC2Role
ポリシーをecsInstanceRole
。これを行わないと、インスタンスはクラスターに参加できません。
{ "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": "*" } ] }
このポリシーでは、ecr
およびlogs
api アクションを使用すると、インスタンスで実行されているコンテナが Amazon ECR からイメージを取得し、Amazon CloudWatch にログを書き込むことができます。-ecs
アクションを使用すると、エージェントはインスタンスを登録および登録解除し、Amazon ECS コントロールプレーンと通信できます。このうち、ecs:CreateCluster
アクションはオプションです。
サービスにリンクされたロール
Amazon ECS のサービスリンクロールを使用すると、代理で他のサービス API を呼び出すアクセス権限を Amazon ECS サービスに付与できます。Amazon ECS には、ネットワークインターフェイスの作成と削除、ターゲットグループへのターゲットの登録、登録解除を行う権限が必要です。また、スケーリングポリシーを作成および削除するのに必要なアクセス許可も必要です。これらのアクセス許可は、サービスにリンクされたロールを通じて付与されます。このロールは、サービスの初回使用時にユーザーに代わって作成されます。
注記
サービスにリンクされたロールを誤って削除した場合は、再作成することができます。手順については、以下を参照してください。サービスにリンクされたロールの作成。
Recommendations
タスク IAM ロールとポリシーを設定するときは、次の操作を実行することをお勧めします。
Amazon EC2 メタデータへのアクセスをブロックする
Amazon EC2 インスタンスでタスクを実行する場合は、Amazon EC2 メタデータへのアクセスをブロックして、コンテナがそれらのインスタンスに割り当てられたロールを継承しないようにすることを強くお勧めします。アプリケーションがAWSAPI アクションを使用する場合は、代わりにタスクに IAM ロールを使用します。
でタスクが実行されないようにするにはブリッジモードが Amazon EC2 メタデータにアクセスできないようにするには、次のコマンドを実行するか、インスタンスのユーザーデータを更新します。インスタンスのユーザーデータを更新する方法の詳細については、このAWSSupport 記事
sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 192.0.2.0/32 --jump DROP
再起動後もこの変更が維持されるようにするには、Amazon マシンイメージ(AMI)に固有の次のコマンドを実行します。
-
Amazon Linux 2
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
-
Amazon Linux
sudo service iptables save
使用するタスクの場合awsvpc
ネットワークモードでは、環境変数ECS_AWSVPC_BLOCK_IMDS
~true
()/etc/ecs/ecs.config
ファイルを開きます。
設定する必要がありますECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST
変数をfalse
内で実行されているコンテナーを防ぐために、ecs-agent 設定ファイルにhost
ネットワークが Amazon EC2 メタデータにアクセスしないようにします。
を使用するawsvpc
ネットワークモード
ネットワークを使用するawsvpc
ネットワークモードを使用して、異なるタスク間、またはタスクと Amazon VPC 内で実行される他のサービス間のトラフィックのフローを制限できます。これにより、セキュリティレイヤーが追加されます。-awsvpc
ネットワークモードは、Amazon EC2 で実行されるタスクのタスクレベルのネットワーク分離を提供します。これは、上のデフォルトモードです。AWS Fargateです。これは、セキュリティグループをタスクに割り当てるために使用できる唯一のネットワークモードです。
IAM アクセスアドバイザーを使用してロールを絞り込む
使用されなかったアクションやしばらく使用されなかったアクションは削除することをお勧めします。これにより、不要なアクセスが防止されます。これを行うには、IAM Access Advisor によって生成された結果を確認し、使用されなかったアクションや最近使用されなかったアクションを削除します。これは、以下の手順に従って行います。
次のコマンドを実行して、参照先ポリシーの最終アクセス情報を示すレポートを生成します。
aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1
の使用JobId
出力に含まれていて、次のコマンドを実行します。これを行うと、レポートの結果を表示できます。
aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9
詳細については、「」を参照してください。IAM アクセスアドバイザー。
監視AWS CloudTrail不審なアクティビティ
モニタリングできますAWS CloudTrail不審な活動のために。ほとんどの OSAWSAPI コールは、AWS CloudTrailをイベントとして。これらはで分析されますAWS CloudTrailインサイトにアクセスすると、write
API コール。これには、コール量のスパイクが含まれる場合があります。これらのアラートには、異常なアクティビティが発生した時刻や、API に貢献した最上位のアイデンティティ ARN などの情報が含まれます。
IAM ロールを持つタスクによって実行されるアクションは、AWS CloudTrailを見て、イベントのuserIdentity
プロパティ. 次の例では、arn
には、引き受けたロールの名前が含まれ、s3-write-go-bucket-role
にタスクの名前、7e9894e088ad416eb5cab92afExample
。
"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
注記
ロールを引き受けるタスクが Amazon EC2 コンテナインスタンスで実行されると、Amazon ECS コンテナエージェントによってリクエストが記録され、/var/log/ecs/audit.log.YYYY-MM-DD-HH
の形式で設定。詳細については、「」を参照してください。タスク IAM ロールログおよび証跡のインサイトイベントの記録。