Saltar a contenido

Encriptar y desencriptar secrets con Sealed Secrets

Manejo de secrets con Sealed Secrets

Introducción

Sealed Secrets es un controller de Kubernetes que permite cifrar los secrets de forma que solo se puedan descifrar en el cluster. Esto permite que los secrets se puedan almacenar en un repositorio de código sin que se puedan ver los valores de los mismos, añadiendo una capa de seguridad por encima.

Este proceso garantiza que los secretos sensibles estén protegidos y se mantengan seguros tanto en repositorios de control de versiones como durante su despliegue dentro del clúster de Kubernetes. Solo el clúster autorizado, que posee la clave privada, puede desencriptar y acceder a los secretos sellados, lo que minimiza los riesgos de exposición accidental o maliciosa de información confidencial.

Requisitos

  • Tener sealed-secrets instalado en el cluster de kubernetes
  • Tener instalado kubeseal en local

Creación de un secret

Para crear un secret, simplemente hay que crear un fichero con el siguiente contenido:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: default
type: Opaque
data:
  username: dXNlcm5hbWU=
  password: cGFzc3dvcmQ=

Y ejecutar el siguiente comando:

kubeseal --controller-namespace core-apps --controller-name sealed-secrets --format=yaml < mysecret.yaml > mysealedsecret.yaml

Output:

apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  creationTimestamp: null
  name: mysecret
  namespace: default
spec:
  encryptedData:
    password: AgByS/wRIdaAJbmZM5uyu133mga6uD2MoOOBcrbK6PQlLRaCPQYNoNvLpX+GyLu/F5OoubPxLKWEUlxQ9SEfgGiTWn8KlkNvcetlhFcvnpyb+Lw/iTPbUt2V6j/s8FSVdnbEOeX/ZFFZGbdUPQ0U2Cp33BICeOsXeOCdoACkbt0asE8Rko3QHCrGJruQC19rvEKW+uYkHnBm7vVhdE7vs98i1DcVYhQLoHRxfisAoRp37awn/VGvbPjDp4/reF7o6V2mu/qJGnU3Qll/6nW7tAFmT8EH5YCI1LNq3PgsnB1ZN8NYGKW8jBuMajpnDT+9siq94QQhbuHjVdx8eRyxWDDbjocrfqXix9Sq5QIQ5mc3cvonrtJL09UgNGE9NhoYR79NVpCO/Ph7OKJJuNdgJ9B8lKFE3fWnx6lxxuFKZNiYShQow4+BvvEvqxdAONJOAecPEN+ijHVj/1Tptq89nBAbaoG4C+erx4O6RNgdzPJAFJdvlpCkki729wGfo9xFguwMqYLRO/1rsQXA+/CPVANEs4cBLjAu0VWSJABVxaSgU+KAi7QON3Jbg7owKLvgFYqCFuMd1plReqYQewa1/saZlAl4BFMtGU64GnnaNzyRMKaNsFu+0v2OSpK/+Z95fPg11knPRIdPOv/4Xlh0Wr4+FsB2E+W0x37sRkRE27hU5GE62BuJhod4dVZ/UDjt4QcO6ShkYdiD6g==
    username: AgAKysmcmLBYR1wM/R+wFUpOuztFHMWYIciLszi1SWsc3jtvbJe1Am3UV9O1KgvtC9CDBPh+0mAD0RTjfmuGU9zBk+mhWLG4e775WTjGzSNHNoEeEOQVtGWH6FaI0FHbp6j4EsvflMSeVdrNw0h5u9pVge7rCHz4xTJldm/7i4/cGtCrUoT+8092V+5ieAZyYPSZU7FngAnH3an7NbtvScUtzN38I9uwjSe/AJDrNrJoG/zQOxwmXq59UU+jJ0U3OtI8Kyn3006YxaXvul4BX4d9UDpPOFeYpRINp503OCQCnb8B3ViY7ogJQeJgcYhCF0VyKfCiN9E5tnbMNYXf57sbiDM/FIkBJSNvckSO/Zt/4vp0RCvjB8JpEmnqrbAz4LfGiJNm0CebDke2WGxt5CEFlmY6tZYTgerJy5FhdNAXn8rWNSjyumMI1H/0yEbLif5IORo+bdmIiKoXfXq6v4aajVlcD7wdD9JY8mkBfAFolGkvmJGH32YAMXYrIHDEQhgiynTYTUzz5fQXdfSJFFjmaIaLdvrUGQxoYT/e9EbFehPRFbMOAXIsi96pi0JvBuQ1H0wGF0YVTdiktFzhP1a/69gUiuHw8IKbeeZDIFY9ZH1GZ3+vDUyKBVKHBZyj7RbOK2hW1w6FlNn/h0mz/5pcdF5Lw0y4sSEd2LU+VdmpOst5whJALNdNJ2hx3zraIhjaP9TgPD+jng==
  template:
    metadata:
      creationTimestamp: null
      name: mysecret
      namespace: default
    type: Opaque

Una vez creado el secret, se puede aplicar en el cluster de kubernetes:

kubectl apply -f mysealedsecret.yaml

El controller de sealed-secrets desencriptará el secret y lo creará en el cluster de kubernetes.

Descifrar un secret

Para descifrar un secret, simplemente hay que ejecutar el siguiente comando:

kubeseal --controller-namespace core-apps --controller-name sealed-secrets --format=yaml < mysealedsecret.yaml > mysecret.yaml