Rol de IAM de ejecución de tareas de Amazon ECS - Amazon Elastic Container Service

Rol de IAM de ejecución de tareas de Amazon ECS

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. Para ver los permisos de IAM que la aplicación necesita para ejecutarse, consulte Rol de IAM de tarea de Amazon ECS.

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 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 .

  • Las tareas están alojadas en AWS Fargate o en instancias de Amazon EC2 y:

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 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 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 los límites de la tasa de extracción de Docker Hub. Para obtener más información, consulte Autenticación de registros privados para instancias de contenedor.

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.

Creación del rol de de ejecución de tareas

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

AWS Management Console
Creación de un rol de servicio de Elastic Container Service (consola de IAM)
  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

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

  3. En Tipo de entidad de confianza, elija Servicio de AWS.

  4. En Servicio o caso de uso, seleccione Elastic Container Service y, a continuación, seleccione el caso de uso Tarea de Elastic Container Service.

  5. Elija Siguiente.

  6. En la sección Agregar permisos, busque AmazonECSTaskExecutionRolePolicy y, a continuación, seleccione la política.

  7. Elija Siguiente.

  8. En Nombre del rol, ingrese ecsTaskExecutionRole.

  9. 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:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 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
  3. 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

Uso de las credenciales de Secrets Manager para acceder al repositorio privado de imágenes de su contenedor

permisos para la autenticación de registros privados

Transferencia de datos confidenciales con Systems Manager o Secrets Manager

Permisos de Secrets Manager o Systems Manager

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

Archivos de configuración del host en un bucket de Amazon S3

Permisos de almacenamiento de archivos de Amazon S3

permisos para la autenticación de registros privados

Para proporcionar acceso a los secretos que cree, 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.

  • secretsmanager:GetSecretValue

  • kms:Decrypt: solo se requiere si la clave utiliza una clave de KMS personalizada y no la clave de KMS 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.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }

Permisos de Secrets Manager o Systems Manager

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.

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 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.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id: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.

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 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:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:region:aws_account_id:parameter/parameter_name", "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name", "arn:aws:kms:region:aws_account_id: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

Al lanzar las tareas que usan el tipo de lanzamiento de Fargate que extrae imágenes de Amazon ECR cuando Amazon ECR está configurado para utilizar un punto de enlace de la VPC de interfaz, puede restringir el acceso de las tareas a una VPC o a un punto de enlace de la 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.

  • aws:SourceVpc: restringe el acceso a una VPC específica.

  • 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:

importante

La acción de la API ecr:GetAuthorizationToken no puede tener las claves de condición aws:sourceVpc ni aws:sourceVpce aplicadas porque las llamadas a la API GetAuthorizationToken se realizan a través de la interfaz de red elástica de propiedad de AWS Fargate, en lugar de la interfaz de red elástica de la tarea.

{ "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": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-xxxxxx", "aws:sourceVpc": "vpc-xxxxx" } } } ] }

Permisos de almacenamiento de archivos de Amazon S3

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 Especificación de permisos en una política 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.

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