Como configurar SOPS en Helmfile

Como configurar SOPS en Helmfile

Como veíamos por encima en el post anterior sobre helmfile, puedes tener un fichero en tu repo encriptado con SOPS y tener ahi las variables para usar en tu chart mediante Helmfile.

¿Qué es SOPS? #

Si vas al proyecto verás que Mozilla define SOPS como un editor de ficheros cifrados que soporta los formatos YAML, JSON, ENV, INI y BINARY, y que cifra con AWS KMS, GCP KMS, Azure Key Vault y PGP.

¿Cómo implementarlo? #

Como todos sabemos, en esta vida todo se basa en plugins… y como Helm te deja instalar diferentes plugins solo tienes que encontrar el correcto. En este caso hay uno llamado helm-secrets. Si lo buscas en Helm Community ves que recomiendan jkroepke/helm-secrets, que es un fork de zendesk/helm-secrets porque este último fue abandonado.

He de decir que cuando empecé a mirar este plugin era a mediados del 2020 y para entonces no estaba obsoleto. Por suerte tampoco ha cambiado mucho y sigue siendo rápido y sencillo de usar.

Lo primero es instalar las dependencias del plugin, que básicamente es SOPS. Si mal no recuerdo en Ubuntu o Debian se instala solo cuando instalas el plugin, pero aquí un servidor usa ArchLinux y lo ha de instalar manualmente. Te recomiendo que lo instales manualmente, que no cuesta nada, solo tienes que ir a los releases del repo e instalarlo.

Una vez instalado, ejecutas el siguiente comando para instalar el plugin siendo ${HELM_SECRERS_VERSION} la última versión stable:

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

Con eso listo, ve a tu carpeta de helmfile y crea el fichero .sops.yaml. Tienes que elegir una de las tres opciones, aunque está permitido tener múltiples KMS 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 solo tienes que añadir el campo secrets: en tu fichero del release y listo:

- <<: *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

¿Cómo usar SOPS para editar los ficheros? #

Hay varias formas de editar los ficheros pero yo te recomendaría que te crearas una variable de entorno, vayas a la carpeta donde tienes el fichero y lo abras con sops secrets.yaml. SOPS se encarga de desencriptarlo y encriptarlo por ti.

Yo por ejemplo uso SOPS con AWS KMS, asi que tengo la variable de entorno SOPS_KMS_ARN:

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

Y eso es todo.

Espero que te haya sido útil. Talogo!

comments powered by Disqus