Como configurar SOPS en Helmfile

Como configurar SOPS en Helmfile

February 28, 2021
Helm, Kubernetes, How To
Helm, Helmcharts, Sops, Kubernetes, Helmfile, Cluster, Helm-Secrets, Secrets

Como veíamos por encima en nuestro anterior post sobre helmfile podemos tener un fichero en nuestro repo que este encriptado mediante sops y tener ahi las variables para usar en nuestra chart mediante Helmfile.

¿Qué es Sops? #

Si nos vamos a si proyecto veremos que Mozilla define SOPS como un editor de archivos cifrados que admite los formatos YAML, JSON, ENV, INI y BINARY. Además de soportar el cifrado de estos mediante los cifrados AWS KMS, GCP KMS, Azure Key Vault y PGP.

¿Cómo implementarlo? #

Como muchos sabréis, en esta vida todo se basa en plugins…y como Helm nos deja instalar diferentes plugins solo hemos de encontrar el plugin perfecto y en este caso hay uno llamado helm-sercrets. Si buscamos este plugin en Helm Community vemos que ellos recomiendan jkroepke/helm-secrets que este es un fork de zendesk/helm-secrets pero este ultimo ha sido abandonado…

He de decir que cuando empece a mirar este plugin fue a mediados del 2020 que para aquel entonces no estaba obsoleto. Por suerte no ha cambiado mucho su utilización y sigue siendo rápida y sencilla.

Lo primero de todo hemos de instalar las dependecias del plugin y esta es instalar SOPS. Si mal no recuerdo si tienes Ubuntu o Debian se instala solo cuando instalar el plugin pero aqui un servidor usa ArchLinux y ha de instalarlo manualmente. Yo os recomiendo que lo instaleis manualmente que no cuesta nada solo habeis de ir a los releases del repo e instalar.

Una vez que lo habéis instalado ejecutáis el siguiente comando para instalar el plugin siendo ${HELM_SECRERS_VERSION} la última version stable del plugin.

helm plugin install https://github.com/jkroepke/helm-secrets --version ${HELM_SECRERS_VERSION}

Una vez que tenéis esto solo habéis de ir a vuestra carpeta de helmfile y crear el siguiente fichero llamado .sops.yaml, por puesto teneis que elegir una de las tres opciones he de decir que está permitido tener multiples KSM y PGP keys.

creation_rules:
  # Encrypt with AWS KMS
  - kms: 'arn:aws:kms:eu-west-1:222222222222:key/111b1c11-1c11-1fd1-aa11-a1c1a1sa1dsl1'

  # Encrypt using GCP KMS
  - gcp_kms: projects/mygcproject/locations/global/keyRings/mykeyring/cryptoKeys/thekey

  # As failover encrypt with PGP
  - pgp: '000111122223333444AAAADDDDFFFFGGGG000999'

  # For more help look at https://github.com/mozilla/sops

Ahora ya solo os queda agregar el campo secrets: en vuestro fichero del release y listo. Os quedaría una cosa asi:

- <<: *defaultTmpl
  name:  "grafana"
  chart: "grafana/grafana"
  namespace: "monitoring"
  version: "3.2.5"
  installed: {{ .Values | getOrNil "grafana.installed" | default false }}
  needs: 
    - observability/fluentd
    - observability/prometheus
    - operators/jaeger-operator
  secrets:
    - releases/grafana/secrets.yaml

¿Como usar SOPS como editor de texto? #

Hay muchas formas diferentes de editar los ficheros pero yo te recomendaría que te crearas una variable de entorno y luego vayas a la carpeta donde tienes el dichero y lo abras con el siguiente comando sops secrets.yaml y sops se encarga de desencriptarlo y encriptarlo por ti.

Yo por ejemplo uso SOPS con KMS ARN por lo que tengo una variable de entorno llamada SOPS_KMS_ARN ejemplo:

export SOPS_KMS_ARN=arn:aws:kms:eu-west-1:222222222222:key/111b1c11-1c11-1fd1-aa11-a1c1a1sa1dsl1

Esto ha sido todo! Nos leemos!

comments powered by Disqus