Configurer les secrets pour les instances

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 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 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

  1. 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.

    Activer l'API

  2. 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 :

Pour autoriser Cloud Run à accéder au secret, l'identité du service doit disposer du rôle suivant :

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 que us-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 exemple mysecret.
    • VERSION : version du secret. Utilisez latest pour la dernière version ou un nombre, par exemple 2.
  • 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

  1. 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
  2. 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 que us-docker.pkg.dev/cloudrun/container/hello:latest.
    • ENV_VAR : nom de la variable d'environnement.
    • SECRET_VERSION : version du secret. Utilisez latest pour la dernière version ou un nombre, par exemple 2.
    • SECRET_NAME : nom du secret, par exemple mysecret.
  3. 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 que us-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 latest pour la dernière version ou un nombre, par exemple 2.
  4. 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 que us-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 latest pour la dernière version ou un nombre, par exemple 2.

YAML

  1. 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
  2. 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 que us-docker.pkg.dev/cloudrun/container/hello:latest.
    • ENV_VAR : nom de la variable d'environnement.
    • SECRET_VERSION : version du secret. Utilisez latest pour la dernière version ou un nombre, par exemple 2.
  3. 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 que us-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 latest pour la dernière version ou un nombre, par exemple 2.
  4. 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

  1. Exécutez la commande suivante :

    gcloud beta run instances describe INSTANCE
  2. 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 que us-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 que us-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 et latest le 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, /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.

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.