Configurer les secrets

Vous pouvez utiliser Secret Manager pour stocker en toute sécurité des clés API, des mots de passe et d'autres informations sensibles. Ce guide vous explique comment configurer Cloud Functions pour accéder aux secrets stockés dans Secret Manager.

Ce document décrit les deux manières de rendre un secret disponible pour votre fonction :

  • Installer le secret en tant que volume. Cela rend le secret disponible pour la fonction sous forme de fichier. Si vous référencez un secret en tant que volume, votre fonction accède à la valeur du secret à partir de Secret Manager chaque fois que le fichier est lu à partir du disque. L'installation en tant que volume est donc une bonne stratégie si vous souhaitez référencer la dernière version du secret au lieu d'une version épinglée du secret. Cette méthode est également efficace si vous envisagez de mettre en œuvre la rotation des secrets.

  • Transmettre le secret en tant que variable d'environnement. Les valeurs des variables d'environnement sont résolues au démarrage de l'instance. Par conséquent, si vous utilisez cette méthode, nous vous recommandons de référencer une version épinglée du secret, plutôt que sa dernière version en date.

Pour en savoir plus sur l'utilisation de Secret Manager, consultez la présentation de Secret Manager. Pour apprendre à créer des secrets et à y accéder, consultez la page Créer un secret.

Avant de commencer

  1. Activez l'API Secret Manager

    Activer l'API

  2. Si vous ne l'avez pas déjà fait, créez un secret dans Secret Manager, comme décrit dans la section Créer un secret.

Accorder l'accès aux secrets

Votre fonction peut accéder aux secrets résidant dans le même projet que la fonction, ainsi qu'aux secrets résidant dans un autre projet. Pour accéder à un secret, le compte de service d'exécution de la fonction doit disposer d'un accès au secret.

Par défaut, Cloud Functions s'authentifie auprès de Secret Manager à l'aide du compte de service App Engine par défaut. Pour une utilisation en production, Google vous recommande de configurer votre fonction pour qu'elle s'authentifie à l'aide d'un compte de service géré par l'utilisateur doté de l'ensemble de rôles le moins permissif nécessaire pour accomplir ces tâches de la fonction.

Pour utiliser Secret Manager avec Cloud Functions, attribuez le rôle roles/secretmanager.secretAccessor au compte de service associé à votre fonction :

  1. Accédez à la page Secret Manager dans la console Google Cloud :
    Accéder à la page Secret Manager

  2. Cochez la case en regard du secret.

  3. S'il n'est pas déjà ouvert, cliquez sur Afficher le panneau d'informations pour ouvrir celui-ci.

  4. Dans le panneau d'informations, cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux membres, saisissez le compte de service utilisé par votre fonction pour son identité. Le compte de service de la fonction est l'un des suivants :

  6. Dans la liste déroulante Sélectionner un rôle, sélectionnez Gestionnaire de secrets, puis Accesseur de secrets du gestionnaire de secrets.

Préparer votre fonction à accéder aux secrets

Il existe deux façons de rendre un secret disponible pour votre fonction :

  • Transmettre le secret en tant que variable d'environnement
  • Installer le secret en tant que volume.

Environment variables

Procédez comme suit pour utiliser des variables d'environnement afin de mettre des secrets à disposition de votre fonction :

  1. Définissez une variable d'environnement d'exécution lors du déploiement de la fonction.
  2. Rendez le secret accessible pour votre fonction dans une variable d'environnement.
  3. Accédez à la variable d'environnement de manière programmatique au moment de l'exécution.

Installer le secret en tant que volume

Procédez comme suit pour installer un secret en tant que volume :

  1. Créez un fichier contenant votre secret.

  2. Choisissez un répertoire non système non utilisé, tel que /mnt/secrets, comme chemin d'accès à l'installation de votre secret. Tous les fichiers ou sous-répertoires préexistants de ce répertoire autres que votre secret et ses versions deviennent inaccessibles une fois le secret installé.

  3. Rendez le secret accessible à votre fonction en tant que volume installé.

  4. Lors de l'exécution, lisez par programmation le contenu du fichier pour accéder à la valeur du secret.

Par exemple, si le secret a été installé sur /mnt/secrets/secret1, la fonction doit lire ce fichier. Voici un exemple de lecture synchrone du fichier à l'aide de Node.js :

fs.readFileSync('/mnt/secrets/secret1')

Rendre un secret disponible auprès d'une fonction

Pour référencer un secret à partir d'une fonction, vous devez d'abord le rendre accessible à la fonction. Vous pouvez rendre un secret accessible aux fonctions nouvelles ou existantes à l'aide de Google Cloud Console ou de Google Cloud CLI :

Console

Pour rendre un secret accessible à une fonction, procédez comme suit :

  1. Accédez à la page Cloud Functions dans Google Cloud Console :
    Accéder à la page Cloud Functions

  2. Cliquez sur le nom de la fonction à laquelle vous souhaitez donner accès à un secret.

  3. Cliquez sur Modifier.

  4. Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.

  5. Cliquez sur Sécurité et dépôt d'images pour ouvrir l'onglet.

  6. Cliquez sur Ajouter une référence de secret pour définir un secret pour la fonction.

  7. Sélectionnez le secret pour le rendre accessible. Si nécessaire, créez un secret.

    • Pour référencer un secret dans le même projet que votre fonction, procédez comme suit :

      1. Sélectionnez le secret dans la liste déroulante.
    • Pour référencer un secret provenant d'un autre projet, procédez comme suit :

      1. Vérifiez que le compte de service du projet est autorisé à accéder au secret.

      2. Sélectionnez Saisir le secret manuellement.

      3. Saisissez l'ID de ressource du secret au format suivant :

        projects/PROJECT_ID/secrets/SECRET_NAME

        Remplacez les éléments suivants :

        • PROJECT_ID : ID du projet où réside le secret.

        • SECRET_NAME : nom du secret dans Secret Manager.

  8. Sélectionnez la méthode de référence pour le secret. Vous pouvez installer le secret en tant que volume ou l'exposer en tant que variable d'environnement.

    • Pour installer le secret en tant que volume, procédez comme suit :

      1. Sélectionnez Installé en tant que volume.

      2. Dans le champ Chemin d'installation, saisissez le chemin d'installation de ce secret. Il s'agit du répertoire dans lequel toutes les versions de votre secret sont placées.

      3. Dans le champ Chemin1, saisissez le nom du fichier à installer. Ce nom est concaténé avec le chemin d'accès de l'étape précédente pour former le chemin d'accès complet à l'installation de votre secret.

      4. Dans la liste déroulante Version, sélectionnez la version du secret à référencer.

      5. Vous pouvez installer des versions supplémentaires de ce secret en cliquant sur +Ajouter pour définir des chemins d'accès supplémentaires et les versions de ce secret à installer.

    • Pour exposer le secret en tant que variable d'environnement, procédez comme suit :

      1. Sélectionnez Exposé en tant que variable d'environnement.

      2. Dans le champ Nom1, saisissez le nom de la variable d'environnement.

      3. Dans la liste déroulante Version, sélectionnez la version du secret à référencer.

      4. Vous pouvez exposer des versions supplémentaires de ce secret à votre fonction en cliquant sur +Ajouter pour définir des variables d'environnement supplémentaires et les versions de ce secret à stocker dans celles-ci.

  9. Cliquez sur OK.

  10. Cliquez sur Suivant.

  11. Cliquez sur Déployer.

Le code de votre fonction peut désormais faire référence au secret.

gcloud

Pour rendre un secret accessible à une fonction, saisissez l'une des commandes suivantes.

  • Pour installer le secret en tant que volume, saisissez la commande suivante :

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de votre fonction.

    • RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.

    • SECRET_FILE_PATH : chemin d'accès complet du secret. Par exemple, /mnt/secrets/primary/latest, où /mnt/secrets/primary/ est le chemin d'installation et latest le chemin d'accès au secret. Vous pouvez également spécifier les chemins d'installation et de secrets séparément :

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET : nom du secret dans Secret Manager.

    • VERSION : version du secret à utiliser. par exemple, 1 ou latest.

    L'option --set-secrets remplace tous les secrets existants. Pour conserver les secrets existants de la fonction, utilisez plutôt l'option --update-secrets.

  • Pour exposer le secret en tant que variable d'environnement, saisissez la commande suivante :

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de votre fonction.

    • RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.

    • ENV_VAR_NAME : nom de la variable d'environnement.

    • SECRET : nom du secret dans Secret Manager.

    • VERSION : version du secret à utiliser. Par exemple, 1 ou latest.

    L'option --set-secrets remplace tous les secrets existants. Pour conserver les secrets existants de la fonction, utilisez plutôt l'option --update-secrets.

  • Vous pouvez référencer un secret provenant d'un autre projet si le compte de service de la fonction dispose de l'accès à ce secret. Pour référencer un secret provenant d'un autre projet, utilisez le chemin d'accès aux ressources du secret :

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de votre fonction.

    • SECRET_RESOURCE_PATH : chemin d'accès à la ressource pour le secret résidant dans un autre projet. Le chemin de la ressource utilise le format suivant :

      projects/PROJECT_ID/secrets/SECRET_NAME

      Remplacez les éléments suivants :

      • PROJECT_ID : ID du projet où réside le secret.

      • SECRET_NAME : nom du secret dans Secret Manager.

    • RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.

    • SECRET_FILE_PATH : chemin d'accès complet du secret. Par exemple, /mnt/secrets/primary/latest, où /mnt/secrets/primary/ est le chemin d'installation et latest le chemin d'accès au secret. Vous pouvez également spécifier les chemins d'installation et de secrets séparément :

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET : nom du secret dans Secret Manager.

    • VERSION : version du secret à utiliser. par exemple, 1 ou latest.

  • Vous pouvez mettre à jour plusieurs secrets simultanément. Séparez les options de configuration de chaque secret par une virgule. La commande suivante met à jour un secret installé en tant que volume et un autre secret exposé en tant que variable d'environnement.

    Pour mettre à jour les secrets existants, saisissez la commande suivante :

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \
    SECRET_FILE_PATH=SECRET:VERSION'
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de votre fonction.

    • RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.

    • ENV_VAR_NAME : nom de la variable d'environnement.

    • SECRET : nom du secret dans Secret Manager.

    • VERSION : version du secret à utiliser. par exemple, 1 ou latest.

    • SECRET_FILE_PATH : chemin d'accès complet du secret. Par exemple, /mnt/secrets/primary/latest, où /mnt/secrets/primary/ est le chemin d'installation et latest le chemin d'accès au secret. Vous pouvez également spécifier les chemins d'installation et de secrets séparément :

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

Supprimer des secrets d'une fonction

Vous pouvez supprimer les secrets d'une fonction à l'aide de la console Google Cloud ou de gcloud CLI :

Console

  1. Accédez à la page Cloud Functions dans Google Cloud Console :
    Accéder à la page Cloud Functions

  2. Cliquez sur le nom de la fonction pour supprimer l'un de ses secrets.

  3. Cliquez sur Modifier.

  4. Cliquez sur Paramètres d'exécution, de compilation et de connexion pour développer les options de configuration avancées.

  5. Cliquez sur Sécurité et dépôt d'images pour ouvrir l'onglet "Sécurité".

  6. Maintenez le pointeur de la souris sur le secret que vous souhaitez supprimer, puis cliquez sur Supprimer.

  7. Cliquez sur Suivant.

  8. Cliquez sur Déployer.

gcloud

Vous pouvez supprimer tous les secrets d'une fonction ou spécifier un ou plusieurs secrets à supprimer :

  • Pour supprimer tous les secrets, exécutez la commande suivante :

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --clear-secrets
    

    Remplacez les éléments suivants :

    Tous les secrets sont supprimés de la fonction.

  • Pour spécifier une liste de secrets à supprimer, utilisez l'option --remove-secrets. La commande suivante met à jour un secret installé en tant que volume et un autre secret exposé en tant que variable d'environnement.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de votre fonction.

    • RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.

    • ENV_VAR_NAME : nom de la variable d'environnement.

    • SECRET_FILE_PATH : chemin d'accès complet du secret. Par exemple, /mnt/secrets/primary/latest, où /mnt/secrets/primary/ est le chemin d'installation et latest le chemin d'accès au secret. Vous pouvez également spécifier les chemins d'installation et de secrets séparément :

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    Les secrets spécifiés sont supprimés de la fonction.

Afficher les secrets accessibles de votre fonction

Vous pouvez afficher les secrets auxquels votre fonction peut accéder à l'aide de la console Google Cloud ou de gcloud CLI :

Console

  1. Accédez à la page Cloud Functions dans Google Cloud Console :
    Accéder à la page Cloud Functions

  2. Cliquez sur le nom de la fonction pour afficher les secrets disponibles.

  3. Cliquez sur Modifier.

  4. Cliquez sur Paramètres d'exécution, de compilation et de connexion pour développer les options de configuration avancées.

  5. Cliquez sur Sécurité pour ouvrir l'onglet "Sécurité".

L'onglet "Sécurité" répertorie les secrets accessibles à votre fonction.

gcloud

Pour afficher les secrets disponibles pour votre fonction, utilisez la commande gcloud functions describe :

gcloud functions describe FUNCTION_NAME

Remplacez FUNCTION_NAME par le nom de votre fonction.

Étape suivante