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.
-
Crie um arquivo denominado
ecsInstanceRole-trust-policy.jsonque contenha a política de confiança a ser usada para a função do IAM. O arquivo deve conter o seguinte: -
Use o comando da AWS CLI a seguir para criar um perfil denominado
ecsInstanceRoleusando 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 -
Anexe a política
AmazonECSInstanceRolePolicyForManagedInstancesgerenciada pela AWS à funçãoecsInstanceRole.aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstancesnota
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:StartTelemetrySessionecs: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: ecsInstanceRoleao recursoAWS::IAM::Role. -
Adicione uma política inline
iam:PassRoleexplícita ao seu perfil de infraestrutura. Para obter mais informações, consulte Opção 2: usar um nome de perfil personalizado.