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 environnement Google Cloud ou nonGoogle Cloud .
Présentation
Vous pouvez utiliser la 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 de Google Cloud, vous devez avoir configuré la 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 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 Google Cloud CLI pour effectuer les tâches. Pour savoir comment interagir avec les groupes de destination à l'aide des API, consultez Ressource REST : projects.iap_tunnel.locations.destGroups.
Créer un groupe de destinations de tunnel
Lorsque vous configurez un tunnel, vous spécifiez un groupe de destinations de tunnel à utiliser pour les vérifications des autorisations. Les groupes de destinations de tunnel représentent les ressources qui sont soumises aux mêmes restrictions d'accès via un tunnel. Vous pouvez créer autant de groupes de destination que vous le souhaitez, chacun pouvant contenir un nombre illimité de plages d'adresses IP ou de noms de domaine complets correspondants. Les groupes de destinations 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 destinations, 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 Attribuer un rôle unique dans la documentation IAM.
Console
Accédez à la page IAP et sélectionnez un projet si aucun n'est déjà sélectionné.
Dans l'onglet Ressources SSH et TCP, cliquez sur Créer un groupe de destinations.
Attribuez un nom à votre groupe. Le nom du groupe ne peut contenir que des lettres minuscules (a-z) et des tirets (-).
Dans la liste déroulante, sélectionnez la région dans laquelle créer le groupe de destinations.
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ô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.Cliquez sur Créer un groupe de destinations.
gcloud
gcloud iap tcp dest-groups createYOUR_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 le groupe de destinations, par exempleus-central1.IP_RANGE_LIST(facultatif) : Liste des plages d'adresses IP, qui se compose de plages séparées par une virgule au format CIDR, par exemple10.1.2.0/24,172.0.0.0/8.FQDN_LIST(facultatif) : La liste des noms de domaine complets est une liste de noms d'hôte séparés par une virgule, comme*.internal.company.com. Si une entrée FQDN comporte un préfixe générique, elle correspond à n'importe quel nom d'hôte se terminant par la valeur spécifiée. Sinon, une correspondance exacte est requise. Si une requête correspond à une plage d'adresses IP ou à un nom de domaine complet, elle est considérée comme correspondante.
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 destinations de tunnels
Vous pouvez afficher les détails d'un groupe de destinations, le modifier et le supprimer.
Console
Accédez à la page IAP, puis 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 supprimer le groupe de destination depuis ce panneau.
Pour supprimer un groupe de destinations, sélectionnez-le, puis cliquez sur l'icône en forme de corbeille.
gcloud
Pour savoir comment gérer les groupes de destinations à l'aide de gcloud CLI, consultez les commandes gcloud pour les groupes de destinations.
Configurer les autorisations du tunnel
Pour créer un tunnel, vous devez disposer de l'autorisation iap.tunnelDestGroups.accessViaIAP sur le groupe de destination concerné. Vous pouvez accorder cette 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
Accédez à la page IAP.
Dans l'onglet Ressources SSH et TCP, sélectionnez le groupe de destination pour lequel vous souhaitez configurer les autorisations.
Dans le panneau qui s'ouvre, cliquez sur Ajouter un compte principal, puis saisissez l'adresse e-mail de l'utilisateur.
Dans la section Attribuer des rôles, sélectionnez un rôle à attribuer au compte principal.
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, tel que
us-central1.
Comprendre l'utilisation des tunnels
Lorsque vous travaillez avec IAP-TCP, vous pouvez utiliser trois commandes gcloud CLI : start-iap-tunnel, ssh et scp.
Les commandes IAP-TCP ont été mises à jour pour prendre en charge la tunnelisation basée sur les adresses IP et les noms de domaine complets. 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-grouppour spécifier le groupe de destination à utiliser. - Utilisez
--networkpour 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 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 déroule 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 noms de réseau sur la page "Réseaux VPC" de la console Google Cloud , ou récupérer la liste des noms de réseau en exécutant la commande suivante :
gcloud compute networks list --format='value(name)'
Exemples
Les exemples suivants utilisent l'adresse IP 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 vous recevez l'erreur Permission denied (publickey), 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 privées SSH en tant que paramètre de la commande SSH, comme 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 le saisir. 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'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 au 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 le tunnel établi, vous pouvez utiliser n'importe quel outil, tel que PuTTY, pour établir une connexion.
Exemple de SCP
Pour copier un fichier dans 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 établit 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
La commande ProxyCommand prend effet lorsque vous exécutez la commande suivante : ssh example
Vous pouvez également configurer ProxyCommand pour gérer plusieurs noms d'hôte, 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
La commande ProxyCommand prend effet lorsque vous exécutez la commande suivante : ssh example.internal.company.com