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 les fonctions Cloud Run 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
-
Enable the Secret Manager API.
- 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, les fonctions Cloud Run s'authentifient 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 les fonctions Cloud Run, attribuez le rôle roles/secretmanager.secretAccessor
au compte de service associé à votre fonction :
Accédez à la page Secret Manager dans la console Google Cloud :
Accéder à la page Secret ManagerCochez la case en regard du secret.
S'il n'est pas déjà ouvert, cliquez sur Afficher le panneau d'informations pour ouvrir celui-ci.
Dans le panneau d'informations, cliquez sur Ajouter un compte principal.
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 :
Compte de service géré par l'utilisateur attribué à la fonction au moment du déploiement. Pour savoir comment déployer une fonction avec un compte de service géré par l'utilisateur, consultez la page Utiliser des comptes de service individuels pour votre fonction.
Compte de service App Engine par défaut (non recommandé pour une utilisation en production).
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.
Variables d'environnement
Procédez comme suit pour utiliser des variables d'environnement afin de mettre des secrets à disposition de votre fonction :
- Définissez une variable d'environnement d'exécution lors du déploiement de la fonction.
- Rendez le secret accessible pour votre fonction dans une variable d'environnement.
- 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 :
Créez un fichier contenant votre secret.
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 autre que votre secret et ses versions deviennent inaccessibles une fois le secret installé.Rendez le secret accessible à votre fonction en tant que volume installé.
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 :
Accédez à la page des fonctions Cloud Run dans la console Google Cloud :
Accéder à la page des fonctions Cloud RunCliquez sur le nom de la fonction à laquelle vous souhaitez donner accès à un secret.
Cliquez sur Modifier.
Cliquez sur Exécution, compilation... pour développer les options de configuration avancées.
Cliquez sur Sécurité et dépôt d'images pour ouvrir l'onglet.
Cliquez sur Ajouter une référence de secret pour définir un secret pour la fonction.
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 :
- Sélectionnez le secret dans la liste déroulante.
Pour référencer un secret provenant d'un autre projet, procédez comme suit :
Vérifiez que le compte de service du projet est autorisé à accéder au secret.
Sélectionnez Saisir le secret manuellement.
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.
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 :
Sélectionnez Installé en tant que volume.
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.
Dans le champ Path1, 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.
Dans la liste déroulante Version1, sélectionnez la version du secret à référencer.
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 :
Sélectionnez Exposé en tant que variable d'environnement.
Dans le champ Name1, saisissez le nom de la variable d'environnement.
Dans la liste déroulante Version1, sélectionnez la version du secret à référencer.
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 ainsi que les versions de ce secret à stocker.
Cliquez sur OK.
Cliquez sur Suivant.
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 etlatest
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
oulatest
.
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
oulatest
.
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 etlatest
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
oulatest
.
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
oulatest
.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 etlatest
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
Accédez à la page des fonctions Cloud Run dans la console Google Cloud :
Accéder à la page des fonctions Cloud RunCliquez sur le nom de la fonction pour supprimer l'un de ses secrets.
Cliquez sur Modifier.
Cliquez sur Paramètres d'exécution, de compilation et de connexion pour développer les options de configuration avancées.
Cliquez sur Sécurité et dépôt d'images pour ouvrir l'onglet "Sécurité".
Maintenez le pointeur de la souris sur le secret que vous souhaitez supprimer, puis cliquez sur
Supprimer.Cliquez sur Suivant.
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 :
FUNCTION_NAME : nom de votre fonction.
RUNTIME : environnement d'exécution dans lequel exécuter votre fonction.
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 etlatest
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
Accédez à la page des fonctions Cloud Run dans la console Google Cloud :
Accéder à la page des fonctions Cloud RunCliquez sur le nom de la fonction pour afficher les secrets disponibles.
Cliquez sur Modifier.
Cliquez sur Paramètres d'exécution, de compilation et de connexion pour développer les options de configuration avancées.
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
- Envisagez de développer des fonctions qui utilisent Secret Manager à l'aide des bibliothèques clientes de Secret Manager.