Almacenando Secrets en Kubernetes. Explicación detallada y buenas prácticas.
Crear y gestionar Secrets en Kubernetes es un aspecto fundamental cuando trabajamos con información sensible, como credenciales o claves de API. A continuación, explico cómo se puede crear un Secret y algunas prácticas importantes al respecto.
Ejemplo práctico
En este ejercicio práctico, vamos a trabajar con un objeto Secret en Kubernetes:
Creación del Secret a partir de un manifiesto YAML: Lo primero que haremos será crear un Secret utilizando un manifiesto YAML. Este procedimiento es similar a lo que hemos hecho anteriormente para otros objetos como ConfigMaps. En este paso, también verificaremos el estado del Secret y cómo recuperarlo de Kubernetes. Esta verificación es útil si queremos revisar el estado actual del objeto para recrearlo o modificarlo más adelante. Durante este proceso, también decodificamos el payload que está codificado en base64, para ver los valores clave que almacena.
Comando de creación de un Secret:
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=pass123
Recuperación del Secret:
kubectl get secret mysecret -o yaml
Decodificación del Secret (su contenido está en base64):
echo "YWRtaW4=" | base64 --decode
Recuperar el manifiesto YAML de un Secret existente: A continuación, obtendremos el YAML del Secret almacenado en el clúster. Este paso es útil para ver de forma sencilla el estado actual del Secret y cómo los datos se almacenan en el clúster. Una advertencia clave en este paso es que, si un hacker obtiene acceso al kube-apiserver, podría extraer los Secrets del clúster, ya que están almacenados en etcd sin encriptación.
Comando para ver el YAML del Secret:
kubectl get secret mysecret -o yaml
El Secret estará codificado en base64, por lo que, aunque esté "ofuscado", puede ser fácilmente decodificado si alguien tiene acceso no autorizado.
Creación de un Secret desde cero: En este paso, vamos a crear un nuevo Secret escribiendo los pares clave-valor en base64, creando el manifiesto YAML y aplicándolo en el clúster a través de la línea de comandos. Este proceso es muy útil cuando trabajas con Secretos sensibles y prefieres crear el YAML manualmente para tener un control total sobre su contenido antes de implementarlo.
Ejemplo de YAML para un Secret:
apiVersion: v1 kind: Secret metadata: name: my-manual-secret data: username: YWRtaW4= # admin (codificado en base64) password: cGFzczEyMw== # pass123 (codificado en base64)
Aplicar el Secret en el clúster:
kubectl apply -f my-manual-secret.yaml
Ahora puedes verificar que el Secret ha sido correctamente creado y almacenado en el clúster.
Verificación de los Secrets: Finalmente, para verificar que el Secret ha sido creado y almacenado correctamente, puedes ejecutar los siguientes comandos:
Para verificar su existencia:
kubectl get secrets
Para obtener más detalles:
kubectl describe secret my-manual-secret
Seguridad y buenas prácticas con los Secrets
Los Secrets son una parte vital de cualquier entorno de producción de Kubernetes, y aunque su codificación en base64 agrega una capa de ofuscación, no se consideran seguros por sí solos. Aquí algunas recomendaciones para mejorar la seguridad de los Secrets:
- Cifrado en reposo: Asegúrate de habilitar la encriptación de los Secrets en el almacenamiento de etcd para protegerlos de accesos no autorizados.
- RBAC: Utiliza Control de Acceso Basado en Roles (RBAC) para limitar el acceso a los Secrets solo a aquellos usuarios o servicios que realmente lo necesiten.
- Sistemas de gestión de Secrets externos: Considera la posibilidad de integrar Kubernetes con un gestor de Secrets externo, como HashiCorp Vault, que proporciona un nivel adicional de seguridad y control sobre los datos sensibles.
Comentarios
Publicar un comentario