

# Rol de IAM de tarea de Amazon ECS
<a name="task-iam-roles"></a>

Sus tareas de Amazon ECS pueden tener un rol de IAM asociado a ellas. Los permisos concedidos en el rol de IAM se ofrecen a los contenedores que se ejecutan en la tarea. Este rol permite que el código de la aplicación (que se ejecuta en el contenedor) utilice otros servicios de AWS. El rol de tarea es obligatorio cuando la aplicación accede a otros servicios de AWS, como Amazon S3.

**nota**  
Ni el contenedor de Amazon ECS ni los agentes de Fargate acceden a estos permisos. Para conocer los permisos de IAM que Amazon ECS necesita para extraer imágenes de contenedores y ejecutar la tarea, consulte [Rol de IAM de ejecución de tareas de Amazon ECS](task_execution_IAM_role.md).

A continuación, se describen las ventajas de usar roles de tarea:
+ **Separación de preocupaciones**: si utiliza EC2, los roles de IAM de tareas le permiten especificar los permisos de IAM para sus contenedores sin necesidad de especificar estos permisos mediante perfiles de instancia de EC2 (para obtener más información, consulte [Uso de perfiles de instancia](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) en la *Guía del usuario de AWS Identity and Access Management*). Por lo tanto, puede implementar sus aplicaciones de forma independiente y uniforme en las instancias de contenedor de ECS sin necesidad de modificar los permisos de IAM asociados a las instancias de EC2.
+ **Auditabilidad:** el acceso y el registro de eventos se encuentran disponibles a través de CloudTrail con el fin de garantizar una auditoría retrospectiva. Las credenciales de tareas tienen un contexto de '`taskArn`' que se asocia a la sesión, de modo que los registros de CloudTrail muestran la tarea para la que se ofrecieron las credenciales de rol.
+ **Entrega uniforme de credenciales**: ECS proporciona las credenciales de los roles de IAM a sus contenedores y las hace accesibles mediante una interfaz bien definida, independientemente de la opción de computación asociada a sus tareas. En ECS Fargate, los perfiles de instancias de EC2 no están disponibles para los contenedores de sus tareas. Los roles de IAM de tareas le permiten asociar permisos de IAM a sus contenedores, independientemente de la opción de computación, cuando utiliza el SDK de AWS o AWS CLI en sus contenedores. Para obtener más información sobre cómo el SDK de AWS accede a estas credenciales, consulte [Proveedor de credenciales de contenedor](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html).

**importante**  
Los contenedores no son un límite de seguridad y el uso de roles de IAM en las tareas no cambia esta situación. Cada tarea que se ejecuta en Fargate tiene su propio límite de aislamiento y no comparte el kernel subyacente, los recursos de CPU, los recursos de memoria ni la interfaz de red elástica con ninguna otra tarea. En el caso de las instancias de contenedores externos y de EC2 en ECS, no hay aislamiento de tareas (a diferencia de Fargate) y los contenedores podrían acceder a las credenciales de otras tareas de la misma instancia de contenedor. También pueden acceder a los permisos asignados a la función de [instancia de contenedor de ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html). Siga las recomendaciones en [Recomendaciones de roles](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security-iam-roles.html#security-iam-roles-recommendations) para bloquear el acceso al servicio de metadatos de instancias de Amazon EC2 para contenedores (para obtener más información, consulte [Uso del servicio de metadatos de instancias para acceder a los metadatos de la instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) en la *Guía del usuario de Amazon EC2*).   
Cuando se especifica un rol de IAM para una tarea, la CLI de AWS u otros SDK de los contenedores de esa tarea utilizan las credenciales de AWS que proporciona el rol de tarea exclusivamente, y ya no heredan ningún permiso de IAM de Amazon EC2 o de la instancia externa en la que se ejecutan.

## Creación del rol de IAM de tareas
<a name="create_task_iam_policy_and_role"></a>

Al crear una política de IAM para que utilicen sus tareas, la política debe incluir los permisos que desea que asuman los contenedores de sus tareas. Puede utilizar una política administrada de AWS existente o puede crear una política personalizada desde cero que satisfaga sus necesidades específicas. Para obtener más información, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM*.

**importante**  
Para las tareas de Amazon ECS (para todos los tipos de lanzamientos), le recomendamos que utilice el rol y la política de IAM para sus tareas. Estas credenciales permiten a su tarea llevar a cabo peticiones a la API de AWS sin necesidad de llamar a `sts:AssumeRole` para asumir el mismo rol que ya está asociado a la tarea. Si su tarea requiere que un rol se asuma a sí mismo, debe crear una política de confianza que permita explícitamente que ese rol se asuma a sí mismo. Para obtener más información, consulte [Actualización de una política de confianza de rol](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-trust-policy.html) en la *Guía del usuario de IAM*.

Una vez creada la política de IAM, puede crear un rol de IAM que incluya esa política a la que hace referencia en la definición de la tarea de Amazon ECS. Puede crear el rol usando el caso de uso **Elastic Container Service Task** (Tarea de Elastic Container Service) en la consola de IAM. A continuación, puede adjuntar la política de IAM específica al rol que proporciona a los contenedores de la tarea los permisos que desea. Los procedimientos siguientes describen cómo hacerlo.

Si tiene varias definiciones de tareas o servicios que requieran permisos de IAM, debería plantearse la creación de un rol para cada definición de tarea específica o servicio con los permisos mínimos requeridos para que las tareas operen, a fin de poder minimizar el acceso que proporciona para cada tarea. 

Para obtener información acerca del punto de conexión de servicio para su región, consulte [Service endpoints](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#ecs_region) en la *Guía de Referencia general de Amazon Web Services*.

El rol de tarea de IAM debe tener una política de confianza que especifique el servicio `ecs-tasks.amazonaws.com`. El permite `sts:AssumeRole` permite que las tareas asuman el rol de IAM diferente de la que utiliza la instancia de Amazon EC2. De esta forma, la tarea no hereda el rol asociado con la instancia de Amazon EC2. A continuación, se muestra un ejemplo de una política de confianza. Sustituya el identificador de región y especifique el número de cuenta de AWS que utiliza al lanzar tareas.

**importante**  
Al crear el rol de IAM de su tarea, se recomienda utilizar las claves de condición `aws:SourceAccount` o `aws:SourceArn` en la relación de confianza asociada al rol para definir aún más el ámbito del permiso y evitar el problema de seguridad del suplente confuso. El uso de la clave de condición `aws:SourceArn` para especificar un clúster concreto no se admite actualmente, debe utilizar el comodín para especificar todos los clústeres. Para obtener más información sobre el problema del suplente confuso y cómo proteger su cuenta de AWS, consulte [El problema del suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) en la *Guía del usuario de IAM*.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":[
               "ecs-tasks.amazonaws.com"
            ]
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "ArnLike":{
            "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
            },
            "StringEquals":{
               "aws:SourceAccount":"111122223333"
            }
         }
      }
   ]
}
```

------

Utilice el siguiente procedimiento que creará una política para recuperar objetos de Amazon S3 con un ejemplo de política. Sustituya cada *entrada del usuario* por valores propios.

------
#### [ 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":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

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.

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

Sustituya cada *entrada del usuario* por valores propios.

1. Cree un archivo denominado `s3-policy.json` con el siguiente contenido.

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

------

1. Utilice el siguiente comando para crear la política de IAM con el archivo de documento de política de JSON. Sustituya cada *entrada del usuario* por valores propios.

   ```
   aws iam create-policy \
         --policy-name taskRolePolicy \
         --policy-document file://s3-policy.json
   ```

------

Utilice el siguiente procedimiento para crear el rol de servicio.

------
#### [ 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 **Tarea de Elastic Container Service**.

1. Elija **Siguiente**.

1. En **Agregar permisos**, busque y seleccione la política que haya creado.

1. Elija **Siguiente**.

1. Escriba un nombre para el rol en **Nombre de rol**. En este ejemplo, escriba `AmazonECSTaskS3BucketRole` para nombrar el rol.

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

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

1. Cree un archivo con el nombre `ecs-tasks-trust-policy.json` que contenga la política de confianza que se va a utilizar para el rol de IAM de la tarea. El archivo debe contener lo siguiente. Sustituya el identificador de región y especifique el número de cuenta de AWS que utiliza al lanzar tareas.

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Principal":{
               "Service":[
                  "ecs-tasks.amazonaws.com"
               ]
            },
            "Action":"sts:AssumeRole",
            "Condition":{
               "ArnLike":{
               "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
               },
               "StringEquals":{
                  "aws:SourceAccount":"111122223333"
               }
            }
         }
      ]
   }
   ```

------

1. Cree un rol de IAM con el nombre `ecsTaskRole`, que utilice la política de confianza creada en el paso anterior.

   ```
   aws iam create-role \
         --role-name ecsTaskRole \
         --assume-role-policy-document file://ecs-tasks-trust-policy.json
   ```

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

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

1. Adjunte la política de IAM que haya creado al rol `ecsTaskRole`. Sustituya el valor de `policy-arn` por el ARN de la política que haya creado.

   ```
   aws iam attach-role-policy \
         --role-name ecsTaskRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy
   ```

------

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


|  Característica  |  Permisos adicionales  | 
| --- | --- | 
|  Uso de ECS Exec  |  [Permisos de ECS Exec](#ecs-exec-required-iam-permissions)  | 
| Usar una imagen de un repositorio privado de Amazon ECR | [Permisos de Amazon ECR](#ecr-required-iam-permissions) | 
| Uso de instancias de EC2 (Windows y Linux) | [Configuración adicional de instancias de Amazon EC2](#task-iam-role-considerations) | 
| Uso de instancias externas | [Configuración adicional de las instancias externas](#enable_task_iam_roles) | 
| Uso de instancias de EC2 de Windows | [Configuración adicional de las instancias de Amazon EC2 de Windows](#windows_task_IAM_roles) | 

## Permisos de Amazon ECR
<a name="ecr-required-iam-permissions"></a>

Los siguientes permisos son necesarios cuando el código de su aplicación necesita interactuar directamente con los repositorios de Amazon ECR. Tenga en cuenta que, para la implementación básica, en la que solo necesita extraer imágenes de Amazon ECR, estos permisos no son necesarios en el nivel del rol de IAM de la tarea. En su lugar, el rol de ejecución de tareas de Amazon ECS debería tener estos permisos. Para obtener más información sobre el rol de ejecución de tareas, consulte [Rol de IAM de ejecución de tareas de Amazon ECS](task_execution_IAM_role.md).

Si el código de su aplicación que se ejecuta en el contenedor necesita interactuar directamente con las API de Amazon ECR, debe agregar los siguientes permisos a un rol de IAM de la tarea e incluir el rol de IAM de la tarea en su definición de tarea. Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

Utilice la siguiente política para su rol de IAM de la tarea para agregar los permisos de Amazon ECR necesarios para las aplicaciones de contenedor que necesitan interactuar directamente con Amazon ECR: 

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

****  

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

------

## Permisos de ECS Exec
<a name="ecs-exec-required-iam-permissions"></a>

La característica [ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) requiere un rol de IAM para tareas para conceder a los contenedores los permisos necesarios para la comunicación entre el SSM Agent administrado (agente `execute-command`) y el servicio de SSM. Debe agregar los siguientes permisos a un rol de IAM para tareas e incluir el rol de IAM para tareas en la definición de tareas. Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

Utilice la siguiente política para el rol de IAM para tareas a fin de agregar los permisos SSM requeridos. 

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}
```

------

## Configuración adicional de instancias de Amazon EC2
<a name="task-iam-role-considerations"></a>

Recomendamos que limite los permisos en el rol de instancia de contenedor a la lista mínima de permisos que se proporciona en la política de IAM administrada `AmazonEC2ContainerServiceforEC2Role`. 

Las instancias de Amazon EC2 requieren al menos la versión `1.11.0` del agente de contenedor para utilizar los roles para tareas; sin embargo, recomendamos utilizar la versión más reciente. Para obtener información sobre la comprobación de la versión del agente y la actualización a la versión más reciente, consulte [Actualización del agente de contenedor de Amazon ECS](ecs-agent-update.md). Si utiliza una AMI optimizada para Amazon ECS, la instancia también necesita al menos `1.11.0-1` del paquete `ecs-init`. Si las instancias utilizan la versión de AMI optimizada para Amazon ECS más reciente, entonces contienen las versiones requeridas del agente de contenedor y `ecs-init`. Para obtener más información, consulte [AMI de Linux optimizadas para Amazon ECS](ecs-optimized_AMI.md).

Si no está utilizando la AMI optimizada para Amazon ECS para las instancias de contenedor, agregue la opción `--net=host` al comando **docker run** que inicia el agente, junto con las siguientes variables de configuración de agente para la configuración deseada (para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md)):

`ECS_ENABLE_TASK_IAM_ROLE=true`  
Usa roles de IAM para las tareas de contenedores con los modos de red `bridge` y `default`.

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
Usa roles de IAM para las tareas de contenedores con el modo de red `host`. Esta variable solo se admite en versiones de agente 1.12.0 y posterior.

Para ver un ejemplo de un comando de puesta en marcha, consulte [Actualización manual del agente de contenedor de Amazon ECS (para AMI no optimizadas para Amazon ECS)](manually_update_agent.md). También deberá establecer los siguientes comandos de redes en su instancia de contenedor para que los contenedores de sus tareas puedan recuperar las credenciales de AWS:

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

Debe guardar estas reglas de **iptables** en su instancia de contenedor para que no se vean afectadas por un reinicio. Puede utilizar los comandos **iptables-save** e **iptables-restore** para guardar las reglas de **iptables** y restaurarlas en el arranque. Para obtener más información, consulte la documentación del sistema operativo específico.

Para impedir que los contenedores de las tareas que usan el modo de red `awsvpc` obtengan acceso a la información sobre credenciales proporcionada al perfil de instancia de Amazon EC2, pero permitiendo los permisos que concede el rol de tarea, establezca la variable de configuración del agente `ECS_AWSVPC_BLOCK_IMDS` en `true` en el archivo de configuración del agente y reinicie este agente. Para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).

Para impedir que los contenedores de las tareas que utilizan el modo de red `bridge` obtengan acceso a la información sobre credenciales proporcionada al perfil de instancia de Amazon EC2, pero permitiendo los permisos que concede el rol de tarea, ejecute el siguiente comando **iptables** en las instancias de Amazon EC2. Este comando no afecta a los contenedores de las tareas que usan los modos de red `host` o `awsvpc`. Para obtener más información, consulte [Modo de red](task_definition_parameters.md#network_mode).
+ 

  ```
  sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
  ```

  Debe guardar esta regla de **iptables** en la instancia de Amazon EC2 para que se conserve tras un reinicio. Puede usar los siguientes comandos para la AMI optimizada para Amazon ECS. Para otros sistemas operativos, consulte la documentación correspondiente a dicho sistema operativo.

  ```
  sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  ```

## Configuración adicional de las instancias externas
<a name="enable_task_iam_roles"></a>

Las instancias externas requieren al menos la versión `1.11.0` del agente de contenedor para utilizar los roles de IAM para tareas; sin embargo, recomendamos utilizar la versión más reciente. Para obtener información sobre la comprobación de la versión del agente y la actualización a la versión más reciente, consulte [Actualización del agente de contenedor de Amazon ECS](ecs-agent-update.md). Si utiliza una AMI optimizada para Amazon ECS, la instancia también necesita al menos `1.11.0-1` del paquete `ecs-init`. Si las instancias utilizan la versión de AMI optimizada para Amazon ECS más reciente, entonces contienen las versiones requeridas del agente de contenedor y `ecs-init`. Para obtener más información, consulte [AMI de Linux optimizadas para Amazon ECS](ecs-optimized_AMI.md).

Si no está utilizando la AMI optimizada para Amazon ECS para las instancias de contenedor, agregue la opción `--net=host` al comando **docker run** que inicia el agente, junto con las siguientes variables de configuración de agente para la configuración deseada (para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md)):

`ECS_ENABLE_TASK_IAM_ROLE=true`  
Usa roles de IAM para las tareas de contenedores con los modos de red `bridge` y `default`.

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
Usa roles de IAM para las tareas de contenedores con el modo de red `host`. Esta variable solo se admite en versiones de agente 1.12.0 y posterior.

Para ver un ejemplo de un comando de puesta en marcha, consulte [Actualización manual del agente de contenedor de Amazon ECS (para AMI no optimizadas para Amazon ECS)](manually_update_agent.md). También deberá establecer los siguientes comandos de redes en su instancia de contenedor para que los contenedores de sus tareas puedan recuperar las credenciales de AWS:

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

Debe guardar estas reglas de **iptables** en su instancia de contenedor para que no se vean afectadas por un reinicio. Puede utilizar los comandos **iptables-save** e **iptables-restore** para guardar las reglas de **iptables** y restaurarlas en el arranque. Para obtener más información, consulte la documentación del sistema operativo específico.

## Configuración adicional de las instancias de Amazon EC2 de Windows
<a name="windows_task_IAM_roles"></a>

**importante**  
Esto se aplica únicamente a los contenedores de Windows en EC2 que utilizan roles de tareas.

El rol de tareas con características de Windows requiere una configuración adicional en EC2.
+ Cuando se lanzan las instancias de contenedor, se debe establecer la opción `-EnableTaskIAMRole` en el script de datos de usuario de las instancias de contenedor. El rol `EnableTaskIAMRole` activa la característica de roles de IAM de tareas para las tareas. Por ejemplo:

  ```
  <powershell>
  Import-Module ECSTools
  Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole 
  </powershell>
  ```
+ Debe arrancar el contenedor con los comandos de redes que se proporcionan en [Script de arranque del contenedor de Amazon ECS](#windows_task_IAM_roles_bootstrap).
+ Debe crear un rol y una política de IAM para las tareas. Para obtener más información, consulte [Creación del rol de IAM de tareas](#create_task_iam_policy_and_role).
+ Los roles de IAM para el proveedor de credenciales de tareas utilizan el puerto 80 en la instancia de contenedor. Por lo tanto, si configura roles de IAM para las tareas en la instancia de contenedor, los contenedores no pueden utilizar el puerto 80 como puerto del host en ningún mapeo de puertos. Para exponer los contenedores en el puerto 80, recomendamos configurar un servicio para ellos que utilice el balanceo de carga. Puede utilizar el puerto 80 en el balanceador de carga. De este modo, el tráfico se puede dirigir a otro puerto del host en las instancias de contenedor. Para obtener más información, consulte [Uso del equilibrador de carga para distribuir el tráfico de servicio de Amazon ECS](service-load-balancing.md).
+ Si se reinicia la instancia de Windows, debe eliminar la interfaz de proxy y volver a inicializar el agente de contenedor de Amazon ECS para que se vuelva a activar el proxy de credenciales.

### Script de arranque del contenedor de Amazon ECS
<a name="windows_task_IAM_roles_bootstrap"></a>

Antes de que los contenedores puedan obtener acceso al proxy de credenciales en la instancia de contenedor para obtener credenciales, el contenedor se debe arrancar con los comandos de redes requeridos. El siguiente script de ejemplo de código se debe ejecutar en los contenedores cuando se inician.

**nota**  
No es necesario ejecutar este script cuando se utiliza el modo de red `awsvpc` en Windows.

Si ejecuta contenedores de Windows que incluyen Powershell, utilice el siguiente script:

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
$gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API
New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API
```

Si ejecuta contenedores de Windows que solo tienen el shell de comandos, utilice el siguiente script:

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
for /f "tokens=1" %i  in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i
for /f "tokens=3" %i  in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i
netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API
netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API
```