Adresse IP sortante statique

Par défaut, les charges de travail Cloud Run se connectent à des points de terminaison externes sur Internet à l'aide d'un pool régional d'adresses IP dynamiques partagées entre toutes les charges de travail sans serveur. Étant donné que d'autres charges de travail partagent ce pool, vous ne devez pas vous y fier lorsque vous avez besoin d'une adresse IP d'origine prévisible ou d'une réputation d'adresse IP isolée.

Configurez vos charges de travail Cloud Run pour acheminer les requêtes sortantes à l'aide d'une adresse IP statique dédiée dans les situations suivantes :

  • Vous vous connectez à une base de données ou à une API externe qui utilise une liste d'autorisation d'adresses IP ou un pare-feu.
  • Vous vous connectez à des points de terminaison externes sensibles à la réputation, tels que des passerelles de paiement, des bases de données hébergées ou des API partenaires protégées par des pare-feu d'application Web (WAF) tiers. Le trafic bruyant d'un autre locataire sur le pool d'adresses IP partagé par défaut peut dégrader la réputation des adresses IP et entraîner le blocage ou la limitation de vos requêtes par les WAF externes.
  • Vous exécutez des charges de travail d'analyse de réseau autorisée, d'énumération de ports, de fingerprinting d'hôte, de détection de failles, de scraping Web ou de tests de charge.

Pour envoyer des requêtes sortantes à partir d'une adresse IP statique dédiée, configurez votre service Cloud Run pour qu'il utilise la sortie VPC directe. Vous pouvez également créer un connecteur.

Présentation de la tâche

Pour acheminer les requêtes à l'aide d'une adresse IP statique, configurez la sortie VPC du service afin d'envoyer tout le trafic sortant (--vpc-egress=all-traffic) via un réseau VPC. Associez une passerelle Cloud NAT à ce réseau avec votre adresse IP statique réservée.

Dans ce tutoriel, vous allez configurer Cloud NAT en mode manuel et lui attribuer une seule adresse IP statique. Si vos charges de travail évoluent vers de nombreuses instances de conteneur ou ouvrent de nombreuses connexions simultanées, par exemple lors d'une analyse de réseau autorisée, attribuez plusieurs adresses IP statiques à Cloud NAT. Vous pouvez également augmenter le nombre minimal de ports par instance de conteneur ou activer l'allocation de ports dynamique pour éviter l'épuisement des ports. Découvrez comment les passerelles Cloud NAT utilisent les adresses IP et les ports.

Le routage de votre trafic via Cloud NAT n'ajoute pas de saut supplémentaire dans votre pile réseau, car la passerelle Cloud NAT et le routeur Cloud Router ne fournissent qu'un plan de contrôle, et les paquets ne passent pas par la passerelle NAT ou le routeur Cloud Router.

Configurer la traduction d'adresse réseau (NAT)

Si vous utilisez la sortie VPC directe ou un connecteur d'accès au VPC sans serveur, les requêtes du service Cloud Run arrivent sur votre réseau VPC. Si vous souhaitez acheminer les requêtes sortantes vers des points de terminaison externes à l'aide d'une adresse IP statique, configurez une passerelle Cloud NAT.

gcloud

  1. Créez un Cloud Router pour programmer une passerelle Cloud NAT :

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    Remplacez les éléments suivants :

    • ROUTER_NAME : nom de la ressource Cloud Router que vous souhaitez créer.
    • NETWORK_NAME : nom du réseau VPC que vous avez trouvé précédemment.
    • REGION : région dans laquelle vous souhaitez créer une passerelle Cloud NAT.
  2. Réserver une adresse IP statique Une ressource d'adresse IP réservée conserve l'adresse IP sous-jacente lorsque la ressource à laquelle elle est associée est supprimée et recréée :

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Remplacez les éléments suivants :

    • ORIGIN_IP_NAME : nom que vous souhaitez attribuer à la ressource d'adresse IP.
    • REGION : région qui exécutera le routeur Cloud NAT. Idéalement, la même région que votre service Cloud Run, afin de minimiser la latence et les coûts du réseau.
  3. Créez une configuration de passerelle Cloud NAT sur ce routeur pour acheminer le trafic provenant du réseau VPC à l'aide de l'adresse IP statique que vous avez créée :

    gcloud compute routers nats create NAT_NAME \
      --router=ROUTER_NAME \
      --region=REGION \
      --nat-custom-subnet-ip-ranges=SUBNET_NAME \
      --nat-external-ip-pool=ORIGIN_IP_NAME

    Remplacez les éléments suivants :

    • NAT_NAME : nom de la ressource de passerelle Cloud NAT que vous souhaitez créer.
    • ROUTER_NAME : nom de votre routeur Cloud Router.
    • REGION : région dans laquelle vous souhaitez créer une passerelle Cloud NAT.
    • SUBNET_NAME : nom de votre sous-réseau
    • ORIGIN_IP_NAME : nom de la ressource d'adresse IP réservée que vous avez créée à l'étape précédente.

Terraform

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

  1. Créez un Cloud Router pour programmer une passerelle Cloud NAT :

    resource "google_compute_router" "default" {
      name    = "cr-static-ip-router"
      network = google_compute_network.default.name
      region  = google_compute_subnetwork.default.region
    }

    Remplacez cr-static-ip-router par le nom de votre sous-réseau.

  2. Réserver une adresse IP statique Une ressource d'adresse IP réservée conserve l'adresse IP sous-jacente lorsque la ressource à laquelle elle est associée est supprimée et recréée :

    resource "google_compute_address" "default" {
      name   = "cr-static-ip-addr"
      region = google_compute_subnetwork.default.region
    }

    Remplacez cr-static-ip-addr par le nom de votre sous-réseau.

  3. Créez une configuration de passerelle Cloud NAT sur ce routeur pour acheminer le trafic provenant du réseau VPC à l'aide de l'adresse IP statique que vous avez créée :

    resource "google_compute_router_nat" "default" {
      name   = "cr-static-nat"
      router = google_compute_router.default.name
      region = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Remplacez cr-static-nat par le nom de votre passerelle Cloud NAT.

Acheminer le trafic Cloud Run via le réseau VPC

Une fois Cloud NAT configuré, déployez ou mettez à jour votre service Cloud Run avec la sortie VPC directeou le connecteur d'accès au VPC sans serveur, puis définissez la sortie VPC pour acheminer tout le trafic via le réseau VPC :

gcloud

Sortie VPC directe

Pour déployer ou mettre à jour votre service Cloud Run afin d'utiliser la sortie VPC directe et d'acheminer tout le trafic de sortie via celui-ci, exécutez la commande suivante :

gcloud run deploy SERVICE_NAME \
--image=IMAGE_URL \
--network=NETWORK \
--subnet=SUBNET \
--region=REGION \
--vpc-egress=all-traffic

Remplacez les éléments suivants :

  • SERVICE_NAME : nom du service Cloud Run que vous souhaitez déployer.
  • IMAGE_URL : 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 respecte le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • NETWORK : nom de votre réseau VPC.
  • SUBNET : nom de votre sous-réseau
  • REGION : région de votre service.

Connecteur d'accès au VPC sans serveur

Pour déployer ou mettre à jour votre service Cloud Run afin d'utiliser un connecteur d'accès au VPC sans serveur et d'acheminer tout le trafic sortant via celui-ci, exécutez la commande suivante :

gcloud run deploy SERVICE_NAME \
--image=IMAGE_URL \
--vpc-connector=CONNECTOR_NAME \
--region=REGION \
--vpc-egress=all-traffic

Remplacez les éléments suivants :

  • SERVICE_NAME : nom du service Cloud Run que vous souhaitez déployer.
  • IMAGE_URL : 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 respecte le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • CONNECTOR_NAME : nom de votre connecteur d'accès au VPC sans serveur.
  • REGION : région de votre service.

YAML

Sortie VPC directe

  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. Modifiez-les si nécessaire.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
            run.googleapis.com/vpc-access-egress: all-traffic
        spec:
          containers:
          - image: IMAGE_URL

    Remplacez les éléments suivants :

    • SERVICE : nom du service Cloud Run.
    • NETWORK : nom de votre réseau VPC.
    • SUBNET : nom de votre sous-réseau
    • IMAGE_URL : URL de l'image de conteneur de votre service.
  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

    Par défaut, la commande gcloud run services replace utilise le fichier service.yaml s'il est présent.

Connecteur d'accès au VPC sans serveur

  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. Modifiez-les si nécessaire.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
        spec:
          containers:
          - image: IMAGE_URL

    Remplacez les éléments suivants :

    • SERVICE : nom du service Cloud Run.
    • CONNECTOR_NAME : nom de votre réseau d'accès au VPC sans serveur.
    • IMAGE_URL : 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 respecte le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

    Par défaut, la commande gcloud run services replace utilise le fichier service.yaml s'il est présent.

Terraform

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

Sortie VPC directe

Ce service Cloud Run utilise la sortie VPC directe et achemine tout le trafic de sortie via celui-ci :

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    vpc_access {
      network_interfaces {
        network    = "default"
        subnetwork = "default"
        tags       = ["tag1", "tag2", "tag3"]
      }
    }
  }
}

Connecteur d'accès au VPC sans serveur

Ce service Cloud Run utilise un connecteur VPC et achemine tout le trafic de sortie via celui-ci :

resource "google_cloud_run_v2_service" "default" {
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

Remplacez us-docker.pkg.dev/cloudrun/container/hello par une référence à votre image de conteneur.

Vérifier l'adresse IP externe statique

Une fois la procédure ci-dessus terminée, vous avez configuré Cloud NAT sur votre réseau VPC avec une adresse IP statique prédéfinie, et vous avez acheminé tout le trafic sortant de votre service Cloud Run vers votre réseau VPC. Les requêtes en provenance de votre service Cloud Run sont acheminées via votre réseau VPC et atteignent les points de terminaison externes à l'aide de l'adresse IP statique.

Pour vérifier ce comportement et confirmer l'adresse IP d'origine utilisée par votre service, vous pouvez envoyer une requête à une API ou à un site Web tel que curlmyip.org qui affiche l'adresse IP d'origine.

Supprimer l'adresse IP externe statique

Si vous n'avez plus besoin d'adresse IP externe statique, consultez la page Libérer une adresse IP externe statique.