Saltar al contenido

¿Cómo configuro mi rol de tarea de IAM en Amazon ECS para evitar errores de tipo "Access Denied" al realizar llamadas a la API?

4 minutos de lectura
0

Quiero configurar mi rol de tarea de AWS Identity and Access Management (IAM) en Amazon Elastic Container Service (Amazon ECS) para no recibir errores de tipo "Access Denied" al realizar llamadas a la API.

Descripción corta

Para evitar el error Acceso denegado, incluya su rol de IAM en la definición de tareas de Amazon ECS.

Debe activar el rol de IAM en el archivo de configuración del agente de contenedor de ECS. Además, asegúrese de que su rol de IAM tenga todos los permisos necesarios para que su tarea pueda usar el rol para realizar las llamadas a la API.

Nota: Si una tarea no puede encontrar el rol de tarea de IAM debido a problemas de configuración, la tarea utiliza el rol de instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Resolución

Confirmación de que el agente de contenedor ECS se esté ejecutando

Ejecute el comando docker ps:

docker ps

Nota: Si reinicia la instancia, las reglas de iptables se restablecen a sus valores predeterminados. Para evitar un restablecimiento, ejecute uno de los siguientes comandos para guardar las reglas.

Imagen de máquina de Amazon (AMI) de Amazon Linux optimizada para Amazon ECS:

sudo service iptables save

AMI de Amazon Linux 2 optimizada para Amazon ECS:

sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

Active su rol de IAM en el archivo de configuración del agente de contenedores de ECS

Siga estos pasos:

  1. Abra el archivo /etc/ecs/ecs.config.

  2. Para activar el rol de IAM para tareas en contenedores con modos los modos de red de tipo puente y predeterminados, establezca ECS_ENABLE_TASK_IAM_ROLE en true:

    ECS_ENABLE_TASK_IAM_ROLE=true
  3. Para activar el rol de IAM para las tareas en contenedores con el modo de red host, establezca ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST en true:

    ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
  4. Para actualizar el archivo de configuración, ejecute uno de los siguientes comandos para reiniciar el agente de contenedores de ECS:
    AMI de Amazon Linux optimizada para Amazon ECS:

    sudo stop ecs
    sudo start ecs

    AMI de Amazon Linux 2 optimizada para Amazon ECS:

    sudo systemctl restart ecs

Actualización de la política de confianza de roles de IAM

Para asignar su rol de IAM a sus tareas de Amazon ECS, actualice su política de confianza de roles de IAM:

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

Actualización de la configuración HTTP_PROXY para el agente de contenedores de ECS

Si usa HTTP_PROXY en la configuración de su agente de contenedores de Amazon ECS, aplique la siguiente configuración NO_PROXY:

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

Uso de la versión más reciente de AWS SDK

La aplicación que se ejecuta en su contenedor debe usar una versión de 2016 o posterior de AWS SDK. Para actualizar su AWS, consulte la compatibilidad de las versiones de AWS SDK y las herramientas y las herramientas para crear en AWS.

Configuración de las reglas de iptables para una AMI que no esté optimizada para Amazon ECS

Si utiliza una AMI que no esté optimizada para Amazon ECS, defina las reglas necesarias para iptables.

Disponibilidad de la variable de entorno en procesos que no sean PID 1

La variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI solo está disponible para los procesos PID 1 de un contenedor. Si el contenedor ejecuta varios procesos o procesos Init, la variable de entorno no estará disponible para los procesos que no sean PID 1.

Si quiere configurar la variable de entorno para que esté disponible para los procesos que no sean PID 1, exporte la variable de entorno en el archivo .profile. Por ejemplo, ejecute el siguiente comando para exportar la variable de entorno en el Dockerfile de la imagen del contenedor:

RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile

Nota: Al exportar la variable de entorno, hay una dependencia en los comandos strings y grep.

Información relacionada

Amazon EC2 Windows instance additional configuration (Configuración adicional de la instancia Windows de Amazon EC2)

OFICIAL DE AWSActualizada hace 2 años