Configurer l'accès aux services privés

Cette page explique comment configurer l'accès aux services privés sur votre réseau VPC.

L'accès aux services privés est mis en œuvre sous la forme d'une connexion d'appairage VPC entre votre réseau VPC et le réseau VPC des services Google sous-jacent, où réside votre instance Cloud SQL. La connexion privée permet aux instances de VM de votre réseau VPC de communiquer avec les services auxquels vous accédez exclusivement à l'aide d'adresses IP internes. Les instances de VM n'ont pas besoin d'accès Internet ni d'adresses IP externes pour accéder aux services disponibles via l'accès aux services privés.

Avant de commencer

Cloud SQL requiert l'accès aux services privés pour chaque réseau VPC utilisé pour les connexions IP privées. Pour gérer une connexion d'accès aux services privés, l'utilisateur doit disposer des autorisations IAM suivantes :

  • compute.networks.list
  • compute.addresses.create
  • compute.addresses.list
  • servicenetworking.services.addPeering

Si vous ne disposez pas de ces autorisations, vous risquez d'obtenir des erreurs de type "autorisations insuffisantes".

Si vous utilisez un réseau VPC partagé, vous devez également :

  • Ajouter votre utilisateur au projet hôte.
  • Attribuer les quatre mêmes autorisations à cet utilisateur sur le projet hôte.
  • Accorder l'autorisation IAM compute.globalAddresses.list à l'utilisateur.

Configurer l'accès aux services privés pour Cloud SQL

Le processus de configuration de l'accès aux services privés s'effectue en deux étapes :

  • Sélection d'une plage d'adresses IP existante ou attribution d'une nouvelle plage.

    Vous pouvez également autoriser Google à allouer la plage automatiquement. Dans ce cas, Google alloue automatiquement une plage d'adresses IP avec une longueur de préfixe de /20 et utilise le nom default-ip-range.

    Si vous souhaitez créer des instances dans plusieurs régions ou pour différents types de bases de données, vous devez disposer d'une plage d'adresses IP d'au moins /24 pour chaque région ou type de base de données. Cela inclut d'autres applications telles que Filestore ou Memorystore. Pour une nouvelle région ou un nouveau type de base de données, Cloud SQL doit disposer d'une plage libre de taille /24.

  • Création d'une connexion privée entre votre réseau VPC et le réseau du producteur de services.

Allouer une plage d'adresses IP

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Sélectionnez le réseau VPC que vous souhaitez utiliser.
  3. Sélectionnez l'onglet Connexion au service privé.
  4. Sélectionnez l'onglet Plages d'adresses IP allouées pour les services.
  5. Cliquez sur Allouer une plage d'adresses IP.
  6. Dans le champ Nom de la plage allouée, spécifiez google-managed-services-VPC_NETWORK_NAME, où VPC_NETWORK_NAME est le nom du réseau VPC que vous connectez (par exemple, google-managed-services-default). Le champ Description est facultatif.
  7. Sélectionnez l'option Personnalisée, puis saisissez la plage d'adresses IP à allouer au format CIDR.
  8. Cliquez sur Allouer pour créer la plage allouée.

gcloud

Effectuez l'une des opérations suivantes :

  • Pour spécifier une plage d'adresses et une longueur de préfixe (masque de sous-réseau), utilisez les options addresses et prefix-length. Par exemple, pour allouer le bloc CIDR 192.168.0.0/16, spécifiez 192.168.0.0 pour l'adresse et 16 pour la longueur du préfixe.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --addresses=192.168.0.0 \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            
  • Pour spécifier uniquement une longueur de préfixe (masque de sous-réseau), utilisez l'option prefix-length. Si vous ne spécifiez pas de plage d'adresses, Google Cloud sélectionne automatiquement une plage d'adresses non utilisée sur votre réseau VPC. L'exemple suivant choisit une plage d'adresses IP non utilisée avec une longueur de préfixe de 16 bits.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            

Remplacez VPC_NETWORK_NAME par le nom de votre réseau VPC, tel que my-vpc-network.

L'exemple suivant alloue une plage d'adresses IP permettant aux ressources du réseau VPC my-vpc-network de se connecter à des instances Cloud SQL à l'aide d'une adresse IP privée.

    gcloud compute addresses create google-managed-services-my-vpc-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --network=projects/myprojectid/global/networks/myvpcnetwork \
    --project=my-project
    

Terraform

Pour allouer une plage d'adresses IP, utilisez une ressource Terraform.

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Supprimer les modifications

Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à l'invite :

terraform destroy

Créer une connexion privée

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Sélectionnez le réseau VPC que vous souhaitez utiliser.
  3. Sélectionnez l'onglet Connexion au service privé.
  4. Sélectionnez l'onglet Connexions privées aux services.
  5. Cliquez sur Créer une connexion pour créer une connexion privée entre votre réseau et un producteur de services.
  6. Pour l'allocation attribuée, sélectionnez une ou plusieurs plages attribuées existantes qui ne sont pas utilisées par d'autres producteurs de services.
  7. Cliquez sur Connecter pour créer la connexion.

gcloud

  1. Créez une connexion privée.

    gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID
    

    La commande lance une opération d'instance Cloud SQL de longue durée et renvoie un ID d'opération.

  2. Vérifiez si l'opération a réussi.

    gcloud services vpc-peerings operations describe \
    --name=OPERATION_ID
    

Vous pouvez spécifier plusieurs plages allouées lorsque vous créez une connexion privée. Par exemple, si une plage est épuisée, vous pouvez affecter d'autres plages allouées. Le service utilise les adresses IP de toutes les plages fournies dans l'ordre que vous avez spécifié.

Terraform

Pour créer une connexion privée, utilisez une ressource Terraform.

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

Le rôle servicenetworking.serviceAgent est attribué à un compte de service au format service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com lors de la création de la connexion privée, car le compte est soumis à un provisionnement JIT (Just-in-Time).

Si vous rencontrez une erreur concernant l'autorisation compute.globalAddresses.list ou compute.projects.get pour le projet, exécutez cette commande gcloud :

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

Modifier la configuration d'accès au service privé

Vous pouvez modifier la plage d'adresses allouée d'une connexion de service privé sans modifier les instances Cloud SQL existantes. Pour modifier l'adresse IP privée d'une instance Cloud SQL existante, suivez ces étapes.

Pour modifier la plage d'adresses allouée, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Sélectionnez le réseau VPC que vous souhaitez utiliser.
  3. Sélectionnez l'onglet Connexion au service privé.
  4. Sélectionnez l'onglet Plages d'adresses IP allouées pour les services.
  5. Sélectionnez le nom de la plage que vous souhaitez supprimer.

  6. Cliquez sur Libérer.

  7. Cliquez sur Allouer une plage d'adresses IP.

  8. Créez une plage utilisant le même nom avec la nouvelle plage.

    Le nom est important, car la connexion privée a déjà été établie avec ce nom d'adresse.

gcloud services vpc-peerings update \
--network=VPC_NETWORK_NAME \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force

Modifier l'adresse IP privée d'une instance Cloud SQL existante

Pour modifier l'adresse IP privée d'une instance Cloud SQL existante, déplacez l'instance de son réseau d'origine vers un réseau VPC temporaire. Ensuite, modifiez la configuration d'accès aux services privés du réseau d'origine de l'instance et replacez l'instance Cloud SQL dans son réseau d'origine.

Pour déplacer l'instance dans un autre réseau VPC, suivez toute la procédure suivante, à l'exception de la dernière étape (replacer l'instance dans son réseau d'origine). Dans ce cas, TEMPORARY_VPC_NETWORK_NAME correspond au nouveau réseau VPC. Supprimez également l'ancienne connexion privée. Il peut s'écouler quelques jours avant que la connexion privée supprimée ne s'affiche plus dans Google Cloud Console.

Si l'instance Cloud SQL est hébergée dans un réseau VPC partagé, les variables VPC_NETWORK_NAME utilisées dans les instructions suivantes doivent correspondre aux noms de réseau VPC du projet hôte. Pour spécifier un réseau avec un réseau VPC partagé, utilisez l'URL complète du réseau, par exemple, projects/HOST_PROJECT/global/networks/NETWORK_NAME.

Console

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Créez un réseau VPC temporaire.
  3. Créez une allocation d'adresses IP dans le réseau VPC temporaire.
  4. Créez une connexion privée dans le réseau VPC temporaire.
  5. Déplacez l'instance Cloud SQL vers le réseau VPC temporaire.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \
      --no-assign-ip
    
  6. Modifiez la configuration d'accès aux services privés dans le réseau d'origine pour ajouter une plage allouée ou supprimer des plages existantes.

  7. Replacez l'instance Cloud SQL dans le réseau VPC d'origine.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/ORIGINAL_VPC_NETWORK_NAME \
      --no-assign-ip