Configurer le transfert TCP IAP avec une adresse IP ou un nom d'hôte dans un environnement Google Cloud ou autre

Cette page explique comment configurer et utiliser Identity-Aware Proxy (IAP) Transfert TCP avec une fonctionnalité d'adresse IP ou de nom d'hôte.

Pour utiliser le transfert TCP IAP avec une fonctionnalité d'adresse IP ou de nom d'hôte, vous devez disposer d'une licence Chrome Enterprise Premium.

Présentation

Vous pouvez utiliser la Google Cloud CLI pour créer des tunnels vers des ressources à l'aide de la adresse IP privée ou nom d'hôte de la ressource. Si vous disposez de ressources externes situées dans des environnements autres que Google Cloud, connectées à Google Cloud via Cloud Interconnect ou un VPN, vous pouvez utiliser avec ces ressources.

Avant de commencer

Si vous devez établir un tunnel vers des ressources en dehors de Google Cloud, vous devez configurer la connectivité hybride. La connectivité hybride est requise pour connecter vos ressources externes autres que Google Cloud à Google Cloud. Pour en savoir plus, consultez la documentation sur Cloud Interconnect ou 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 n'ont pas cette configuration, vous ne pouvez pas créer de tunnels vers des ressources externes votre projet Google Cloud.

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 gcloud pour effectuer les tâches. Pour sur la manière d'interagir avec les groupes de destination à l'aide des API, consultez 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 à utiliser pour les vérifications d'autorisation. Les groupes de destination de tunnel représentent des ressources qui ont les mêmes restrictions d'accès au tunnel. Vous pouvez créer un nombre illimité de groupes de destinations, chacun avec un nombre illimité 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 destinations, 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 seul rôle, consultez la section Attribuer un rôle unique dans la documentation IAM.

Console

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

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

  3. Attribuez un nom à votre groupe. Le nom du groupe ne peut contenir que des minuscules lettres (a-z) et tirets (-).

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

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

    Une plage d'adresses IP est constituée de plages séparées par une virgule au format CIDR, telles que : 10.1.2.0/24,172.0.0.0/8

    Une liste de noms de domaine complet est une liste de noms d'hôte séparés par une virgule, comme *.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.

CLI 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 tirets (-).
  • REGION: région dans laquelle créer la destination tel que us-central1.
  • IP_RANGE_LIST : facultatif. La liste des plages d'adresses IP, qui se compose de plages séparées par une virgule au format CIDR, comme 10.1.2.0/24,172.0.0.0/8.
  • FQDN_LIST : facultatif. La liste de noms de domaine complet est une liste de noms d'hôtes séparés par une virgule, comme *.internal.company.com. Si une entrée de nom de domaine complet comporte un caractère générique correspond à tous les noms d'hôte ayant l'extension spécifiée. Sinon, il 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 tunnels

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 destinations, cliquez sur son nom.

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

    • Pour supprimer un groupe de destinations, sélectionnez-le, puis cliquez sur l'icône en forme de poubelle.

CLI gcloud

Pour en savoir plus sur la gestion des groupes de destination à l'aide de gcloud CLI, consultez commandes gcloud du groupe de destination.

Configurer les autorisations pour le tunnel

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

Pour configurer des autorisations sur les groupes de destination, vous devez disposer du 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 dont vous voulez configurer les autorisations.

  3. Dans le panneau qui s'affiche, 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.

CLI 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 de gcloud CLI avec IAP-TCP: start-iap-tunnel, ssh et scp.

Les commandes IAP-TCP ont été mises à jour pour prendre en charge la tunnelisation basée sur IP et FQDN. 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 à la place 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 FQDN, il doit être résolu sur l'adresse IP privée de la destination. Notez que la résolution de noms est effectuée à partir du réseau VPC que vous spécifiez, et non à partir du réseau du client. Par exemple, si vous essayez 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 ayant accès à la destination. Un nom de réseau typique est default. Vous pouvez afficher la liste des réseaux sur la page "Réseaux VPC" de la console Google Cloud, ou vous pouvez récupérer la liste des noms de réseau en exécutant la commande suivante:

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

Examples

Les exemples suivants utilisent un exemple d'adresse IP de 172.16.1.2. Chaque commande peut également accepter un nom de domaine complet (par exemple, example.internal.company.com) au lieu 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. Aucune tentative de gérer et de transmettre des clés SSH en cas d'utilisation d'une adresse IP.

Si l'erreur Permission denied (publickey) s'affiche, 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 privées SSH 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 le spécifier à l'aide de l'indicateur -- -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.

Après avoir établi un tunnel, vous pouvez utiliser n'importe quel outil, tel que PuTTy, pour établir une connexion.

Exemple SCP

Pour transférer 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. Aucune tentative de gestion et de transfert automatiques des clés SSH n'est donc effectuée lorsque vous utilisez une adresse IP.

Exemple de ProxyCommand SSH

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

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' \
    --listen-on-stdin \
    --region=us-central1 \
    --dest-group=destination-group-name \
    --network=default \
    --verbosity=warning
  

Le paramètre ProxyCommand prend effet lorsque vous exécutez la commande suivante : ssh example.

Vous pouvez également configurer la commande ProxyCommand pour qu'elle gère de nombreux noms d'hôte, comme indiqué dans le l'exemple suivant:

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

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