Risoluzione dei problemi relativi a OS Login


Questo documento descrive come risolvere i problemi di accesso al sistema operativo utilizzando il server di metadati. Per informazioni sulla configurazione di OS Login o per istruzioni dettagliate, consulta Configurare OS Login.

Puoi eseguire una query sul server di metadati dall'interno di un'istanza di macchina virtuale (VM). Per ulteriori informazioni, consulta la sezione Archiviazione e recupero dei metadati delle istanze.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine come segue.

    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

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

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

        gcloud init

      Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Messaggi di errore comuni

Di seguito sono riportati alcuni esempi di errori comuni che potresti riscontrare quando utilizzi OS Login.

Impossibile trovare il nome del gruppo

Su alcune VM che utilizzano OS Login, potresti ricevere il seguente messaggio di errore dopo viene stabilita la connessione:

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

Ignora questo messaggio di errore. Questo errore non influisce sulle VM.

Impossibile recuperare i gruppi

Quando crei le VM, potresti visualizzare log simili ai seguenti:

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

Questi log indicano che nella tua organizzazione non sono presenti gruppi Linux di OS Login configurato. Ignora questi messaggi.

Errore condizione necessaria

Quando ti connetti alla VM tramite SSH, potresti visualizzare un errore simile al seguente:

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

Questo errore si verifica quando Accesso sistema operativo tenta di generare un nome utente che esiste già all'interno di un'organizzazione. Questo accade spesso quando un account utente viene eliminato e poco dopo viene creato un nuovo utente con lo stesso indirizzo email. Dopo l'eliminazione di un account utente, sono necessarie fino a 48 ore per rimuovere le informazioni POSIX dell'utente.

Per risolvere il problema, procedi in uno dei seguenti modi:

Argomento non valido

Potresti riscontrare errori simili ai seguenti quando ti connetti a una VM utilizzando SSH o SCP per trasferire i file:

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.

Per risolvere questi errori, procedi nel seguente modo:

  1. Visualizza il tuo profilo di OS Login eseguendo il Comando gcloud compute os-login describe-profile:

    gcloud compute os-login describe-profile
    

    L'output è simile al seguente:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Esamina l'output per identificare eventuali chiavi SSH non utilizzate.

  3. Rimuovi dall'output le chiavi non utilizzate utilizzando il metodo Comando gcloud compute os-login ssh-keys remove:

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

    Sostituisci KEY con l'impronta delle chiavi o con la stringa della chiave.

Per evitare che questo problema si ripresenti in futuro, aggiungi una data di scadenza per le chiavi SSH. Le chiavi scadute vengono rimosse automaticamente dal tuo profilo di accesso 48 ore dopo una scadenza o quando aggiungi una nuova chiave al tuo profilo.

Codice di risposta HTTP: 503

Quando tenti di connetterti a una VM tramite SSH, potresti visualizzare il seguente errore:

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

Questo problema è causato dal limite di frequenza di 100 query del server dei metadati al secondo per istanza di macchina virtuale. Questo limite non può essere modificato. Per risolvere il problema, attendi qualche secondo e riprova a eseguire la connessione.

Per evitare questo problema in futuro, prova quanto segue:

  • Implementare un meccanismo di ripetizione nel codice dell'applicazione. Per ulteriori informazioni, consulta:
  • Riutilizza le connessioni SSH esistenti.
  • Invia i comandi in batch per ridurre le connessioni SSH e l'OS Login query sui metadati.

Voci di metadati predefinite di OS Login

Compute Engine definisce un insieme di voci di metadati predefinite che Informazioni di OS Login. I metadati predefiniti sono sempre definiti e impostati dal server. Le chiavi dei metadati predefinite sono sensibili alle maiuscole.

La tabella seguente descrive le voci su cui è possibile eseguire una query.

Rispetto a http://metadata.google.internal/computeMetadata/v1/
Voce dei metadati Descrizione
project/attributes/enable-oslogin Controlla se OS Login è abilitato nel progetto Google Cloud attuale.
instance/attributes/enable-oslogin Controlla se OS Login è abilitato sulla VM attuale.
oslogin/users/ Recupera le informazioni del profilo per gli utenti di OS Login. Puoi trasmettere parametri di ricerca come username, uid, pagesize e pagetoken.
oslogin/authorize/

Recupera le impostazioni di autorizzazione a livello di accesso o amministrativo per un utente di OS Login.

Per controllare un'autorizzazione, devi specificare il parametro di query policy. Il valore del parametro criterio deve essere impostato su login (per verificare l'autorizzazione di accesso) o adminLogin (per verificare l'accesso sudo).

Controllo della configurazione di OS Login

Utilizza la console Google Cloud o Google Cloud CLI per eseguire query sui metadati per determinare se l'accesso all'OS è abilitato. OS Login è abilitato quando La chiave dei metadati enable-oslogin è impostata su TRUE nel progetto o nell'istanza metadati. Se sono impostati sia i metadati di istanza che di progetto, il valore impostato i metadati dell'istanza hanno la precedenza.

Visualizzazione degli utenti di OS Login

Per visualizzare le informazioni del profilo per più utenti, devi specificare il Parametri pagesize e pagetoken. Sostituisci pagesize e pagetoken con il valore numerico richiesto.

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

Ad esempio, per impostare pagesize su 1 e pagetoken su 0, esegui il seguente comando:

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

Nella maggior parte delle distribuzioni, puoi anche eseguire il comando Unix getent passwd per recuperare le voci della password per gli utenti dell'organizzazione.

Visualizzare un utente OS Login specifico

Per visualizzare le informazioni del profilo di un utente specifico sulla tua VM, esegui il seguente comando:

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

Sostituisci USERNAME con il nome utente dell'utente che hai su cui vuoi eseguire una query.

Ad esempio, puoi eseguire una richiesta di ricerca dell'utente user_example_com. Il comando e l'output riportati di seguito mostrano una formattazione aggiunta per una migliore leggibilità.

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

L'output è simile al seguente:

{
    "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..."
            }
        }
    }]
}

Nella maggior parte delle distribuzioni, puoi anche eseguire comandi Unix come getent passwd username o getent passwd uid per recuperare le informazioni del profilo.

Per recuperare le chiavi SSH per un utente, puoi anche eseguire /usr/bin/google_authorized_keys USERNAME. Se non viene restituita alcuna chiave, l'utente potrebbe non disporre delle autorizzazioni necessarie per registrare nella VM.

Controllo delle autorizzazioni di accesso in corso...

Per visualizzare le autorizzazioni a livello di accesso e amministrativo, devi fornire i parametri di querypolicy=login&email=LOGIN_NAME.

  1. Esegui una query sul profilo utente per ottenere il valore del campo name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. Nell'output, prendi nota di name.

  3. Esegui questo comando login utilizzando il valore di name:

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

Ad esempio, puoi eseguire query sulle autorizzazioni di accesso dell'utente user_example_com visualizzato nel sezione precedente:

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

L'output comando indica che l'utente è autorizzato ad accedere alla VM:

{"success":true}

Verifica se la VM ha un account di servizio

Puoi eseguire query sul server di metadati per trovare l'account di servizio associato alla tua VM. Nella VM, esegui il seguente comando:

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

L'output è simile al seguente:

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

Se non viene trovato alcun account di servizio, l'output è vuoto.

Debug dei problemi di OS Login con gcpdiag

gcpdiag è uno strumento open source. Non è un prodotto Google Cloud ufficialmente supportato. Puoi utilizzare lo strumento gcpdiag per identificare e risolvere i problemi dei progetti Google Cloud. Per maggiori informazioni, consulta il progetto gcpdiag su GitHub.

Questo runbook gcpdiag esamina le potenziali cause dei problemi di accesso SSH sia sulle VM Windows che su quelle Linux in Google Cloud. Si concentra su:
  • Integrità della VM: controlla se la VM è in esecuzione e dispone di risorse sufficienti (CPU, memoria, disco).
  • Autorizzazioni: assicurati di disporre delle autorizzazioni IAM appropriate per configurare le chiavi SSH.
  • Impostazioni VM: verifica che le chiavi SSH e gli altri metadati siano configurato correttamente.
  • Regole di rete: esamina le regole firewall per confermare l'SSH. il traffico è consentito.
  • Sistema operativo guest: cerca eventuali problemi interni del sistema operativo che potrebbero bloccare SSH.

Console Google Cloud

  1. Completa e poi copia il seguente comando.
  2. GOOGLE_AUTH_TOKEN=GOOGLE_AUTH_TOKEN \
      gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED \
        --auto --reason=REASON
  3. Apri la console Google Cloud e attiva Cloud Shell.
  4. Apri la console Cloud
  5. Incolla il comando copiato.
  6. Esegui il comando gcpdiag, che scarica l'immagine Docker gcpdiag, ed esegue i controlli diagnostici. Se applicabile, segui le istruzioni di output per correggere i controlli non riusciti.

Docker

Puoi eseguire gcpdiag utilizzando un wrapper che avvia gcpdiag in un container Docker. Docker o Podman deve essere installato.

  1. Copia ed esegui il comando seguente sulla workstation locale.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Esegui il comando gcpdiag.
    ./gcpdiag runbook gce/ssh --project=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE \
        --parameter principal=PRINCIPAL \
        --parameter tunnel_through_iap=IAP_ENABLED

Visualizza i parametri disponibili per questo runbook.

Sostituisci quanto segue:

  • VM_NAME: il nome della VM di destinazione all'interno del progetto.
  • ZONE: la zona in cui si trova la VM target.
  • PRINCIPAL: il principale account utente o di servizio che avvia la connessione SSH. Per l'autenticazione basata su chiave, utilizza autenticati dallo strumento a riga di comando di Cloud Shell o che abbiano effettuato l'accesso nella console Google Cloud. Per la simulazione dell'identità degli account di servizio, deve trattarsi l'indirizzo email dell'account.
  • IAP_ENABLED: un valore booleano (true o false) che indica se Identity-Aware Proxy viene utilizzato per stabilire la connessione SSH. Predefinita: true

Flag utili:

Per un elenco e una descrizione di tutti i flag dello strumento gcpdiag, consulta le istruzioni per l'utilizzo di gcpdiag.

Passaggi successivi