Résoudre les problèmes liés à OS Login


Ce document explique comment résoudre les problèmes liés à OS Login à l'aide du serveur de métadonnées. Pour plus d'informations sur la configuration d'OS Login ou pour obtenir des instructions détaillées, consultez la section Configurer OS Login.

Vous pouvez interroger le serveur de métadonnées à partir d'une instance de machine virtuelle (VM). Pour en savoir plus, consultez la page Stocker et récupérer les métadonnées d'instances.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

Messages d'erreur fréquents

Vous trouverez ci-dessous des exemples d'erreurs courantes que vous pouvez rencontrer en utilisant OS Login.

Nom du groupe introuvable

Sur certaines VM 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 VM.

Échec de l'obtention des groupes

Lorsque vous créez des VM, des journaux semblables à ce qui suit peuvent s'afficher :

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

Ces journaux indiquent que votre organisation n'a pas de groupes OS Login Linux configurés. Ignorez ces messages.

Condition préalable non remplie

Une erreur semblable à celle-ci peut s'afficher lorsque vous vous connectez à la VM à l'aide de SSH :

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

Cette erreur se produit lorsque OS Login tente de générer un nom d'utilisateur qui existe déjà dans une organisation. Cette situation est fréquente lorsqu'un compte utilisateur est supprimé et qu'un nouvel utilisateur associé à la même adresse e-mail est créé peu de temps après. Une fois le compte utilisateur supprimé, la suppression des informations POSIX de l'utilisateur peut prendre jusqu'à 48 heures.

Pour résoudre ce problème, effectuez l'une des opérations suivantes :

Argument incorrect

Vous pouvez rencontrer des erreurs semblables à ce qui suit lorsque vous vous connectez à une VM à l'aide de SSH ou utilisez SCP pour transférer des fichiers :

ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

Pour résoudre ces erreurs, procédez comme suit :

  1. Affichez votre profil OS Login en exécutant la commande gcloud compute os-login describe-profile :

    gcloud compute os-login describe-profile
    

    Le résultat ressemble à ceci :

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Examinez le résultat pour identifier les clés SSH inutilisées.

  3. Supprimez toutes les clés inutilisées de la sortie à l'aide de la commande gcloud compute os-login ssh-keys remove :

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Remplacez KEY par l'empreinte des clés ou par la chaîne de clé.

Pour éviter ce problème à l'avenir, ajoutez un délai d'expiration pour les clés SSH. Les clés expirées sont automatiquement supprimées de votre profil de connexion 48 heures après l'expiration ou lorsque vous ajoutez une nouvelle clé à votre profil.

Entrées par défaut de métadonnées de connexion au système d'exploitation

Compute Engine définit un ensemble d'entrées de métadonnées par défaut qui fournit des informations de connexion au système d'exploitation. Les métadonnées par défaut sont toujours définies et configurées par le serveur. Les clés de métadonnées par défaut sont sensibles à la casse.

Le tableau suivant décrit les entrées que vous pouvez interroger.

Par rapport à http://metadata.google.internal/computeMetadata/v1/
Entrée de métadonnées Description
project/attributes/enable-oslogin Vérifie si la connexion au système d'exploitation est activée sur le projet Google Cloud en cours.
instance/attributes/enable-oslogin Vérifie si la connexion au système d'exploitation est activée sur la VM actuelle.
oslogin/users/ Récupère les informations de profil des utilisateurs d'OS Login. Vous pouvez transmettre des paramètres de requête tels que username, uid, pagesize et pagetoken.
oslogin/authorize/

Récupère les paramètres d'autorisation de connexion ou d'administration pour un utilisateur d'OS Login.

Pour vérifier une autorisation, vous devez spécifier le paramètre de requête policy. La valeur du paramètre de règle doit être login (pour vérifier l'autorisation de connexion) ou adminLogin (pour vérifier l'accès sudo).

Vérifier si OS Login est configuré

Interrogez les métadonnées à l'aide de la console Google Cloud ou de Google Cloud CLI pour déterminer si la connexion au système d'exploitation est activée. OS Login est activé lorsque la clé de métadonnées enable-oslogin est définie sur TRUE dans les métadonnées d'un projet ou d'une instance. Si les métadonnées d'instance et de projet sont toutes deux définies, les métadonnées d'instance sont prioritaires.

Afficher les utilisateurs d'OS Login

Pour afficher les informations de profil de plusieurs utilisateurs, vous devez spécifier les paramètres pagesize et pagetoken. Remplacez pagesize et pagetoken par la valeur numérique requise.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

Par exemple, pour définir pagesize sur 1 et pagetoken sur 0, exécutez la commande suivante :

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

Sur la plupart des distributions, vous pouvez également exécuter la commande Unix getent passwd afin de récupérer les entrées de mot de passe des utilisateurs de l'organisation.

Afficher un utilisateur d'OS Login spécifique

Pour afficher les informations de profil d'un utilisateur spécifique sur votre VM, exécutez la commande ci-dessous.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

Remplacez USERNAME par le nom d'utilisateur sur lequel vous souhaitez effectuer la requête.

Par exemple, vous pouvez effectuer une requête pour rechercher l'utilisateur user_example_com. La commande et le résultat ci-dessous ont été mis en forme pour une meilleure lisibilité.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

Le résultat ressemble à ce qui suit :

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

Sur la plupart des distributions, vous pouvez également exécuter des commandes Unix telles que getent passwd username ou getent passwd uid pour récupérer les informations de profil.

Pour récupérer les clés SSH d'un utilisateur, vous pouvez également exécuter /usr/bin/google_authorized_keys USERNAME. Si aucune clé n'est renvoyée, il est possible que l'utilisateur ne dispose pas des autorisations requises pour se connecter à la VM.

Vérifier les autorisations de connexion

Pour afficher les autorisations de connexion et d'administration, vous devez fournir les paramètres de requête policy=login&email=LOGIN_NAME.

  1. Interrogez le profil utilisateur pour obtenir la valeur du champ name :

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. Dans le résultat, notez la valeur du champ name.

  3. Exécutez la commande login suivante en utilisant la valeur du champ name :

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

Par exemple, vous pouvez interroger les autorisations de connexion de l'utilisateur user_example_com affichées dans la section précédente.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

Le résultat de la commande indique que l'utilisateur est autorisé à se connecter à la VM :

{"success":true}

Vérifier si votre VM dispose d'un compte de service

Vous pouvez interroger le serveur de métadonnées pour trouver le compte de service associé à votre VM. Sur votre VM, exécutez la commande suivante :

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

Le résultat ressemble à ce qui suit :

12345-sa@developer.gserviceaccount.com/
default/

Si aucun compte de service n'est trouvé, le résultat est vide.

Étape suivante