Cette page a été traduite par l'API Cloud Translation.
Switch to English

Sécuriser des machines virtuelles avec IAP

Cette page explique comment vous pouvez utiliser le transfert TCP d'IAP pour activer l'accès administratif aux instances de VM qui n'ont pas d'adresse IP publique ou qui 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 port 3389 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 et cliquez sur Créer une règle de pare-feu.

    Ouvrir la page "Règles 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.
  • 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

PORT est le port utilisé par le protocole.

Accorder des autorisations pour l'utilisation d'IAP

Pour contrôler les utilisateurs et les groupes autorisés à utiliser le transfert TCP d'IAP et les instances de VM auxquelles ils sont autorisés à se connecter, configurez les autorisations Identity and Access Management.

Vous pouvez accorder à un utilisateur ou à un groupe l'accès à toutes les instances de VM d'un projet en configurant des autorisations IAM au niveau du projet :

Console

  1. Ouvrez la page IAM et administration dans Cloud Console.

    Ouvrir la page "IAM et Administration"

  2. Cliquez sur Ajouter et configurez les éléments suivants :

    • Nouveaux membres : spécifiez l'utilisateur ou le groupe auquel vous souhaitez accorder l'accès.
    • Sélectionner un rôle : sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.
  3. Cliquez sur Save.

gcloud

Accordez le rôle iap.tunnelResourceAccessor à l'utilisateur :

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:EMAIL \
    --role=roles/iap.tunnelResourceAccessor

Remplacez l'élément suivant :

  • PROJECT_ID : ID du projet
  • EMAIL : adresse e-mail de l'utilisateur auquel vous souhaitez accorder l'accès, par exemple user@example.com

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 l'accès contextuel pour plus d'informations sur l'utilisation de l'API IAM pour gérer les stratégies d'accès.

  1. Téléchargez le fichier d'identifiants de votre compte de service.

    1. Accédez à la page Comptes de service.
      Accéder à la page "Comptes de service"

    2. Cliquez sur l'adresse e-mail de votre compte de service.

    3. Cliquez sur Modifier.

    4. Cliquez sur Créer une clé.

    5. Sélectionnez JSON comme type de clé.

    6. Créez une clé en cliquant sur Créer, puis en fermant la fenêtre de confirmation qui s'affiche.

    Votre fichier d'identifiants JSON est désormais téléchargé.

  2. Exportez les variables suivantes.

    export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel
    # Replace with the path to your local service account's downloaded JSON file
    export JSON_CREDS=EXAMPLE.IAM.GSERVICEACCOUNT.COM.JSON
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  3. Convertissez le fichier d'identifiants JSON de votre compte de service en jeton d'accès OAuth à l'aide de l'outil Oauth2l en exécutant la commande suivante :

    oauth2l header --json ${JSON_CREDS} cloud-platform

  4. Si vous exécutez cette commande pour la première fois, procédez comme suit lorsque vous y êtes invité :

    1. Récupérez le code de validation en cliquant sur le lien affiché et en copiant le code.
    2. Collez le code de validation dans l'invite de votre application.
    3. Copiez le jeton de support renvoyé.
    4. Exportez une nouvelle variable affectée à la valeur de votre jeton de support renvoyé.
      export CLOUD_OAUTH_TOKEN=AUTHORIZATION_BEARER_TOKEN
  5. Si vous avez déjà exécuté cette commande, exportez la variable suivante :

    export CLOUD_OAUTH_TOKEN="$(oauth2l header --json ${JSON_CREDS} cloud-platform)"

  6. 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ête curl en POST plutôt qu'en GET.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" \
         ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \
         -d ''

  7. Accordez le rôle iap.tunnelResourceAccessor à vos membres en modifiant le fichier JSON de stratégie IAM.

  8. Vous pouvez également ajouter des restrictions aux membres en fonction de conditions IAM et de niveaux d'accès.

    L'exemple suivant présente un fichier policy.json modifié qui lie le rôle iap.tunnelResourceAccessor à un groupe d'administrateurs d'instances de VM, en leur accordant l'accès aux ressources de tunnel sécurisées par l'accès contextuel. Une condition Cloud IAM a été ajoutée pour ne rendre les ressources accessibles qu'aux membres du groupe "Administrateurs d'instances de VM" avec une adresse IP privée de 10.0.0.1 sur le port 22 à l'aide des conditions IAM destination.ip et destination.port. Ils doivent également répondre aux exigences du niveau d'accès ACCESS_LEVEL_NAME.

    Notez que si un membre possède le 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
    
  9. Définissez votre nouveau fichier policy.json à l'aide de la méthode setIamPolicy.

    curl -i -H "Content-Type:application/json" \
              -H "$(oauth2l header --json ${JSON_CREDS} cloud-platform)" \
              ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \
              -d @${JSON_NEW_POLICY}
    

Vous pouvez également configurer des autorisations IAM individuellement par VM :

Console

  1. Ouvrez la page d'administration d'IAP et sélectionnez l'onglet Ressources SSH et TCP.

    Ouvrir la page d'administration de l'accès contextuel

  2. Sélectionnez les instances de VM que vous souhaitez configurer.
  3. Cliquez sur Afficher le panneau d'informations si celui-ci n'est pas visible.
  4. Cliquez sur Ajouter un membre et configurez les éléments suivants :

    • Nouveaux membres : spécifiez l'utilisateur ou le groupe auquel vous souhaitez accorder l'accès.
    • Sélectionner un rôle : sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.
  5. Vous pouvez également cliquer sur Ajouter une condition et configurer une restriction de membre :

    • Titre : saisissez un nom pour la restriction.
    • Expression : saisissez une condition qu'un utilisateur doit remplir pour pouvoir utiliser le transfert TCP IAM.

    Par exemple, l'expression CEL suivante restreint l'accès au port 22 :

    destination.port == 22
    

    Vous pouvez également restreindre l'accès par niveau d'accès :

    destination.port == 22 && "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels
    

    FULL_ACCESS_LEVEL_NAME est un niveau d'accès existant et utilise le format accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME.

  6. Cliquez sur Save.

Tunneliser des connexions SSH

Vous pouvez vous connecter à des instances Linux qui n'ont pas d'adresse IP publique en tunnelisant le trafic SSH via IAP :

Console

Pour vous connecter à votre instance, utilisez le bouton SSH dans Cloud Console. 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 publique, la connexion utilise automatiquement la tunnelisation TCP IAP. Si elle possède une, la connexion utilise l'adresse IP publique 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.

Tunneliser des connexions RDP

Vous pouvez vous connecter à des instances Windows qui n'ont pas d'adresse IP publique 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.

  1. Dans l'application, sélectionnez Fichier > Ajouter un projet Google Cloud.

  2. Saisissez l'ID ou le nom de votre projet, puis cliquez sur OK.

  3. 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.

IAP Desktop

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.

  1. À 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.

  2. 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.

  3. Laissez gcloud en cours d'exécution et ouvrez l'application Microsoft Windows Remote Desktop Connection.

  4. 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.

  5. 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.

Limites 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