Configurer le transfert TCP IAP

Cette page explique comment configurer et utiliser le transfert TCP Identity-Aware Proxy (IAP) avec une adresse IP ou un nom d'hôte dans un Google Cloud environnement ou non-Google Cloud .

Présentation

Vous pouvez utiliser Google Cloud CLI pour créer des tunnels vers des ressources à l'aide d'une adresse IP privée ou d'un nom d'hôte de ressource. Si vous disposez de ressources externes dans des environnements non-Google Cloud connectés à Google Cloud via Cloud Interconnect ou un VPN, vous pouvez utiliser le transfert TCP IAP avec ces ressources.

Avant de commencer

Si vous devez créer un tunnel vers des ressources en dehors Google Cloud, vous devez configurer une connectivité hybride. La connectivité hybride est requise pour connecter vos ressources externes non-Google Cloud à Google Cloud. Pour en savoir plus, consultez la documentation de Cloud Interconnect ou de Cloud VPN.

Votre routeur cloud doit annoncer la plage d'adresses IP IAP-TCP 35.235.240.0/20, afin que les destinations renvoient le trafic de réponse via Cloud VPN ou Cloud Interconnect, et non via Internet. Si vous ne disposez pas de cette configuration, vous ne pouvez pas créer de tunnels vers des ressources externes à votre Google Cloud projet.

Pour configurer votre routeur cloud afin qu'il annonce la plage d'adresses IP IAP-TCP 35.235.240.0/20, suivez les instructions de la section Annoncer des plages d'adresses IP personnalisées.

Les procédures suivantes fournissent des exemples Google Cloud CLI pour effectuer les tâches. Pour savoir comment interagir avec des groupes de destination à l'aide des API, consultez la section Ressource REST : projects.iap_tunnel.locations.destGroups.

Créer un groupe de destination de tunnel

Lorsque vous configurez un tunnel, vous spécifiez un groupe de destination de tunnel à utiliser pour les vérifications des autorisations. Les groupes de destination de tunnel représentent des ressources qui présentent les mêmes restrictions d'accès au tunnel. Vous pouvez créer autant de groupes de destination que vous le souhaitez, chacun avec un nombre quelconque de plages d'adresses IP ou de noms de domaine complets correspondants. Les groupes de destination peuvent se chevaucher pour plus de flexibilité.

Lorsque vous créez un groupe de destination, vous devez spécifier une région. Pour obtenir les meilleurs résultats, la région que vous spécifiez doit correspondre à l'emplacement des ressources de destination. Par exemple, si les ressources sont connectées par un VPN, vous devez utiliser la région de la passerelle VPN.

Pour créer un groupe de destination, vous devez disposer de l'autorisation iap.tunnelDestGroups.create, que vous pouvez accorder via le rôle iap.tunnelDestGroupEditor. Pour attribuer un rôle unique, consultez la section Attribuer un rôle unique dans la documentation IAM.

Console

  1. Accédez à la page IAP et sélectionnez un projet si aucun n'est déjà sélectionné.

  2. Dans l'onglet Ressources SSH et TCP, cliquez sur Créer un groupe de destination.

  3. Saisissez un nom pour votre groupe. Le nom du groupe ne peut contenir que des lettres minuscules (a-z) et des traits d'union (-).

  4. Dans la liste déroulante, sélectionnez la région dans laquelle créer le groupe de destination.

  5. Dans la section Adresse IP, cliquez sur Ajouter une ligne, puis saisissez les adresses IP ou les noms de domaine complets des ressources.

    Une plage d'adresses IP se compose de plages séparées par une virgule au format CIDR, par exemple 10.1.2.0/24,172.0.0.0/8.

    Une liste de noms de domaine complets est une liste de noms d'hôtes séparés par une virgule, par exemple *.internal.company.com. Vous pouvez utiliser des caractères génériques avec votre entrée de nom de domaine complet.

  6. Cliquez sur Créer un groupe de destination.

gcloud

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

Remplacez les éléments suivants :

  • YOUR_GROUP_NAME : nom de votre groupe. Un nom de groupe ne peut contenir que des lettres minuscules (a-z) et des traits d'union (-).
  • REGION: région dans laquelle créer le groupe de destination, par exemple us-central1.
  • IP_RANGE_LIST : facultatif. Liste de plages d'adresses IP, qui se compose de plages séparées par une virgule au format CIDR, par exemple 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST : facultatif. La liste de noms de domaine complets est une liste de noms d'hôtes séparés par une virgule, par exemple *.internal.company.com. Si une entrée de nom de domaine complet comporte un préfixe de caractère générique, elle correspond à n'importe quel nom d'hôte avec la fin spécifiée. Sinon, elle nécessite une correspondance exacte. Si une requête correspond à une plage d'adresses IP ou à un nom de domaine complet, elle est considérée comme une correspondance.

Si vous ne savez pas quels groupes existent déjà, exécutez la commande suivante pour les lister :

gcloud iap tcp dest-groups list \
  --region=REGION

Gérer les groupes de destination de tunnel

Vous pouvez afficher les détails d'un groupe de destination, le modifier et le supprimer.

Console

  1. Accédez à la page IAP et cliquez sur l'onglet Ressources SSH et TCP.

    • Pour afficher les détails d'un groupe de destination, cliquez sur son nom.

    • Pour modifier un groupe de destination, sélectionnez-le, puis cliquez sur l'icône en forme de crayon pour ouvrir le panneau Modifier le groupe de destination. Vous pouvez également supprimer le groupe de destination à partir de ce panneau.

    • Pour supprimer un groupe de destination, sélectionnez-le, puis cliquez sur l'icône de la corbeille.

gcloud

Pour en savoir plus sur la gestion des groupes de destination à l'aide de gcloud CLI, consultez la section Commandes gcloud pour les groupes de destination.

Configurer les autorisations de tunnel

Pour créer un tunnel, vous devez disposer de l'autorisation iap.tunnelDestGroups.accessViaIAP sur le groupe de destination concerné. Vous pouvez accorder l'autorisation via le rôle iap.tunnelResourceAccessor.

Pour configurer les autorisations sur les groupes de destination, vous devez disposer de l'autorisation iap.tunnelDestGroups.setIamPolicy, que vous pouvez accorder via le rôle iap.admin.

Console

  1. Accédez à la page IAP.

  2. Dans l'onglet Ressources SSH et TCP, sélectionnez le groupe de destination pour lequel vous souhaitez configurer des autorisations.

  3. Dans le panneau qui s'ouvre, cliquez sur Ajouter un compte principal , puis saisissez une adresse e-mail pour l'utilisateur.

  4. Dans la section Attribuer des rôles, sélectionnez un rôle à attribuer au compte principal.

  5. Cliquez sur Enregistrer.

gcloud

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

Remplacez les éléments suivants :

  • MEMBER : adresse e-mail de l'utilisateur, par exemple user:exampleuser@company.com.

  • ROLE : rôle IAP requis, roles/iap.tunnelResourceAccessor.

  • GROUP_NAME : nom du groupe de destination.

  • REGION : nom de la région, par exemple us-central1.

Comprendre l'utilisation des tunnels

Vous pouvez utiliser trois commandes gcloud CLI lorsque vous travaillez avec IAP-TCP : start-iap-tunnel, ssh et scp.

Les commandes IAP-TCP ont été mises à jour pour prendre en charge la création de tunnels basés sur l'adresse IP et le nom de domaine complet. Pour passer à une adresse IP ou à un nom de domaine complet, procédez comme suit lorsque vous utilisez les commandes :

  • Spécifiez une adresse IP ou un nom de domaine complet au lieu du nom de l'instance.
  • Utilisez --region au lieu de --zone.
  • Utilisez --dest-group pour spécifier le groupe de destination à utiliser.
  • Utilisez --network pour spécifier le nom du réseau VPC à utiliser.

L'adresse IP que vous spécifiez doit être l'adresse IP privée de la destination. Vous ne pouvez pas utiliser IAP-TCP avec des adresses IP publiques. Si vous utilisez un nom de domaine complet, il doit être résolu en adresse IP privée de la destination. Notez que la résolution de noms s'effectue à partir du réseau VPC que vous spécifiez, et non à partir du réseau du client. Par exemple, si vous tentez de créer un tunnel vers vm.corp.company.com, l'étape qui convertit vm.corp.company.com en adresse IP se produit dans le contexte du réseau VPC.

La région que vous spécifiez doit correspondre à celle du groupe de destination.

Le réseau que vous spécifiez doit correspondre au nom du réseau VPC qui a accès à la destination. Un nom de réseau typique est default. Vous pouvez afficher la liste des noms de réseau sur la page Réseaux VPC de la console, ou vous pouvez récupérer la liste des noms de réseau en exécutant la commande suivante : Google Cloud

gcloud compute networks list --format='value(name)'

Exemples

Les exemples suivants utilisent une adresse IP d'exemple 172.16.1.2. Chaque commande peut également accepter un nom de domaine complet (par exemple, example.internal.company.com) à la place de l'adresse IP.

Exemple SSH

Pour démarrer une session SSH vers 172.16.1.2, exécutez la commande suivante :

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Remplacez DESTINATION_GROUP_NAME par le nom du groupe de destination.

Notez que --plain est implicite. Par conséquent, aucune tentative de gestion et d'envoi automatiques des clés SSH n'est effectuée lorsque vous utilisez une adresse IP.

Si l'erreur Permission denied (publickey) s'affiche, cela signifie que la commande n'a pas trouvé le fichier contenant les clés SSH. Pour résoudre ce problème, ajoutez le chemin d'accès au fichier contenant les clés SSH privées en tant que paramètre de la commande SSH, comme illustré dans l'exemple suivant :

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

Remplacez DESTINATION_GROUP_NAME par le nom du groupe de destination.

Si vous souhaitez vous connecter en tant qu'utilisateur spécifique, utilisez le format USER@IP au lieu de spécifier uniquement l'adresse IP :

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Si le compte est protégé par un mot de passe, vous devez en saisir un. Si le compte est protégé par une paire de clés SSH privée ou publique, vous devez la spécifier à l'aide de l'option -- -i, comme indiqué ci-dessus.

Exemple de tunnel

Pour établir un tunnel vers un autre port TCP, utilisez la commande start-iap-tunnel. Pour créer un tunnel de localhost:8022 vers le port 172.16.1.2:8085, exécutez la commande suivante :

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default

Notez que la machine de destination doit écouter le port 8085 dans cet exemple.

Une fois que vous avez établi un tunnel, vous pouvez utiliser n'importe quel outil, tel que PuTTY, pour établir une connexion.

Exemple SCP

Pour copier un fichier vers 172.16.1.2 à l'aide de SCP, exécutez la commande suivante :

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

Notez que --plain est implicite. Par conséquent, aucune tentative de gestion et d'envoi automatiques des clés SSH n'est effectuée lorsque vous utilisez une adresse IP.

Exemple de ProxyCommand SSH

Pour utiliser la commande en tant que ProxyCommand qui crée toujours un tunnel vers 172.16.1.2, ajoutez une entrée à votre configuration ~/.ssh/config ou équivalente, comme illustré dans l'exemple suivant :

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
  

Le ProxyCommand prend effet lorsque vous exécutez la commande suivante : ssh example

Vous pouvez également configurer le ProxyCommand pour gérer de nombreux noms d'hôtes, comme illustré dans l'exemple suivant :

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning

Le ProxyCommand prend effet lorsque vous exécutez la commande suivante : ssh example.internal.company.com