Restreindre l'entrée pour Cloud Run

Cette page explique comment utiliser les paramètres d'entrée pour restreindre l'accès réseau à votre service Cloud Run. Au niveau du réseau, par défaut, toutes les ressources d'Internet peuvent atteindre votre service Cloud Run sur son URL run.app ou sur un domaine personnalisé configuré dans Cloud Run. Vous pouvez modifier cette valeur par défaut en spécifiant un autre paramètre pour l'entrée. Tous les chemins d'entrée, y compris l'URL run.app par défaut, sont soumis à votre paramètre d'entrée. L'entrée est définie au niveau du service.

Les paramètres d'entrée et les méthodes d'authentification IAM permettent de gérer l'accès à un service. Ils sont indépendants les uns des autres. Pour une approche multicouche de la gestion des accès, utilisez les deux.

Paramètres d'entrée disponibles

Voici les paramètres disponibles :

Paramètre Description
Interne La plus restrictive. Elle autorise les requêtes provenant des sources suivantes :
  • Équilibreur de charge d'application interne, y compris les requêtes provenant de réseaux VPC partagés lorsqu'ils sont acheminés via l'équilibreur de charge d'application interne
  • Ressources autorisées par tout périmètre VPC Service Controls contenant votre service Cloud Run. Cloud Run doit être configuré en tant que service restreint.
  • Réseaux VPC situés dans le même projet que votre service Cloud Run
  • Entrée VPC partagé : réseau VPC partagé vers lequel votre révision est configurée pour envoyer du trafic. Pour savoir dans quelles situations le trafic de VPC partagé est reconnu comme du trafic "interne", consultez la section Informations spécifiques aux VPC partagés.
  • Les produits Google Cloud suivants, s'ils se trouvent dans le même projet ou le même périmètre VPC Service Controls que votre service Cloud Run :
    • Cloud Scheduler
    • Cloud Tasks
    • Eventarc
    • Pub/Sub
    • Workflows
    • BigQuery
Les requêtes provenant de ces sources restent dans le réseau Google, même si elles accèdent à votre service à l'URL run.app. Les requêtes provenant d'autres sources, y compris Internet, ne peuvent pas atteindre votre service via l'URL run.app ou les domaines personnalisés.

Les requêtes adressées à Cloud Run depuis Cloud Run, Cloud Functions ou App Engine doivent être envoyées au réseau VPC pour être considérées comme internes. Pour acheminer les requêtes vers le réseau VPC, utilisez la sortie VPC directe ou un connecteur d'accès au VPC sans serveur, et activez l'accès privé à Google sur le sous-réseau associé à la sortie VPC directe ou au connecteur.

Il n'existe aucune compatibilité avec l'architecture mutualisée, c'est-à-dire plusieurs domaines de confiance au sein d'un même projet.
Équilibrage de charge interne et cloud Il autorise les requêtes provenant des ressources suivantes :
  • Ressources autorisées par le paramètre Interne plus restrictif
  • Équilibreur de charge d'application externe
Utilisez le paramètre "Équilibrage de charge interne et cloud" pour :
  • Accepte les requêtes provenant d'Internet via l'équilibreur de charge d'application externe. Les requêtes directes vers l'URL run.app provenant d'Internet ne sont pas autorisées ;
  • Assurez-vous que les requêtes provenant d'Internet sont soumises à des fonctionnalités d'équilibreur de charge d'application externe (telles que : Identity-Aware Proxy, Google Cloud Armor et Cloud CDN).
Tout La moins restrictive. Autorise toutes les requêtes, y compris les requêtes provenant directement d'Internet vers l'URL run.app.

Accéder aux services internes

Les considérations supplémentaires suivantes s'appliquent :

  • Lorsque vous accédez à des services internes, appelez-les comme vous le feriez habituellement avec leurs URL publiques, soit l'URL par défaut run.app, soit un domaine personnalisé configuré dans Cloud Run.

  • Pour les requêtes provenant d'instances de VM Compute Engine, aucune configuration supplémentaire n'est requise pour les machines disposant d'adresses IP publiques ou qui utilisent Cloud NAT. Sinon, consultez la section Recevoir des requêtes à partir de réseaux VPC.

  • Pour les requêtes provenant d'autres services Cloud Run ou de Cloud Functions dans le même projet, connectez le service ou la fonction à un réseau VPC et acheminez l'ensemble du trafic sortant via le connecteur, comme décrit sur la page VPC avec connecteurs. Notez que l'autorisation de demandeur IAM reste appliquée.

  • Les requêtes provenant de ressources situées au sein de réseaux VPC dans le même projet sont classées comme des requêtes "internes", même si la ressource dont elles proviennent a une adresse IP publique.

  • Les requêtes provenant de ressources se trouvant dans un projet distinct, mais situées dans le même périmètre VPC Service Controls, ne peuvent appeler un service interne que si vous configurez l'API Cloud Run Admin en tant que service restreint au sein du périmètre de service.

  • Pour savoir dans quelles situations le trafic de VPC partagé est reconnu comme du trafic "interne", consultez la section Informations spécifiques aux VPC partagés.

  • Les requêtes provenant de ressources sur site connectées au réseau VPC via Cloud VPN et Cloud Interconnect sont considérées des requêtes "internes".

  • Pour les requêtes envoyées depuis Cloud Scheduler, Cloud Tasks, Eventarc, Pub/Sub, BigQuery et Workflows à un service interne, les considérations suivantes s'appliquent :

    • Vous devez utiliser l'URL run.app par défaut de Cloud Run pour ce service, et non un domaine personnalisé.
    • Le job, la tâche, l'abonnement Pub/Sub, l'événement, le workflow ou la fonction distante BigQuery doivent se trouver dans le même projet ou périmètre VPC Service Controls que le service Cloud Run.
  • Vous pouvez appeler des services internes à partir de sources de trafic situées en dehors du réseau VPC en utilisant Cloud Scheduler, Cloud Tasks, Pub/Sub, Eventarc, Workflows ou BigQuery à partir du même projet ou du même périmètre VPC Service Controls.

Définir le trafic entrant

Vous pouvez définir le trafic entrant à l'aide de l'une des méthodes acceptées dans ces onglets :

Console

  1. Accédez à Cloud Run

  2. Si vous configurez un nouveau service, cliquez sur Créer un service et remplissez la page initiale des paramètres du service selon vos besoins.

  3. Si vous configurez un service existant, cliquez sur celui-ci, puis sur l'onglet Réseau.

  4. Sélectionnez le trafic entrant que vous souhaitez autoriser :

    Image

  5. Cliquez sur Créer ou sur Enregistrer.

Ligne de commande

  1. Si vous déployez un nouveau service, déployez votre service avec l'option --ingress :

    gcloud run deploy SERVICE --image IMAGE_URL --ingress INGRESS

    Remplacer

    • INGRESS par l'un des paramètres d'entrée disponibles :
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE par le nom de votre service
    • 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
  2. Si vous modifiez une entrée de service existante, procédez comme suit :

    gcloud run services update SERVICE --ingress INGRESS

    Remplacer

YAML

Vous pouvez télécharger et afficher les configurations de service existantes à l'aide de la commande gcloud run services describe --format export, qui renvoie les résultats nettoyés au format YAML. Vous pouvez ensuite modifier les champs décrits ci-dessous et importer le fichier YAML modifié à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les champs indiqués.

  1. Pour afficher et télécharger la configuration, exécutez la commande suivante :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Mettez à jour l'annotation run.googleapis.com/ingress: :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    Remplacer

    • SERVICE par le nom de votre service Cloud Run
    • INGRESS par l'un des paramètres d'entrée disponibles :
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION par un nouveau nom de révision ou supprimez-le (le cas échéant). Si vous indiquez un nouveau nom de révision, il doit répondre aux critères suivants :
      • Commencer par SERVICE-
      • Ne contenir que des lettres minuscules, des chiffres et -
      • Ne pas se terminer par -
      • Ne pas dépasser 63 caractères
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Terraform

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Ajoutez le code ci-dessous à votre fichier main.tf :

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "ingress-service"
  location = "us-central1"

  # For valid annotation values and descriptions, see
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
  ingress = "INGRESS_TRAFFIC_INTERNAL_ONLY"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" #public image for your service
    }
  }
}

Étape suivante