

# Configuración de instancias de contenedor de Amazon ECS para imágenes de Docker privadas
<a name="private-auth-container-instances"></a>

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 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 EC2 o Fargate. Para obtener más información, consulte [Uso de imágenes de contenedor que no sean de AWS en Amazon ECS](private-auth.md).

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 run**comando . 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](ecs-config-s3.md).

## Formatos de autenticación
<a name="docker-auth-formats"></a>

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 \$1/.docker/config.json \$1 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
<a name="enabling-private-registry"></a>

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.

1. 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"}}
   ```

1. 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](ecs-agent-update.md).

1. Detenga el servicio `ecs`:

   ```
   sudo stop ecs
   ```

   Salida:

   ```
   ecs stop/waiting
   ```

1. 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
     ```

1. (Opcional) Puede verificar que el agente esté en marcha 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](ecs-agent-introspection.md).

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