

# Perfil de instância de instâncias gerenciadas do Amazon ECS
<a name="managed-instances-instance-profile"></a>

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
<a name="create-instance-role"></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"
       }
     ]
   }
   ```

------

1. 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}}
   ```

1. Anexe a política `AmazonECSInstanceRolePolicyForManagedInstances` gerenciada pela AWS à função`ecsInstanceRole`.

   ```
   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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html) 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
<a name="create-instance-profile"></a>

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
<a name="create-instance-profile-cfn"></a>

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)
<a name="create-instance-profile-cfn-managed"></a>

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
<a name="create-instance-profile-cfn-custom"></a>

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
<a name="managed-instances-instance-profile-troubleshooting"></a>

### As tarefas falham devido a um erro de autorização iam:PassRole
<a name="managed-instances-instance-profile-ts-passrole"></a>

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](#create-instance-profile-cfn-custom).