View a markdown version of this page

Perfil de instância de instâncias gerenciadas do Amazon ECS - Amazon Elastic Container Service

Perfil de instância de instâncias gerenciadas do Amazon ECS

Um perfil de instância é um contêiner do IAM que contém exatamente um perfil do IAM e permite que as instâncias gerenciadas do Amazon ECS assumam esse perfil com segurança. O perfil de instância contém um perfil que o agente do ECS assume para registrar instâncias em clusters e se comunicar com o serviço do ECS.

Importante

Se você usar as Instâncias Gerenciadas do Amazon ECS com a política gerenciada do AmazonECSInfrastructureRolePolicyForManagedInstances, o nome do perfil da instância deve começar com ecsInstanceRole. A política abrange os escopos de iam:PassRole a arn:aws:iam::*:role/ecsInstanceRole*; portanto, um nome incompatível causa um erro de autorização ao iniciar a tarefa. Isso é comum com CloudFormation quando você omite RoleName, pois o CloudFormation gera automaticamente nomes como MyStack-InstanceRole-ABC123.

Se você usar um perfil de infraestrutura personalizado, o perfil da instância poderá ter qualquer nome, desde que sua política inclua uma concessão iam:PassRole direcionada ao ARN do perfil da instância.

Criar o perfil com a política de confiança

Substitua cada entrada do usuário por suas próprias informações.

  1. Crie um arquivo denominado ecsInstanceRole-trust-policy.json que contenha a política de confiança a ser usada para a função do IAM. O arquivo deve conter o seguinte:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. Use o comando da AWS CLI a seguir para criar um perfil denominado ecsInstanceRole usando a política de confiança criada na etapa anterior.

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. Anexe a política AmazonECSInstanceRolePolicyForManagedInstances gerenciada pela AWS à funçãoecsInstanceRole.

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

    Se você optar por aplicar permissões de privilégio mínimo e especificar suas próprias permissões em vez disso, poderá adicionar as seguintes permissões para ajudar na solução de problemas relacionados a tarefas com as instâncias gerenciadas do Amazon ECS:

    • ecs:StartTelemetrySession

    • ecs:PutSystemLogEvents

Você também pode usar o fluxo de trabalho da Política de confiança personalizada do console do IAM para criar o perfil. Para obter mais informações, consulte Criar um perfil usando políticas de confiança personalizadas (console) no Guia do usuário do IAM.

Depois de criar o arquivo, você deverá conceder ao usuário permissão para passar o perfil para o Amazon ECS.

Criar o perfil de instância usando a AWS CLI

Depois de criar a função, crie o perfil de instância usando a AWS CLI:

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

Adicione a função ao perfil de instância:

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

Verifique se o perfil foi criado com êxito:

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

Criar o perfil de instância usando a CloudFormation

Você pode usar AWS CloudFormation para criar o perfil de instância e a função de instância. Escolha uma das opções a seguir, dependendo se você usa a política de infraestrutura gerenciada pela AWS ou uma política personalizada.

Opção 1: usar a convenção de nomenclatura ecsInstanceRole (recomendado)

Ao utilizar a política de infraestrutura gerenciada da AWS, é necessário definir RoleName explicitamente como um valor que comece com ecsInstanceRole. Se você omitir RoleName, o CloudFormation gera automaticamente um nome que não corresponde à condição iam:PassRole da política gerenciada, e as tarefas não são iniciadas.

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

Opção 2: usar um nome de perfil personalizado

Se você preferir que o CloudFormation gere o nome do perfil, ou se usar um nome personalizado que não comece com ecsInstanceRole, será necessário adicionar uma política embutida ao seu perfil de infraestrutura que conceda iam:PassRole ao perfil da instância.

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.*"

Solução de problemas

As tarefas falham devido a um erro de autorização iam:PassRole

Se suas tarefas falharem com um ResourceInitializationError que mencione iam:PassRole, verifique se o nome do perfil da sua instância começa com ecsInstanceRole. Você pode verificar o nome gerado automaticamente no console do CloudFormation, na guia Recursos da sua pilha. Se o nome não corresponder:

  • Adicione RoleName: ecsInstanceRole ao recurso AWS::IAM::Role.

  • Adicione uma política inline iam:PassRole explícita ao seu perfil de infraestrutura. Para obter mais informações, consulte Opção 2: usar um nome de perfil personalizado.