Providers HashiCorp Vault
coolibra120 vues
Providers
- HashiCorp Vault
External Secrets Operator s'intègre à HashiCorp Vault comme backend et source de vérité. L'engine secrets KV est le seul pris en charge par ce provider. Pour les autres engines de secrets, veuillez consulter le générateur de coffres-forts .

- Pour connecter ESO à vault, il faut créer un SecretStore ou ClusterSecretStore
- Exemple SecretStore avec token auth
- Ce SecretStore a un accès complet à vault en ReadWrite
- Exemple SecretStore avec token auth
-
- secret-store-token.yaml
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: vault-backend
namespace: app-ns
spec:
provider:
vault:
server: "http://vault-dev.techledger.io"
path: "kv-lab-devops"
# Version is the Vault KV secret engine version.
# This can be either "v1" or "v2", defaults to "v2"
version: "v2"
auth:
# points to a secret that contains a vault token
# https://www.vaultproject.io/docs/auth/token
tokenSecretRef:
name: "vault-token"
key: "token"
---
apiVersion: v1
kind: Secret
metadata:
name: vault-token
namespace: app-ns
data:
token: cm9vdA== # "root"
kubectl create ns app-ns
kubectl apply -f secret-store-token.yaml
kubectl get secretstore,secret -n app-ns

-
- Test avec un ExternalSecret
- Ce ExternalSecret va créer un secret k8s avec le nom grafana-admin-credentials. Les datas sont récuperées depuis vault dans le kv path: kv-lab-devops/monitoring/grafana/admin
- Test avec un ExternalSecret
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: vault-grafana-crd
namespace: app-ns
spec:
refreshInterval: "15s" # intervalle de temps pour rafraîchir le secret, ici toutes les 15 secondes
secretStoreRef:
name: vault-backend
kind: SecretStore
target:
name: grafana-admin-credentials # nom du secret kubernetes qui sera créé
creationPolicy: Owner # si le secret existe déjà, il sera mis à jour avec les nouvelles données
template:
type: Opaque # type du secret kubernetes créé
metadata:
labels:
techledger.io: grafana
dataFrom:
- extract:
conversionStrategy: Default
decodingStrategy: None
key: monitoring/grafana/admin # chemin dans vault où se trouve le secret à extraire
metadataPolicy: None
-
- secret-test.yaml
kubectl apply -f secret-test.yaml
kubectl get ExternalSecret,secret -n app-ns

- Exemple ClusterSecretStore avec un userpass auth
- Ce ClusterSecretStore a un accès complet à vault en ReadWrite
-
-
- Exemple ClusterSecretStore avec ClusterExternalSecret qui propage l'image pull secret harbor-regcredentials dans tous les namespaces avec le label: eso=enabled
-
apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
name: vault-backend
spec:
provider:
vault:
server: "https://vault-dev.techledger.io"
path: "kv-lab-devops"
# Version is the Vault KV secret engine version.
# This can be either "v1" or "v2", defaults to "v2"
version: "v2"
auth:
# VaultUserPass authenticates with Vault using the UserPass auth mechanism
# https://www.vaultproject.io/docs/auth/userpass
userPass:
# Path where the UserPass authentication backend is mounted
path: "userpass"
username: "get-secret"
secretRef:
name: "vault-userpass"
key: "password"
namespace: app-ns
---
apiVersion: v1
kind: Secret
metadata:
name: vault-userpass
namespace: app-ns
stringData:
password: Jffdfdd2np184n
---
apiVersion: external-secrets.io/v1
kind: ClusterExternalSecret
metadata:
name: harbor-regcredentials-crd
spec:
# Choisis comment cibler les namespaces:
# Option A (recommandé): par label (ex: label sur les namespaces: techledger.io/harbor-regcredentials=true)
namespaceSelectors:
- matchLabels:
eso: enabled
refreshTime: "15s"
# Nom de l'ExternalSecret qui sera créé dans chaque namespace cible
externalSecretName: harbor-regcredentials-crd
# Spécification de l'ExternalSecret répliqué
externalSecretSpec:
refreshInterval: "15s"
refreshPolicy: Periodic
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: harbor-regcredentials
creationPolicy: Owner
template:
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{ .harborcred }}" # pour helm template "{{ `{{ .mysecret }}` }}"
metadata:
labels:
techledger.io: harbor-regcredentials
data:
- secretKey: harborcred
remoteRef:
conversionStrategy: Default
decodingStrategy: None
metadataPolicy: None
key: harbor/regcred
property: harbor-dev-cred
Commentaires
Connectez-vous pour rejoindre la discussion.
Aucun commentaire pour le moment.