View a markdown version of this page

Amazon ECS マネージドインスタンスのインスタンスプロファイル - Amazon Elastic Container Service

Amazon ECS マネージドインスタンスのインスタンスプロファイル

インスタンスプロファイルは、1 つの IAM ロールのみを保持し、Amazon ECS マネージドインスタンスがそのロールを安全に引き受けることを許可する IAM コンテナです。インスタンスプロファイルには、クラスターにインスタンスを登録し、ECS サービスと通信するために ECS エージェントが引き受けるインスタンスロールが含まれています。

重要

AmazonECSInfrastructureRolePolicyForManagedInstances マネージドポリシーで Amazon ECS マネージドインスタンスを使用する場合、インスタンスロール名は ecsInstanceRole で始まる必要があります。ポリシーの範囲は iam:PassRole から arn:aws:iam::*:role/ecsInstanceRole* であるため、名前が一致しない場合、タスクの起動時に認証エラーが発生します。CloudFormation は MyStack-InstanceRole-ABC123 のような名前を自動生成するため、これは RoleName を省略した場合に CloudFormation でよく発生します。

代わりにカスタムインフラストラクチャロールポリシーを使用する場合、ポリシーにインスタンスロール ARN をターゲットとする iam:PassRole の付与が含まれている限り、インスタンスロールには任意の名前を付けることができます。

信頼ポリシーでロールを作成する

すべての [ユーザー入力] は、お客様の情報で置き換えてください。

  1. IAM ロールに使用する信頼ポリシーが含まれている ecsInstanceRole-trust-policy.json という名前のファイルを作成します。ファイルには次の内容が含まれます。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. 前のステップで作成した信頼ポリシーを使用して、ecsInstanceRole という名前のロールを作成するには、次の AWS CLI コマンドを使用します。

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. AWS 管理ポリシー AmazonECSInstanceRolePolicyForManagedInstancesecsInstanceRole ロールにアタッチします。

    aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances
    注記

    その代わりにアクセスの最小特権を適用し、独自のアクセス許可を指定する場合は、次のアクセス権限を追加して、Amazon ECS マネージドインスタンスのタスク関連の問題のトラブルシューティングに役立てることができます。

    • ecs:StartTelemetrySession

    • ecs:PutSystemLogEvents

IAM コンソールの[カスタム信頼ポリシー]ワークフローを使用してロールを作成することもできます。詳細については、「IAM ユーザーガイド」の「カスタム信頼ポリシーを使用してロールを作成する (コンソール)」を参照してください。

ファイルを作成したら、Amazon ECS にロールを渡すためのアクセス許可をユーザーに付与する必要があります。

AWS CLI を使用してインスタンスプロファイルを作成する

ロールを作成したら、AWS CLI を使用してインスタンスプロファイルを作成します。

aws iam create-instance-profile --instance-profile-name ecsInstanceRole

次のように、インスタンスプロファイルにロールを追加します。

aws iam add-role-to-instance-profile \ --instance-profile-name ecsInstanceRole \ --role-name ecsInstanceRole

プロファイルが正常に作成されたことを確認します。

aws iam get-instance-profile --instance-profile-name ecsInstanceRole

CloudFormation を使用してインスタンスプロファイルを作成する

AWS CloudFormation を使用すると、インスタンスロールとインスタンスプロファイルを作成できます。AWS マネージドインフラストラクチャポリシーとカスタムポリシーのどちらを使用するかに基づいて、次のいずれかのオプションを選択します。

オプション 1: ecsInstanceRole 命名規則を使用する (推奨)

AWS マネージドインフラストラクチャポリシーを使用する場合は、RoleNameecsInstanceRole で始まる値に明示的に設定する必要があります。RoleName を省略すると、CloudFormation はマネージドポリシーの iam:PassRole 条件に一致しない名前を自動生成し、タスクは起動に失敗します。

Resources: EcsInstanceRole: Type: AWS::IAM::Role Properties: RoleName: ecsInstanceRole AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances EcsInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: InstanceProfileName: ecsInstanceRole Roles: - !Ref EcsInstanceRole

オプション 2: カスタムロール名を使用する

CloudFormation でロール名を生成する場合、または ecsInstanceRole で始まらないカスタム名を使用する場合は、iam:PassRole をインスタンスロールに付与するインフラストラクチャロールにインラインポリシーを追加する必要があります。

Resources: EcsInstanceRole: Type: AWS::IAM::Role Properties: # No RoleName — CFN auto-generates AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances EcsInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref EcsInstanceRole EcsInfrastructureRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ecs.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForManagedInstances Policies: - PolicyName: PassInstanceRoleToEC2 PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: iam:PassRole Resource: !GetAtt EcsInstanceRole.Arn Condition: StringLike: iam:PassedToService: "ec2.*"

トラブルシューティング

タスクが iam:PassRole 認証エラーで失敗する

タスクが iam:PassRole に言及している ResourceInitializationError で失敗する場合は、インスタンスロール名が ecsInstanceRole で始まることを確認します。自動生成された名前は、スタックの [リソース] タブの CloudFormation コンソールで確認できます。名前が一致しない場合は、次のいずれかを実行します:

  • AWS::IAM::Role リソースに RoleName: ecsInstanceRole を追加します。

  • インフラストラクチャロールに明示的な iam:PassRole インラインポリシーを追加します。詳細については、「オプション 2: カスタムロール名を使用する」を参照してください。