

# Rol de IAM de instancia de contenedor de Amazon ECS
<a name="instance_IAM_role"></a>

Las instancias de contenedor de Amazon ECS, incluidas las instancias de Amazon EC2 y las externas, ejecutan el agente de contenedor de Amazon ECS y requieren un rol de IAM para que el servicio sepa que el agente le pertenece. Antes de lanzar instancias de contenedor y registrarlas en un clúster, debe crear un rol de IAM para que lo utilicen las instancias de contenedor. El rol se crea en la cuenta que utiliza para iniciar sesión en la consola o ejecutar los comandos AWS CLI.

**importante**  
Si está registrando instancias externas en el clúster, el rol de IAM que utiliza también requiere permisos de Systems Manager. Para obtener más información, consulte [Rol de IAM de Amazon ECS Anywhere](iam-role-ecsanywhere.md).

Amazon ECS proporciona la política de IAM administrada `AmazonEC2ContainerServiceforEC2Role`, que contiene los permisos necesarios para utilizar el conjunto completo de características de Amazon ECS. Esta política administrada se puede asociar a un rol de IAM y a las instancias de contenedor. También puede utilizar la política administrada como guía cuando crea la política personalizada que va a utilizar. El rol de instancia de contenedor proporciona los permisos necesarios para que el agente de contenedor de Amazon ECS y el daemon de Docker puedan llamar a las API de AWS en su nombre. Para obtener más información acerca de la política administrada, consulte [AmazonEC2ContainerServiceforEC2Role](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role).

## Creación del rol de instancia de contenedor
<a name="instance-iam-role-create"></a>

**importante**  
Si está registrando instancias externas en el clúster, consulte [Rol de IAM de Amazon ECS Anywhere](iam-role-ecsanywhere.md).

Puede crear el rol manualmente y asociarlo a la política de IAM administrada para instancias de contenedor a fin de permitir que Amazon ECS agregue permisos para futuras características y mejoras a medida que se vayan introduciendo. Utilice el siguiente procedimiento para adjuntar la política de IAM administrada si es necesario.

------
#### [ Consola de administración de AWS ]

**Creación de un rol de servicio de Elastic Container Service (consola de IAM)**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación de la consola de IAM, seleccione **Roles** y, a continuación, elija **Crear rol**.

1. En **Tipo de entidad de confianza**, elija **Servicio de AWS**.

1. En **Servicio o caso de uso**, seleccione **Elastic Container Service** y, a continuación, seleccione el caso de uso **Rol de EC2 para Elastic Container Service**.

1. Elija **Siguiente**.

1. En la sección **Políticas de permisos**, compruebe que la política **AmazonEC2ContainerServiceforEC2Role** esté seleccionada.
**importante**  
La política administrada**AmazonEC2ContainerServiceforEC2Role** debe estar asociada al rol de IAM de instancia de contenedor; de lo contrario, recibirá un error al utilizar la Consola de administración de AWS para crear clústeres.

1. Elija **Siguiente**.

1.  En **Nombre del rol**, ingrese **ecsInstanceRole**

1. Revise el rol y, a continuación, elija **Crear rol**.

------
#### [ AWS CLI ]

Sustituya cada *entrada del usuario* por valores propios.

1. Cree un archivo denominado `instance-role-trust-policy.json` con el siguiente contenido.  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": { "Service": "ec2.amazonaws.com"},
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. Utilice el siguiente comando para crear el rol de IAM de la instancia con el documento de política de confianza.

   ```
   aws iam create-role \
       --role-name ecsInstanceRole \
       --assume-role-policy-document file://instance-role-trust-policy.json
   ```

1. Cree un perfil de instancia denominado `ecsInstanceRole-profile` mediante el comando [create-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html). 

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

   Respuesta de ejemplo

   ```
   {
       "InstanceProfile": {
           "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE",
           "Roles": [],
           "CreateDate": "2022-04-12T23:53:34.093Z",
           "InstanceProfileName": "ecsInstanceRole-profile",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile"
       }
   }
   ```

1. Añada el rol `ecsInstanceRole` al perfil de instancia `ecsInstanceRole-profile`.

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

1. Adjunte la política administrada `AmazonEC2ContainerServiceForEC2Role` al rol con el siguiente comando.

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
       --role-name ecsInstanceRole
   ```

------

Después de crear el rol, agregue permisos adicionales al rol para las siguientes características.


|  Característica  |  Permisos adicionales  | 
| --- | --- | 
|  Amazon ECR tiene la imagen del contenedor  |  [Permisos de Amazon ECR](#container-instance-role-ecr)  | 
| Configuración de Registros de CloudWatch de modo que supervise las instancias de contenedores | [Supervisión de los permisos de instancias de contenedores](#cwl_iam_policy) | 
| Archivos de configuración del host en un bucket de Amazon S3 | [Acceso de solo lectura a Amazon S3](#container-instance-role-s3) | 

## Permisos de Amazon ECR
<a name="container-instance-role-ecr"></a>

El rol de la instancia de contenedor de Amazon ECS que utiliza con sus instancias de contenedor debe tener los siguientes permisos de política de IAM para Amazon ECR.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Si usa la política administrada `AmazonEC2ContainerServiceforEC2Role` para sus instancias de contenedor, el rol debe tener los permisos adecuados.

## Permisos necesarios para establecer la configuración de cuenta awsvpcTrunking
<a name="container-instance-role-awsvpcTrunking-setting"></a>

Amazon ECS es compatible con el lanzamiento de instancias de contenedor con mayor densidad de ENI al usar tipos de instancias de Amazon EC2 compatibles. Al utilizar esta característica, le recomendamos crear dos roles de instancia de contenedor. Habilite la configuración de la cuenta de `awsvpcTrunking` para un rol y use ese rol para las tareas que requieran el enlace troncal de ENI. Para obtener información acerca de la configuración de la cuenta de `awsvpcTrunking`, consulte [Acceso a las características de Amazon ECS con la configuración de la cuenta](ecs-account-settings.md).

El rol de la instancia de contenedor que utiliza con sus instancias de contenedor debe tener los siguientes permisos de política de IAM para establecer la configuración de la cuenta. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:ListAccountSettings", 
                "ecs:ListAttributes", 
                "ecs:PutAccountSetting" 
            ],
            "Resource": "*"
        }
    ]
}
```

------

Para utilizar el rol de instancia de contenedor, agregue lo siguiente a los datos de usuario de la instancia:

```
#!/bin/bash
aws ecs put-account-setting --name awsvpcTrunking --value enabled --region region
ECS_CLUSTER=MyCluster>> /etc/ecs/ecs.config
EOF
```

Para obtener más información acerca de cómo agregar datos de usuario a sus instancias de EC2, consulte [Ejecutar comandos en la instancia de Linux durante la inicialización](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) en la *Guía del usuario de Amazon EC2*.

## Acceso de solo lectura a Amazon S3
<a name="container-instance-role-s3"></a>

El almacenamiento de la información de configuración en un bucket privado en Amazon S3 y la concesión de acceso de solo lectura al rol de IAM de instancia de contenedor es una forma práctica y segura de permitir la configuración de instancia de contenedor en el momento del lanzamiento. Puede almacenar una copia del archivo `ecs.config` en un bucket privado, utilizar los datos de usuario de Amazon EC2 para instalar la AWS CLI y, a continuación, copiar la información de configuración en `/etc/ecs/ecs.config` cuando se lance la instancia.

Para obtener más información acerca de cómo crear un archivo `ecs.config`, almacenarlo en Amazon S3 y lanzar instancias con esta configuración, consulte [Almacenamiento de la configuración de instancia de contenedor de Amazon ECS en Amazon S3](ecs-config-s3.md).

Puede utilizar el siguiente comando de la AWS CLI para conceder a Amazon S3 acceso de solo lectura para su rol de la instancia de contenedor. Sustituya *ecsInstanceRole* por el nombre del rol que haya creado.

```
aws iam attach-role-policy \
      --role-name ecsInstanceRole \
      --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
```

También puede utilizar la consola de IAM para agregar el acceso de solo lectura de Amazon S3 (`AmazonS3ReadOnlyAccess`) a su rol. Para obtener más información, consulte [Updating permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html) en la *Guía del usuario de AWS Identity and Access Management*.

## Supervisión de los permisos de instancias de contenedores
<a name="cwl_iam_policy"></a>

Para que las instancias de contenedor puedan enviar datos de registros a Registros de CloudWatch, debe crear una política de IAM que permita al agente de Amazon ECS escribir los registros de aplicación del cliente en CloudWatch (normalmente gestionado a través del controlador `awslogs`). Después de crear la política, adjúntela a `ecsInstanceRole`.

------
#### [ Consola de administración de AWS ]

**Utilización del editor de política de JSON para la creación de una política**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación de la izquierda, elija **Políticas**. 

   Si es la primera vez que elige **Políticas**, aparecerá la página **Welcome to Managed Policies** (Bienvenido a políticas administradas). Elija **Comenzar**.

1. En la parte superior de la página, seleccione **Crear política**.

1. En la sección **Editor de políticas**, seleccione la opción **JSON**.

1. Ingrese el siguiente documento de política JSON:

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. Elija **Siguiente**.
**nota**  
Puede alternar entre las opciones **Visual** y **JSON** del editor en todo momento. No obstante, si realiza cambios o selecciona **Siguiente** en la opción **Visual** del editor, es posible que IAM reestructure la política, con el fin de optimizarla para el editor visual. Para obtener más información, consulte [Reestructuración de política](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure) en la *Guía del usuario de IAM*.

1. En la página **Revisar y crear**, introduzca el **Nombre de la política** y la **Descripción** (opcional) para la política que está creando. Revise los **Permisos definidos en esta política** para ver los permisos que concede la política.

1. Elija **Crear política** para guardar la nueva política.

Después de crear la política, adjúntela al rol de la instancia de contenedor. Para obtener información acerca de cómo asociar la política al rol, consulte [Updating permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html) en la *Guía del usuario de AWS Identity and Access Management*.

------
#### [ AWS CLI ]

1. Cree un archivo denominado `instance-cw-logs.json` con el siguiente contenido.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

1. Utilice el siguiente comando para crear la política de IAM con el archivo de documento de política de JSON.

   ```
   aws iam create-policy \
         --policy-name cwlogspolicy \
         --policy-document file://instance-cw-logs.json
   ```

1. Recupere el ARN de la política de IAM que creó mediante el siguiente comando. Sustituya *cwlogspolicy* por el nombre de la política que haya creado.

   ```
   aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogspolicy`].Arn'
   ```

1. Utilice el siguiente comando para adjuntar la política al rol de IAM de la instancia de contenedor mediante el ARN de la política.

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy
   ```

------