¿Cómo soluciono el error «no se pueden extraer los secretos ni la autenticación del registro» en Amazon ECS?

10 minutos de lectura
0

Recibí uno de los siguientes errores al lanzar una tarea de Amazon Elastic Container Service (Amazon ECS): «ResourceInitializationError: no se pueden extraer los secretos ni la autenticación del registro: el comando de extracción falló: señal: eliminada» o «ResourceInitializationError: no se pueden extraer los secretos ni la autenticación del registro: no se pudo recuperar el recurso de ejecución: no se pudo recuperar el secreto de asm: se ha vuelto a intentar llamar al servicio».

Descripción breve

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). Puede ver este tráfico a través de los registros de flujo de Amazon VPC. Sin embargo, la tarea utiliza su configuración de red en lugar de utilizar las interfaces de red elásticas de Fargate. Esto se debe a que las interfaces de red elásticas se colocan en 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

Si cifra los datos 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.

Utilice el runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar los problemas de las tareas de Amazon ECS que no se inician. Esta automatización revisa las siguientes configuraciones:

  • Conectividad de red al registro de contenedores configurado
  • Faltan los permisos de IAM que requiere el rol de ejecución de tareas
  • Conectividad del punto de conexión de la nube virtual privada (VPC)
  • Configuración de reglas del grupo de seguridad
  • Referencias de secretos de AWS Secrets Manager
  • Configuración de registro

Si la salida del runbook no ofrece recomendaciones, utilice los métodos de resolución de problemas manuales que se explican en siguiente sección. 

Resolución

Importante:

  • Utilice el runbook en la misma región de AWS en la que se encuentran los recursos del clúster de ECS.
  • Cuando utilice el runbook, debe utilizar el ID de tarea con error más reciente. 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 son visibles durante 1 hora después de entrar en el estado Detenido. El uso del ID de tarea con error más reciente evita que la limpieza del estado de la tarea interrumpa el análisis durante la automatización.

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, espere a que el estado del documento pase a Correcto. Además, esté atento a las excepciones en 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 permite a la Automatización de Systems Manager llevar a cabo acciones.
    Nota: Asegúrese de que AutomationAssumeRole o el rol o usuario de IAM tengan los permisos de IAM necesarios para ejecutar el runbook AWSSupport-TroubleshootECSTaskFailedToStart. Si no especifica un rol de IAM, la Automatización de Systems Manager utilizará los permisos del rol o usuario de IAM que ejecuta el runbook. Para obtener más información sobre la creación del rol de asumir para la Automatización de Systems Manager, consulte Tarea 1: crear un rol de servicio para Automatización.
  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

Según el resultado de la automatización, utilice uno de los siguientes pasos manuales de resolución de problemas.

Comprobar las rutas desde las subredes a Internet

Si tiene una tarea de Fargate 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 Asignación pública 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. En su lugar, utilice un punto de conexión de Amazon VPC:

  • Los puntos de conexión 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.

Nota: No puede activar Asignación pública automática para las tareas existentes. Para los servicios existentes, solo puede utilizar la Interfaz de la línea de comandos de AWS (AWS CLI) para reconfigurar los servicios. No puede utilizar 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 AWS::ECS::Service para actualizar el servicio.

Si tiene una tarea de Fargate 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 mediante los protocolos UDP y TCP. Además, debe tener acceso HTTPS en el puerto 443. 

Compruebe su ACL de red y la configuración de 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 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 Consideraciones para los puntos de conexión de VPC de Amazon ECR.

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 conexión. Para obtener más información, consulte la siguiente documentación:

Si usa PrivateLink, compruebe que el grupo de seguridad de Amazon VPC permita el tráfico correcto. El grupo debe permitir el tráfico del grupo de seguridad de tareas de Fargate o del rango de 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 conexión de VPC y las políticas de punto de conexión de Amazon Simple Storage Solution (Amazon S3).

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 Elastic Container Registry (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

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 de la definición de tareas 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:

Nota: Si recibe errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

  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 un año