Cette page explique comment utiliser le transfert TCP Identity-Aware Proxy (IAP) pour : d'activer l'accès administrateur aux instances de VM sans adresse IP externe ; ou n’autorisent pas l’accès direct sur Internet.
Le transfert TCP d'IAP vous permet d'établir un tunnel chiffré sur lequel vous pouvez transférer le trafic SSH, RDP et tout autre trafic vers des instances de VM. Le transfert TCP d'IAP vous offre également un contrôle précis sur les utilisateurs autorisés à établir des tunnels et les instances de VM auxquelles les utilisateurs sont autorisés à se connecter.
Pour en savoir plus sur le fonctionnement du transfert TCP d'IAP, consultez la Présentation du transfert TCP.
Préparer votre projet pour le transfert TCP d'IAP
Cette section vous guide à travers les étapes nécessaires pour activer le transfert TCP d'IAP dans votre projet Google Cloud.
Créer une règle de pare-feu
Pour permettre à IAP de se connecter à vos instances de VM, créez une règle de pare-feu qui :
- s'applique à toutes les instances de VM que vous souhaitez rendre accessibles à l'aide d'IAP ;
- autorise le trafic entrant à partir de la plage IP
35.235.240.0/20
, qui contient toutes les adresses IP qu'IAP utilise pour le transfert TCP ; - autorise les connexions à tous les ports que vous souhaitez rendre accessibles à l'aide du transfert TCP d'IAP, par exemple, le port
22
pour SSH et le port3389
pour RDP.
Console
Pour autoriser l'accès RDP et SSH à toutes les instances de VM de votre réseau, procédez comme suit :
- Ouvrez la page "Règles de pare-feu".
Ouvrir la page "Règles de pare-feu"
Les étapes restantes apparaissent dans la console Google Cloud.
- Sélectionnez un projet Google Cloud.
- Sur la page "Règles de pare-feu", cliquez sur
Créer une règle de pare-feu . - Configurez les paramètres suivants :
- Nom :
allow-ingress-from-iap
- Sens du trafic : entrée
- Cible : Toutes les instances du réseau
- Filtre source : IP ranges
- Plages d'adresses IP sources :
35.235.240.0/20
- Protocoles et ports : sélectionnez TCP et saisissez
22,3389
pour autoriser à la fois RDP et SSH.
- Nom :
- Cliquez sur Créer.
gcloud
Pour autoriser l'accès RDP à toutes les instances de VM de votre réseau, exécutez :
gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:3389 \ --source-ranges=35.235.240.0/20
Pour l'accès SSH, exécutez :
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Pour les autres protocoles, exécutez :
gcloud compute firewall-rules create allow-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:PORT \ --source-ranges=35.235.240.0/20
où PORT
est le port utilisé par le protocole.
Attribuer des rôles pour le transfert TCP IAP
Contrôler les utilisateurs et les groupes autorisés à utiliser le TCP IAP et à quelles instances de VM il est autorisé à se connecter, accordez les rôles IAM appropriés pour le projet.
Le tableau suivant présente les rôles prédéfinis que vous devez attribuer administrateurs de confiance pour le transfert TCP et les tâches associées:
Tâche | Rôles | En savoir plus |
---|---|---|
Transfert TCP |
Utilisateur de tunnels sécurisés par IAP (roles/iap.tunnelResourceAccessor )
|
Consultez la section Accorder l'accès à toutes les instances de VM d'un projet. ou accorder l'accès à une VM spécifique. |
Accès SSH |
Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1 )
|
|
OS Login (recommandé) | Divers | Voir <ph type="x-smartling-placeholder"></ph> Configurer des rôles OS Login sur des comptes utilisateur |
Utiliser un compte de service | Utilisateur du compte de service (roles/iam.serviceAccountUser ) |
Voir <ph type="x-smartling-placeholder"></ph> Rôle serviceAccountUser |
Si vous souhaitez créer des rôles personnalisés ne disposant que des autorisations spécifiques nécessaires Pour cette tâche, consultez la section Détails des autorisations.
Vous pouvez accorder à un utilisateur ou à un groupe l'accès à toutes les instances de VM d'un projet, une VM spécifique, selon la façon dont vous attribuez les rôles requis.
Les tags ne sont pas acceptés
Accorder des autorisations à l'aide de tags pour Le transfert TCP IAP n'est actuellement pas compatible.
Accorder l'accès à toutes les instances de VM d'un projet
Vous pouvez accorder à un utilisateur ou à un groupe l'accès à toutes les instances de VM d'un projet en en attribuant les rôles IAM requis au niveau du projet:
Console
- Ouvrez la page IAM et administration dans la console Google Cloud.
Ouvrez la page IAM et Page Administration
Les étapes restantes apparaissent dans la console Google Cloud.
- Sur la page IAM et administration, cliquez sur Ajouter et configurez les paramètres suivants :
- Nouveaux comptes principaux : spécifiez l'utilisateur ou le groupe auquel vous souhaitez accorder des droits d'accès.
- Sélectionnez un rôle : sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.
- Vous pouvez également cliquer sur Ajouter une condition et configurer une condition :
- Titre : saisissez un nom pour la condition.
- Expression : saisissez une condition qu'un utilisateur doit remplir pour obtenir les autorisations dans le rôle "Utilisateur de tunnels sécurisés par IAP".
Par exemple, l'expression CEL suivante n'accorde l'accès qu'au port 22 :
destination.port == 22
Vous pouvez également accorder l'accès en fonction du niveau d'accès :
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Où
FULL_ACCESS_LEVEL_NAME
est un élément niveau d'accès et utilise le le format suivant:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
- Cliquez sur Ajouter un autre rôle et configurez les éléments suivants :
- Sélectionnez un rôle : sélectionnez Compute Engine > Administrateur d'instances Compute (v1).
- Cliquez sur Enregistrer.
gcloud
Attribuez les deux rôles à l'utilisateur en exécutant les commandes suivantes :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/iap.tunnelResourceAccessor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/compute.instanceAdmin.v1
Remplacez les éléments suivants :
PROJECT_ID
: ID du projetEMAIL
: adresse e-mail de l'utilisateur auquel vous souhaitez accorder l'accès, par exempleuser@example.com
Accorder l'accès à une VM spécifique
Pour accorder à un utilisateur ou à un groupe l'accès à une VM spécifique, vous devez accorder au
roles/iap.tunnelResourceAccessor
sur cette VM. Les autres rôles doivent être
accordé sur le projet.
Console
- Ouvrez la page d'administration d'IAP et sélectionnez l'onglet Ressources SSH et TCP.
Ouvrir la page d'administration d'IAP
Les étapes restantes apparaissent dans la console Google Cloud.
- Dans l'onglet Ressources SSH et TCP de la page d'administration d'IAP, sélectionnez les instances de VM que vous souhaitez configurer.
- Cliquez sur Afficher le panneau d'informations si celui-ci n'est pas visible.
Cliquez sur Ajouter un compte principal et configurez les éléments suivants :
- Nouveaux comptes principaux : spécifiez l'utilisateur ou le groupe auquel vous souhaitez accorder des droits d'accès.
- Sélectionnez un rôle : sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.
Vous pouvez également cliquer sur Ajouter une condition et configurer une condition :
- Titre : saisissez un nom pour la condition.
- Expression : saisissez une condition qu'un utilisateur doit remplir pour obtenir les autorisations dans le rôle "Utilisateur de tunnels sécurisés par IAP".
Par exemple, l'expression CEL suivante n'accorde l'accès qu'au port 22 :
destination.port == 22
Vous pouvez également accorder l'accès en fonction du niveau d'accès :
destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
Où
FULL_ACCESS_LEVEL_NAME
est un niveau d'accès existant et utilise le formataccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Cliquez sur Enregistrer.
API
Pour modifier le fichier policy.json
de votre application, procédez comme suit :
Consultez la section Gérer l'accès aux ressources sécurisées par IAP pour plus d'informations sur l'utilisation de l'API IAM pour gérer les stratégies d'accès.
Exportez les variables suivantes.
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
Obtenez la stratégie IAM pour l'instance Compute Engine à l'aide de la méthode
getIamPolicy
. Le bit de données vide à la fin transforme lecurl
en POST au lieu de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
Attribuez le rôle
iap.tunnelResourceAccessor
à vos comptes principaux en en modifiant le fichier JSON de la stratégie IAM.Vous pouvez aussi n'accorder le rôle qu'aux comptes principaux correspondant à des à l'aide d'IAM Conditions et niveaux d'accès.
Voici un exemple de fichier
policy.json
modifié qui accorde le rôleiap.tunnelResourceAccessor
à un groupe d'administrateurs d'instances de VM, qui leur donne accès aux ressources de tunnels sécurisées par IAP. Une condition IAM a été ajoutée pour que les ressources accessibles uniquement aux comptes principaux du groupe "Administrateurs d'instances de VM" l'adresse IP privée de10.0.0.1
sur le port22
à l'aide de Conditions IAMdestination.ip
etdestination.port
. Ils doivent également répondre aux exigences du niveau d'accès ACCESS_LEVEL_NAME.Notez que si un compte principal dispose du rôle Propriétaire, il est autorisé à utiliser IAP pour le transfert TCP.
Exemple de fichier policy.json{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22", "title": "CONDITION_NAME" } } ] } }
Pour trouver un nom de stratégie, appelez
accessPolicies.list
:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
Définissez votre nouveau fichier
policy.json
à l'aide de la méthodesetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
Détails des autorisations
Les autorisations requises varient en fonction de la manière dont un utilisateur utilise le transfert TCP d'IAP :
Exemple | Autorisations requises | |
---|---|---|
Tous |
|
|
Utiliser un fichier de cookie (gcloud compute [start-iap-tunnel, ssh, scp] ) |
|
|
Utiliser un fichier de cookie (gcloud compute [ssh, scp] ) |
|
|
VM utilisant OS Login | Veuillez consulter ces instructions. | |
OS Login n'est pas utilisé |
|
|
Connexion en SSH à une VM à l'aide d'un compte de service |
|
|
SSH depuis le navigateur | Veuillez consulter ces instructions. |
Par exemple, si un utilisateur souhaite se connecter à l'aide de gcloud compute ssh
à une VM qui n'utilise pas OS Login, mais qui utilise un compte de service, il a besoin des autorisations suivantes :
iap.tunnelInstances.accessViaIAP
compute.instances.get
compute.instances.list
compute.projects.get
compute.instances.setMetadata
compute.projects.setCommonInstanceMetadata
compute.globalOperations.get
iam.serviceAccounts.actAs
Tunneliser des connexions SSH
Vous pouvez vous connecter à des instances Linux qui n'ont pas d'adresse IP externe en tunnelisant le trafic SSH via IAP.
Lorsque vous utilisez la tunnellisation IAP, les proxys IAP se connectent à l'adresse IPv4 interne principale de nic0
sur la VM.
Console
Pour vous connecter à votre instance, utilisez le bouton SSH dans console Google Cloud. La configuration de l'accès de votre instance (définie via des autorisations IAM) doit autoriser la tunnelisation TCP via IAP.
gcloud
Pour vous connecter à votre instance, exécutez la commande gcloud compute ssh
. La configuration de l'accès de votre instance (définie via des autorisations IAM) doit autoriser la tunnelisation TCP via IAP.
gcloud compute ssh INSTANCE_NAME
Remplacez INSTANCE_NAME par le nom de l'instance à laquelle se connecter en SSH.
Si l'instance ne possède pas d'adresse IP externe, la connexion utilise automatiquement la tunnelisation TCP IAP. Si elle possède une adresse IP externe, la connexion utilise cette adresse IP externe au lieu de la tunnelisation TCP IAP.
Vous pouvez utiliser l'option --tunnel-through-iap
pour que gcloud compute ssh
utilise toujours la tunnellisation TCP d'IAP.
Utilisez l'option --internal-ip
pour que gcloud compute ssh
n'utilise jamais la tunnelisation TCP d'IAP et se connecte directement à l'adresse IP interne de la VM. Cela est utile pour les clients connectés au même réseau VPC que la VM cible.
IAP Desktop
Vous pouvez utiliser IAP Desktop à une instance de VM via SSH et le transfert TCP IAP.
Dans l'application, sélectionnez Fichier > Ajouter un projet Google Cloud.
Saisissez l'ID ou le nom de votre projet, puis cliquez sur OK.
Dans la fenêtre Explorateur de projets, effectuez un clic droit sur l'instance de VM à laquelle vous souhaitez vous connecter et sélectionnez Connexion.
Pour en savoir plus sur IAP Desktop, consultez la page du projet GitHub.
Application PuTTY
Vous pouvez configurer l'application d'émulateur de terminal Windows pour qu'elle utilise Transfert TCP IAP pour se connecter à une instance de VM. Votre la configuration de l'accès à l'instance (définis via des autorisations IAM) doivent autoriser la tunnelisation TCP via IAP.
Avant de configurer l'application PuTTY, utilisez la commande gcloud compute ssh
une fois
pour vous assurer que vous disposez d'une clé SSH privée sur votre ordinateur local et que
votre clé publique SSH est publiée dans Compute Engine:
Ouvrez une invite de commande et exécutez la commande suivante pour vous connecter à l'instance de VM :
gcloud compute ssh INSTANCE_NAME ` --tunnel-through-iap ` --project PROJECT_ID ` --zone ZONE
Remplacez les éléments suivants :
- INSTANCE_NAME : nom de l'instance à laquelle se connecter.
- PROJECT_ID : ID du projet dans lequel se trouve l'instance de VM.
- ZONE : zone où se trouve l'instance de VM.
Si nécessaire, confirmez que vous souhaitez générer des clés SSH en appuyant sur
Y
.Sur la VM, déterminez votre nom d'utilisateur en exécutant la commande suivante :
whoami
Vous aurez besoin de ce nom d'utilisateur ultérieurement.
Vous pouvez maintenant configurer l'application PuTTY pour utiliser le transfert TCP IAP:
- Ouvrez l'application PuTTY et sélectionnez la catégorie Connexion > Proxy.
Configurez les paramètres de proxy suivants :
- Pour Proxy type (Type de proxy), sélectionnez Local.
Dans le champ Telnet command, or local proxy command (Commande Telnet ou commande proxy locale), saisissez les informations suivantes :
gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet dans lequel se trouve l'instance de VM.
- ZONE : zone où se trouve l'instance de VM.
Pour Print proxy diagnostics in the terminal window (Imprimer les diagnostics de proxy dans la fenêtre du terminal), sélectionnez Only until session starts (Seulement jusqu'au démarrage de la session).
Sélectionnez la catégorie Connection > SSH > Auth (Connexion > SSH > Authentification).
Cliquez sur Browse (Parcourir) et collez le nom de fichier suivant, puis cliquez sur Open (Ouvrir) :
%USERPROFILE%\.ssh\google_compute_engine.ppk
Sélectionnez la catégorie Session.
Configurez les paramètres de proxy suivants :
Dans le champ Hostname (or IP address) (Nom d'hôte (ou adresse IP)), saisissez les informations suivantes :
USERNAME@INSTANCE_NAME
Remplacez les éléments suivants :
- USERNAME : nom d'utilisateur Linux que vous avez déterminé précédemment.
- INSTANCE_NAME : nom de l'instance de VM à laquelle vous souhaitez vous connecter.
Saved sessions (Sessions enregistrées) : saisissez un nom pour la session.
Cliquez sur Enregistrer.
Cliquez sur Open (Ouvrir) pour démarrer la session SSH.
ssh
Vous pouvez utiliser directement la commande SSH avec une option ProxyCommand
qui utilise gcloud
.
pour démarrer le tunnel. Utilisez le code suivant pour générer la commande ssh
complète:
gcloud compute ssh INSTANCE_NAME --dry-run
Tunneliser des connexions RDP
Vous pouvez vous connecter à des instances Windows qui n'ont pas d'adresse IP externe en tunnelisant le trafic RDP via IAP :
IAP Desktop
Vous pouvez utiliser IAP Desktop de se connecter au Bureau à distance d'une ou de plusieurs instances de VM à l'aide du transfert TCP IAP.
Dans l'application, sélectionnez Fichier > Ajouter un projet Google Cloud.
Saisissez l'ID ou le nom de votre projet, puis cliquez sur OK.
Dans la fenêtre Explorateur de projets, effectuez un clic droit sur l'instance de VM à laquelle vous souhaitez vous connecter et sélectionnez Connexion.
Pour en savoir plus sur IAP Desktop, consultez la page du projet GitHub.
gcloud
Pour vous connecter au Bureau à distance d'une instance de VM, vous créez d'abord un tunnel.
À l'aide de la commande
gcloud compute start-iap-tunnel
, créez un tunnel chiffré vers le port RDP de l'instance de VM.gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Remplacez INSTANCE_NAME par le nom de l'instance de VM à laquelle vous souhaitez vous connecter. Remplacez LOCAL_PORT par le port localhost où vous souhaitez lier le proxy, ou utilisez 0 pour qu'un port non utilisé soit automatiquement sélectionné. Remplacez ZONE par la zone où se trouve l'instance de VM.
gcloud
effectue un test de connectivité avec l'instance de VM, puis ouvre un tunnel et affiche un numéro de port.Listening on port [LOCAL_PORT].
Tout le trafic envoyé à localhost:LOCAL_PORT est transféré à l'instance de VM. Le port n'est accessible que par les applications exécutées sur votre ordinateur local.
Laissez
gcloud
en cours d'exécution et ouvrez l'application Microsoft Windows Remote Desktop Connection.Saisissez le point de terminaison du tunnel comme nom d'ordinateur :
localhost:LOCAL_PORT
Remplacez LOCAL_PORT par le numéro de port affiché lorsque le tunnel a été ouvert par
gcloud
.Cliquez sur Connecter.
Tunneliser d'autres connexions TCP
Vous pouvez utiliser le transfert TCP d'IAP pour d'autres protocoles basés sur TCP en exécutant la commande gcloud compute start-iap-tunnel
pour allouer un port local. Le port local achemine via un tunnel le trafic de données de la machine locale vers la machine distante dans un flux HTTPS. IAP reçoit ensuite les données, applique des contrôles d'accès et transfère les données désencapsulées au port distant. À l'inverse, toutes les données du port distant sont également encapsulées avant d’être envoyées au port local, où elles sont ensuite désencapsulées.
gcloud
Créez un tunnel chiffré vers un port de l'instance de VM :
gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \ --local-host-port=localhost:LOCAL_PORT \ --zone=ZONE
Remplacez INSTANCE_NAME et INSTANCE_PORT par le nom et le port de l'instance de VM à laquelle vous souhaitez vous connecter. Remplacez LOCAL_PORT par le port localhost où vous souhaitez lier le proxy. Remplacez ZONE par la zone où se trouve l'instance de VM.
gcloud
effectue un test de connectivité avec l'instance de VM, puis ouvre un tunnel et affiche un numéro de port.
Listening on port [LOCAL_PORT].
Tout le trafic envoyé à localhost:LOCAL_PORT est transféré à l'instance de VM. Le port n'est accessible que par les applications exécutées sur votre ordinateur local.
Augmenter la bande passante d'importation TCP IAP
Pour augmenter la bande passante d'importation TCP IAP, envisagez d'installer NumPy sur la même machine que celle de gcloud CLI.
Linux
Pour installer NumPy à l'aide de pip sur des plates-formes Unix, exécutez la commande suivante dans une nouvelle instance de terminal:
$(gcloud info --format="value(basic.python_location)") -m pip install numpyPour en savoir plus, consultez le site NumPy.org.
Si le message d'erreur persiste après l'installation de NumPy, procédez comme suit: Exécutez la commande suivante pour autoriser gcloud à accéder aux packages externes:
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Windows
Pour installer NumPy à l'aide de pip sur des plates-formes Windows, exécutez la commande suivante dans une nouvelle instance PowerShell:
start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"Pour en savoir plus, consultez le site NumPy.org.
Si le message persiste après l'installation de NumPy, une autre étape est nécessaire. Exécutez la commande suivante pour autoriser gcloud à accéder aux packages externes:
$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"
Limitations connues
Bande passante : la fonctionnalité de transfert TCP d'IAP n'est pas conçue pour le transfert de données de manière groupée. IAP se réserve le droit de limiter le débit des utilisateurs en cas d'abus de ce service.
Longueur de la connexion: IAP déconnecte automatiquement les sessions.
après une heure d'inactivité. Actuellement, gcloud compute start-iap-tunnel
tente de rétablir le tunnel s'il est déconnecté.
Étapes suivantes
Consultez les demandes d'accès en activant les journaux d'audit Cloud.
Configurez VPC Service Controls pour protéger votre avec IAP pour TCP.