Configurer OS Login avec la validation en deux étapes

Cet article décrit les étapes de base pour configurer OS Login avec la validation en deux étapes.

Si vous utilisez OS Login pour gérer l'accès à vos machines virtuelles (VM), vous pouvez ajouter un niveau de sécurité supplémentaire à l'aide de la validation en deux étapes, également appelée authentification à deux facteurs, ou 2FA. Pour en savoir plus sur les autres avantages d'OS Login, consultez la page OS Login.

Pour utiliser l'authentification 2FA d'OS Login sur vos VM, procédez comme suit :

  1. Installez ou mettez à jour l'environnement invité.
  2. (Facultatif) Si vous êtes administrateur d'une organisation, consultez la page Gérer OS Login dans une organisation.
  3. Activer la validation en deux étapes sur votre compte Google ou votre domaine.

  4. Activez l'authentification 2FA sur votre projet ou votre VM.

  5. Accordez les rôles IAM pertinents à vous-même, aux membres de votre projet ou aux membres de votre organisation.

  6. (Facultatif) Ajoutez des clés SSH personnalisées aux comptes utilisateur pour vous-même, pour les membres de votre projet ou pour les membres de votre organisation. Sinon, Compute Engine peut générer automatiquement ces clés lorsque vous vous connectez à des VM.

  7. Se connecter à des VM

  8. Examinez les comportements de connexion attendus.

Pour restreindre davantage l'accès aux VM, vous pouvez également configurer des paires de clés SSH avec support matériel. Pour en savoir plus, consultez la page SSH avec clés de sécurité.

Après avoir configuré l'authentification 2FA d'OS Login, vous pouvez utiliser les journaux d'audit pour surveiller vos sessions d'authentification.

Avant de commencer

Limites

  • OS Login n'est actuellement pas disponible dans Google Kubernetes Engine (GKE). Les nœuds de cluster GKE continuent d'utiliser des clés SSH de métadonnées quand OS Login est activé.

  • Actuellement, les images Fedora CoreOS ne sont pas compatibles avec OS Login. Pour gérer l'accès aux instances pour des VM créées à l'aide de ces images, utilisez le système Ignition de Fedora CoreOS.

  • Les images Windows Server et SQL Server ne sont pas compatibles avec OS Login.

Méthodes ou types d'authentification acceptés

OS Login est compatible avec les méthodes ou types de validation en deux étapes ci-après :

Étape 1 : Installer ou mettre à jour l'environnement invité

La dernière version de l'environnement invité doit être installée sur votre instance. La plupart des images publiques disposent déjà de la dernière version.

Si vous avez des instances qui exécutent des images personnalisées que vous avez importées, installez l'environnement invité sur ces VM.

Si vous ne disposez pas du dernier environnement invité, mettez-le à jour.

Étape 2 : (Facultatif) Vérifier la gestion d'OS Login dans une organisation

Si vous êtes administrateur de l'organisation, vous pouvez définir certaines configurations (comme activer OS Login au niveau de l'organisation). Consultez la page Gérer OS Login dans une organisation.

Étape 3 : Activer la validation en deux étapes pour votre compte ou domaine Google

Avant de pouvoir activer OS Login 2FA pour votre projet ou votre VM, vous devez d'abord l'activer sur votre compte Google ou votre domaine. Veillez à activer la validation en deux étapes sur le domaine hébergeant le projet ou les VM, ou pour l'utilisateur propriétaire du projet ou des VM.

Une bonne pratique de sécurité consiste à définir une validation en deux étapes pour les comptes utilisateur de votre organisation. L'activation de l'authentification 2FA d'OS Login ne bloque pas l'accès des utilisateurs n'ayant pas configuré l'authentification à deux facteurs.

Un administrateur Google Workspace peut activer la validation en deux étapes sur un domaine ; chaque utilisateur Google peut l'activer au niveau du compte utilisateur.

Domaine

La validation en deux étapes sur un domaine doit être activée par un administrateur Google Workspace.

Pour activer la validation en deux étapes sur un domaine, consultez la page Protéger votre entreprise grâce à la validation en deux étapes du guide d'administration Google Workspace.

Compte utilisateur

Si vos comptes utilisateur ne sont pas gérés par un administrateur Google Workspace, vous pouvez configurer la validation en deux étapes pour chaque compte Google.

Pour configurer la validation en deux étapes pour un compte Google individuel, consultez la page Validation en deux étapes de Google.

Étape 4 : Activer OS Login 2FA sur votre projet ou votre VM

Après avoir activé la validation en deux étapes au niveau du domaine ou du compte utilisateur, vous pouvez activer l'authentification OS Login 2FA sur des VM individuelles ou des projets.

Pour pouvoir utiliser l'authentification OS Login 2FA, le service OS Login doit être activé sur une VM ou un projet.

Vous pouvez configurer à la fois OS Login et OS Login 2FA pendant la création de la VM ou la configuration du projet. Vous pouvez également configurer OS Login 2FA sur une VM ou un projet existant, sur lequel OS Login est déjà activé.

Pour configurer votre projet ou votre VM afin d'utiliser l'authentification à deux facteurs d'OS Login, définissez enable-oslogin-2fa=TRUE et enable-oslogin=TRUE dans les métadonnées du projet ou de l'instance.

Console

Vous pouvez appliquer les valeurs des métadonnées à vos projets ou à vos VM en utilisant l'une des options suivantes :

  • Option 1 : définissez enable-oslogin-2fa=TRUE et enable-oslogin=TRUE dans les métadonnées d'instance lorsque vous créez une VM.

    1. Dans Google Cloud Console, accédez à la page Instances de VM.

      Accéder à la page Instances de VM

    2. Cliquez sur Créer une instance.
    3. Sur la page Créer une instance, spécifiez les propriétés souhaitées pour votre instance.
    4. Dans la section Métadonnées, ajoutez les entrées de métadonnées suivantes :

      • enable-oslogin, avec la valeur TRUE
      • enable-oslogin-2fa, avec la valeur TRUE
    5. Cliquez sur Créer pour créer la VM.

  • Option 2 : définissez enable-oslogin-2fa et enable-oslogin=TRUE dans les métadonnées de l'ensemble du projet afin que le paramètre soit appliqué à toutes les VM de votre projet.

    1. Accédez à la page "Métadonnées"

      Accéder à la page "Métadonnées"

    2. Cliquez sur Modifier.
    3. Dans la section Métadonnées, ajoutez les entrées de métadonnées suivantes :

      • enable-oslogin, avec la valeur TRUE
      • enable-oslogin-2fa, avec la valeur TRUE
    4. Cliquez sur Enregistrer pour appliquer les modifications.

    Concernant les VM qui n'exécutent pas CoreOS, cette modification est appliquée instantanément. Vous n'avez pas besoin de redémarrer votre VM. Concernant les distributions CoreOS, redémarrez la VM pour que la modification soit prise en compte. Pour redémarrer, procédez à l'arrêt, puis au démarrage de vos VM.

  • Option 3 : définissez enable-oslogin-2fa et enable-oslogin=TRUE dans les métadonnées d'une VM existante.

    1. Accédez à la page des instances de VM.

      Accéder à la page "Instances de VM"

    2. Cliquez sur le nom de la VM sur laquelle vous souhaitez définir la valeur des métadonnées.
    3. En haut de la page des détails de l'instance, cliquez sur Modifier pour modifier les paramètres de l'instance.
    4. Dans la section Métadonnées personnalisées, ajoutez les entrées de métadonnées suivantes :

      • enable-oslogin, avec la valeur TRUE
      • enable-oslogin-2fa, avec la valeur TRUE
    5. En bas de la page des détails de l'instance, cliquez sur Enregistrer pour appliquer vos modifications à l'instance.

    Concernant l'ensemble des systèmes d'exploitation à l'exception de CoreOS, cette modification est appliquée instantanément. Vous n'avez pas besoin de redémarrer votre VM. Concernant les distributions CoreOS, redémarrez la VM pour que la modification soit prise en compte. Pour redémarrer, procédez à l'arrêt, puis au démarrage de vos VM.

gcloud

Vous pouvez appliquer les valeurs des métadonnées à vos projets ou à vos VM en utilisant l'une des options suivantes :

  • Option 1 : définissez enable-oslogin-2fa=TRUE et enable-oslogin=TRUE dans les métadonnées d'instance lorsque vous créez une VM.

    Remplacez vm-name par le nom de votre VM.

    gcloud compute instances create vm-name \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • Option 2 : définissez enable-oslogin-2fa=TRUE et enable-oslogin=TRUE dans les métadonnées de l'ensemble du projet afin qu'elles s'appliquent à toutes les VM de votre projet.

    gcloud compute project-info add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • Option 3 : définissez enable-oslogin-2fa=TRUE et enable-oslogin=TRUE dans les métadonnées d'une VM existante.

    Remplacez vm-name par le nom de votre VM.

    gcloud compute instances add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True vm-name
    

Étape 5 : Configurer les rôles OS Login sur les comptes utilisateur

Attribuer des rôles IAM OS Login

Une fois que vous avez activé OS Login sur une ou plusieurs VM de votre projet, celles-ci n'acceptent que les connexions des comptes utilisateur disposant des rôles IAM nécessaires à votre projet ou à votre organisation.

Pour autoriser OS Login à accéder à ces VM, vous devez attribuer les rôles nécessaires à l'utilisateur. Pour accorder l'accès à OS Login, procédez comme suit :

  1. Accordez l'un des rôles d'accès aux instances suivants.

    Vous pouvez accorder ces rôles d'accès aux instances au niveau de l'instance à l'aide de la commande gcloud compute instances add-iam-policy-binding.

  2. Si votre instance de VM utilise un compte de service, chaque utilisateur doit être configuré de façon à disposer du rôle roles/iam.serviceAccountUser sur le compte de service. Pour découvrir comment ajouter l'accès à un compte de service pour un utilisateur, consultez la section Gérer l'utilisation des comptes de service.

  3. Pour autoriser les utilisateurs en dehors de votre organisation à accéder à vos VM, attribuez-leur le rôle roles/compute.osLoginExternalUser en plus d'un rôle d'accès aux instances. Ce rôle doit être attribué au niveau de l'organisation par un administrateur de l'organisation. Pour en savoir plus, consultez la section Accorder l'accès aux instances à des utilisateurs extérieurs à votre organisation.

Accorder l'accès SSH à un compte de service

Vous pouvez utiliser les rôles OS Login pour autoriser les comptes de service à établir des connexions SSH avec vos instances. Cette fonctionnalité est utile pour les tâches suivantes :

Vous pouvez accorder l'accès SSH à vos comptes de service en procédant comme suit :

  1. Créez un compte de service.
  2. Attribuez les rôles OS Login à votre compte de service. Les comptes de service nécessitent les mêmes rôles que les comptes d'utilisateur. Pour en savoir plus sur la configuration des rôles et des autorisations pour les comptes de service, consultez la page Attribuer des rôles aux comptes de service.
  3. Fournissez les identifiants par défaut de l'application à votre compte de service afin qu'il soit en mesure d'autoriser les requêtes adressées aux API nécessaires. Pour renseigner les identifiants par défaut de l'application, procédez de l'une des façons suivantes :

Une fois que vous avez accordé l'accès SSH à vos comptes de service, vous pouvez configurer vos applications pour créer des clés SSH et établir des connexions SSH avec d'autres instances sur vos réseaux VPC. Consultez le tutoriel Connecter des applications à des instances à l'aide de SSH pour voir un exemple d'application utilisant l'accès SSH via un compte de service.

Révoquer des rôles IAM OS Login

Pour révoquer l'accès des utilisateurs aux instances utilisant OS Login, supprimez les rôles d'utilisateur correspondants de ce compte utilisateur. Pour découvrir comment supprimer le rôle IAM d'un utilisateur, consultez la page Accorder, modifier et révoquer les accès à des ressources.

Lorsque l'accès d'un utilisateur est révoqué, celui-ci dispose toujours des clés SSH publiques associées à son compte, mais ces clés ne fonctionnent plus sur les instances de VM.

Étape 6 : (Facultatif) Ajouter des clés SSH à un compte utilisateur

Si vous souhaitez vous connecter à vos VM à l'aide d'outils tiers, vous devez ajouter vos clés SSH à votre compte utilisateur. Si vous vous connectez à vos instances à l'aide d'autres options telles que l'outil de ligne de commande gcloud ou SSH depuis le navigateur, vous pouvez ignorer cette étape car Compute Engine génère automatiquement ces clés pour vous.

Vous pouvez associer des clés SSH publiques aux types de comptes utilisateur suivants :

Vous pouvez utiliser l'outil de ligne de commande gcloud ou l'API OS Login pour ajouter des clés SSH à votre propre compte. Si vous êtes administrateur de domaine pour une organisation, vous pouvez également utiliser l'API Directory pour ajouter des clés SSH aux comptes utilisateur de votre organisation.

gcloud

Les commandes gcloud compute os-login sont disponibles uniquement sur le SDK Google Cloud version 184 et ultérieure.

Utilisez l'outil de ligne de commande gcloud pour associer des clés SSH publiques à un compte.

gcloud compute os-login ssh-keys add \
    --key-file key-file-path \
    --ttl expire-time

Remplacez l'élément suivant :

  • key-file-path : chemin d'accès à la clé SSH publique sur votre poste de travail local. Assurez-vous que la clé SSH publique est correctement formatée. Si vous utilisez PuTTYgen sur un système Linux pour générer vos clés publiques, vous devez utiliser le format public-openssh.
  • expire-time : option facultative permettant de définir une heure d'expiration pour la clé SSH publique. Par exemple, vous pouvez spécifier 30m pour que la clé SSH expire après 30 minutes. Cette option utilise les unités suivantes :
    • s pour les secondes
    • m pour les minutes
    • h pour les heures
    • d pour les jours. Définissez la valeur sur 0 pour ne pas spécifier de délai d'expiration.

API OS Login

Utilisez l'API OS Login pour associer des clés SSH publiques à un compte :

POST https://oslogin.googleapis.com/v1/users/account-email:importSshPublicKey

{
 "key": "ssh-key",
 "expirationTimeUsec": "expiration-timestamp"
}

Remplacez l'élément suivant :

  • account-email : adresse e-mail qui représente votre compte utilisateur géré.
  • ssh-key : clé publique à appliquer au compte. Assurez-vous que la clé SSH publique est correctement formatée. Si vous utilisez PuTTYgen sur un système Linux pour générer vos clés publiques, vous devez utiliser le format public-openssh.
  • expiration-timestamp : délai d'expiration de la clé en microsecondes depuis l'epoch.

API Directory

Si vous êtes administrateur de domaine pour une organisation, vous pouvez consulter la documentation de référence de l'API Directory pour ajouter des clés SSH au compte d'un autre utilisateur de votre organisation. Par exemple, créez une requête PUT vers la méthode directory.users.update avec une ou plusieurs entrées SSH sshPublicKeys :

PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

{
 "sshPublicKeys": [
  {
   "key": "ssh-key",
   "expirationTimeUsec": "expiration-timestamp"
  },
  {
   "key": "ssh-key",
   "expirationTimeUsec": "expiration-timestamp"
  }
 ]
}

Remplacez l'élément suivant :

  • user-id-key : identifiant immuable pour l'utilisateur.
  • ssh-key : clé publique à appliquer au compte. Assurez-vous que la clé SSH publique est correctement formatée. Si vous utilisez PuTTYgen sur un système Linux pour générer vos clés publiques, vous devez utiliser le format public-openssh.
  • expiration-timestamp : délai d'expiration d'une clé en microsecondes depuis l'epoch.

Pour supprimer toutes les clés d'un compte, spécifiez "sshPublicKeys": null dans le corps de la requête, en remplaçant user-id-key par un identifiant immuable pour l'utilisateur :

PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

{
  "sshPublicKeys": null
}

Après avoir ajouté vos clés à votre compte, vous pouvez vous connecter à des instances à l'aide d'outils tiers et du nom d'utilisateur associé à votre compte. L'administrateur de votre organisation peut modifier ce nom d'utilisateur.

Vous pouvez trouver le nom d'utilisateur actuel de votre compte en exécutant la commande gcloud compute os-login describe-profile :

Par exemple, le résultat peut ressembler à ceci :

name: '314159265358979323846'
posixAccounts:
- gid: '27182818'
  homeDirectory: /home/user_example_com
  ⋮
  uid: '27182818'
  username: user_example_com
⋮

Étape 7 : Se connecter aux VM

Lorsque vous vous connectez à une VM, vous disposez de trois options principales :

Si vous vous connectez à une VM à l'aide de l'outil de ligne de commande gcloud ou de SSH depuis le navigateur, Compute Engine génère automatiquement des clés SSH et les associe à votre compte utilisateur.

Si vous vous connectez à une VM via un outil tiers, vous devez ajouter les clés publiques à votre compte utilisateur. La VM obtient votre clé publique à partir de votre compte utilisateur. Vous pourrez vous connecter à l'instance en fournissant le nom d'utilisateur correct et la clé SSH privée correspondante.

Lorsque vous vous connectez à votre VM, vous recevez un message en fonction de la méthode de validation en deux étapes ou du type d'authentification que vous avez sélectionné.

  • Pour Google Authenticator, le message suivant s'affiche :

    "Enter your one-time password:"

  • Pour le code de validation par SMS ou par appel téléphonique, vous recevez le message suivant :

    "A security code has been sent to your phone. Enter code to continue:"

  • Pour l'invite téléphonique, vous recevez le message suivant :

    A login prompt has been sent to your enrolled device:"

    Pour la méthode par invite téléphonique, acceptez les invites sur votre téléphone ou tablette pour continuer. Pour les autres méthodes, entrez votre code de sécurité ou votre mot de passe à usage unique.

Étape 8 : Comportements de connexion attendus

  • Sur certaines instances utilisant OS Login, il est possible que vous receviez le message d'erreur suivant une fois que la connexion est établie :

    /usr/bin/id: cannot find name for group ID 123456789

    Ignorez ce message d'erreur. Cette erreur n'affecte pas vos instances.

  • Les administrateurs Cloud Identity peuvent configurer les informations POSIX et définir un nom d'utilisateur pour les membres de l'organisation. Si aucun nom d'utilisateur n'est défini par un administrateur Cloud Identity, OS Login génère un nom d'utilisateur Linux par défaut en combinant le nom d'utilisateur et le domaine de l'adresse e-mail associée au profil Google de l'utilisateur. Cette convention de dénomination garantit l'unicité. Par exemple, si l'adresse e-mail utilisateur associée au profil Google est user@example.com, le nom d'utilisateur généré est user_example_com.

    Les organisations G Suite peuvent éventuellement modifier la valeur par défaut pour supprimer le suffixe de domaine des nouveaux noms d'utilisateur générés. Par exemple, si l'adresse e-mail utilisateur associée au profil Google est user@example.com, le nom d'utilisateur généré est user. Pour en savoir plus, consultez la section Gérer l'API OS Login.

    Si un utilisateur appartient à une organisation G Suite distincte, le nom d'utilisateur généré porte le préfixe 'ext_'. Par exemple, si user@example.com accède à une VM associée à une organisation différente, le nom d'utilisateur généré est ext_user_example_com.

  • Lorsqu'un utilisateur user appartenant au domaine example.com se connecte à une instance à l'aide de la commande gcloud compute ssh, le message de connexion s'affiche au format suivant :

    Using OS Login user user_example_com instead of default user user

    Ce message confirme que l'utilisateur se connecte avec son profil OS Login.

Afficher les journaux d'audit OS Login 2FA

Compute Engine fournit des journaux d'audit permettant de suivre les requêtes d'authentification à deux facteurs. Ces requêtes sont de deux types :

  • StartSession : démarre une nouvelle session d'authentification. Dans un appel StartSession, un client déclare ses capacités au serveur et obtient des informations sur la première question d'authentification. Un appel StartSession renvoie les éléments ci-dessous :

    • Un identifiant de session, qui est transmis à tous les appels ContinueSession suivants
    • Des informations sur l'authentification ou la méthode 2FA utilisée dans cette nouvelle session d'authentification.
  • ContinueSession : poursuit une session d'authentification existante. En utilisant l'ID de session fourni, l'API ContinueSession peut effectuer l'une des deux actions suivantes :

    • accepter la réponse à une question ou à une méthode d'authentification, puis authentifier l'utilisateur, rejeter sa demande ou lui poser des questions d'authentification supplémentaires ;
    • basculer sur un type d'authentification différent de celui initialement proposé par le serveur lors de la précédente série d'appels d'API. Si un client choisit d'utiliser un autre type d'authentification (par exemple, Google Authenticator au lieu d'une invite téléphonique), il peut le demander lors d'un appel au serveur en utilisant un identifiant request.challengeId du type souhaité.

Pour afficher les journaux, vous devez disposer des autorisations d'accès à la visionneuse de journaux ou du rôle de lecteur ou d'éditeur de projet.

  1. Accédez à la page "Journaux" dans Cloud Console.

    Accéder à la page Journaux

  2. Développez le menu déroulant et sélectionnez Audited Resource.
  3. Dans la barre de recherche, saisissez oslogin.googleapis.com et appuyez sur Entrée.
  4. La liste des journaux d'audit décrivant les requêtes d'authentification à deux facteurs s'affiche. Cliquez sur l'une des entrées pour plus de détails :

    Journaux d'audit pour l'authentification à deux facteurs.

Quel que soit le journal d'audit, il est possible de :

  1. développer la propriété protoPayload ;

    auditer les métriques des journaux pour l'authentification à deux facteurs ;

  2. lancer une recherche methodName pour consulter l'activité correspondant à ce journal (requête StartSession ou ContinueSession). Par exemple, si ce journal suit une requête StartSession, le nom de la méthode indiquera "google.cloud.oslogin.OsLoginService.v1.StartSession". De même, un journal ContinueSession indiquera "google.cloud.oslogin.OsLoginService.v1.ContinueSession". Une entrée du journal d'audit est enregistrée pour chaque requête de session de démarrage et de continuation.

Les propriétés de journal d'audit varient selon les différents types de journaux. Par exemple, les journaux d'audit concernant StartSession comportent des propriétés propres au démarrage de sessions, tandis que les journaux d'audit pour ContinueSession possèdent leur propre ensemble de propriétés. Certaines propriétés de journal d'audit sont également partagées entre les deux types de journaux.

Journaux d'audit d'authentification à deux facteurs

Propriété Valeur
serviceName oslogin.googleapis.com
resourceName Chaîne contenant le numéro de projet. Celui-ci indique à quelle requête de connexion le journal d'audit est rattaché. Par exemple, projects/myproject12345.
severity Niveau de gravité du message du journal. Par exemple, INFO ou WARNING.
request.email Adresse e-mail de l'utilisateur que l'appel d'API est en train d'authentifier.
request.numericProjectId Numéro du projet Google Cloud.
response.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartOrContinueSessionResponse
response.sessionId Chaîne d'ID identifiant la session de manière unique. Cet ID de session est transmis à l'appel d'API suivant dans la séquence.
response.authenticationStatus État de la session. Par exemple, Authenticated, Challenge required ou Challenge pending.
response.challenges Ensemble des questions d'authentification que vous pouvez essayer de transmettre pour cette séquence d'authentification. Une seule de ces questions est lancée et dispose de l'état READY. Les autres sont fournies sous forme d'options que l'utilisateur peut spécifier comme alternative à la principale question d'authentification proposée.

Journaux d'audit StartSession

Propriété Valeur
methodName google.cloud.oslogin.OsLoginService.v1.StartSession
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartSessionRequest
request.supportedChallengeTypes Liste des types d'authentification ou des méthodes 2FA que vous pouvez choisir.

Journaux d'audit ContinueSession

Propriété Valeur
methodName google.cloud.oslogin.OsLoginService.v1.ContinueSession
request.sessionId Chaîne d'ID identifiant de manière unique la session précédente. Cet ID de session est transmis depuis l'appel API précédent dans la séquence.
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.ContinueSessionRequest
request.challengeId Chaîne d'ID identifiant l'authentification à lancer ou à exécuter. Cet ID doit appartenir à un type d'authentification renvoyé par l'appel response.challenges dans une réponse d'API précédente.
request.action Action à effectuer.

Étapes suivantes