Cuando trabajamos con Kubernetes, es fundamental proteger la información sensible de nuestras aplicaciones, como contraseñas, tokens, y claves API. Para esto, Kubernetes nos permite usar Secrets. Sin embargo, a menudo los Secrets en su forma básica no están cifrados en reposo, lo que puede representar un riesgo de seguridad. En este artículo, exploraremos cómo usar Helm junto con PGP (Pretty Good Privacy) para cifrar valores sensibles en archivos YAML, manteniéndolos seguros.
¿Por qué cifrar Secrets en Kubernetes?
Los Secrets de Kubernetes se almacenan en formato Base64, lo cual no es una verdadera encriptación. Aunque Base64 hace que los valores sean menos visibles, cualquiera que acceda al archivo puede decodificarlos fácilmente. Con herramientas como Helm Secrets y PGP, podemos encriptar estos datos de una manera más segura, haciendo más difícil su acceso sin las claves adecuadas.
Requisitos Previos
Antes de empezar, necesitas:
- Tener Helm instalado en tu sistema.
- Tener el plugin Helm Secrets instalado.
- Tener acceso a GnuPG (gpg) para crear y gestionar claves PGP.
Instalación de Helm y Helm Secrets
Si aún no tienes Helm, puedes instalarlo ejecutando:
Luego, instala el plugin Helm Secrets:
Paso 1: Creación de una Clave PGP
Para cifrar un Secret con Helm, primero necesitamos una clave PGP. Puedes crear una nueva clave ejecutando el siguiente comando:
Este comando te guiará por una serie de opciones, incluyendo:
- El tipo de clave (recomendado:
RSA and RSA). - Tamaño de la clave (ej. 4096 bits).
- Tiempo de expiración.
- Nombre y correo asociado a la clave.
Al finalizar, tendrás una clave PGP con una clave pública y una privada. La clave pública puede compartirse y usarse para encriptar, mientras que la clave privada es necesaria para desencriptar.
Nota: Puedes listar las claves disponibles con
gpg --list-keys.
Paso 2: Configurar un Archivo .sops.yaml
Para decirle a Helm Secrets qué clave PGP usar, necesitamos configurar un archivo .sops.yaml. Este archivo define qué reglas de encriptación se aplicarán. En el caso de una clave PGP, el archivo se vería así:
Reemplaza tu-id-de-clave-pgp con el ID de la clave que creaste en el paso anterior. Puedes encontrar este ID listando las claves con gpg --list-keys.
Paso 3: Crear un Archivo YAML con Valores Sensibles
Crea un archivo llamado values.yaml que contenga los valores sensibles que quieres cifrar. Por ejemplo:
Este archivo contiene el valor secret-key que queremos proteger.
Paso 4: Cifrar el Archivo YAML con Helm Secrets
Ahora que tenemos la clave PGP y el archivo .sops.yaml configurado, podemos cifrar el archivo values.yaml con el siguiente comando:
Este comando encripta los valores usando la clave PGP especificada y genera un archivo YAML cifrado. El archivo resultante podría verse así:
Los valores ahora están encriptados y solo pueden ser desencriptados por alguien que tenga la clave PGP privada correspondiente.
Paso 5: Desencriptar y Usar el Archivo Cifrado
Cuando necesites usar el archivo cifrado en un despliegue, Helm Secrets se encarga de desencriptarlo temporalmente. Para ejecutar un despliegue con valores encriptados, puedes usar:
Helm desencriptará los valores en values.yaml durante el despliegue, pero los mantendrá cifrados en reposo.
Ventajas de Usar Helm Secrets y PGP
- Seguridad Mejorada: Los valores sensibles están cifrados y solo pueden desencriptarse con la clave privada.
- Integración Sencilla: Helm Secrets facilita la integración con Helm, permitiendo el uso de archivos cifrados en despliegues.
- Flexibilidad en la Configuración: Podemos usar distintos métodos de encriptación (no solo PGP) dependiendo de las necesidades de nuestro entorno.

Comentarios
Publicar un comentario