Gérer les secrets avec Vault

Ce guide pratique vous montre comment gérer les secrets avec Vault dans la plateforme Atlas.

Prérequis

  • Avoir un compte sur la plateforme Atlas
  • Avoir les droits appropriés sur un DeploymentTarget (admin, editor, secret-viewer)
  • Avoir accès à Vault via l'interface Atlas

Qu'est-ce que Vault ?

Vault est un outil de gestion des secrets qui permet aux différents acteurs de la plateforme (en fonction de leur rôle) de lister, consulter et livrer les secrets nécessaires au déploiement des ressources. On y retrouve également les informations de connexion aux bases de données managées et aux buckets.

Accès à Vault

  1. Accédez à l'interface Atlas via l'URL https://atlas.fabrique.social.gouv.fr/
  2. Connectez-vous en utilisant vos identifiants (l'authentification se fait via OIDC)
  3. Cliquez sur le lien vers Vault dans l'interface Atlas
  4. Authentifiez-vous à nouveau si nécessaire

Structure des secrets dans Vault

Les secrets dans Vault sont organisés selon une structure hiérarchique basée sur les DeploymentTargets. Chaque DeploymentTarget dispose de son propre chemin dans Vault, où sont stockés les secrets qui lui sont associés.

La structure typique est la suivante :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<deployment-target>/
├── data/
│   ├── <secret-name-1>
│   ├── <secret-name-2>
│   └── ...
├── metadata/
│   ├── <secret-name-1>
│   ├── <secret-name-2>
│   └── ...
└── subkeys/
    ├── <secret-name-1>
    ├── <secret-name-2>
    └── ...

Types de secrets

Secrets livrés automatiquement

Certains secrets sont livrés automatiquement aux DeploymentTargets par la plateforme Atlas. Ces secrets incluent :

  • Informations de connexion aux buckets : Lorsqu'un bucket est créé avec un DeploymentTarget spécifié dans secretDeliveryTargets.
  • Informations de connexion aux bases de données : Lorsqu'un DatabaseCluster est créé avec un DeploymentTarget spécifié dans secretDeliveryTargets.

Secrets personnalisés

Vous pouvez également créer et gérer vos propres secrets dans Vault. Ces secrets peuvent être utilisés par vos applications pour stocker des informations sensibles comme des clés API, des mots de passe, etc.

Gestion des secrets

Consulter les secrets

Via l'interface web de Vault

  1. Accédez à Vault via l'interface Atlas
  2. Naviguez vers le chemin correspondant à votre DeploymentTarget
  3. Cliquez sur le secret que vous souhaitez consulter

Via l'API Vault

Vous pouvez également utiliser l'API Vault pour consulter les secrets. Voici un exemple avec curl :

1
2
curl -H "X-Vault-Token: $VAULT_TOKEN" \
     $VAULT_ADDR/v1/<deployment-target>/data/<secret-name>

Créer ou modifier un secret

Via l'interface web de Vault

  1. Accédez à Vault via l'interface Atlas
  2. Naviguez vers le chemin correspondant à votre DeploymentTarget
  3. Cliquez sur "Create secret" ou sélectionnez un secret existant et cliquez sur "Edit"
  4. Remplissez les champs avec les valeurs appropriées
  5. Cliquez sur "Save"

Via l'API Vault

Vous pouvez également utiliser l'API Vault pour créer ou modifier des secrets. Voici un exemple avec curl :

1
2
3
4
5
curl -H "X-Vault-Token: $VAULT_TOKEN" \
     -H "Content-Type: application/json" \
     -X POST \
     -d '{"data":{"key1":"value1","key2":"value2"}}' \
     $VAULT_ADDR/v1/<deployment-target>/data/<secret-name>

Supprimer un secret

Via l'interface web de Vault

  1. Accédez à Vault via l'interface Atlas
  2. Naviguez vers le chemin correspondant à votre DeploymentTarget
  3. Sélectionnez le secret que vous souhaitez supprimer
  4. Cliquez sur "Delete"
  5. Confirmez la suppression

Via l'API Vault

Vous pouvez également utiliser l'API Vault pour supprimer des secrets. Voici un exemple avec curl :

1
2
3
curl -H "X-Vault-Token: $VAULT_TOKEN" \
     -X DELETE \
     $VAULT_ADDR/v1/<deployment-target>/data/<secret-name>

Utilisation des secrets dans vos applications

Via les secrets Kubernetes

Les secrets stockés dans Vault peuvent être automatiquement synchronisés avec des secrets Kubernetes dans le namespace du DeploymentTarget via External Secrets Operator. External Secrets Operator (ESO) est un addon pour Kubernetes permettant de récupérer et synchroniser des secrets externes au cluster (dans notre cas, au sein du Vault), et de créer des secrets Kubernetes associés. Une fois configuré, vous pouvez y accéder dans votre application en montant le secret ou en utilisant les variables d'environnement.

Note : Pour plus de détails sur l'utilisation d'External Secret Operator pour récupérer des secrets personnalisés, consultez le guide Utiliser External Secret Operator.

Exemple d'utilisation dans un déploiement Kubernetes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: mon-external-secret
spec:
  # Intervalle de rafraîchissement du secret
  refreshInterval: "15s"
  # Référence au SecretStore qui contient les informations de connexion à Vault
  # "local-secret-store" est un SecretStore crée automatiquement par Atlas
  # pour chaque DeploymentTarget
  secretStoreRef:
    kind: SecretStore
    name: local-secret-store
  # Secret Kubernetes cible qui sera créé ou mis à jour
  target:
    name: mon-secret-kubernetes
  # Données à récupérer depuis Vault
  data:
  - secretKey: api_key
    remoteRef:
      key: secret/mon-chemin-vault
      property: api_key
  - secretKey: api_secret
    remoteRef:
      key: secret/mon-chemin-vault
      property: api_secret
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mon-application
spec:
  # ...
  template:
    # ...
    spec:
      containers:
      - name: mon-application
        image: mon-image:latest
        env:
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: mon-secret-kubernetes
              key: api_key
        - name: API_SECRET
          valueFrom:
            secretKeyRef:
              name: mon-secret-kubernetes
              key: api_secret

Permissions et rôles

Les permissions sur les secrets dans Vault sont basées sur les rôles attribués aux utilisateurs sur les DeploymentTargets. Voici un résumé des permissions pour chaque rôle :

Admin

  • Peut créer, mettre à jour, lire, supprimer et lister les données et métadonnées des secrets
  • Peut lire les sous-clés des secrets
  • Peut créer et mettre à jour les opérations de suppression, de restauration et de destruction des secrets

Editor

  • Peut créer, mettre à jour et supprimer les données des secrets
  • Peut créer, mettre à jour, lire et lister les métadonnées des secrets
  • Peut lire les sous-clés des secrets
  • Peut créer et mettre à jour les opérations de suppression et de restauration des secrets

Secret-viewer

  • Peut lire les données des secrets
  • Peut lire et lister les métadonnées des secrets
  • Peut lire les sous-clés des secrets

Viewer

  • Peut lire et lister les métadonnées des secrets
  • Peut lire les sous-clés des secrets

Bonnes pratiques

Sécurité

  • Ne stockez jamais de secrets directement dans votre code ou dans des fichiers de configuration versionnés.
  • Utilisez des secrets différents pour chaque environnement (dev, preprod, prod).
  • Limitez l'accès aux secrets aux personnes qui en ont besoin, en suivant le principe du moindre privilège.
  • Changez régulièrement les secrets sensibles (mots de passe, clés API, etc.).

Organisation

  • Utilisez des noms significatifs pour vos secrets.
  • Organisez vos secrets de manière logique, en regroupant les secrets liés à une même application ou à un même service.
  • Documentez vos secrets pour faciliter leur utilisation par les autres membres de l'équipe.

Rotation des secrets

  • Mettez en place une politique de rotation des secrets pour les secrets sensibles.
  • Testez régulièrement la rotation des secrets pour vous assurer que vos applications peuvent gérer les changements de secrets.

Résolution des problèmes courants

Impossible d'accéder à Vault

  • Vérifiez que vous êtes bien connecté à l'interface Atlas
  • Vérifiez que vous avez les droits nécessaires pour accéder à Vault
  • Contactez l'administrateur de la plateforme si le problème persiste

Impossible de lire un secret

  • Vérifiez que vous avez les droits nécessaires pour lire le secret (admin, editor, secret-viewer)
  • Vérifiez que le secret existe bien
  • Vérifiez que vous naviguez dans le bon chemin

Impossible de créer ou modifier un secret

  • Vérifiez que vous avez les droits nécessaires pour créer ou modifier le secret (admin, editor)
  • Vérifiez que vous naviguez dans le bon chemin
  • Contactez l'administrateur de la plateforme si le problème persiste

Le secret n'est pas disponible dans Kubernetes

  • Vérifiez que le secret a été correctement créé dans Vault
  • Vérifiez que la synchronisation entre Vault et Kubernetes fonctionne correctement
  • Contactez l'administrateur de la plateforme si le problème persiste

Paramètres d’affichage

Choisissez un thème pour personnaliser l’apparence du site.