Rol de IAM para la tarea - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Rol de IAM para la tarea

Sus tareas de Amazon ECS pueden tener un rol de IAM asociado a ellas. Los permisos que se ejecutan en la tarea asumen los permisos concedidos en el rol de IAM. Para ver 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

Si las aplicaciones en contenedores deben llamar a las API de AWS, deben firmar sus solicitudes de API de AWS con credenciales de AWS, y un rol de IAM de tareas brinda una estrategia de administración de credenciales que pueden utilizar las aplicaciones, del mismo modo que los perfiles de instancias Amazon EC2 ofrecen credenciales a las instancias de Amazon EC2. En lugar de crear y distribuir las credenciales de AWS a los contenedores o de utilizar el rol de la instancia de Amazon EC2, puede asociar el rol de IAM a la definición de tarea de Amazon ECS o a la operación de la API RunTask. Sus contenedores pueden utilizar un SDK de AWS o la AWS CLI para realizar solicitudes de API a los servicios de AWS autorizados.

A continuación se explican las ventajas de utilizar roles de IAM con sus tareas.

  • Aislamiento de credenciales: un contenedor solo puede recuperar credenciales desde el rol de IAM que está definido en la definición de tareas al que pertenece; un contenedor nunca tiene acceso a credenciales que están destinadas a otro contenedor que pertenece a otra tarea.

  • Autorización: los contenedores sin autorización no pueden obtener acceso a credenciales de rol IAM definidos para otras tareas.

  • Auditabilidad: el acceso y el registro de eventos están disponibles CloudTrail para garantizar una auditoría retrospectiva. Las credenciales de las tareas tienen un contexto taskArn que se adjunta a la sesión, por lo que CloudTrail los registros muestran qué tarea está utilizando qué rol.

nota

Cuando se especifica un rol de IAM para una tarea, la AWS CLI 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 Amazon EC2 de la instancia externa que ejecutan.

Puede especificar una tarea del rol de IAM que se va a utilizar en las definiciones de tareas o usar una invalidación de taskRoleArn al ejecutar una tarea manualmente con la operación de la API RunTask. El agente de Amazon ECS recibe un mensaje de carga para iniciar la tarea con campos adicionales que contienen las credenciales del rol. El agente de Amazon ECS define un ID único de credenciales de la tarea como un token de identificación y actualiza su caché de credenciales internas de modo que el token de identificación de la tarea apunte a las credenciales del rol que se reciben en la carga. El agente de Amazon ECS rellena la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI en el objeto Env (disponible con el comando docker inspect container_id) para todos los contenedores que pertenecen a esta tarea con la siguiente URI relativa: /credential_provider_version/credentials?id=task_credential_id.

Desde dentro del contenedor, puede consultar el punto de enlace de credenciales con el siguiente comando:

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Salida:

{ "AccessKeyId": "ACCESS_KEY_ID", "Expiration": "EXPIRATION_DATE", "RoleArn": "TASK_ROLE_ARN", "SecretAccessKey": "SECRET_ACCESS_KEY", "Token": "SECURITY_TOKEN_STRING" }

Si la instancia de Amazon EC2 está utilizando al menos la versión 1.11.0 del agente de contenedor y una versión admitida de los AWS CLI o los SDK, el cliente de SDK verá que la variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI está disponible y utilizará las credenciales facilitadas para hacer llamadas a las API de AWS. Para obtener más información, consulte Uso de roles de IAM de tareas en instancias de Amazon EC2 o externas.

Cada vez que se utiliza el proveedor de credenciales, la solicitud se registra localmente en la instancia de contenedor del host en /var/log/ecs/audit.log.YYYY-MM-DD-HH. Para obtener más información, consulte Registro de auditoría de credenciales en roles de IAM para 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 o en la política de IAM asociada con el rol para 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 en la Guía del usuario de IAM.

Consideraciones para tareas alojadas en instancias de Amazon EC2

Cuando utiliza un rol de IAM con sus tareas que se ejecutan en instancias de Amazon EC2, no se impide que los contenedores accedan a las credenciales proporcionadas al perfil de instancia de Amazon EC2 (a través del servidor de metadatos de la instancia de Amazon EC2). 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. Para obtener más información, consulte Rol de IAM de instancia de contenedor de Amazon ECS.

También se debe tener en cuenta lo siguiente al utilizar un rol de IAM de tareas para tareas alojadas en instancias de Amazon EC2.

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

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

    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

Uso de roles de IAM de tareas en instancias de Amazon EC2 o externas

Las instancias externas o de Amazon EC2 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. 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 optimizada para Amazon ECS.

Si no está utilizando la AMI optimizada para Amazon ECS para las instancias de contenedor, asegúrese de agregar 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_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 ejecución, consulte Actualización manual del agente de contenedor de Amazon ECS (para AMI no optimizadas para Amazon ECS). 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.

Creación de un rol y una política de IAM para las tareas

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 existente administrada por AWS 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 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 Modificación de una política de confianza de rol 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 asociar 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 sobre el punto final del servicio en su región, consulte los puntos finales del servicio en la Guía de Referencia general de Amazon Web Services referencia.

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. Se recomienda utilizar las claves de condición aws:SourceAccount o aws:SourceArn para ampliar los permisos para evitar el problema de seguridad del suplente adjunto. Estas claves de condición se pueden especificar en la relación de confianza o en la política de IAM asociada al rol. 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 en la Guía del usuario de IAM.

A continuación, se muestra un ejemplo de una política de confianza. Debe reemplazar el identificador de región y especificar el número de cuenta de AWS que utiliza al iniciar tareas.

{ "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" } } } ] }
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 o en la política de IAM asociada con el rol para 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 en la Guía del usuario de IAM.

Para crear una política de IAM para sus tareas (AWS Management Console)

En este ejemplo, creamos una política para conceder acceso de solo lectura a un bucket de Amazon S3. Podría almacenar credenciales de base de datos u otros secretos en este bucket, y los contenedores de su tarea pueden leer las credenciales del bucket y cargarlas en su aplicación.

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Policies (Políticas) y, a continuación, seleccione Create policy (Crear política).

  3. Siga los pasos que aparecen en una de las siguientes pestañas, que le muestran cómo utilizar los editores visuales o JSON.

Using the visual editor
  1. En Service, seleccione S3.

  2. En Acciones, expanda la opción Leer y seleccione GetObject.

  3. En Resources (Recursos), seleccione Add ARN (Agregar ARN), ingrese el nombre de recurso de Amazon (ARN) completo del bucket de Amazon S3.

  4. (Opcional) Para Request conditions (Condiciones de solicitud), seleccione Add condition (Agregar condición). Esto se recomienda para evitar el problema de seguridad del suplente adjunto. 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 en la Guía del usuario de IAM.

    1. En la clave de condición, seleccione aws: SourceAccount o aws: SourceArn. Para obtener más información sobre las claves de condición globales, consulte Claves de contexto de condición globales de AWS en la Guía del usuario de IAM.

    2. Para Operator, seleccione StringEqualssi especificó la clave de SourceAccount condición aws: o ArnLikesi especificó la clave de SourceArn condición aws:.

    3. En Value, especifique su ID de AWS cuenta si especificó la clave de SourceAccount condición aws: o el nombre de recurso de Amazon (ARN) de su tarea de Amazon ECS si especificó la clave de SourceArn condición aws:. Puede utilizar comodines, por ejemplo aws:ecs:*:accountId:*, que funcionará para todas las tareas de su cuenta.

    4. Elija Add (Agregar) para guardar la clave de condición. Repita estos pasos para cada clave de condición que desee agregar a la política.

  5. Elija Next: Tags (Siguiente: Etiquetas) y agregue cualquier etiqueta de recurso a la política para ayudarle a organizarlas y, a continuación, elija Next: Review (Siguiente: Revisar).

  6. En la página Review policy (Revisar política), en Name (Nombre), escriba un nombre único como, por ejemplo, AmazonECSTaskS3BucketPolicy. También puede especificar una descripción opcional para la política.

  7. Cuando termine la política, elija Create pollicy (Crear política) para terminar.

Using the JSON editor
  1. En el campo Policy Document (Documento de política), pegue la política que se aplicará a sus tareas. En el siguiente ejemplo, se otorga permiso para el bucket de Amazon S3 my-task-secrets-bucket. Incluye una declaración de condición, que puede utilizar para especificar una tarea específica mediante su nombre de recurso de Amazon (ARN) o un ID de cuenta específico. Esto proporciona una forma de ampliar el alcance del permiso para obtener mayor seguridad. Esto se recomienda para evitar el problema de seguridad del suplente adjunto. 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 en la Guía del usuario de IAM.

    A continuación se muestra un ejemplo de una política de permisos. Puede modificar el documento de la política para que se adapte mejor a sus necesidades específicas. Debe reemplazar el identificador de región y especificar el número de cuenta de AWS que utiliza al iniciar tareas.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
  2. Elija Next: Tags (Siguiente: Etiquetas) y agregue cualquier etiqueta de recurso a la política para ayudarle a organizarlas y, a continuación, elija Next: Review (Siguiente: Revisar).

  3. En la página Review policy (Revisar política), en Name (Nombre), escriba un nombre único como, por ejemplo, AmazonECSTaskS3BucketPolicy. También puede especificar una descripción opcional para la política.

  4. Cuando termine la política, elija Create pollicy (Crear política) para terminar.

Para crear un rol de IAM para las tareas (AWS Management Console)
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, elija Roles, Create role.

  3. En la sección Seleccionar entidad de confianza, elija Servicio de AWS.

  4. Para Use case (Caso de uso), utilizando el menú desplegable, seleccione Elastic Container Service (Servicio de contenedores elásticos) y luego el caso de uso Elastic Container Service Task (Tarea de servicio de contenedores elásticos) y, a continuación, elija Next (Próximo).

  5. En Add permissions (Agregar permisos), seleccione la política que se va a usar para sus tareas (en este ejemplo, AmazonECSTaskS3BucketPolicy) y, a continuación, elija Next (Siguiente).

  6. En la página Step 3: Name, review, and create (Paso 3: Nombrar, revisar y crear), haga lo siguiente:

    1. Escriba un nombre para el rol en Role name (Nombre de rol). En este ejemplo, escriba AmazonECSTaskS3BucketRole para nombrar el rol.

    2. (Opcional) Para Description (Descripción), especifique una descripción para este rol de IAM.

    3. Revise la entidad de confianza y la política de permisos para el rol.

    4. En Add tags (optional) (Agregar etiquetas [opcional]), escriba las etiquetas de metadatos que desea asociar con el rol de IAM y, a continuación, elija Create role (Crear rol).

Permisos de IAM requeridos para ECS Exec

La característica ECS Exec requiere un rol de IAM para tareas que concede a los contenedores los permisos necesarios para la comunicación entre el SSM Agent administrado (agente execute-command) y el servicio 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.

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

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

Especificación de un rol de IAM para las tareas

Una vez que haya creado un rol y haya asociado una política a dicho rol, puede ejecutar tareas que asuman el rol. Dispone de varias opciones para hacerlo:

  • Especificar un rol de IAM para las tareas en la definición de tarea. Puede crear una nueva definición de tareas o una nueva revisión de una definición de tareas existente y especificar el rol que ha creado con anterioridad. Si utiliza la consola para crear la definición de tarea, elija el rol de IAM en el campo Task Role (Rol de tarea). Si utiliza los SDK o la AWS CLI, especifique el nombre de recurso de Amazon (ARN) del rol de tarea utilizando el parámetro taskRoleArn. Para obtener más información, consulte Creación de una definición de tareas con la consola.

    nota

    Esta opción es obligatoria si desea utilizar los roles de tarea de IAM en un servicio de Amazon ECS.

  • Especifique un reemplazo del rol de tareas de IAM al ejecutar una tarea. Puede especificar la cancelación del rol de tarea de IAM al ejecutar una tarea. Si utiliza la consola clásica para ejecutar la tarea, elija Advanced Options (Opciones avanzadas) y, a continuación, el rol de IAM en el campo Task Role (Rol de tarea). Si utiliza los SDK o la AWS CLI, especifique el ARN del rol de tareas utilizando el parámetro taskRoleArn en el objeto JSON overrides. Para obtener más información, consulte Ejecución de una tarea independiente en la consola clásica de Amazon ECS.

nota

Además de los permisos estándar de Amazon ECS requeridos para ejecutar tareas y servicios, los usuarios también requieren permisos iam:PassRole para utilizar roles de IAM para las tareas.