Cette page explique comment utiliser le transfert TCP Identity-Aware Proxy (IAP) pour activer l'accès administrateur aux instances de VM qui ne possèdent pas d'adresses IP externes ou ne permettent pas un 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 auxquelles vous souhaitez être accessible à 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 :
- 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 : Plages d'adresses IP
- 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
Pour contrôler les utilisateurs et les groupes autorisés à utiliser le transfert TCP IAP et les instances de VM auxquelles ils peuvent se connecter, attribuez les rôles Identity and Access Management (IAM) appropriés sur le projet.
Nous vous recommandons d'attribuer tous les rôles suivants aux administrateurs de confiance:
roles/iap.tunnelResourceAccessor
(projet ou VM)roles/compute.instanceAdmin.v1
(projet)
De plus, si vous utilisez OS Login (recommandé), consultez Configurer des rôles OS Login sur les comptes utilisateur.
Si vous utilisez des comptes de service, suivez ces instructions pour configurer le rôle serviceAccountUser
.
Vous pouvez accorder à un utilisateur ou à un groupe l'accès à toutes les instances de VM d'un projet en attribuant des rôles IAM au niveau du projet:
Console
- 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 niveau d'accès existant et utilise 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
Si vous le souhaitez, vous pouvez attribuer le rôle roles/iap.tunnelResourceAccessor
sur une VM spécifique (les autres rôles doivent être attribués sur le projet):
Console
- 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 :
Pour en savoir plus sur l'utilisation de l'API IAM pour gérer les stratégies d'accès, consultez la page Gérer l'accès aux ressources sécurisées par BeyondCorp Enterprise.
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 la requêtecurl
en POST plutôt qu'en GET.curl -i -H "Authentication: 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 modifiant le fichier JSON de la stratégie IAM.Vous pouvez aussi attribuer le rôle uniquement aux comptes principaux qui répondent à des critères spécifiques, en fonction des conditions IAM et des niveaux d'accès.
Vous trouverez ci-dessous un exemple de fichier
policy.json
modifié qui attribue le rôleiap.tunnelResourceAccessor
à un groupe d'administrateurs d'instances de VM, ce qui leur donne accès aux ressources de tunnel sécurisées BeyondCorp Enterprise. Une condition IAM a été ajoutée pour ne rendre les ressources accessibles qu'aux comptes principaux du groupe d'administrateurs d'instances de VM ayant une adresse IP privée de10.0.0.1
sur le port22
à l'aide des conditions IAMdestination.ip
etdestination.port
. Ils doivent également répondre aux exigences du niveau d'accès ACCESS_LEVEL_NAME.Notez que si le 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 "Authentication: 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 | |
---|---|---|
Tout |
|
|
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 la 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 pour vous connecter à une instance de VM en utilisant SSH et le transfert TCP d'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 PuTTY pour qu'elle utilise le transfert TCP IAP pour se connecter à une instance de VM. La configuration des accès de votre instance (définie via les autorisations IAM) doit autoriser la tunnelisation TCP via IAP.
Avant de configurer l'application PuTTY, utilisez la commande gcloud compute ssh
une fois pour vérifier que vous disposez d'une clé SSH privée sur votre ordinateur local et que votre clé SSH publique 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 Connection > 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 cette commande 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 pour vous connecter au Bureau à distance d'une ou plusieurs instances de VM à l'aide du transfert TCP d'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 d'IAP
Pour augmenter la bande passante de transfert TCP d'IAP, envisagez d'installer NumPy sur la machine sur laquelle gcloud CLI est installé.
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 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 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 1 heure d'inactivité. Nous vous recommandons d'intégrer à votre logique applicative la gestion du rétablissement d'un tunnel lorsqu'il est déconnecté.
Étapes suivantes
- Définissez des règles de contexte plus riches en appliquant des niveaux d'accès.
- Consultez les demandes d'accès en activant les journaux d'audit Cloud.
- Découvrez-en plus sur IAP.