Configuración de instancias de contenedor de Amazon ECS para imágenes de Docker privadas - Amazon Elastic Container Service

Configuración de instancias de contenedor de Amazon ECS para imágenes de Docker privadas

El agente de contenedor de Amazon ECS puede realizar autenticaciones en registros privados, mediante autenticación básica. Cuando se habilita la autenticación de registros privados, puede utilizar las imágenes de Docker privadas en sus definiciones de tareas. Esta característica solo se admite en tareas que utilizan el tipo de lanzamiento de EC2.

Otro método para habilitar la autenticación de registros privados es usar AWS Secrets Manager para almacenar sus credenciales de registros privados de forma segura y hacer referencia a ellas en su definición de contenedor. Esto permite que las tareas usen imágenes de los repositorios privados. Este método es compatible con las tareas que utilizan los tipos de lanzamiento de EC2 o Fargate. Para obtener más información, consulte Uso de imágenes de contenedor que no sean de AWS en Amazon ECS.

El agente de contenedor de Amazon ECS busca dos variables de entorno cuando se lanza:

  • ECS_ENGINE_AUTH_TYPE, que especifica el tipo de datos de autenticación que se están enviando.

  • ECS_ENGINE_AUTH_DATA, que contiene las credenciales de autenticación reales.

Las variantes Linux de la AMI optimizada para Amazon ECS exploran el archivo /etc/ecs/ecs.config en busca de estas variables cuando se lanza la instancia de contenedor y cada vez que se inicia el servicio (mediante el comando sudo start ecs). Las AMI no optimizadas para Amazon ECS deben almacenar estas variables de entorno en un archivo y pasarlas con la opción --env-file path_to_env_file al comando docker run que inicia el agente de contenedor.

importante

Recomendamos no introducir estas variables de entorno de autenticación en el momento del lanzamiento de la instancia con los datos de usuario de Amazon EC2 ni transferirlas con la opción --env al docker runcomando . Estos métodos no son adecuados para la información confidencial como las credenciales de autenticación. Para obtener información sobre cómo añadir de forma segura credenciales de autenticación a sus instancias de contenedor, consulte Almacenamiento de la configuración de instancia de contenedor de Amazon ECS en Amazon S3.

Formatos de autenticación

Existen dos formatos disponibles para autenticación de registros privados, dockercfg y docker.

Formato de autenticación dockercfg

El formato dockercfg utiliza la información de autenticación almacenada en el archivo de configuración que se crea cuando se ejecuta el comando docker login. Puede crear este archivo ejecutando el comando docker login en el sistema local y especificar el nombre de usuario, la contraseña y la dirección de correo electrónico del registro. También puede iniciar sesión en una instancia de contenedor y ejecutar el comando en ella. Dependiendo de su versión de Docker, este archivo se guarda como ~/.dockercfg o ~/.docker/config.json.

cat ~/.docker/config.json

Salida:

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}
importante

Las versiones más nuevas de Docker crean un archivo de configuración como se muestra más arriba con un objeto auths exterior. El agente de Amazon ECS solo admite los datos de autenticación dockercfg que están en el formato siguiente, sin el objeto auths. Si tiene instalada la utilidad jq, puede extraer estos datos con el siguiente comando: cat ~/.docker/config.json | jq .auths

cat ~/.docker/config.json | jq .auths

Salida:

{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}

En el ejemplo anterior, se deben agregar las siguientes variables de entorno al archivo de variables de entorno (/etc/ecs/ecs.config para la AMI optimizada para Amazon ECS) que el agente de contenedor de Amazon ECS carga en tiempo de ejecución. Si no está utilizando la AMI optimizada para Amazon ECS e inicia el agente manualmente con docker run, especifique el archivo de variables de entorno con la opción --env-file path_to_env_file al iniciar el agente.

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

Puede configurar varios registros privados con la sintaxis siguiente:

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}
Formato de autenticación de Docker

El formato docker utiliza una representación JSON para el servidor de registro en el que el agente se debe autenticar. También incluye los parámetros de autenticación requeridos por dicho registro (por ejemplo, nombre de usuario, contraseña y la dirección de correo electrónico de dicha cuenta). Para una cuenta de Docker Hub, la representación JSON tiene el siguiente aspecto:

{ "https://index.docker.io/v1/": { "username": "my_name", "password": "my_password", "email": "email@example.com" } }

En este ejemplo, se deben agregar las siguientes variables de entorno al archivo de variables de entorno (/etc/ecs/ecs.config para la AMI optimizada para Amazon ECS) que el agente de contenedor de Amazon ECS carga en tiempo de ejecución. Si no está utilizando la AMI optimizada para Amazon ECS e inicia el agente manualmente con docker run, especifique el archivo de variables de entorno con la opción --env-file path_to_env_file al iniciar el agente.

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

Puede configurar varios registros privados con la sintaxis siguiente:

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}

Procedimiento

Utilice el siguiente procedimiento para activar registros privados para las instancias de contenedor.

Para habilitar los registros privados en la AMI optimizada para Amazon ECS
  1. Inicie sesión en su instancia de contenedor mediante SSH.

  2. Abra el archivo /etc/ecs/ecs.config y añada los valores ECS_ENGINE_AUTH_TYPE y ECS_ENGINE_AUTH_DATA para su registro y cuenta:

    sudo vi /etc/ecs/ecs.config

    En este ejemplo se autentica una cuenta de usuario de Docker Hub:

    ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
  3. Compruebe si su agente utiliza la variable de entorno ECS_DATADIR para guardar su estado:

    docker inspect ecs-agent | grep ECS_DATADIR

    Salida:

    "ECS_DATADIR=/data",
    importante

    Si el comando anterior no devuelve la variable de entorno ECS_DATADIR, debe detener las tareas en ejecución en esta instancia de contenedor antes de detener el agente. Los agentes más recientes con la variable de entorno ECS_DATADIR guardan su estado y usted puede detenerlos e iniciarlos mientras que las tareas se ejecuten sin problemas. Para obtener más información, consulte Actualización del agente de contenedor de Amazon ECS.

  4. Detenga el servicio ecs:

    sudo stop ecs

    Salida:

    ecs stop/waiting
  5. Reinicie el servicio ecs.

    • Para la AMI de Amazon Linux 2 optimizada para Amazon ECS:

      sudo systemctl restart ecs
    • Para la AMI de Amazon Linux optimizada para Amazon ECS:

      sudo stop ecs && sudo start ecs
  6. (Opcional) Puede verificar que el agente se está ejecutando y ver información acerca de la nueva instancia de contenedor consultando la operación de la API de introspección del agente. Para obtener más información, consulte Introspección de contenedor de Amazon ECS.

    curl http://localhost:51678/v1/metadata