Votre job peut nécessiter des clés API, des mots de passe, des certificats ou d'autres informations sensibles pour ses dépendances. Pour Cloud Run, Google vous recommande de stocker ces informations sensibles dans un secret que vous créez dans Secret Manager.
Pour mettre un secret à disposition de vos conteneurs, vous avez deux possibilités :
- Lorsque vous installez chaque secret en tant que volume, Cloud Run le met à la disposition du conteneur sous forme de fichiers. Lors de la lecture d'un volume, Cloud Run récupère toujours la valeur du secret depuis Secret Manager pour utiliser la valeur 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
latest
comme version.
Pour en savoir plus, consultez les bonnes pratiques de Secret Manager.
Vérification des secrets lors du déploiement et de l'exécution
Lors de la création d'un job, Cloud Run vérifie tous les secrets que vous utilisez. Cette vérification permet de s'assurer que le compte de service qui exécute le conteneur est autorisé à accéder à ces secrets.
Lors de l'exécution, lorsque les instances démarrent :
- Si le secret est une variable d'environnement, Cloud Run récupère sa valeur avant de démarrer l'instance. Si le processus de récupération du secret échoue, l'instance ne démarre pas.
- Si vous installez le secret en tant que volume, Cloud Run n'effectue aucune vérification au démarrage de l'instance. Toutefois, pendant l'exécution, si un secret est inaccessible, les tentatives de lecture du volume installé échoueront.
Propriété des volumes
La propriété d'un volume secret Cloud Run 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 toujours le cas pour les jobs, la racine est propriétaire du volume.
Avant de commencer
-
Enable the Secret Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Utilisez un secret existant ou créez-en un dans Secret Manager, comme décrit dans la section Créer un secret.
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 APIGoogle 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 pages Autorisations de déploiement et Gérer les accès.
Rendre un secret accessible à Cloud Run
Vous pouvez rendre un secret accessible à votre job à 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 :
Sélectionnez Jobs dans le menu, puis cliquez sur Déployer un conteneur pour remplir la page des paramètres initiaux du job. Si vous configurez un job existant, sélectionnez-le, puis cliquez sur Afficher et modifier la configuration du job.
Cliquez sur Conteneur(s), Volumes, 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" :
Pour exposer le secret en tant que variable d'environnement :
- Cliquez sur l'onglet Conteneur(s).
- Dans l'onglet Variables et secrets, cliquez sur Référencer un secret.
- Dans le champ Nom 1, saisissez le nom de la variable d'environnement.
- Dans la liste Secret, sélectionnez le secret que vous souhaitez utiliser.
- Dans la liste Version 1, sélectionnez la version du secret à référencer.
- Cliquez sur OK.
- Cliquez sur Créer ou Déployer.
Pour installer un secret en tant que volume, procédez comme suit :
- Cliquez sur l'onglet Volumes, puis sélectionnez Ajouter un volume.
- Dans la liste Type de volume, sélectionnez Secret.
- Dans le champ Nom du volume, saisissez un nom ou acceptez le nom par défaut.
- Dans la liste Secret, sélectionnez le secret que vous souhaitez utiliser.
- Dans le champ Chemin d'accès 1, saisissez le nom du fichier à installer.
- Dans la liste Version 1, sélectionnez la version du secret à référencer. La dernière version est sélectionnée par défaut. Si vous le souhaitez, vous pouvez sélectionner une version spécifique.
- Cliquez sur OK.
- Accédez à l'onglet Conteneur(s) pour installer votre secret dans le conteneur.
- Dans l'onglet Installations de volume, cliquez sur Installer le volume.
- Dans la liste Nom 1, sélectionnez le nom de votre volume.
- Dans le champ Chemin d'installation 1, 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.
- Cliquez sur OK.
- Cliquez sur Créer ou Déployer.
- 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
Remplacez les éléments suivants :
- JOB_NAME : nom de votre job.
- ENV_VAR_NAME : nom de la variable d'environnement à utiliser pour le secret.
- SECRET_NAME : nom du secret dans le même projet (par exemple,
mysecret
). - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - IMAGE_URL : 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 les éléments suivants :
- JOB_NAME : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - PATH : chemin d'accès au volume et 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 : nom du secret dans le même projet (par exemple,
mysecret
). - VERSION : version du secret. Utilisez
latest
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 les éléments suivants :
- JOB : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - SECRET_LOOKUP_NAME : nom ayant une syntaxe de nom de secret valide, par exemple
my-secret
. Elle peut ê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 les éléments suivants :
- JOB_NAME : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - PATH : chemin d'accès au volume et 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 : numéro du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - SECRET_LOOKUP_NAME : nom ayant une syntaxe de nom de secret valide, par exemple
my-secret
. Elle peut être identique à SECRET_NAME. - VOLUME_NAME : n'importe quel nom, par exemple
my-volume
. Elle peut être identique à SECRET_NAME.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Ajoutez les éléments suivants à une ressourcegoogle_cloud_run_v2_job
dans votre configuration Terraform :Pour les secrets exposés en tant que variables d'environnement :
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
}
Remplacez les éléments suivants :
- JOB_NAME par le nom de votre job Cloud Run
- REGION : la région Google Cloud . Exemple :
europe-west1
. - IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
.
Pour les secrets installés en tant que chemins de fichiers :
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "SECRET_NAME"
}
}
}
}
}
Remplacez les éléments suivants :
- JOB_NAME par le nom de votre job Cloud Run
- REGION : la région Google Cloud . Exemple :
europe-west1
. - IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - VOLUME_NAME : n'importe quel nom, par exemple
my-volume
. Elle peut être identique àSECRET_NAME
. - MOUNT_PATH : chemin d'accès au volume et 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 : nom du secret, par exemple,
mysecret
.
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 :
Sélectionnez Jobs dans le menu, puis cliquez sur Déployer un conteneur pour remplir la page des paramètres initiaux du job. Si vous configurez un job existant, sélectionnez-le, puis cliquez sur Afficher et modifier la configuration du job.
Cliquez sur Conteneur(s), Volumes, 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" :
Pour exposer le secret en tant que variable d'environnement :
- Cliquez sur l'onglet Conteneur(s).
- Dans l'onglet Variables et secrets, cliquez sur Référencer un secret.
- Dans le champ Nom 1, saisissez le nom de la variable d'environnement.
- Dans la liste Secret, cliquez sur Saisir le secret manuellement.
Saisissez l'ID de ressource du secret au format suivant :
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Remplacez les éléments suivants :
PROJECT_NUMBER par le numéro de votre Google Cloud projet. Pour obtenir des instructions détaillées sur la recherche de votre numéro de projet, consultez Créer et gérer des projets.
SECRET_NAME : nom du secret dans Secret Manager.
Dans la liste Version 1, sélectionnez la version du secret à référencer.
Cliquez sur OK.
Cliquez sur Créer ou Déployer.
Pour installer un secret en tant que volume, procédez comme suit :
- Cliquez sur l'onglet Volumes, puis sélectionnez Ajouter un volume.
- Dans la liste Type de volume, sélectionnez Secret.
- Dans le champ Nom du volume, saisissez un nom ou acceptez le nom par défaut.
- Dans la liste Secret, cliquez sur Saisir le secret manuellement.
Saisissez l'ID de ressource du secret au format suivant :
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Remplacez les éléments suivants :
PROJECT_NUMBER par le numéro de votre Google Cloud projet. Pour obtenir des instructions détaillées sur la recherche de votre numéro de projet, consultez Créer et gérer des projets.
SECRET_NAME : nom du secret dans Secret Manager.
Dans le champ Chemin d'accès 1, saisissez le nom du fichier à installer.
Dans la liste Version 1, sélectionnez la version du secret à référencer. La dernière version est sélectionnée par défaut. Si vous le souhaitez, vous pouvez sélectionner une version spécifique.
Cliquez sur OK.
Accédez à l'onglet Conteneur(s) pour installer votre secret dans le conteneur.
Dans l'onglet Installations de volume, cliquez sur Installer le volume.
Dans la liste Nom 1, sélectionnez le nom de votre volume.
Dans le champ Chemin d'installation 1, 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.
Cliquez sur OK.
Cliquez sur Créer ou Déployer.
- 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 : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - PATH : chemin d'accès au volume et 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 : numéro du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
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 les éléments suivants :
- JOB : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - PROJECT_NUMBER : numéro du projet dans lequel le secret a été créé.
- SECRET_LOOKUP_NAME : nom ayant une syntaxe de nom de secret valide, par exemple
my-secret
. Elle peut ê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 les éléments suivants :
- JOB_NAME : nom de votre job.
- IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - PATH : chemin d'accès au volume et 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 : numéro du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple,
mysecret
. - VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
. - SECRET_LOOKUP_NAME : nom ayant une syntaxe de nom de secret valide (par exemple,
my-secret
), pouvant être identique à SECRET_NAME. - VOLUME_NAME : n'importe quel nom, par exemple
my-volume
. Il peut être identique à SECRET_NAME.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Ajoutez les éléments suivants à une ressourcegoogle_cloud_run_v2_job
dans votre configuration Terraform :Pour les secrets exposés en tant que variables d'environnement :
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
}
Remplacez les éléments suivants :
- JOB_NAME par le nom de votre job Cloud Run
- REGION : la région Google Cloud . Exemple :
europe-west1
. - IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - SECRET_NAME : nom du secret, par exemple,
mysecret
. - PROJECT_ID : ID du projet dans lequel le secret a été créé.
- VERSION : version du secret. Utilisez
latest
pour la version la plus récente, ou un nombre, par exemple2
.
Pour les secrets installés en tant que chemins de fichiers :
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
}
}
}
}
}
Remplacez les éléments suivants :
- JOB_NAME par le nom de votre job Cloud Run
- REGION : région Google Cloud , par exemple
europe-west1
. - IMAGE_URL : référence à l'image de conteneur (par exemple,
us-docker.pkg.dev/cloudrun/container/job:latest
). - VOLUME_NAME : n'importe quel nom, par exemple
my-volume
. Il peut être identique àSECRET_NAME
. - MOUNT_PATH : chemin d'accès au volume et 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_ID : ID du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple,
mysecret
.
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 Afficher et modifier la configuration du job.
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
Les limites suivantes s'appliquent au montage des secrets :
- Cloud Run ne vous permet pas d'installer des secrets sur
/dev
,/proc
et/sys
, ni dans leurs sous-répertoires. - 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
.