From f9bf4a7f8bd25ce7f05321f2f595047ebdde90a9 Mon Sep 17 00:00:00 2001 From: Melvin GABALI Date: Mon, 12 Jan 2026 02:18:03 +0100 Subject: [PATCH] Secret store --- .../db-encryption-externalsecret.yaml | 7 +-- .../dev/templates/vault-secretstore.yaml | 24 ++++++++++ helm/homarr/dev/values.yaml | 47 ++++++++++++------- 3 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 helm/homarr/dev/templates/vault-secretstore.yaml diff --git a/helm/homarr/dev/templates/db-encryption-externalsecret.yaml b/helm/homarr/dev/templates/db-encryption-externalsecret.yaml index 9b0856d..bc9548c 100644 --- a/helm/homarr/dev/templates/db-encryption-externalsecret.yaml +++ b/helm/homarr/dev/templates/db-encryption-externalsecret.yaml @@ -1,5 +1,6 @@ {{- if .Values.vault.enabled }} -apiVersion: external-secrets.io/v1beta1 +--- +apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: db-encryption @@ -9,10 +10,10 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: - refreshInterval: {{ .Values.vault.refreshInterval | default "1h" }} + refreshInterval: {{ .Values.vault.refreshInterval | default "5m" }} secretStoreRef: name: {{ .Values.vault.secretStoreName }} - kind: {{ .Values.vault.secretStoreKind | default "SecretStore" }} + kind: SecretStore target: name: db-encryption creationPolicy: Owner diff --git a/helm/homarr/dev/templates/vault-secretstore.yaml b/helm/homarr/dev/templates/vault-secretstore.yaml new file mode 100644 index 0000000..a3f10e6 --- /dev/null +++ b/helm/homarr/dev/templates/vault-secretstore.yaml @@ -0,0 +1,24 @@ +{{- if .Values.vault.enabled }} +################ +# SECRET STORE # +################ +--- +apiVersion: external-secrets.io/v1 +kind: SecretStore +metadata: + name: vault-backend + namespace: {{ .Release.Namespace }} +spec: + provider: + vault: + server: {{ .Values.vault.server }} + path: {{ .Values.vault.path | default "secret" }} + version: {{ .Values.vault.version | default "v2" }} + auth: + kubernetes: + mountPath: {{ .Values.vault.auth.kubernetes.mountPath }} + role: {{ .Values.vault.auth.kubernetes.role }} + serviceAccountRef: + name: {{ .Values.vault.auth.kubernetes.serviceAccountRef.name }} +{{- end }} + diff --git a/helm/homarr/dev/values.yaml b/helm/homarr/dev/values.yaml index 69dcfdb..aba9321 100644 --- a/helm/homarr/dev/values.yaml +++ b/helm/homarr/dev/values.yaml @@ -35,28 +35,41 @@ homarr: # # PRÉREQUIS: # 1. External Secrets Operator doit être installé dans le cluster -# 2. Un SecretStore ou ClusterSecretStore doit être configuré pour Vault -# 3. Le secret doit être stocké dans Vault au chemin spécifié +# 2. Le secret doit être stocké dans Vault au chemin spécifié +# 3. Un rôle Vault doit être configuré pour l'authentification Kubernetes # -# Pour stocker le secret dans Vault: -# vault kv put homarr/dev db-encryption-key=$(openssl rand -hex 32) +# Pour stocker le secret dans Vault (KV v2): +# vault kv put secret/homarr/dev db-encryption-key=$(openssl rand -hex 32) # -# Ou via l'API Vault: -# curl -H "X-Vault-Token: $VAULT_TOKEN" \ -# -H "Content-Type: application/json" \ -# -X POST -d '{"data":{"db-encryption-key":"'$(openssl rand -hex 32)'"}}' \ -# https://vault.example.com/v1/secret/data/homarr/dev +# Structure dans Vault (KV v2): +# secret/ +# homarr/ +# dev/ +# db-encryption-key: "votre-clé-générée" vault: enabled: true - # Nom du SecretStore ou ClusterSecretStore configuré pour Vault + # Configuration du serveur Vault + server: "http://hashicorp-vault.hashi-vault.svc.cluster.local:8200" + # Chemin du mount KV dans Vault (par défaut: "secret") + path: "secret" + # Version du KV store (v1 ou v2) + version: "v2" + # Configuration d'authentification Kubernetes + auth: + kubernetes: + # Chemin du mount d'authentification Kubernetes dans Vault + mountPath: "kubernetes" + # Rôle Vault configuré pour cette application + role: "homarr-dev-role" + # Service Account utilisé pour l'authentification + serviceAccountRef: + name: "homarr-dev-sa" + # Nom du SecretStore créé (utilisé par ExternalSecret) secretStoreName: "vault-backend" - # Kind du SecretStore (SecretStore ou ClusterSecretStore) - secretStoreKind: "SecretStore" - # Chemin dans Vault où se trouve le secret - # Pour KV v2: "secret/data/homarr/dev" (avec le préfixe "secret/data/") - # Pour KV v1: "homarr/dev" (sans préfixe) + # Chemin dans Vault où se trouve le secret (sans le préfixe "secret/data/") + # Exemple: "homarr/dev" pour secret/data/homarr/dev dans KV v2 secretPath: "homarr/dev" # Clé dans le secret Vault contenant la clé de chiffrement secretKey: "db-encryption-key" - # Intervalle de rafraîchissement du secret (par défaut: 1h) - refreshInterval: "1h" + # Intervalle de rafraîchissement du secret (par défaut: 5m) + refreshInterval: "5m"