GNU/Linux >> Tutoriales Linux >  >> Linux

Explorando el nuevo comando secreto Podman

Todos tratamos con información confidencial cuando trabajamos con sistemas informáticos. Los administradores de sistemas mueven las claves SSH y los desarrolladores web deben preocuparse por los tokens de API. El problema con la información confidencial es que es sensible , lo que significa que podría causar un desastre de seguridad si de alguna manera cayera en las manos equivocadas. Los contenedores no son una excepción a este problema:los usuarios deben utilizar información confidencial dentro de los contenedores y, al mismo tiempo, mantener segura la información confidencial.

[ También puede disfrutar leyendo: Contenedores sin raíz con Podman ]

¿Por qué secretos?

¿Qué sucede si alguien necesita ejecutar una base de datos en un contenedor y las credenciales de la base de datos deben inyectarse en un contenedor? Esto se puede hacer de múltiples maneras. Simplemente podría crear un archivo al ejecutar el contenedor y almacenar las credenciales allí. Sin embargo, esto es peligroso. Si el contenedor se exporta a la imagen, las credenciales también se exportarán. Cualquiera que tenga control sobre la imagen podría acceder a la base de datos. Otra opción es pasar las credenciales mediante la CLI, pero eso requiere ingresar los datos cada vez, lo que puede ser tedioso.

¿Qué pasaría si existiera un método para gestionar de forma centralizada la información confidencial?

El nuevo comando, podman secret , es un conjunto de subcomandos y opciones que administra información confidencial de una manera segura y fácil de usar. Permite a los usuarios usar fácilmente contenido confidencial dentro de un contenedor, pero evita que termine en algún lugar fuera del contenedor, como en un registro de imágenes. Hemos implementado un conjunto completo de subcomandos para podman secret :create , rm , ls y inspect , para crear y manipular secretos, así como un --secret bandera para inyectar un secreto en un contenedor.

¿Cómo se usa?

Cuando podman secret create se ejecuta, Podman espera que se almacene un archivo con los datos.

$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac

La podman secret inspect El comando no mostrará los datos almacenados, sino solo los metadatos del secreto.

$ podman secret inspect secretname
[
    {
        "ID": "e17465c9772b38f336fc4cbac",
        "CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "Spec": {
            "Name": "secretname",
            "Driver": {
                "Name": "file",
                "Options": null
            }
        }
    }
]

Por supuesto, también puede enumerar sus secretos y eliminarlos.

$ podman secret ls
ID                         NAME        DRIVER      CREATED       UPDATED       
e17465c9772b38f336fc4cbac  secretname  file        1 second ago  1 second ago  

$ podman secret rm secretname
e17465c9772b38f336fc4cbac

Para usar el secreto y acceder a los datos secretos, se puede crear o ejecutar un contenedor con un --secret bandera. Dentro del contenedor, se puede acceder a los datos secretos dentro de un archivo en /run/secrets/secretname . Puedes usar el --secret marque varias veces para agregar numerosos secretos al contenedor.

$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata

Los secretos no se confirmarán en una imagen ni se exportarán con un podman commit o una podman export dominio. Esto evita que la información confidencial se envíe accidentalmente a un registro público o se entregue a la persona equivocada.

$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists  
Copying blob 3dd965b4468a done  
Copying config 263fcafb79 done  
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d

$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory

¿Cómo funciona?

Cuando un usuario usa el --secret marca, Podman recupera los datos secretos y los almacena en un tmpfs . Luego monta el archivo en el contenedor en /run/secrets/secretname . A partir de ahí, el secreto se puede usar dentro del contenedor como de costumbre, ya sean claves de base de datos o certificados TLS.

Los secretos solo existen en la máquina del creador del secreto o dentro de un contenedor cuando está listo para ejecutarse. Los secretos están diseñados específicamente para no existe en las imágenes:un podman commit no confirmará el secreto en la imagen, ni podman export . Si alguien fuera a crear una imagen a partir de un contenedor con un secreto, ejecute un contenedor a partir de dicha imagen, el archivo en /run/secret/mysecret no existiría Esto evita que los datos secretos se envíen accidentalmente a un registro, lo que evita que la información confidencial y comprometedora exista en cualquier lugar donde no debería estar.

Trabajo futuro

Por ahora, esta solución hace el trabajo de administrar secretos. Sin embargo, el único controlador implementado en este momento para almacenar la información confidencial es un controlador de archivos, lo que significa que los datos se almacenarán en el disco en archivos sin cifrar controlados por el host del contenedor. Estamos planeando mejoras adicionales, como implementar el cifrado o usar otros controladores. También nos gustaría admitir variables de entorno secretas, que son variables de entorno que se configuran dentro del contenedor pero no se registran en la imagen. Se aceptará con agradecimiento la participación de la comunidad en estas tareas.

[ ¿Empezando con los contenedores? Consulta este curso gratuito. Implementación de aplicaciones en contenedores:una descripción técnica general. ]

Genial. Lo quiero.

Los secretos de Podman están disponibles en Podman 3.1.0. Si desea probarlo, puede obtener Podman siguiendo estas instrucciones de instalación. Si ya tiene Podman, puede obtener la función de secretos actualizando a Podman 3.1.0. No dude en comunicarse con el equipo de Podman si tiene alguna pregunta o comentario. Los desarrolladores de Podman suelen pasar el rato en el canal de freenode #podman. Puede enviarnos un correo electrónico utilizando la lista de correo de podman. También tenemos reuniones comunitarias mensuales. Siéntete libre de pasar y saludar allí también.


Linux
  1. Introducción al comando de alternativas en Linux

  2. Una introducción al comando diff

  3. Una vista práctica del comando xargs

  4. ¿Cómo usar el comando basename?

  5. ¿El propósito del comando 'instalar'?

Explicación del comando tar de Linux

Explorando el informe de auditoría de Lynis

Domina la línea de comandos de Linux

El comando elegir en Linux

El comando del temporizador en Linux

Ejemplos esenciales del comando ps en Linux