

# Rol de IAM de ejecución de tareas de Amazon ECS
<a name="task_execution_IAM_role"></a>

El rol de ejecución de tareas concede al agente de contenedor de Amazon ECS y al agente de Fargate permiso para realizar llamadas a la API de AWS en su nombre. El rol de IAM de ejecución de tareas es necesario en función de los requisitos de la tarea. Puede tener varios roles de ejecución de tareas asociados a su cuenta para distintos fines y servicios.

**nota**  
Amazon ECS pone estos permisos a disposición del agente que se ejecuta en la instancia y le envía periódicamente las credenciales temporales del rol, pero los contenedores de la tarea no pueden acceder a estos directamente. Para ver los permisos de IAM que el código de la aplicación adentro del contenedor necesita para ejecutarse, consulte [Rol de IAM de tarea de Amazon ECS](task-iam-roles.md). 

A continuación, se indican los casos de uso comunes para un rol de IAM de ejecución de tareas:
+ La tarea está alojada en AWS Fargate, instancias administradas de Amazon ECS o en una instancia externa y:
  + extrae una imagen de contenedor de un repositorio privado de Amazon ECR.
  + extrae una imagen de contenedor de un repositorio privado de Amazon ECR en una cuenta diferente de la cuenta que ejecuta la tarea.
  + envía registros de contenedor a CloudWatch Logs con el controlador de registros `awslogs`. Para obtener más información, consulte [Envío de registros de Amazon ECS a CloudWatch](using_awslogs.md).
+ Las tareas están alojadas en AWS Fargate o en instancias de Amazon EC2 y:
  + utiliza la autenticación de registros privados. Para obtener más información, consulte [permisos para la autenticación de registros privados](#task-execution-private-auth).
  + utiliza la supervisión en tiempo de ejecución.
  + la definición de la tarea hace referencia a información confidencial mediante secretos de Secrets Manager o parámetros del Almacén de parámetros de AWS Systems Manager. Para obtener más información, consulte [Permisos de Secrets Manager o Systems Manager](#task-execution-secrets).

**nota**  
El rol de ejecución de tareas es compatible con la versión 1.16.0 y posteriores del agente de contenedor de Amazon ECS.

Amazon ECS proporciona la política administrada con el nombre `AmazonECSTaskExecutionRolePolicy`, que contiene los permisos que requieren los casos de uso comunes descritos anteriormente. Para obtener más información, consulte [AmazonECSTaskExecutionRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonECSTaskExecutionRolePolicy.html) en la *Guía de referencia de políticas administradas de AWS*. Puede ser necesario agregar políticas en línea al rol de ejecución de tareas para los casos de uso especiales.

La consola de Amazon ECS crea un rol de ejecución de tareas. Puede asociar manualmente la política de IAM administrada para tareas a fin de permitir que Amazon ECS agregue permisos para futuras características y mejoras a medida que se vayan introduciendo. Puede utilizar la búsqueda en la consola de IAM para buscar `ecsTaskExecutionRole` y ver si la cuenta ya dispone del rol de ejecución de tareas. Para obtener más información, consulte [IAM console search](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_search.html) en la *Guía del usuario de IAM*.

Si extrae imágenes como usuario autenticado, es menos probable que le afecten los cambios que se hayan producido en el [uso y los límites de Docker Hub](https://docs.docker.com/docker-hub/usage/). Para obtener más información, consulte [Autenticación de registros privados para instancias de contenedor](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html).

Al utilizar Amazon ECR y Amazon ECR Public, puede evitar los límites impuestos por Docker. Si extrae imágenes de Amazon ECR, esto también ayuda a acortar los tiempos de extracción de la red y reduce los cambios en la transferencia de datos cuando el tráfico abandona la VPC.

Cuando utilice Fargate, debe autenticarse en un registro de imágenes privado utilizando `repositoryCredentials`. No es posible configurar las variables de entorno del agente de contenedor de Amazon ECS `ECS_ENGINE_AUTH_TYPE` o `ECS_ENGINE_AUTH_DATA` ni modificar el archivo `ecs.config` para las tareas alojadas en Fargate. Para obtener más información, consulte [Autenticación de registros privados para tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html).

## Creación del rol de de ejecución de tareas
<a name="create-task-execution-role"></a>

Si su cuenta aún no tiene un rol de ejecución de tareas, siga los pasos siguientes para crearlo.

------
#### [ 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 la sección **Agregar permisos**, busque **AmazonECSTaskExecutionRolePolicy** y, a continuación, seleccione la política.

1. Elija **Siguiente**.

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

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

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

Sustituya cada *entrada del usuario* por información propia.

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. El archivo debe contener lo siguiente:

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

****  

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

------

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

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

1. Asocie la política `AmazonECSTaskExecutionRolePolicy` administrada por AWS al rol `ecsTaskExecutionRole`.

   ```
   aws iam attach-role-policy \
         --role-name ecsTaskExecutionRole \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
   ```

------

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


|  Característica  |  Permisos adicionales  | 
| --- | --- | 
|  Obtención de imágenes de contenedores de registros privados externos a AWS (como Docker Hub, Quay.io o su propio registro privado) con las credenciales de Secrets Manager  |  [permisos para la autenticación de registros privados](#task-execution-private-auth)  | 
| Transferencia de datos confidenciales con Systems Manager o Secrets Manager | [Permisos de Secrets Manager o Systems Manager](#task-execution-secrets) | 
| Configuración de las tareas de Fargate de modo que extraigan imágenes de Amazon ECR a través de puntos de conexión de interfaz | [Las tareas de Fargate que extraen imágenes de Amazon ECR a través de permisos de puntos de conexión de interfaz](#task-execution-ecr-conditionkeys) | 
| Archivos de configuración del host en un bucket de Amazon S3 | [Permisos de almacenamiento de archivos de Amazon S3](#s3-required) | 
| Configuración de la Información de contenedor para ver los eventos del ciclo de vida de Amazon ECS |  [Permisos necesarios para habilitar los eventos del ciclo de vida de Amazon ECS en Información de contenedores](console-permissions.md#required-permissions-configure)  | 
| Visualización de los eventos del ciclo de vida de Amazon ECS en la información de contenedor |  [Permisos necesarios para ver los eventos del ciclo de vida de Amazon ECS en Información de contenedores](console-permissions.md#required-permissions-view)  | 

## permisos para la autenticación de registros privados
<a name="task-execution-private-auth"></a>

La autenticación de registro privado permite que sus tareas de Amazon ECS obtengan imágenes de contenedores de registros privados externos a AWS (como Docker Hub, Quay.io, o su propio registro privado) que requieren credenciales de autenticación. Esta característica utiliza Secrets Manager para almacenar de forma segura las credenciales de registro, que luego se referencian en la definición de la tarea mediante el parámetro `repositoryCredentials`.

Para obtener más información sobre la configuración de la autenticación de registro privado, consulte [Uso de imágenes de contenedor no AWS en Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html).

Para proporcionar acceso a los secretos que contienen las credenciales de su registro privado, agregue los siguientes permisos como una política insertada al rol de ejecució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).
+ `secretsmanager:GetSecretValue`: obligatorio para recuperar las credenciales de registro privado de Secrets Manager.
+ `kms:Decrypt`: obligatorio solo si el secreto utiliza una clave de KMS personalizada y no la clave predeterminada. Se debe agregar el nombre de recurso de Amazon (ARN) de la clave de personalizada como un recurso.

Es siguiente es un ejemplo de política insertada que agrega los permisos.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name",
                "arn:aws:kms:us-east-1:111122223333:key/key_id"
            ]
        }
    ]
}
```

------

## Permisos de Secrets Manager o Systems Manager
<a name="task-execution-secrets"></a>

El permiso para dejar que el agente de contenedor extraiga los recursos necesarios de AWS Systems Manager o Secrets Manager. Para obtener más información, consulte [Transferencia de datos confidenciales a un contenedor de Amazon ECS](specifying-sensitive-data.md).

**Utilización de Secrets Manager **

Para proporcionar acceso a los secretos de Secrets Manager que cree, agregue manualmente el siguiente permiso al rol de ejecución de tareas. Para obtener información sobre cómo administrar los permisos, consulte [Adición y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.
+ `secretsmanager:GetSecretValue`: obligatorio si se hace referencia a un secreto de Secrets Manager. Agrega el permiso para recuperar el secreto de Secrets Manager.

La siguiente política de ejemplo agrega los permisos necesarios.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name"
      ]
    }
  ]
}
```

------

**Utilización de Systems Manager**

**importante**  
En el caso de las tareas que utilizan el tipo de lanzamiento de EC2, debe utilizar la variable de configuración del agente de ECS `ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true` para utilizar esta característica. Puede añadirla al archivo `./etc/ecs/ecs.config` durante la creación de la instancia de contenedor o puede añadirla a una instancia existente y, a continuación, reiniciar el agente de ECS. Para obtener más información, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).

Para proporcionar acceso a los parámetros del almacén de parámetros de Systems Manager que cree, agregue manualmente los siguientes permisos como política al rol de ejecución de tareas. Para obtener información sobre cómo administrar los permisos, consulte [Adición y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.
+ `ssm:GetParameters`: obligatorio si se hace referencia a un parámetro del almacén de parámetros de Systems Manager en una definición de tareas. Agrega el permiso para recuperar los parámetros de Systems Manager.
+ `secretsmanager:GetSecretValue`: obligatorio si se hace referencia a un secreto de Secrets Manager directamente o si el parámetro del almacén de parámetros de Systems Manager hace referencia a un secreto de Secrets Manager en una definición de tareas. Agrega el permiso para recuperar el secreto de Secrets Manager.
+ `kms:Decrypt`: obligatorio solo si el secreto utiliza una clave administrada por el cliente y no la clave predeterminada. El ARN de su clave personalizada debe añadirse como un recurso. Agrega el permiso para descifrar la clave administrada por el cliente.

La siguiente política de ejemplo agrega los permisos necesarios:

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:111122223333:parameter/parameter_name",
        "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name",
        "arn:aws:kms:us-east-1:111122223333:key/key_id"
      ]
    }
  ]
}
```

------

## Las tareas de Fargate que extraen imágenes de Amazon ECR a través de permisos de puntos de conexión de interfaz
<a name="task-execution-ecr-conditionkeys"></a>

Al lanzar las tareas que usan Fargate que extrae imágenes de Amazon ECR cuando Amazon ECR está configurado para utilizar un punto de conexión de VPC de interfaz, puede restringir el acceso de las tareas a una VPC o a un punto de conexión de VPC específicos. Para hacerlo, cree un rol de ejecución de tareas para que las tareas utilicen claves de condición de IAM.

Utilice las siguientes claves de condición globales de IAM para restringir el acceso a una VPC o a un punto de enlace de la VPC específicos. Para obtener más información, consulte [Claves de contexto de condición globales de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html).
+ `aws:SourceVpc`: restringe el acceso a una VPC específica. Puede restringir la VPC a la VPC que aloja la tarea y el punto de conexión.
+ `aws:SourceVpce`: restringe el acceso a un punto de enlace de la VPC específico.

En la siguiente política del rol de ejecución de tareas se ofrece un ejemplo para añadir claves de condición:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:BatchGetImage"
                ],
                "Resource": "arn:aws:ecr:*:*:repository/*",
                "Condition": {
                    "StringEquals": {
                            "aws:sourceVpce": "vpce-0123456789abcdef0"
                    }
                }
            }
    ]
}
```

------

## Permisos de Amazon ECR
<a name="task-execution-ecr-permissions"></a>

Los siguientes permisos son necesarios cuando se necesita extraer imágenes de contenedores de repositorios privados de Amazon ECR. El rol de ejecución de tareas debería tener estos permisos para permitir que los agentes de contenedores de Amazon ECS y Fargate extraigan imágenes de contenedores en su nombre. Para las implementaciones básicas de ECS, estos permisos deben agregarse al rol de ejecución de tareas en lugar de al rol de IAM de la tarea.

La política administrada del rol de ejecución de tareas de Amazon ECS (`AmazonECSTaskExecutionRolePolicy`) incluye los permisos necesarios para extraer imágenes de Amazon ECR. Si está utilizando la política administrada, no necesita agregar estos permisos por separado.

Si va a crear una política personalizada, incluya los siguientes permisos para poder extraer imágenes de Amazon ECR:

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

****  

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

------

Tenga en cuenta que estos permisos son diferentes de los permisos que podrían ser necesarios en el rol de IAM de la tarea si el código de su aplicación necesita interactuar directamente con las API de Amazon ECR. Para obtener más información sobre los permisos del rol de IAM de la tarea para Amazon ECR, consulte [Permisos de Amazon ECR](task-iam-roles.md#ecr-required-iam-permissions).

## Permisos de almacenamiento de archivos de Amazon S3
<a name="s3-required"></a>

Cuando especifica un archivo de configuración alojado en Amazon S3, el rol de ejecución de tareas debe incluir el permiso `s3:GetObject` para el archivo de configuración y el permiso `s3:GetBucketLocation` en el bucket de Amazon S3 en el que se encuentra el archivo. Para obtener más información, consulte [Acciones de políticas para Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-actions) en la *Guía del usuario de Amazon Simple Storage Service*.

La siguiente política de ejemplo agrega los permisos necesarios para recuperar un archivo de Amazon S3. Especifique el nombre del bucket de Amazon S3 y el nombre del archivo de configuración.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/folder_name/config_file_name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ]
    }
  ]
}
```

------

### Importante consideración de seguridad
<a name="s3-required-considerations"></a>

 Cuando utilice las características de Amazon ECS que se integran con los buckets de Amazon S3, implemente la validación de la propiedad de los buckets para evitar los ataques de apropiación de los buckets. Sin la validación adecuada, si un agente malintencionado con el mismo nombre elimina y vuelve a crear un bucket de Amazon S3, sus tareas podrían cargar configuraciones maliciosas o enviar información confidencial a buckets controlados por el atacante sin saberlo. 

**Condición de política de IAM recomendada:**

```
               "Condition": {
                 "StringEquals": {
                   "aws:ResourceAccount": "TRUSTED-ACCOUNT-ID"
                 }
               }
```

Sustituya *TRUSTED-ACCOUNT-ID* por el ID de cuenta de AWS propietario del bucket de S3.

Esta condición garantiza que su rol de ejecución de tareas solo pueda acceder a los buckets de Amazon S3 que pertenezcan a la cuenta de confianza especificada.