Saltar al contenido

¿Cómo se administran los valores secretos con docker-compose v3.1?

Hacemos una verificación profunda cada enunciado en nuestra página web con la meta de enseñarte siempre información certera y actualizada.

Puedes leer el apartado correspondiente de la documentación oficial.

Para usar secretos, debe agregar dos cosas a su docker-compose.yml Archivo. Primero, un nivel superior secrets: bloque que define todos los secretos. Luego otro secrets: bloque bajo cada servicio que especifica cual secretos que debe recibir el servicio.

Como ejemplo, cree los dos tipos de secretos que Docker comprenderá: externo secretos y Archivo misterios.

1. Cree un secreto “externo” utilizando docker secret create

Primero: para usar secretos con Docker, el nodo en el que se encuentra debe ser parte de un enjambre.

$ docker swarm init

A continuación, cree un secreto ‘externo’:

$ echo "This is an external secret" | docker secret create my_external_secret -

(Asegúrese de incluir el guión final, -. Es fácil pasarlo por alto).

2. Escribe otro secreto en un archivo.

$ echo "This is a file secret." > my_file_secret.txt

3. Cree un docker-compose.yml archivo que usa ambos secretos

Ahora que se crean ambos tipos de secretos, aquí está el docker-compose.yml archivo que leerá ambos y los escribirá en el web Servicio:

version: '3.1'

services:
  web:
    image: nginxdemos/hello
    secrets:                    # secrets block only for 'web' service
     - my_external_secret
     - my_file_secret

secrets:                        # top level secrets block
  my_external_secret:
    external: true
  my_file_secret:
    file: my_file_secret.txt

Docker puede leer secretos de su propia base de datos (por ejemplo, secretos creados con docker secret create) o de un archivo. Lo anterior muestra ambos ejemplos.

4. Implemente su pila de prueba

Implemente la pila usando:

$ docker stack deploy --compose-file=docker-compose.yml secret_test

Esto creará una instancia del web servicio, llamado secret_test_web.

5. Verifique que el contenedor creado por el servicio tenga ambos secretos

Usar docker exec -ti [container] /bin/sh para verificar que los secretos existen.

(Nota: en el siguiente docker exec comando, el m2jgac... La porción será diferente en su máquina. Correr docker ps para encontrar el nombre de su contenedor).

$ docker exec -ti secret_test_web.1.m2jgacogzsiaqhgq1z0yrwekd /bin/sh

# Now inside secret_test_web; secrets are contained in /run/secrets/
[email protected]_test_web:~$ cd /run/secrets/

[email protected]_test_web:/run/secrets$ ls
my_external_secret  my_file_secret

[email protected]_test_web:/run/secrets$ cat my_external_secret
This is an external secret

[email protected]_test_web:/run/secrets$ cat my_file_secret
This is a file secret.

Si todo está bien, los dos secretos que creamos en los pasos 1 y 2 deberían estar dentro del web contenedor que se creó cuando implementamos nuestra pila.

Dado que tienes un servicio myapp y un archivo de secretos secrets.yml:

Crea un archivo de redacción:

version: '3.1'

services:
  myapp:
    build: .
    secrets:
      secrets_yaml

Aprovisionar un secreto con este comando:

docker secret create secrets_yaml secrets.yml

Implemente su servicio usando este comando:

docker deploy --compose-file docker-compose.yml myappstack

Ahora su aplicación puede acceder al archivo secreto en /run/secrets/secrets_yaml. Puede codificar esta ruta en su aplicación o crear un enlace simbólico.


La pregunta diferente

Esta respuesta probablemente sea a la pregunta “¿cómo proporciona sus secretos a su clúster de enjambre de Docker?”.

La pregunta original “cómo se administran los valores secretos con docker compose” implica que el archivo docker-compose contiene valores secretos. No es así.

Hay una pregunta diferente: “¿Dónde almacena la fuente canónica del secrets.yml file “. Esto depende de usted. Puede almacenarlo en su cabeza, imprimir en una hoja de papel, usar un administrador de contraseñas, usar una aplicación / base de datos dedicada a secretos. Diablos, incluso puede usar un repositorio de git si está protegido de manera segura por sí mismo. Por supuesto, nunca lo guarde dentro del sistema que está protegiendo con él 🙂

Recomendaría bóveda. Para almacenar un secreto:

# create a temporary secret file
cat secrets.yml | vault write secret/myappsecrets -

Para recuperar un secreto y ponerlo en su enjambre de Docker:

vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -

Por supuesto, puede usar el clúster de la ventana acoplable en sí mismo como una única fuente de verdad para sus secretos, pero si su clúster de la ventana acoplable se rompe, habrá perdido sus secretos. Así que asegúrese de tener una copia de seguridad en otro lugar.


La pregunta que nadie hizo

La tercera pregunta (que nadie hizo) es cómo proporcionar secretos a las máquinas de los desarrolladores. Puede ser necesario cuando hay un servicio externo que es imposible simular localmente o una base de datos grande que es imposible de copiar.

Nuevamente, Docker no tiene nada que ver con eso (todavía). No tiene listas de control de acceso que especifiquen qué desarrolladores tienen acceso a qué secretos. Tampoco tiene ningún mecanismo de autenticación.

La solución ideal parece ser esta:

  • Un desarrollador abre alguna aplicación web.
  • Se autentica mediante algún mecanismo de inicio de sesión único.
  • Copia una larga lista de docker secret create comandos y los ejecuta en la terminal.

Todavía tenemos que ver si aparece una aplicación de este tipo.

También puede especificar secrets almacenado localmente en un archivo usando file: key en secrets objeto. Entonces no tienes que hacerlo docker secret create ellos usted mismo, Redactar / docker stack deploy lo hará por ti.

version: '3.1'

secrets:
  password:
    file: ./password

services:
  password_consumer:
    image: alpine
    secrets:
      - password

Referencia: Redactar archivo versión 3 referencia: Secretos

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *