Roles de IAM para las tareas - 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.

Roles de IAM para las tareas

Con los roles de IAM para las tareas de Amazon ECS, puede especificar un rol de IAM que pueden utilizar los contenedores en una tarea. Las aplicaciones deben firmar sus solicitudes de API de AWS con credenciales de AWS, y esta característica 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 EC2. En lugar de crear y distribuir las credenciales de AWS a los contenedores o de utilizar el rol de la instancia EC2, puede asociar el rol de IAM con la definición de tareas de ECS o con la operación RunTask de la API. Las aplicaciones en los contenedores de tarea pueden utilizar seguidamente el SDK o CLI de AWS para realizar solicitudes de API a los servicios de AWS autorizados.

importante

No se impide que los contenedores que se ejecutan en sus instancias de contenedor accedan a las credenciales proporcionadas al perfil de instancia de contenedor (a través del servidor de metadatos de instancia Amazon EC2). Le recomendamos que limite los permisos en el rol de instancia de contenedor a la lista mínima de permisos mostrados en Rol de IAM de la instancia de contenedor de Amazon ECS.

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 contenedor (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. Para obtener más información, consulte Amazon ECSConfiguración del agente de contenedor de .

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 contenedor (pero permitiendo los permisos que concede el rol de tarea), ejecute el siguiente comando iptables en las instancias de contenedor. Tenga en cuenta que 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 FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

Debe guardar esta regla de iptables en la instancia de contenedor para que se conserve tras un reinicio. Para Amazon ECS-optimized AMI, utilice el siguiente comando. Para otros sistemas operativos, consulte la documentación correspondiente a dicho sistema operativo.

  • Para Amazon ECS-optimized Amazon Linux 2 AMI:

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Para Amazon ECS-optimized Amazon Linux AMI:

    sudo service iptables save

Puede definir el rol de IAM que se va a utilizar en las definiciones de tareas o puede usar un reemplazo taskRoleArn al ejecutar una tarea manualmente con la operación RunTask de la API. 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.

nota

Al especificar un rol de IAM para una tarea, la AWS CLI u otros SDK de los contenedores para dicha tarea utilizan las credenciales de AWS proporcionadas por el rol de tarea exclusivamente y ya no heredan ningún permiso de IAM de la instancia de contenedor.

Desde dentro del contenedor, puede consultar las 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" }
nota

El tiempo de caducidad predeterminado para las credenciales del rol de IAM generadas es de 6 horas.

Si la instancia de contenedor está utilizando al menos la versión 1.11.0 del agente de contenedor y una versión admitida de los SDK o la CLI de AWS, 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 Habilitar roles de IAM de tarea en las instancias de contenedor y Uso de un SDK de AWS soportado.

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 roles de IAM para credencial de tareas.

Beneficios de utilizar roles de IAM para 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á disponible a través de CloudTrail para 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 que utiliza cada rol.

Habilitar roles de IAM de tarea en las instancias de contenedor

Las instancias de contenedor de Amazon ECS requieren al menos la versión 1.11.0 del agente de contenedor para habilitar los roles de IAM de tareas; sin embargo, recomendamos utilizar la versión más reciente del agente de contenedor. 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 Actualizar el agente de contenedor de Amazon ECS. Si está utilizando la Amazon ECS-optimized AMI, la instancia necesita al menos la versión 1.11.0-1 del paquete ecs-init. Si las instancias de contenedor se lanzan desde la versión 2016.03.e o posterior, entonces contienen las versiones requeridas del agente de contenedor y ecs-init. Para obtener más información, consulte Amazon ECS-optimized AMIs.

Si no está utilizando la Amazon ECS-optimized AMI para las instancias de contenedor, asegúrese de añadir la opción --net=host al comando docker run que inicia el agente, junto con las variables de configuración de agente adecuadas para la configuración deseada (si desea obtener más información, consulte Amazon ECSConfiguración del agente de contenedor de ):

ECS_ENABLE_TASK_IAM_ROLE=true

Habilita roles de IAM para tareas para contenedores con los modos de red bridge y default.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Habilita roles de IAM para tareas para 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 las no Amazon ECS-Optimized AMI. También necesitará establecer los siguientes comandos de red 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 sus tareas

Debe crear una política de IAM para que utilicen sus tareas que especifique los permisos que desea que tengan los contenedores de sus tareas. Dispone de varias formas para crear una nueva política de permisos de IAM. Puede copiar una política administrada por AWS completa que ya haga en parte lo que desea y, a continuación, personalizarla según sus requisitos concretos. Para obtener más información, consulte Creación de una nueva política en la Guía del usuario de IAM

También debe crear un rol para que lo utilicen las tareas antes de poder especificarlo en sus definiciones de tareas. Puede crear el rol utilizando el rol de servicio Amazon Elastic Container Service Task Role (Rol de tarea de Amazon Elastic Container Service) en la consola de IAM. A continuación, puede asociar su 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 tarea o servicios que requieran permisos de IAM, debería plantearse la creación de un rol para cada definición de tareas 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.

La relación de confianza del rol de tarea de Amazon ECS se muestra a continuación.

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

Para crear una política de IAM para sus tareas

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 depósito, y los contenedores de su tarea pueden leer las credenciales del depósito 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, elija 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 Actions (Acciones), expanda la opción Read (Leer) y seleccione GetObject.

  3. En Resources (Recursos), seleccione Add ARN (Añadir ARN), introduzca el nombre de recurso de Amazon (ARN) completo del bucket de Amazon S3 y, a continuación, seleccione Review policy (Revisar política).

  4. En la página Review policy (Revisar política), en Name (Nombre), escriba un nombre único como, por ejemplo, AmazonECSTaskS3BucketPolicy.

  5. Para terminar, elija Create policy (Crear política).

Using the JSON editor
  1. En el campo Policy Document, pegue la política que se aplicará a sus tareas. El ejemplo siguiente otorga un permiso para el bucket my-task-secrets-bucket de Amazon S3. Puede modificar el documento de la política para que se adapte mejor a sus necesidades específicas.

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

Para crear una función de IAM para sus tareas

  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 Select type of trusted entity (Seleccionar tipo de entidad de confianza), elija AWS service (Servicio de AWS).

  4. En Choose the service that will use this role (Elegir el servicio que usará este rol), elija Elastic Container Service.

  5. En Select your use case (Seleccione su caso de uso), elija Elastic Container Service Task (Tarea de servicio de contenedor elástico) y, a continuación, seleccione Next: Permissions (Siguiente: Permisos).

  6. En Attach permissions policy (Asociar política de permisos), seleccione la política que se va a usar para sus tareas (en este ejemplo, AmazonECSTaskS3BucketPolicy) y, a continuación, elija Next: Tags (Siguiente: Etiquetas).

  7. En Add tags (optional) (Añadir etiquetas [opcional]), escriba las etiquetas de metadatos que desea asociar con el rol de IAM y, a continuación, elija Next: Review (Siguiente: Revisión).

  8. Escriba un nombre para el rol en Role name (Nombre de rol). En este ejemplo, escriba AmazonECSTaskS3BucketRole como nombre del rol y, a continuación, elija Create role (Crear rol) para finalizar.

Uso de un SDK de AWS soportado

A fecha de 13 de julio de 2016, se añadió a los SDK de AWS compatibilidad con roles de IAM para tareas. Los contenedores de las tareas deben usar una versión del SDK de AWS creada en esa fecha o con posterioridad. Los SDK de AWS que están incluidos en administradores de paquetes de distribución de Linux podrían no estar lo suficientemente actualizados para soportar esta característica.

Para asegurarse de que está utilizando un SDK compatible, siga las instrucciones de instalación de su SDK preferido en Herramientas para Amazon Web Services para obtener la última versión al crear los contenedores.

Especificación de un rol de IAM para sus 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 sus tareas en la definición de tareas. 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 ARN del rol de tarea utilizando el parámetro taskRoleArn. Para obtener más información, consulte Creación de una 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 un reemplazo del rol de tareas de IAM al ejecutar una tarea. Si utiliza la consola para ejecutar la tarea, elija Advanced Options (Opciones avanzadas) y, a continuación, elija 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.

nota

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