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 :

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init
    2. Set a default region and zone.
    3. 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

      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 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 la sortie 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 ou la chaîne de clé.

Pour éviter que ce problème ne se reproduise, ajoutez une date d'expiration aux 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.

Code de réponse HTTP 503

L'erreur suivante peut s'afficher lorsque vous tentez de vous connecter à une VM à l'aide de SSH :

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

Ce problème est causé par la limite de débit du serveur de métadonnées de 100 requêtes par seconde et par instance de machine virtuelle. Cette limite ne peut pas être ajustée. Pour résoudre ce problème, attendez 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 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.

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

gcpdiag est un outil Open Source. Il ne s'agit pas d'un produit Google Cloud faisant l'objet d'une assistance officielle. Vous pouvez utiliser l'outil gcpdiag pour vous aider à identifier et à résoudre les problèmes liés au projet Google Cloud. Pour plus d'informations, consultez le projet gcpdiag sur GitHub.

Ce runbook gcpdiag examine les causes potentielles des problèmes d'accès SSH sur les VM Windows et Linux dans Google Cloud. Il se concentre sur les éléments suivants :
  • État de la VM : vérifie si la VM est en cours d'exécution et dispose de ressources suffisantes (processeur, mémoire, stockage sur disque).
  • Autorisations : garantit que vous disposez des autorisations IAM appropriées pour configurer des clés SSH.
  • Paramètres de la VM : vérifie que les clés SSH et les autres métadonnées sont correctement configurées.
  • Règles réseau : examine les règles de pare-feu pour confirmer que le trafic SSH est autorisé.
  • Système d'exploitation invité : recherche les problèmes internes liés au système d'exploitation qui pourraient bloquer SSH.

console Google Cloud

  1. Terminez l'exécution, puis copiez la commande suivante.
  2. gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED
  3. Ouvrez la console Google Cloud et activez Cloud Shell.
  4. Ouvrir la console Cloud
  5. Collez la commande copiée.
  6. Exécutez la commande gcpdiag, qui télécharge l'image Docker gcpdiag, puis effectue des vérifications de diagnostic. Le cas échéant, suivez les instructions de sortie pour corriger les échecs de vérification.

Docker

Vous pouvez exécuter gcpdiag à l'aide d'un wrapper qui démarre gcpdiag dans un conteneur Docker. Docker ou Podman doivent être installés.

  1. Copiez et exécutez la commande suivante sur votre station de travail locale :
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Exécutez la commande gcpdiag.
    ./gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED

Affichez les paramètres disponibles pour ce runbook.

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant la ressource.
  • VM_NAME : nom de la VM cible au sein de votre projet.
  • ZONE : zone dans laquelle se trouve votre VM cible.
  • PRINCIPAL : utilisateur ou compte de service principal qui établit la connexion SSH. Pour l'authentification basée sur une clé, utilisez l'utilisateur authentifié par votre outil de ligne de commande Cloud Shell ou connecté à la console Google Cloud. Pour emprunter l'identité d'un compte de service, il doit s'agir de l'adresse e-mail du compte de service.
  • IAP_ENABLED : valeur booléenne (true ou false) indiquant si Identity-Aware Proxy est utilisé pour établir la connexion SSH. Par défaut : true

Options utiles :

Pour obtenir la liste et la description de toutes les options de l'outil gcpdiag, consultez les instructions d'utilisation de gcpdiag.

Étape suivante