Restreindre l'entrée réseau 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, le point de terminaison d'un service Cloud Run est accessible depuis les chemins d'entrée réseau suivants :

  • Les URL run.app par défaut, que vous pouvez désactiver
  • Tous les mappages de domaine configurés
  • Tout équilibreur de charge d'application externe ou interne configuré

Tous les chemins d'entrée réseau sont soumis au paramètre d'entrée du service. Les chemins d'entrée et le paramètre d'entrée par défaut permettent à n'importe quelle ressource sur Internet d'atteindre votre service Cloud Run. Vous pouvez utiliser une contrainte personnalisée pour limiter les paramètres d'entrée pour votre organisation ou pour un ensemble de projets. L'authentification IAM s'applique toujours aux requêtes qui atteignent les points de terminaison de service à partir de l'un des chemins d'entrée réseau précédents. Pour une approche multicouche de la gestion des accès, utilisez à la fois les paramètres d'entrée réseau et l'authentification IAM.

Paramètres d'entrée réseau 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, et s'ils utilisent l'URL run.app par défaut et non un domaine personnalisé :
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.

Équilibrage de charge interne et cloud Ce paramètre 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 ce paramètre pour effectuer les opérations suivantes :
  • 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.

Remarque : Pour activer ce paramètre dans gcloud CLI, utilisez internal-and-cloud-load-balancing. Pour activer ce paramètre dans la console Google Cloud, sélectionnez Interne > Autoriser le trafic provenant d'équilibreurs de charge d'application externes.
Tous 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, 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.

  • Lors d'un appel depuis Cloud Run, App Engine ou depuis Cloud Run Functions vers un service Cloud Run défini sur "Interne" ou sur "équilibrage de charge Interne et Cloud", le trafic doit être acheminé via un réseau VPC considéré comme interne. Consultez la section Recevoir des requêtes d'autres services Cloud Run, d'App Engine et de fonctions Cloud Run.

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

  • 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".

Définir l'entrée

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

Console

  1. Dans la console Google Cloud, accédez à la page Cloud Run :

    Accédez à Cloud Run

  2. Si vous configurez un nouveau service, cliquez sur Déployer un conteneur et sélectionnez Service pour afficher le formulaire Créer un service. Remplissez la page initiale des paramètres du service.

  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.

gcloud

  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

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    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"

  deletion_protection = false # set to "true" in production

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

Désactiver l'URL par défaut

Désactivez les URL run.app par défaut d'un service Cloud Run pour n'autoriser que le trafic provenant des autres chemins d'entrée du service : Cloud Load Balancing et tout mappage de domaine configuré.

Pour désactiver l'URL par défaut, procédez comme suit :

Ligne de commande

  • Pour désactiver l'URL run.app d'un service, exécutez la commande gcloud beta run deploy ou gcloud beta run services update avec l'option --no-default-url :

    gcloud beta run deploy SERVICE_NAME --no-default-url

    SERVICE_NAME correspond au nom de votre service Cloud Run.

Dans le résultat, l'URL s'affiche en tant que None.

Pour restaurer l'URL par défaut, utilisez l'option --default-url.

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Pour désactiver l'URL run.app, utilisez l'annotation run.googleapis.com/default-url-disabled :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    Remplacer

    • SERVICE par le nom de votre service Cloud Run ;
    • 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. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

Pour restaurer l'URL par défaut, supprimez l'annotation run.googleapis.com/default-url-disabled.

Les services Google Cloud suivants utilisent l'URL run.app par défaut pour appeler Cloud Run. La désactivation de l'URL par défaut run.app empêche ces services de fonctionner comme prévu :

Étape suivante