Configurer une adresse IP privée

Cette page explique comment configurer une instance Cloud SQL afin qu'elle utilise une adresse IP privée.

Pour en savoir plus sur le fonctionnement de la connectivité IP privée ainsi que sur les exigences en termes d'environnement et de gestion, consultez la section Adresse IP privée.

Avant de commencer

Exigences relatives à l'API et à IAM

  • Vous devez activer l'API Service Networking pour votre projet.
  • Si vous utilisez un réseau VPC partagé, vous devez également activer cette API pour le projet hôte.

  • Pour gérer une connexion d'accès aux services privés, l'utilisateur doit disposer des autorisations IAM suivantes. Si vous ne disposez pas des autorisations nécessaires, vous pouvez obtenir des erreurs d'autorisations insuffisantes.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    Si vous utilisez un réseau VPC partagé, vous devez également ajouter votre utilisateur au projet hôte et lui attribuer les mêmes autorisations sur le projet hôte.

Accès aux services privés

Lorsque vous créez un réseau VPC dans votre projet, vous devez configurer l'accès aux services privés pour allouer une plage d'adresses IP et créer une connexion de service privée. Cela permet aux ressources du réseau VPC de se connecter aux instances Cloud SQL. La console fournit un assistant pour vous aider à mettre en place cette configuration.

Configurer une instance pour qu'elle utilise une adresse IP privée

Vous pouvez configurer une instance Cloud SQL pour qu'elle utilise une adresse IP privée lors de sa création, ou ultérieurement pour une instance existante.

Configurer une adresse IP privée pour une nouvelle instance

Pour configurer une instance Cloud SQL au moment de sa création afin qu'elle utilise une adresse IP privée, procédez comme suit :

Console

  1. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur CRÉER UNE INSTANCE.
  3. Dans l'assistant de création, sous Options de configuration, développez la section Connectivité.
  4. Cochez la case Adresse IP privée.

    Une liste déroulante affiche les réseaux VPC disponibles dans votre projet. Si votre projet est le projet de service d'un VPC partagé, les réseaux VPC du projet hôte y apparaissent également.

  5. Sélectionnez le réseau VPC que vous souhaitez utiliser :
  6. Si vous voyez apparaître Connexion de service privée requise :

    1. Cliquez sur CONFIGURER LA CONNEXION.
    2. Sous Allouer une plage d'adresses IP, choisissez l'une des options suivantes :
      • Sélectionnez une ou plusieurs plages d'adresses IP existantes, ou créez-en une depuis la liste déroulante. Le cas échéant, la liste déroulante inclut les plages déjà allouées. Vous pouvez aussi sélectionner ALLOUER UNE NOUVELLE PLAGE D'ADRESSES IP et saisir une nouvelle plage et un nouveau nom.
      • Utilisez une plage d'adresses IP allouée automatiquement dans votre réseau.
    3. Cliquez sur CONTINUER.
    4. Cliquez sur CRÉER UNE CONNEXION.
    5. Vérifiez que vous observez bien l'état La connexion de service privée pour le réseau VPN_NAME a bien été créée.
  7. Cliquez sur Enregistrer.

gcloud

Si vous ne l'avez pas déjà fait, suivez les instructions ci-dessous afin de configurer l'accès aux services privés pour Cloud SQL. Créez votre instance Cloud SQL en utilisant le paramètre --network pour spécifier le nom du réseau VPC sélectionné, ainsi que l'option --no-assign-ip pour désactiver l'adresse IP publique. La valeur du paramètre --network doit être au format suivant : projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME PROJECT_ID correspond à l'ID de projet du réseau VPC. Si le réseau VPC est un VPC partagé, il doit s'agir de l'identifiant du projet hôte de VPC partagé.
gcloud --project=[PROJECT_ID] beta sql instances create [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Configurer une adresse IP privée pour une instance existante

Lorsque vous configurez une instance Cloud SQL existante pour qu'elle utilise une adresse IP privée, celle-ci redémarre, ce qui entraîne un temps d'arrêt.

Pour configurer une instance existante afin qu'elle utilise une adresse IP privée, procédez comme suit :

Console

  1. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.
    Accéder à la page "Instances Cloud SQL"
  2. Cliquez sur le nom de l'instance pour ouvrir la page Présentation.
  3. Sélectionnez l'onglet Connexions.
  4. Cochez la case Adresse IP privée.

    Une liste déroulante affiche les réseaux disponibles dans votre projet. Si votre projet est le projet de service d'un VPC partagé, les réseaux VPC du projet hôte y apparaissent également.

  5. Sélectionnez le réseau VPC que vous souhaitez utiliser :
  6. Si vous voyez apparaître Connexion de service privée requise :

    1. Cliquez sur CONFIGURER LA CONNEXION.
    2. Sous Allouer une plage d'adresses IP, choisissez l'une des options suivantes :
      • Sélectionnez une ou plusieurs plages d'adresses IP existantes, ou créez-en une depuis la liste déroulante. Le cas échéant, la liste déroulante inclut les plages déjà allouées. Vous pouvez aussi sélectionner ALLOUER UNE NOUVELLE PLAGE D'ADRESSES IP et saisir une nouvelle plage et un nouveau nom.
      • Utilisez une plage d'adresses IP allouée automatiquement dans votre réseau.
    3. Cliquez sur CONTINUER.
    4. Cliquez sur CRÉER UNE CONNEXION.
    5. Vérifiez que vous observez bien l'état La connexion de service privée pour le réseau VPN_NAME a bien été créée.
  7. Cliquez sur Enregistrer.

gcloud

Si vous ne l'avez pas déjà fait, suivez les instructions ci-dessous afin de configurer l'accès aux services privés pour Cloud SQL. Mettez à jour votre instance Cloud SQL en utilisant le paramètre --network pour spécifier le nom du réseau VPC choisi.

VPC_NETWORK_NAME correspond au nom du réseau VPC choisi ; par exemple my-vpc-network. La valeur du paramètre "--network" doit être au format suivant : https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/global/networks/[VPC_NETWORK_NAME].

gcloud --project=[PROJECT_ID] beta sql instances patch [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Se connecter à une instance à l'aide de son adresse IP privée

L'accès aux services privés vous permet de vous connecter à des instances Cloud SQL à partir d'instances Compute Engine ou Google Kubernetes Engine dans le même réseau VPC (définies ici comme des sources internes) ou externes à ce réseau (sources externes).

Se connecter depuis une source interne

Pour vous connecter à partir d'une source appartenant au même projet Google Cloud que votre instance Cloud SQL (par exemple, le proxy d'authentification Cloud SQL exécuté sur une ressource Compute Engine), cette ressource doit se trouver dans le même réseau VPC que l'instance Cloud SQL.

Se connecter depuis une source externe

Vous pouvez vous connecter à partir d'un client sur un réseau externe (réseau sur site ou réseau VPC) si ce réseau est connecté au réseau VPC auquel votre instance Cloud SQL est connectée. Pour autoriser les connexions à partir d'un réseau externe, procédez comme suit :

  1. Vérifiez que le réseau VPC est connecté au réseau externe à l'aide d'un tunnel Cloud VPN ou d'un rattachement de VLAN pour une interconnexion dédiée ou une interconnexion partenaire.
  2. Identifiez l'appairage généré par la connexion aux services privés.
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  3. Modifiez toutes les connexions d'appairage pour activer l'exportation des routes personnalisées.
  4. Identifiez la plage allouée utilisée par la connexion aux services privés.
  5. Créez une annonce de routage personnalisée Cloud Router pour la plage allouée sur les routeurs cloud qui gèrent les sessions BGP pour vos tunnels Cloud VPN ou vos rattachements Cloud Interconnect (VLAN).

Se connecter depuis Cloud Shell

Cloud Shell n'est actuellement pas compatible avec la connexion à une instance Cloud SQL ne disposant que d'une adresse IP privée.

Se connecter à partir d'adresses non-RFC 1918

La RFC 1918 spécifie les adresses IP affectées à une utilisation en interne (c'est-à-dire au sein d'une organisation) et qui ne s'acheminent pas sur Internet. En particulier, il peut s'agir des éléments suivants :

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Les connexions à une instance Cloud SQL à l'aide d'une adresse IP privée sont automatiquement autorisées pour les plages d'adresses RFC 1918. De cette façon, tous les clients privés peuvent accéder à la base de données sans passer par le proxy.

Les plages d'adresses non-RFC 1918 (adresses situées en dehors de l'espace d'adresses RFC 1918) doivent être configurées en tant que réseaux autorisés.

Pour vous connecter à partir d'une adresse non-RFC 1918, vous devez définir une autorisation IP par instance, afin d'autoriser le trafic provenant de plages d'adresses non-RFC 1918.

Par exemple, exécutez une commande gcloud comme suit :

gcloud sql instances patch INSTANCE_NAME --authorized-networks 192.88.99.0/24,11.0.0.0/24

Par défaut, Cloud SQL n'apprend pas les routes de sous-réseau non-RFC 1918 à partir de votre VPC. Vous devez mettre à jour l'appairage de réseaux vers Cloud SQL pour exporter les routes non-RFC 1918.

gcloud compute networks peerings update cloudsql-mysql-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
  • cloudsql-mysql-googleapis-com est un nom de connexion de service privée provenant de la page Réseau VPC.

    Sélectionnez votre réseau, puis recherchez la section Connexion de service privée.

  • NETWORK est le nom du réseau VPC.

Dépannage

Cliquez sur les liens du tableau pour en savoir plus :

Pour ce problème... Le problème peut être... Essayez ce qui suit...
Aborted connection Erreur lors de la lecture des paquets ou connexion annulée. Consultez ces solutions possibles.
Erreurs Unauthorized to connect. Il peut y avoir de nombreuses causes premières. Consultez ces solutions possibles.
Échec d'association de réseau. L'API Service Networking API n'est pas activée dans le projet. Activez l'API Service Networking API dans le projet.
Remaining connection slots are reserved Le nombre maximal de connexions a été atteint. Augmentez la valeur de l'option max_connections.
Set Service Networking service account as servicenetworking.serviceAgent role on consumer project. Le compte de service Service Networking n'est pas lié au rôle servicenetworking.serviceAgent. Associez le compte de service Service Networking au rôle servicenetworking.serviceAgent.
error x509: certificate is not valid for any names, but wanted to match project-name:db-name. Problème connu : les appels de proxy Cloud SQL ne sont pas compatibles avec Go 1.15 pour le moment. En attendant, consultez cette discussion sur GitHub, qui inclut une solution de contournement.
Impossible d'analyser les certificats dans certains systèmes d'exploitation Les clients utilisant des bibliothèques x509 de macOS 11.0 (Big Sur) peuvent ne pas parvenir à analyser certains certificats d'instances mysql. L'erreur peut être présentée au client en tant qu'erreur générique, par exemple "Annulé". La solution consiste à effectuer une rotation du certificat du serveur et à recréer les certificats client.
Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection. Les appairages VPC n'ont pas été mis à jour après la modification ou la suppression d'une plage allouée. Pour en savoir plus sur les mises à jour de l'appairage VPC, consultez la section Essayer.
Allocated IP range not found in network. Les appairages VPC n'ont pas été mis à jour après la modification ou la suppression d'une plage allouée. Pour en savoir plus sur les mises à jour de l'appairage VPC, consultez la section Essayer.
ERROR: (gcloud.sql.connect) It seems your client does not have ipv6 connectivity and the database instance does not have an ipv4 address. Please request an ipv4 address for this database instance.. Vous essayez de vous connecter à votre instance IP privée à l'aide de Cloud Shell. À l'heure actuelle, il n'est pas possible de se connecter depuis Cloud Shell à une instance avec une adresse IP privée seulement.

Connexion annulée

Le message d'erreur Got an error reading communication packets ou Aborted connection xxx to db: DB_NAME s'affiche.

Cause possible

  • Instabilité du réseau.
  • Absence de réponse aux commandes keep-alive TCP (le client ou le serveur ne répond pas ou est peut-être surchargé).
  • La durée de vie de la connexion au moteur de base de données a été dépassée et le serveur met fin à la connexion.

Solutions possibles

Les applications doivent tolérer les défaillances du réseau et se baser sur les bonnes pratiques telles que le regroupement des connexions et les nouvelles tentatives. La plupart des regroupements de connexions interceptent ces erreurs lorsque cela est possible. Sinon, l'application doit réessayer ou échouer sans occasionner de blocage.

Pour effectuer de nouvelles tentatives de connexion, nous vous recommandons les techniques suivantes :

  1. Intervalle exponentiel entre les tentatives. Augmentez l'intervalle de temps entre chaque nouvelle tentative, de manière exponentielle.
  2. Ajoutez également un intervalle aléatoire.
La combinaison de ces techniques permet de réduire les limitations.


Connexion non autorisée

Le message d'erreur Unauthorized to connect s'affiche.

Cause possible

Il peut exister plusieurs causes, car l'autorisation se produit à plusieurs niveaux.

  • Au niveau de la base de données, il doit exister un utilisateur avec un mot de passe correspondant.
  • Au niveau du projet, l'utilisateur peut ne pas disposer des autorisations IAM appropriées.
  • Au niveau de Cloud SQL, la cause première peut dépendre de la façon dont vous vous connectez à votre instance. Si vous vous connectez directement à une instance via l'adresse IP publique, l'adresse IP source de la connexion doit se trouver dans le réseau autorisé de l'instance.

    La connectivité IP privée est autorisée par défaut, sauf si vous vous connectez à partir d'une adresse non-RFC 1918. Les adresses clientes non-RFC 1918 doivent être configurées en tant que réseaux autorisés.

    Par défaut, Cloud SQL n'apprend pas les routes de sous-réseau non-RFC 1918 à partir de votre VPC. Vous devez mettre à jour l'appairage de réseaux vers Cloud SQL pour exporter les routes non-RFC 1918. Exemple :

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    

    Si vous vous connectez via le proxy d'authentification Cloud SQL, assurez-vous d'avoir correctement configuré les autorisations IAM.

  • Au niveau du réseau, si l'instance Cloud SQL utilise une adresse IP publique, l'adresse IP source de la connexion doit se trouver dans un réseau autorisé.

Solutions possibles

  • Vérifiez le nom d'utilisateur et le mot de passe.
  • Vérifiez les rôles et les autorisations IAM de l'utilisateur.
  • Si vous utilisez une adresse IP publique, assurez-vous que la source se trouve dans les réseaux autorisés.

Échec d'association de réseau

Le message d'erreur Error: Network association failed due to the following error s'affiche indiquant de définir le compte de service Service Networking en tant que rôle servicenetworking.serviceAgent sur le projet client.

Cause possible

L'API Service Networking API n'est pas activée dans le projet.

Solutions possibles

Activez l'API Service Networking API dans votre projet. Si cette erreur s'affiche lorsque vous tentez d'attribuer une adresse IP privée à une instance Cloud SQL et que vous utilisez un VPC partagé, vous devez également activer l'API Service Networking API pour le projet hôte.


Les emplacements de connexion restants sont réservés

Le message d'erreur FATAL: remaining connection slots are reserved for non-replication superuser connections s'affiche.

Cause possible

Le nombre maximal de connexions a été atteint.

Solutions possibles

Modifiez la valeur de l'option max_connections.


Définir le compte de service Service Networking en tant que rôle servicenetworking.serviceAgent sur le projet client

Le message d'erreur set Service Networking service account as servicenetworking.serviceAgent role on consumer project. s'affiche.

Cause possible

Le compte de service Service Networking n'est pas lié au rôle servicenetworking.serviceAgent.

Solutions possibles

Pour résoudre ce problème, essayez d'associer le compte de service Service Networking au rôle servicenetworking.serviceAgent via ces commandes gcloud.

gcloud beta services identity create --service=servicenetworking.googleapis.com --project=PROJECT_ID
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com" --role="roles/servicenetworking.serviceAgent"

Erreur x509 : le certificat n'est valide pour aucun nom

Le message d'erreur error x509: certificate is not valid for any names, but wanted to match project-name:db-name s'affiche.

Cause possible

Problème connu : les appels de proxy Cloud SQL ne sont pas compatibles avec Go 1.15 pour le moment.

Solutions possibles

En attendant que le bug soit corrigé, consultez cette discussion sur GitHub, qui inclut une solution de contournement.


Impossible d'analyser les certificats dans certains systèmes d'exploitation

Lorsque vous utilisez des bibliothèques x509 de macOS 11.0 (Big Sur), il se peut que vous ne parveniez pas à analyser certains certificats d'instances mysql. L'erreur peut être présentée en tant qu'erreur générique, par exemple "Annulé".

Solutions possibles

Le bug est corrigé et les nouvelles instances ne rencontreront pas ce problème. Si d'anciennes instances rencontrent ce problème, effectuez une rotation du certificat de serveur et recréez les certificats client.


Impossible de modifier les plages allouées dans CreateConnection. Veuillez utiliser UpdateConnection

Le message d'erreur Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection ou The operation "operations/1234" resulted in a failure "Allocated IP range 'xyz' not found in network s'affiche.

Cause possible

Une connexion de service privée a été modifiée. Par exemple, lorsqu'une plage a été réservée, puis supprimée, la connexion privée est également supprimée. La première erreur se produit lorsque vous tentez d'établir une connexion à l'aide d'une plage réservée différente, sans recréer d'abord la connexion privée. Vous voyez la deuxième erreur lorsque la plage allouée a été modifiée, mais vpc-peerings n'a pas été mise à jour.

Solutions possibles

Vous devez recréer ou mettre à jour la connexion privée. Exécutez la commande suivante et veillez à utiliser l'argument --force :

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

Étapes suivantes