Explora el nuevo comando secreto Podman

Todos tratamos con información confidencial cuando trabajamos con sistemas informáticos. Los administradores del sistema mueven las claves SSH y los desarrolladores web deben preocuparse por los tokens de API. El problema con la información confidencial es que lo es, 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 trabajar con información confidencial dentro de los contenedores y, al mismo tiempo, proteger la información confidencial.

Índice

    ¿Por qué secreto?

    ¿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 varias maneras. Simplemente puede crear un archivo al ejecutar el contenedor y almacenar las credenciales allí. Sin embargo, esto es peligroso. Si se exporta el contenedor en la imagen, también se exportarán las credenciales. Cualquiera que controle la imagen podría acceder a la base de datos. Otra opción es pasar las credenciales mediante la CLI, pero esto requiere ingresar los datos cada vez, lo que puede ser tedioso.

    ¿Y si existiera un método de gestión centralizada de la información sensible?

    El nuevo orden, podman secret, es un conjunto de subcomandos y opciones que gestionan información sensible de forma sencilla y segura. 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 una --secret marca para inyectar un secreto en un contenedor.

    ¿Cómo se usa?

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

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

    el podman secret inspect El comando no mostrará los datos almacenados, sino solo los metadatos sobre el 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 en un archivo en la dirección /run/secrets/secretname. Puedes usar el --secret marque varias veces para agregar muchos secretos al contenedor.

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

    No se asignarán secretos a una imagen ni se exportarán con un podman commit o un podman export pedido. Esto evita que la información confidencial se transmita accidentalmente a un registro público o se transmita 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

    ¿Como funciona?

    Cuando un usuario utiliza el --secret bandera, 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 existir en imágenes: A podman commit no pondrá el secreto en la imagen, ni un podman export. Si alguien fuera a crear una imagen a partir de un contenedor con un secreto, ejecutar un contenedor a partir de esa imagen, el archivo a /run/secret/mysecret no existiría Esto evita que los datos secretos se transmitan 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 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 otras mejoras, 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 establecen dentro del contenedor pero no se guardan en la imagen. Se agradecerá la participación de la comunidad en estas tareas.

    Frio. Lo quiero.

    Los secretos de Podman están disponibles en Podman 3.1.0. Si quieres probarlo, puedes obtener Podman siguiendo estos Instrucciones de instalación. Si ya posee Podman, puede obtener la función de secretos actualizando a Podman 3.1.0. No dude en ponerse en contacto con el equipo de Podman si tiene alguna pregunta o comentario. Los desarrolladores de Podman a menudo pasan el rato en el nudo libre Canal #podman. Puede enviarnos un correo electrónico utilizando el lista de correo podman. También tenemos mensual reuniones comunitarias. No dudes en venir a saludarlo también.

    Artículos de interés

    Subir