Configurer la connexion au système d'exploitation avec une authentification à deux facteurs

Si vous utilisez OS Login pour gérer l'accès à vos instances, vous pouvez ajouter une couche de sécurité supplémentaire en utilisant l'authentification à deux facteurs, également appelée 2FA.

Pour utiliser OS Login avec authentification 2FA sur vos instances, procédez comme suit :

  1. Activez l'authentification 2FA pour votre compte ou votre domaine Google.
  2. Activez l'authentification 2FA sur votre projet ou votre instance.
  3. Accordez les rôles IAM pertinents à vous-même, aux membres de votre projet ou aux membres de votre organisation.
  4. [Facultatif] Si votre projet fait partie d'une organisation, consultez la page Gérer OS Login au sein d'une organisation.
  5. Connectez-vous à des instances.
  6. Examinez les comportements de connexion attendus.

Une fois que vous avez configuré OS Login avec authentification 2FA, 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é.

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

Systèmes d'exploitation compatibles

L'authentification à deux facteurs OS Login nécessite des images de système d'exploitation créées après les dates ci-dessous :

Système d'exploitation Dates
CentOS 6 et 7 26 mars 2019
Debian 9 26 mars 2019
RHEL 6 et 7 26 mars 2019
SUSE 12 et 15 17 juin 2019
Ubuntu 16.04 LTS, 18.04 LTS, 18.10, et 19.04 28 juin 2019

Méthodes ou types d'authentification acceptés

OS Login est compatible avec les méthodes ou types d'authentification 2FA suivants :

Activer l'authentification 2FA pour votre compte ou votre domaine Google

Avant de pouvoir activer l'authentification à deux facteurs pour votre projet ou instance, vous devez d'abord l'activer sur votre compte ou votre domaine Google. Veillez à activer l'authentification à deux facteurs sur le domaine contenant le projet ou les instances, ou pour l'utilisateur propriétaire du projet ou des instances.

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

Un administrateur G Suite peut activer l’authentification à deux facteurs pour un domaine. Un utilisateur Google individuel peut activer l’authentification à deux facteurs au niveau du compte utilisateur.

Domaine

L'authentification à deux facteurs pour un domaine doit être activée par un administrateur G Suite.

Pour activer l'authentification 2FA pour un domaine, consultez la page Protéger votre entreprise avec la validation en deux étapes du guide d'administration de G Suite.

Compte utilisateur

Si vos comptes utilisateur ne sont pas gérés par un administrateur G Suite, vous pouvez configurer l'authentification 2FA pour des comptes Google individuels.

Pour configurer l'authentification 2FA pour un compte Google individuel, consultez la page Validation en deux étapes de Google.

Activer l'authentification 2FA sur votre projet ou votre instance

Après avoir activé l'authentification à deux facteurs au niveau du domaine ou du compte utilisateur, vous pouvez configurer des instances individuelles ou des projets pour qu'ils utilisent l'authentification OS Login 2FA.

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

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

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

Console

Définissez enable-oslogin-2fa dans les métadonnées de l'instance lorsque vous la créez :

  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 l'instance.

Définissez enable-oslogin-2fa dans les métadonnées à l'échelle du projet afin de l'appliquer à toutes les instances de votre projet :

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

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

  2. Cliquez sur Modifier.
  3. Ajoutez une entrée de métadonnées, avec enable-oslogin-2fa comme clé et TRUE comme valeur. Vous pouvez également définir la valeur sur FALSE pour désactiver la fonctionnalité.
  4. Cliquez sur Enregistrer pour appliquer les modifications.

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

Définir enable-oslogin-2fa dans les métadonnées d'une instance existante :

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

    Accéder à la page Instances de VM

  2. Cliquez sur le nom de l'instance sur laquelle vous souhaitez définir la valeur de 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. Sous Métadonnées personnalisées, ajoutez une entrée de métadonnées avec enable-oslogin-2fa comme clé et TRUE comme valeur. Vous pouvez également définir la valeur sur FALSE pour exclure l'instance de la fonctionnalité. Vous devez également vérifier que enable-oslogin est défini sur True.
  5. En bas de la page des détails de l'instance, cliquez sur Enregistrer pour appliquer vos modifications à l'instance.

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

gcloud

Définissez enable-oslogin-2fa dans les métadonnées de l'instance lorsque vous la créez :

Remplacez instance-name par le nom de votre instance.

    gcloud compute instances create instance-name \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    

Définissez enable-oslogin-2fa dans les métadonnées à l'échelle du projet afin de l'appliquer à toutes les instances de votre projet :

    gcloud compute project-info add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    

Définissez enable-oslogin-2fa dans les métadonnées d'une instance existante :

Remplacez instance-name par le nom de votre instance.

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

Configurer des rôles de connexion au système d'exploitation pour les comptes utilisateur

Attribuer des rôles IAM de connexion au système d'exploitation

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

Par exemple, vous pouvez accorder l'accès à une instance à vos utilisateurs en procédant comme suit :

  1. Attribuez les rôles d'accès à l'instance nécessaires à l'utilisateur.

  2. Si, en tant qu'administrateur, vous souhaitez autoriser des membres extérieurs à votre organisation à accéder à vos instances, accordez-leur le rôle roles/compute.osLoginExternalUser au niveau de l'organisation.

Les utilisateurs ne peuvent pas voir les détails ou les adresses IP externes de vos instances, sauf si vous leur fournissez ces informations directement. Pour permettre aux utilisateurs d'accéder aux détails de vos instances, accordez-leur des rôles IAM supplémentaires. Par exemple, le rôle roles/compute.viewer permet aux utilisateurs d'afficher toutes les ressources de votre projet, y compris les détails des instances.

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 nécessaires à 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 de connexion au système d'exploitation

Pour révoquer l'accès des utilisateurs aux instances autorisées à se servir d'OS Login, supprimez les rôles 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.

Se connecter à des instances

Après avoir configuré les rôles nécessaires, connectez-vous à une instance à l'aide des outils Compute Engine. Compute Engine génère automatiquement des clés SSH et les associe à votre compte utilisateur. Si vous créez vos propres clés SSH et ajoutez les clés publiques à votre compte utilisateur, vous pouvez également vous connecter aux instances à l'aide d'outils tiers. L'instance 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 instance, vous recevez un message en fonction de la méthode 2FA 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.

Comportements de connexion attendus

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

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

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

  • Si aucun nom d'utilisateur n'est défini par un administrateur G Suite, 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.

    Ce nom d'utilisateur généré est basé sur les domaines associés à un compte G Suite. 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.

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

    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 ;

    Métriques des journaux d'audit 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