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 Compute Engine. 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 permet 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 en sélectionnant l'une des options suivantes :

    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. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

      gcloud init

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  • Définissez une région et une zone par défaut.
  • REST

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

      Installez la Google Cloud CLI.

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .

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 instances de calcul 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 de calcul.

Échec de l'obtention des groupes

Lorsque vous créez des instances de calcul, 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 à l'instance de calcul à 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 :

Taille limite du profil OS Login dépassée

Vous pouvez rencontrer l'une des erreurs suivantes lorsque vous vous connectez à une instance de calcul Linux à l'aide de SSH ou utilisez SCP pour transférer des fichiers :

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: 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.

OS Login stocke les informations utilisateur, y compris les clés SSH publiques, dans un compte POSIX dont la taille est limitée à 32 Kio par utilisateur. Si votre profil OS Login dépasse cette limite ou si vous avez plus de 64 clés SSH dans votre profil, vous ne pouvez pas y ajouter d'autres clés SSH, ce qui vous empêche de vous connecter aux VM à l'aide de SSH.

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

  1. Vérifiez la taille de votre profil OS Login. Pour vérifier la taille de votre profil, exportez-le dans un fichier JSON temporaire, puis vérifiez la taille du fichier en exécutant la commande suivante :

    gcloud compute os-login describe-profile --format="json" | wc
    

    Si la taille est proche de 32 Kio ou la dépasse, vous devez supprimer les clés SSH inutilisées.

  2. Examinez votre profil OS Login pour identifier les clés SSH inutilisées :

    gcloud compute os-login describe-profile
    

    Le résultat ressemble à ce qui suit :

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  3. Supprimez toutes les clés inutilisées à 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 de la clé ou la chaîne complète de la clé publique SSH.

Pour éviter de générer de nouvelles clés lorsque vous vous connectez à des VM, vous pouvez également effectuer l'une des opérations suivantes :

  • Réutilisez une paire de clés existante en spécifiant l'option --ssh-key-file avec la commande gcloud compute ssh :

    gcloud compute ssh VM_NAME --ssh-key-file=PATH_TO_PRIVATE_KEY
    
  • Si vous vous connectez fréquemment à des VM à l'aide de SSH avec la gcloud CLI, créez une paire de clés SSH par défaut nommée google_compute_engine dans votre répertoire .ssh/. La ligne de commande gcloud CLI utilise cette paire de clés si elle existe et n'en génère pas une nouvelle à chaque connexion. Pour générer une paire de clés par défaut, exécutez la commande suivante :

    ssh-keygen -t rsa -f ~/.ssh/google_compute_engine -C USERNAME -b 2048
    

    Ajoutez ensuite la clé publique à votre profil OS Login :

    gcloud compute os-login ssh-keys add --key-file=~/.ssh/google_compute_engine.pub
    

Cloud Build

Si vous utilisez Cloud Build et que le profil OS Login de votre compte de service dépasse la limite de 32 Kio, vous risquez de rencontrer des échecs de connexion SSH et de voir le message d'erreur suivant : Login profile size exceeds 32 KiB.... Pour résoudre ce problème, vous pouvez configurer Cloud Build pour utiliser des comptes de service spécifiés par l'utilisateur au lieu du compte de service Cloud Build par défaut.

Pour éviter que ce problème ne se reproduise, 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 leur expiration ou lorsque vous ajoutez une nouvelle clé à votre profil.

Code de réponse HTTP : 429

L'erreur suivante peut s'afficher lorsque vous essayez de vous connecter à une instance de calcul à l'aide de SSH :

Failed to validate organization user USERNAME has login permission, got HTTP response code: 429

Ce problème est dû à la limite de débit du serveur de métadonnées, qui est de 100 requêtes par seconde et par instance de calcul. Cette limite ne peut pas être ajustée. Pour résoudre ce problème, patientez quelques secondes, puis réessayez d'établir la connexion.

Pour éviter ce problème à l'avenir, essayez les solutions suivantes :

Entrées par défaut de métadonnées OS Login

Compute Engine définit un ensemble d'entrées de métadonnées par défaut qui fournit des informations OS Login. 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 OS Login;exploitation est activée sur le projet Google Cloud actuel.
instance/attributes/enable-oslogin Vérifie si la OS Login;exploitation est activée sur l'instance de calcul 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 OS Login est activé. 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 pouvez spécifier le paramètre pagesize. Remplacez pagesize par la valeur numérique requise.

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

La sortie peut contenir un jeton de page, qui peut être utilisé dans les appels suivants pour lister plus d'utilisateurs.

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

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

Pour obtenir l'utilisateur suivant, définissez pagesize sur 1 et pagetoken sur le jeton de page issu du résultat de la commande précédente.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=PAGE_TOKEN" -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 instance de calcul, exécutez la commande suivante :

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

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 à l'instance de calcul :

{"success":true}

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

Vous pouvez interroger le serveur de métadonnées pour trouver le compte de service associé à votre instance de calcul. Connectez-vous à votre instance de calcul et 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