Votre instance 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 à disposition du conteneur en tant que fichiers. Lors de la lecture d'un volume, Cloud Run extrait toujours la valeur du secret depuis Secret Manager pour 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
latestcomme 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 du déploiement de l'instance, 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 le démarrage de 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é échouent.
Propriété du volume
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 l'instance, le volume appartient à la racine.
Avant de commencer
Activer l'API Secret Manager
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.- Utilisez un secret existant ou créez-en un dans Secret Manager, comme décrit dans 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 l'instance 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 instance Cloud Run communique avec Google Cloud des API, telles que les 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 instance à l'aide de Google Cloud CLI ou de YAML lorsque vous déployez une nouvelle instance ou mettez à jour une instance existante :
gcloud
Pour exposer le secret en tant que variable d'environnement lorsque vous déployez une instance, exécutez la commande suivante :
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION
Remplacez les éléments suivants :
INSTANCE: nom de l'instance.IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.ENV_VAR_NAME: nom de la variable d'environnement que vous souhaitez utiliser avec le secret.SECRET_NAME: nom du secret dans le même projet, par exemplemysecret.VERSION: version du secret. Utilisezlatestpour la dernière version ou un nombre, par exemple2.
Pour mettre à jour plusieurs secrets en même temps, 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, exécutez la commande suivante :
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
Pour effacer les secrets existants et rendre un nouveau secret accessible à l'instance, utilisez l'option
--set-secrets:gcloud beta run instances update INSTANCE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
YAML
Si vous créez une instance, ignorez cette étape. Si vous mettez à jour une instance existante, téléchargez sa configuration YAML :
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Pour les secrets exposés en tant que variables d'environnement :
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: SECRET_VERSION name: SECRET_NAME
Remplacez les éléments suivants :
- INSTANCE : nom de votre instance Cloud Run.
IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- ENV_VAR : nom de la variable d'environnement.
- SECRET_VERSION : version du secret. Utilisez
latestpour la dernière version ou un nombre, par exemple2. - SECRET_NAME : nom du secret, par exemple
mysecret.
Pour les secrets installés en tant que chemins de fichiers :
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME secret: secretName: SECRET_NAME items: - key: SECRET_VERSION path: SECRET_NAME
Remplacez les éléments suivants :
- INSTANCE : nom de votre instance Cloud Run.
IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- VOLUME_NAME : nom de votre choix pour le volume.
- MOUNT_PATH : chemin relatif où vous installez le
volume, par exemple
/mnt/my-volume. - SECRET_NAME : nom du secret, par exemple
mysecret. - SECRET_VERSION : version du secret. Utilisez
latestpour la dernière version ou un nombre, par exemple2.
Remplacez l'instance par sa nouvelle configuration à l'aide de la commande suivante :
gcloud beta run services replace service.yaml
Référencer des secrets provenant d'autres projets
Pour référencer un secret provenant d'un autre projet, vérifiez que le compte d'instance de votre projet a accès au secret.
gcloud
Pour référencer un secret en tant que variable d'environnement, exécutez la commande suivante :
gcloud beta run instances deploy INSTANCE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
Remplacez les éléments suivants :
- INSTANCE : nom de l'instance.
IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- 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
latestpour la dernière version ou un nombre, par exemple2.
YAML
Si vous créez une instance, ignorez cette étape. Si vous mettez à jour une instance existante, téléchargez sa configuration YAML :
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Pour les secrets exposés en tant que variables d'environnement :
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: SECRET_VERSION name: SECRET_LOOKUP_NAME
Remplacez les éléments suivants :
- INSTANCE : nom de votre instance Cloud Run.
- SECRET_LOOKUP_NAME : nom dont la syntaxe est valide pour un nom de secret
, par exemple
my-secret. Il peut être identique à SECRET_NAME. - PROJECT_NUMBER : numéro du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple
mysecret. IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- ENV_VAR : nom de la variable d'environnement.
- SECRET_VERSION : version du secret. Utilisez
latestpour la dernière version ou un nombre, par exemple2.
Pour les secrets installés en tant que chemins de fichiers :
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME secret: secretName: SECRET_NAME items: - key: SECRET_VERSION path: SECRET_LOOKUP_NAME
Remplacez les éléments suivants :
- INSTANCE : nom de votre instance Cloud Run.
- SECRET_LOOKUP_NAME : nom dont la syntaxe est valide pour un nom de secret, par exemple
my-secret. Il peut être identique à SECRET_NAME. - PROJECT_NUMBER : numéro du projet dans lequel le secret a été créé.
- SECRET_NAME : nom du secret, par exemple
mysecret. IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- VOLUME_NAME : nom de votre choix pour le volume.
- MOUNT_PATH : chemin relatif où vous installez le
volume, par exemple
/mnt/my-volume. - SECRET_VERSION : version du secret. Utilisez
latestpour la dernière version ou un nombre, par exemple2.
Remplacez l'instance par sa nouvelle configuration à l'aide de la commande suivante :
gcloud beta run instances replace instance.yaml
Afficher les paramètres des secrets
Pour afficher les paramètres actuels des secrets pour votre instance Cloud Run, procédez comme suit :
gcloud
Exécutez la commande suivante :
gcloud beta run instances describe INSTANCE
Recherchez le paramètre des secrets dans la configuration renvoyée.
Supprimer des secrets d'une instance
Vous pouvez supprimer des secrets d'une instance à l'aide de gcloud CLI :
gcloud
Vous pouvez supprimer tous les secrets d'une instance ou spécifier un ou plusieurs secrets à supprimer.
Pour supprimer tous les secrets, exécutez la commande suivante :
gcloud beta run instances deploy INSTANCE --image IMAGE_URL \ --clear-secrets
Remplacez les éléments suivants :
- INSTANCE : nom de l'instance.
IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.
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 beta run instances deploy INSTANCE --image IMAGE_URL \ --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
Remplacez les éléments suivants :
- INSTANCE : nom de l'instance.
IMAGE_URL: référence à l'image de conteneur, telle queus-docker.pkg.dev/cloudrun/container/hello:latest.- 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 etlatestle chemin d'accès au secret. Vous pouvez également spécifier le chemin d'installation et le chemin d'accès au secret séparément :--set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION
Utiliser des secrets dans votre code
Pour obtenir des exemples sur l'accès aux secrets de votre code en tant que variables d'environnement, reportez-vous au tutoriel sur l'authentification de l'utilisateur final, en particulier la section Gérer une configuration sensible avec Secret Manager.
Limites
Les sections suivantes décrivent les limites qui s'appliquent à l'installation de secrets.
Chemins d'accès non autorisés
- Cloud Run ne vous permet pas d'installer des secrets sur
/dev,/procet/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.
Secrets régionaux
Cloud Run n'est pas compatible avec les secrets régionaux.
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.