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

Si sus aplicaciones en contenedores necesitan llamar a las AWS API, deben firmar sus solicitudes de AWS API con AWS credenciales, y una función de IAM de tareas proporciona una estrategia para administrar las credenciales para que las utilicen sus aplicaciones, de forma similar a la forma en que un perfil de instancia de Amazon EC2 proporciona 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. Luego, sus contenedores pueden usar el AWS SDK o realizar solicitudes de API AWS CLI a los servicios autorizados. AWS

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, el SDK AWS CLI u otros SDK de los contenedores de esa tarea utilizan exclusivamente AWS las credenciales proporcionadas por el rol de tarea y ya no heredan ningún permiso de IAM de la instancia externa o de Amazon EC2 en la que se 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 su instancia de Amazon EC2 utiliza al menos una versión 1.11.0 del agente contenedor y una versión compatible del AWS CLI o los SDK, el cliente del SDK verá que la AWS_CONTAINER_CREDENTIALS_RELATIVE_URI variable está disponible y utilizará las credenciales proporcionadas para realizar llamadas a las API. 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.

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 tendrás que configurar los siguientes comandos de red en tu instancia de contenedor para que los contenedores de tus tareas puedan recuperar sus AWS credenciales:

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. Puedes usar una política AWS administrada existente o puedes crear una política personalizada desde cero que se adapte a tus 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 tu tarea realizar solicitudes a la AWS API sin sts:AssumeRole tener que asumir la misma función que ya está asociada 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 adjuntar su política de IAM específica a la función que otorga a los contenedores de su tarea los permisos que desee. 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 Puntos de conexión de servicio en la Referencia general de Amazon Web Services Guía de 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. 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 AWS cuenta que utiliza al iniciar las 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 la función de IAM de la tarea, se recomienda utilizar las claves de aws:SourceArn condición aws:SourceAccount o de la relación de confianza o de la política de IAM asociada a la función para limitar aún más los permisos y evitar así el confuso problema de subseguridad. 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 diputado confuso y cómo proteger tu AWS cuenta, consulta El problema del diputado confuso en la Guía del usuario de IAM.

Los siguientes procedimientos describen cómo crear una política para recuperar objetos de Amazon S3 con un ejemplo de política. Sustituya todas las entradas de los usuarios por sus propios valores.

AWS Management Console
Para utilizar el editor de política de JSON para crear una política
  1. Inicie sesión en la consola de IAM AWS Management Console y ábrala en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación de la izquierda, seleccione Políticas.

    Si es la primera vez que elige Políticas, aparecerá la página Bienvenido a políticas administradas. Elija Comenzar.

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

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

  5. 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/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  6. 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 en la Guía del usuario de IAM.

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

  8. Elija Create Policy (Crear política) para guardar la nueva política.

AWS CLI

Sustituya todas las entradas del usuario por sus propios valores.

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

    { "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:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  2. Utilice el siguiente comando para crear la política de IAM mediante el archivo de documento de política JSON.

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

Los siguientes procedimientos describen cómo crear un rol de IAM en una tarea adjuntando una política de IAM que usted cree.

AWS Management Console
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, seleccione Roles, Crear rol.

  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 Añadir permisos, busque y elija la política que ha creado y, a continuación, seleccione 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 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).

AWS CLI

Sustituya todas las entradas del usuario por sus propios valores.

  1. Cree un archivo con un nombre ecs-tasks-trust-policy.json que contenga la política de confianza que se utilizará en la función de IAM de la tarea. El archivo debe contener lo siguiente. Sustituya el identificador de región y especifique el número de AWS cuenta que utiliza al iniciar las 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" } } } ] }
  2. 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
  3. Recupere el ARN de la política de IAM que creó mediante el siguiente comando. taskRolePolicySustitúyalo por el nombre de la política que creó.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. Adjunta la política de IAM que creaste al ecsTaskRole rol. Sustituya el policy-arn por el ARN de la política que creaste.

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

Permisos de IAM requeridos para ECS Exec

La función ECS Exec requiere una función de IAM en una tarea para conceder a los contenedores los permisos necesarios para la comunicación entre el agente de SSM gestionado (execute-commandagente) 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 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.

{ "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). Para obtener más información, consulte Creación de una definición de tareas con la consola.

    Si usa el AWS CLI o los SDK, especifique el nombre de recurso de Amazon (ARN) de su función de tarea mediante taskRoleArn el parámetro. Para obtener más información, consulte TaskDefinitionla referencia de la API de Amazon ECS yParámetros de definición de tarea.

    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 utilizas el AWS CLI o los SDK, especifica el ARN de tu rol de tarea mediante taskRoleArn el parámetro del objeto JSONoverrides. Para obtener más información sobre el overrides parámetro, consulte RunTasky TaskOverrideen la referencia de la API de Amazon ECS. Para obtener más información sobre la anulación mediante la consola, consulteEjecutar una aplicación como una tarea 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.