Votre job peut avoir besoin de dépendances nécessitant des clés API, des mots de passe, des certificats ou d'autres informations sensibles. Pour Cloud Run, Google vous recommande de stocker ce type d'informations sensibles dans un secret créé dans Secret Manager.
Pour mettre un secret à disposition de vos conteneurs, vous avez deux possibilités :
- Installer chaque secret en tant que volume, ce qui rend le secret disponible au conteneur en tant que fichiers. La lecture d'un volume récupère toujours la valeur du secret depuis Secret Manager, ce qui permet de l'utiliser avec la dernière version. Cette méthode fonctionne également avec la rotation des secrets.
- Transmettre un secret à l'aide de variables d'environnement. Les variables d'environnement sont résolues au moment du démarrage de l'instance. Ainsi, si vous utilisez cette méthode, Google vous recommande d'épingler le secret à une version particulière plutôt que d'utiliser la dernière version.
Pour en savoir plus, reportez-vous au document Bonnes pratiques de Secret Manager.
Vérification des secrets lors du déploiement et de l'exécution
Pendant la création d'un job, tous les secrets utilisés, en tant que variables d'environnement ou installés en tant que volume, sont vérifiés pour s'assurer que le compte de service utilisé pour exécuter le conteneur y a accès. Si une vérification échoue, la création du job échoue.
Lors de l'exécution, lorsque les instances démarrent :
- si le secret est une variable d'environnement, sa valeur est récupérée avant le démarrage de l'instance. Par conséquent, si la récupération du secret échoue, l'instance ne démarre pas ;
- si le secret est installé en tant que volume, aucune vérification n'est effectuée au démarrage de l'instance. Toutefois, pendant l'exécution, si un secret est inaccessible, les tentatives de lecture du volume installé échoueront.
La propriété du volume diffère selon l'environnement d'exécution et le type de déploiement.
Lorsque vous installez un volume secret à l'aide de l'environnement d'exécution de deuxième génération, ce qui est le cas pour les jobs, le volume appartient à la racine.
Avant de commencer
Vous pouvez utiliser un secret de Secret Manager existant ou en créer un nouveau.
Rôles requis
Pour obtenir les autorisations nécessaires pour configurer les secrets, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Administrateur Cloud Run (
roles/run.admin
) sur le job Cloud Run -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur l'identité du service
Pour autoriser Cloud Run à accéder au secret, l'identité du service doit disposer du rôle suivant :
- Accesseur de secrets Secret Manager (
roles/secretmanager.secretAccessor
)
Pour savoir comment ajouter le compte principal d'identité de service au rôle Accesseur de secrets de Secret Manager, consultez la section Gérer l'accès aux secrets.
Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre job Cloud Run communique avec des API Google Cloud, telles que des bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les sections Autorisations de déploiement et Gérer les accès.
Rendre un secret accessible à Cloud Run
Vous pouvez rendre un secret accessible à votre tâche à l'aide de la console Google Cloud, de Google Cloud CLI ou de YAML :
Console
Dans la console Google Cloud, accédez à la page des jobs Cloud Run :
Cliquez sur Déployer un conteneur, puis sélectionnez Job pour remplir la page initiale des paramètres du job. Si vous configurez un job existant, cliquez sur celui-ci, puis sur Modifier.
Cliquez sur Conteneur, variables et secrets, connexions, sécurité pour développer la page des propriétés du job.
Cliquez sur l'onglet Variables et secrets.
- Dans l'onglet "Variables et secrets" :
- Sous Secrets, cliquez sur Ajouter une référence de secret.
- Sélectionnez le secret que vous souhaitez utiliser dans la liste déroulante Secret.
- Dans le menu déroulant Méthode de référence, sélectionnez la manière dont vous souhaitez utiliser votre secret, installé en tant que volume ou exposé en tant que variables d'environnement.
- Si vous installez le secret en tant que volume,
- Sous Chemin d'installation, spécifiez le chemin d'installation que vous utilisez pour les secrets.
- La dernière version est sélectionnée par défaut. Si vous le souhaitez, vous pouvez sélectionner une version spécifique. Dans Chemins spécifiés pour les versions des secrets, spécifiez le chemin d'accès à la version et le numéro de version.
- Cliquez sur OK.
- Si vous exposez le secret en tant que variable d'environnement :
- Indiquez le Nom de la variable et sélectionnez la version de secret, ou la plus récente pour utiliser systématiquement la version de secret actuelle.
- Cliquez sur OK.
- Dans l'onglet "Variables et secrets" :
Cliquez sur Créer ou Mettre à jour.
gcloud
Pour spécifier le secret dans une variable d'environnement lors de la création d'une tâche, procédez comme suit :
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Remplacer
- JOB_NAME par le nom de votre tâche.
- ENV_VAR_NAME par le nom de la variable d'environnement à utiliser pour le secret.
- SECRET_NAME par le nom du secret dans le même projet, ex.
mysecret
. - VERSION par la version de secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/job:latest
.
Vous pouvez spécifier plusieurs paires variable d'environnement/secret, en utilisant une liste délimitée par des virgules.
Pour spécifier le secret dans une variable d'environnement lors de la mise à jour d'une tâche, procédez comme suit :
gcloud run jobs update JOB_NAME \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Pour installer le secret en tant que volume lors de la création d'une tâche, procédez comme suit :
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets=PATH=SECRET_NAME:VERSION
Remplacez :
- JOB_NAME par le nom de votre tâche.
- IMAGE_URL par une référence à l'image du conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/job:latest
; PATH
par le chemin d'accès au volume et au nom de fichier du secret. Il doit commencer par une barre oblique, par exemple :/etc/secrets/dbconfig/password
, où/etc/secrets/dbconfig/
représente le chemin d'accès du volume etpassword
le nom du fichier secret.SECRET_NAME
par le nom du secret dans le même projet, ex.mysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.
Pour mettre à jour un secret dans une tâche existante, procédez comme suit :
gcloud run jobs update JOB_NAME \ --update-secrets=PATH=SECRET_NAME:VERSION
YAML
En raison de contraintes liées à la compatibilité des API, les emplacements des secrets doivent être stockés dans une annotation.
Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :
gcloud run jobs describe JOB_NAME --format export > job.yaml
Pour les secrets exposés en tant que variables d'environnement :
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Remplacez :
JOB
par le nom de votre tâche.- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
par le nom secret, ex.mysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.SECRET_LOOKUP_NAME
par un nom ayant une syntaxe de nom de secret valide (par exemple,my-secret
), pouvant être identique àSECRET_NAME
.
Pour les secrets installés en tant que chemins de fichiers :
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Remplacez :
JOB_NAME
par le nom de votre tâche.- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
par le chemin d'accès au volume et au nom de fichier du secret. Il doit commencer par une barre oblique, par exemple :/etc/secrets/dbconfig/password
, où/etc/secrets/dbconfig/
représente le chemin d'accès du volume etpassword
le nom du fichier secret.PROJECT_NUMBER
par le numéro du projet dans lequel le secret a été créé.SECRET_NAME
par le nom du secret, par exemplemysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.SECRET_LOOKUP_NAME
par un nom ayant une syntaxe de nom de secret valide (par exemple,my-secret
), pouvant être identique àSECRET_NAME
.VOLUME_NAME
par n'importe quel nom (par exemplemy-volume
), pouvant être identique àSECRET_NAME
.
Référencer des secrets provenant d'autres projets
Vous pouvez référencer un secret provenant d'un autre projet si le compte de service de votre projet a été autorisé à accéder au secret.
Console
Dans la console Google Cloud, accédez à la page des jobs Cloud Run :
Cliquez sur Déployer un conteneur, puis sélectionnez Job pour remplir la page initiale des paramètres du job. Si vous configurez un job existant, cliquez sur celui-ci, puis sur Modifier.
Cliquez sur Conteneur, variables et secrets, connexions, sécurité pour développer la page des propriétés du job.
Cliquez sur l'onglet Variables et secrets.
- Dans l'onglet "Variables et secrets" :
- Sous Secrets, cliquez sur Ajouter une référence de secret.
- SélectionnerSaisir le secret manuellement dans la liste déroulante Codes secrets pour afficher le formulaire suivant :
- Dans le formulaire Ajouter un secret par ID de ressource, saisissez le secret de l'autre projet au format
projects/PROJECT_NUMBER/secrets/SECRET_NAME
. Vous pouvez également copier et coller l'ID de ressource de l'autre projet si vous y avez accès en sélectionnant le secret, en cliquant sur les points de suspension Actions à droite du secret, puis en sélectionnant Copier l'ID de ressource dans le menu déroulant. - Cliquez sur Ajouter un secret.
- Dans le menu déroulant Méthode de référence, sélectionnez la manière dont vous souhaitez utiliser votre secret, installé en tant que volume ou exposé en tant que variables d'environnement.
- Si vous installez le secret en tant que volume,
- Sous Chemin d'installation, spécifiez le chemin d'installation que vous utilisez pour les secrets.
- La dernière version est sélectionnée par défaut. Si vous le souhaitez, vous pouvez sélectionner une version spécifique. Dans Chemins spécifiés pour les versions des secrets, spécifiez le chemin d'accès à la version et le numéro de version.
- Cliquez sur OK.
- Si vous exposez le secret en tant que variable d'environnement :
- Indiquez le Nom de la variable et sélectionnez la version de secret, ou la plus récente pour utiliser systématiquement la version de secret actuelle.
- Cliquez sur OK.
- Dans l'onglet "Variables et secrets" :
Cliquez sur Créer ou Mettre à jour.
gcloud
Pour installer un secret en tant que volume lors de la mise à jour d'un job :
gcloud run jobs update JOB_NAME \ --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
- JOB_NAME par le nom de votre tâche.
- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
par le chemin d'accès au volume et au nom de fichier du secret. Il doit commencer par une barre oblique, par exemple :/etc/secrets/dbconfig/password
, où/etc/secrets/dbconfig/
représente le chemin d'accès du volume etpassword
le nom du fichier secret.PROJECT_NUMBER
par le numéro du projet dans lequel le secret a été créé.SECRET_NAME
par le nom secret, ex.mysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.
YAML
Si vous créez un job, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :
gcloud run jobs describe JOB_NAME --format export > job.yaml
En raison de contraintes liées à la compatibilité des API, les emplacements des secrets doivent être stockés dans une annotation.
Pour les secrets exposés en tant que variables d'environnement :
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Remplacez :
JOB
par le nom de votre tâche.- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
par le nom du secret, par exemplemysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.PROJECT_NUMBER
par le numéro du projet dans lequel le secret a été créé.SECRET_LOOKUP_NAME
par un nom ayant une syntaxe de nom de secret valide (par exemple,my-secret
), pouvant être identique àSECRET_NAME
.
Pour les secrets installés en tant que chemins de fichiers :
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Remplacez :
JOB_NAME
par le nom de votre tâche.- IMAGE_URL par une référence à l'image de conteneur, par exemple
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante :LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
par le chemin d'accès au volume et au nom de fichier du secret. Il doit commencer par une barre oblique, par exemple :/etc/secrets/dbconfig/password
, où/etc/secrets/dbconfig/
représente le chemin d'accès du volume etpassword
le nom du fichier secret.PROJECT_NUMBER
par le numéro du projet dans lequel le secret a été créé.SECRET_NAME
par le nom du secret, par exemplemysecret
.VERSION
par la version de secret. Utilisezlatest
pour la version la plus récente, ou un nombre, par exemple2
.SECRET_LOOKUP_NAME
par un nom ayant une syntaxe de nom de secret valide (par exemple,my-secret
), pouvant être identique àSECRET_NAME
.VOLUME_NAME
par n'importe quel nom (par exemplemy-volume
). Le nom peut être identique àSECRET_NAME
.
Afficher les paramètres des secrets
Pour afficher les paramètres actuels des secrets pour votre tâche Cloud Run, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page des jobs Cloud Run :
Cliquez sur le job qui vous intéresse pour ouvrir la page Informations sur le job.
Cliquez sur l'onglet Configuration.
Localisez le paramètre des secrets dans les détails de la configuration.
gcloud
Exécutez la commande suivante :
gcloud run jobs describe JOB_NAME
Recherchez le paramètre des secrets dans la configuration renvoyée.
Chemins et limites non autorisés
Cloud Run ne vous permet pas d'installer des secrets sur /dev
, /proc
et /sys
, ou dans leurs sous-répertoires.
Si vous installez des secrets sur /tmp
et que vous utilisez un environnement d'exécution de première génération, reportez-vous au problème connu sur l'installation de secrets sur /tmp
.
Cloud Run ne vous permet pas d'installer plusieurs secrets sur le même chemin d'accès, car deux installations de volume ne peuvent pas être installées au même emplacement.
Remplacer un répertoire
Si le secret est installé en tant que volume dans Cloud Run et que le dernier répertoire du chemin d'installation du volume existe déjà, tous les fichiers ou dossiers du répertoire existant deviennent inaccessibles.
Par exemple, si un secret nommé my-secret
est installé sur le chemin d'accès /etc/app_data
, tout le contenu du répertoire app_data
sera écrasé et le seul fichier visible est /etc/app_data/my-secret
.
Pour éviter d'écraser des fichiers dans un répertoire existant, créez un nouveau répertoire pour installer le secret, par exemple /etc/app_data/secrets
, afin que le chemin d'installation du secret soit /etc/app_data/secrets/my-secret
.