From 51d3ea060001e74639305ed0947250931a56ae56 Mon Sep 17 00:00:00 2001 From: Melvin GABALI Date: Thu, 22 Jan 2026 22:20:11 +0100 Subject: [PATCH] update --- helm/cert-manager-webhook-ovh/ops/README.md | 103 +++++++++++- helm/cert-manager-webhook-ovh/ops/values.yaml | 9 +- scripts/verify-vault-permissions.sh | 149 ++++++++++++++++++ 3 files changed, 250 insertions(+), 11 deletions(-) create mode 100644 scripts/verify-vault-permissions.sh diff --git a/helm/cert-manager-webhook-ovh/ops/README.md b/helm/cert-manager-webhook-ovh/ops/README.md index f40eaed..d7cef65 100644 --- a/helm/cert-manager-webhook-ovh/ops/README.md +++ b/helm/cert-manager-webhook-ovh/ops/README.md @@ -84,7 +84,7 @@ Créez une policy Vault pour accéder aux secrets OVH : ```bash vault policy write cert-manager-webhook-ovh-policy - </dev/null; then + echo " ✅ Secret trouvé dans Vault" + echo "" + echo " Contenu du secret:" + vault kv get "$VAULT_SECRET_PATH" | grep -E "application-key|application-secret|consumer-key" || true + echo "" +else + echo " ❌ Secret '$VAULT_SECRET_PATH' non trouvé dans Vault" + echo "" + echo " Créez le secret avec:" + echo " vault kv put $VAULT_SECRET_PATH \\" + echo " application-key=\"VOTRE_APPLICATION_KEY\" \\" + echo " application-secret=\"VOTRE_APPLICATION_SECRET\" \\" + echo " consumer-key=\"VOTRE_CONSUMER_KEY\"" + echo "" +fi + +# 2. Vérifier la policy Vault +echo "2. Vérification de la policy Vault '$VAULT_POLICY'..." +if vault policy read "$VAULT_POLICY" &>/dev/null; then + echo " ✅ Policy existe" + echo "" + echo " Contenu de la policy:" + vault policy read "$VAULT_POLICY" + echo "" + + # Vérifier que la policy autorise la lecture du secret + SECRET_NAME=$(basename "$VAULT_SECRET_PATH") + if vault policy read "$VAULT_POLICY" | grep -q "secret/data/$SECRET_NAME"; then + echo " ✅ Policy autorise l'accès à secret/data/$SECRET_NAME" + else + echo " ⚠️ Policy ne semble pas autoriser l'accès à secret/data/$SECRET_NAME" + echo " Créez la policy avec:" + echo " vault policy write $VAULT_POLICY - </dev/null; then + echo " ✅ Rôle existe" + echo "" + echo " Configuration du rôle:" + vault read "auth/kubernetes/role/$VAULT_ROLE" | grep -E "bound_service_account|policies|ttl" || true + echo "" + + # Vérifier que le rôle utilise la bonne policy + if vault read "auth/kubernetes/role/$VAULT_ROLE" | grep -q "$VAULT_POLICY"; then + echo " ✅ Rôle utilise la policy '$VAULT_POLICY'" + else + echo " ⚠️ Rôle ne semble pas utiliser la policy '$VAULT_POLICY'" + echo " Vérifiez avec: vault read auth/kubernetes/role/$VAULT_ROLE" + fi + + # Vérifier les ServiceAccounts autorisés + BOUND_SA=$(vault read "auth/kubernetes/role/$VAULT_ROLE" -format=json 2>/dev/null | jq -r '.data.bound_service_account_names[]' 2>/dev/null || echo "") + if echo "$BOUND_SA" | grep -q "$SERVICE_ACCOUNT"; then + echo " ✅ ServiceAccount '$SERVICE_ACCOUNT' est autorisé" + else + echo " ⚠️ ServiceAccount '$SERVICE_ACCOUNT' n'est pas dans bound_service_account_names" + echo " Rôle autorise: $BOUND_SA" + fi + + # Vérifier les namespaces autorisés + BOUND_NS=$(vault read "auth/kubernetes/role/$VAULT_ROLE" -format=json 2>/dev/null | jq -r '.data.bound_service_account_namespaces[]' 2>/dev/null || echo "") + if echo "$BOUND_NS" | grep -q "$NAMESPACE"; then + echo " ✅ Namespace '$NAMESPACE' est autorisé" + else + echo " ⚠️ Namespace '$NAMESPACE' n'est pas dans bound_service_account_namespaces" + echo " Rôle autorise: $BOUND_NS" + fi + echo "" +else + echo " ❌ Rôle '$VAULT_ROLE' n'existe pas" + echo "" + echo " Créez le rôle avec:" + echo " vault write auth/kubernetes/role/$VAULT_ROLE \\" + echo " bound_service_account_names=$SERVICE_ACCOUNT \\" + echo " bound_service_account_namespaces=$NAMESPACE,cert-manager-ops \\" + echo " policies=$VAULT_POLICY \\" + echo " ttl=1h" + echo "" +fi + +# 4. Vérifier le ServiceAccount Kubernetes +echo "4. Vérification du ServiceAccount Kubernetes..." +if kubectl get serviceaccount "$SERVICE_ACCOUNT" -n "$NAMESPACE" &>/dev/null; then + echo " ✅ ServiceAccount existe" + kubectl get serviceaccount "$SERVICE_ACCOUNT" -n "$NAMESPACE" -o wide + echo "" +else + echo " ❌ ServiceAccount '$SERVICE_ACCOUNT' n'existe pas dans '$NAMESPACE'" + echo "" +fi + +# 5. Résumé et actions recommandées +echo "=== Résumé ===" +echo "" +echo "Si toutes les vérifications passent mais que l'erreur 403 persiste:" +echo "" +echo "1. Vérifiez que le mount Kubernetes dans Vault est correctement configuré:" +echo " vault read auth/kubernetes/config" +echo "" +echo "2. Testez l'authentification manuellement:" +echo " # Récupérer le token du ServiceAccount" +echo " TOKEN=\$(kubectl get secret -n $NAMESPACE -o jsonpath='{.items[?(@.metadata.annotations.kubernetes\\.io/service-account\\.name==\"$SERVICE_ACCOUNT\")].data.token}' | head -1 | base64 -d)" +echo " # Tester l'authentification" +echo " vault write auth/kubernetes/login role=$VAULT_ROLE jwt=\"\$TOKEN\"" +echo "" +echo "3. Vérifiez les logs d'External Secrets Operator:" +echo " kubectl logs -n external-secrets-system -l app.kubernetes.io/name=external-secrets --tail=50 | grep -i vault" +echo "" +