View a markdown version of this page

Amazon ECS 관리형 인스턴스의 인스턴스 프로파일 - Amazon Elastic Container Service

Amazon ECS 관리형 인스턴스의 인스턴스 프로파일

인스턴스 프로파일은 정확히 하나의 IAM 역할을 보유하며 Amazon ECS 관리형 인스턴스가 해당 역할을 안전하게 수임할 수 있도록 하는 IAM 컨테이너입니다. 인스턴스 프로파일에는 ECS 에이전트가 클러스터에 인스턴스를 등록하고 ECS 서비스와 통신하기 위해 수임하는 인스턴스 역할이 포함되어 있습니다.

중요

AmazonECSInfrastructureRolePolicyForManagedInstances 관리형 정책과 함께 Amazon ECS 관리형 인스턴스를 사용하는 경우 인스턴스 역할 이름은 ecsInstanceRole로 시작해야 합니다. 정책은 iam:PassRolearn:aws:iam::*:role/ecsInstanceRole*로 제한하므로 이름이 일치하지 않으면 태스크 시작 시 권한 부여 오류가 발생합니다. CloudFormation에서 MyStack-InstanceRole-ABC123와 같은 이름을 자동으로 생성하기에 CloudFormation에서는 RoleName을 생략하는 것이 일반적입니다.

대신 사용자 지정 인프라 역할 정책을 사용하는 경우 정책에 인스턴스 역할 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. 다음 AWS CLI 명령을 사용하여 이전 단계에서 생성한 신뢰 정책을 사용해 ecsInstanceRole이라는 이름의 역할을 생성합니다.

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. AWS 관리형 AmazonECSInstanceRolePolicyForManagedInstances 정책을 ecsInstanceRole 역할에 연결합니다.

    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: 사용자 지정 역할 이름 사용 섹션을 참조하세요.