¿Cómo puedo solucionar el error «unable to pull secrets or registry auth» en Amazon ECS?

9 minutos de lectura
0

Cuando lanzo una tarea de Amazon Elastic Container Service (Amazon ECS), se muestra el mensaje de error «unable to pull secrets or registry auth».

Descripción corta

Cuando lanza una tarea de Amazon ECS, se muestra uno de los siguientes mensajes de error:

  • «ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed»
  • «ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried».

La versión 1.4.0 de la plataforma de AWS Fargate utiliza la interfaz de red elástica para tareas con el fin de extraer la imagen y los secretos. Todo el tráfico de red fluye a través de la interfaz de red elástica de Amazon Virtual Private Cloud (Amazon VPC). Consulte este tráfico en los registros de flujo de Amazon VPC. Sin embargo, la tarea utiliza su configuración de red porque las interfaces de red elásticas se encuentran dentro de su Amazon VPC.

El agente de contenedores de Amazon ECS utiliza el rol de ejecución de tareas de AWS Identity and Access Management (IAM) para obtener información de los siguientes servicios:

  • Almacén de parámetros de AWS Systems Manager
  • AWS Secrets Manager

Para los datos cifrados mediante una clave de AWS Key Management Service (AWS KMS) administrada por el cliente, conceda los siguientes permisos al rol de IAM de ejecución de tareas:

  • ssm:GetParameters
  • secretsmanager:GetSecretValue
  • kms:Decrypt

Resolución

Utilice el runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar los problemas de las tareas de Amazon ECS que no se inician. Si el resultado del runbook no ofrece recomendaciones, utilice los métodos de resolución de problemas manuales que se explican en las siguientes secciones.

Importante:

  • Utilice el runbook en la misma región de AWS en la que se encuentren los recursos del clúster de ECS.
  • Cuando utilice el runbook, use el identificador de la tarea con el error más reciente para que la limpieza del estado de la tarea no interrumpa el análisis durante la automatización. Si la tarea con error forma parte del servicio de Amazon ECS, utilice la tarea con error más reciente del servicio. La tarea con error debe ser visible en ECS:DescribeTasks durante la ejecución de la automatización. De forma predeterminada, las tareas de ECS detenidas están visibles durante 1 hora después de entrar en el estado Detenido.

Uso del runbook TroubleshootECSTaskFailedToStart

Para ejecutar el runbook AWSSupport-TroubleshootECSTaskFailedToStart, siga estos pasos:

  1. Abra la consola de AWS Systems Manager.
  2. En el panel de navegación, en Administración de cambios, seleccione Automatización.
  3. Elija Ejecutar automatización.
  4. Elija la pestaña Propiedad de Amazon.
  5. En Documento de automatización, busque TroubleshootECSTaskFailedToStart.
  6. Seleccione la tarjeta AWSSupport-TroubleshootECSTaskFailedToStart.
    Nota: Asegúrese de seleccionar el botón de radio en la tarjeta y no el nombre de la automatización con hipervínculos.
  7. Elija Siguiente.
    Nota: Tras la ejecución, los resultados del análisis se rellenan en la sección Salida global. Sin embargo, debe esperar a que el estado del documento pase a Éxito. Además, debe prestar atención a las excepciones de la sección Salida.
  8. En Ejecutar documento de automatización, elija Ejecución simple.
  9. En la sección Parámetros de entrada, para AutomationAssumeRole, introduzca el ARN del rol que permita a Systems Manager Automation llevar a cabo acciones.
    Nota: Asegúrese de el AutomationAssumeRole o el usuario o rol de IAM tengan los permisos de IAM necesarios para ejecutar el runbook AWSSupport-TroubleshootECSTaskFailedToStart. Si no especifica un rol de IAM, Systems Manager Automation utilizará los permisos del usuario o rol de IAM que ejecuta el runbook. Para obtener más información sobre cómo crear el rol de asunción para Systems Manager Automation, consulte Tarea 1: crear un rol de servicio para Automation.
  10. En ClusterName, introduzca el nombre del clúster en el que no se pudo iniciar la tarea.
  11. En TaskID, introduzca la identificación de la tarea con error más reciente.
  12. Elija Ejecutar.

En función de la salida de la automatización, use uno de los siguientes pasos manuales de solución de problemas.

Cómo comprobar las rutas desde las subredes a Internet

Si su tarea de Fargate se encuentra en una subred pública, compruebe que la tarea tenga asignada una dirección IP pública. Además, confirme que la tarea tenga una ruta predeterminada (0.0.0.0/0) a una puerta de enlace de Internet. Cuando lance una nueva tarea o cree un nuevo servicio, active la opción Asignar una IP pública de forma automática.

Si utiliza las siguientes configuraciones, no utilice la puerta de enlace de Internet de la subred pública para acceder a Secrets Manager o Systems Manager:

  • Los puntos de enlace de VPC de Secrets Manager o Systems Manager se encuentran en una subred pública.
  • Ha activado AmazonProvidedDNS en la configuración de DHCP de Amazon VPC.

En su lugar, utilice un punto de enlace de Amazon VPC.

Nota: No puede activar Asignar una IP pública de forma automática para las tareas existentes. Para volver a configurar los servicios existentes, utilice la interfaz de la línea de comandos de AWS (AWS CLI). No utilice la Consola de administración de AWS. Si utilizó una pila de AWS CloudFormation para crear el servicio de Amazon ECS, modifique la propiedad NetworkConfiguration de AWS::ECS::Service para actualizar el servicio.

Si su tarea de Fargate se encuentra en una subred privada, compruebe que la tarea tenga una ruta predeterminada (0.0.0.0/0) al origen de conectividad de Internet.

El origen de conectividad de Internet puede ser una puerta de enlace NAT, AWS PrivateLink u otro origen:

  • Si usa una puerta de enlace NAT, coloque la puerta de enlace NAT en una subred pública. Para obtener más información, consulte Arquitectura con una puerta de enlace de Internet y una puerta de enlace NAT.
  • Si usa PrivateLink, asegúrese de que su infraestructura de Fargate pueda usar los grupos de seguridad de sus puntos de conexión de Amazon VPC.
  • Si utiliza un servidor de dominio de nombres personalizado, confirme la configuración de la consulta de DNS. La consulta debe tener acceso saliente en el puerto 53 y utilizar los protocolos UDP y TCP. Además, debe tener acceso HTTPS en el puerto 443.

Cómo comprobar su ACL de red y la configuración del grupo de seguridad

Compruebe que la lista de control de acceso de la red (ACL de la red) y los grupos de seguridad no bloqueen el acceso saliente al puerto 443 desde la subred. Para obtener más información, consulte Controlar el tráfico hacia los recursos de AWS mediante grupos de seguridad.

Nota: Las tareas de Fargate deben tener acceso saliente al puerto 443 para permitir el tráfico saliente y acceder a los puntos de conexión de Amazon ECS.

Comprobar los puntos de conexión de Amazon VPC

Si usa PrivateLink, debe crear los puntos de conexión necesarios. Se requieren los siguientes puntos de conexión para las versiones 1.4.0 o posteriores de la plataforma de Fargate:

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • Punto de conexión de puerta de enlace de S3
  • com.amazonaws.region.logs

Para obtener más información, consulte Considerations for Amazon Elastic Container Registry (Amazon ECR) VPC endpoints.

Nota: Si la definición de la tarea utiliza Secrets Manager, parámetros de Systems Manager o Registros de Amazon CloudWatch, es posible que tenga que definir puntos de enlace. Para obtener más información, consulte la siguiente documentación:

Para PrivateLink, compruebe que el grupo de seguridad de Amazon VPC permita el tráfico del grupo de seguridad de tareas de Fargate o del rango CIDR de la VPC de tareas de Fargate en el puerto TCP 443.

Para confirmar que la infraestructura de Fargate tenga acceso a los servicios, consulte las políticas de punto de enlace de VPC y las políticas de punto de enlace de Amazon Simple Storage Solution (Amazon S3).

Cómo comprobar los roles y permisos de IAM

El rol de ejecución de tareas otorga los permisos necesarios al contenedor de Amazon ECS y a los agentes de Fargate para hacer llamadas a la API para la tarea. Fargate requiere este rol cuando se llevan a cabo las siguientes acciones:

  • Extraer una imagen de contenedor de Amazon ECR.
  • Utilizar el controlador de registros awslogs.
  • Utilizar la autenticación de registros privados.
  • Utilizar los secretos de Secrets Manager o los parámetros del Almacén de parámetros de Systems Manager para hacer referencia a datos confidenciales.

Si su caso de uso incluye alguno de los escenarios anteriores, defina los permisos necesarios en su rol de ejecución de tareas. Para obtener una lista completa de los permisos necesarios, consulte Rol de IAM de ejecución de tareas de Amazon ECS.

Comprobar la información confidencial a la que se hace referencia en la definición de tareas de Amazon ECS

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Compruebe si los nombres del secreto y del parámetro coinciden con los nombres a los que se hace referencia en la definición de tareas de Amazon ECS. A continuación, compruebe si los valores de la definición del contenedor coinciden con los valores de la definición de tareas de Amazon ECS. Para obtener más información, consulte ¿Cómo puedo transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon ECS?

Si el parámetro y la tarea del Almacén de parámetros de Systems Manager se encuentran en la misma región, utilice el ARN completo o el nombre del secreto. Si el parámetro existe en una región diferente, debe especificar el ARN completo.

Para comprobar el nombre del parámetro de Systems Manager y el ARN, siga estos pasos:

  1. Abra la consola de AWS Systems Manager.
  2. En el panel de navegación, seleccione Almacén de parámetros y, a continuación, confirme el nombre del Almacén de parámetros.
  3. Para obtener el ARN del parámetro, utilice AWS CLI para ejecutar el siguiente comando. Sustituya name_of_parameter_store_secret por el nombre del secreto del Almacén de parámetros:
    $ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption
    Nota: Los parámetros que hacen referencia a los secretos de Secrets Manager no pueden usar las funciones de historial o control de versiones del Almacén de parámetros. Para obtener más información, consulte Restricciones.

Información relacionada

Comprobar si hay errores en las tareas detenidas

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses