Risoluzione dei problemi relativi a OS Login

Questo documento descrive come risolvere i problemi di OS Login utilizzando il server dei metadati. Per informazioni sulla configurazione di OS Login o per istruzioni dettagliate, consulta Configurazione di OS Login.

Puoi eseguire query sul server metadati dall'istanza di una macchina virtuale (VM). Per maggiori informazioni, consulta Archiviare e recuperare i metadati delle istanze.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Imposta una regione e una zona predefinite.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

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, una volta stabilita la connessione, potresti ricevere il seguente messaggio di errore:

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

Ignorare questo messaggio di errore. Questo errore non interessa le 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 configurati gruppi OS Login Linux. Ignorare questi messaggi.

Errore condizione necessaria

Potresti visualizzare un errore simile al seguente quando ti connetti alla VM utilizzando SSH:

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

Questo errore si verifica quando OS Login tenta di generare un nome utente già esistente in un'organizzazione. Si tratta di un problema comune quando un account utente viene eliminato e poco dopo viene creato un nuovo utente con lo stesso indirizzo email. Dopo che un account utente è stato eliminato, sono necessarie fino a 48 ore per rimuovere le informazioni POSIX dell'utente.

Per risolvere il problema, esegui una delle seguenti operazioni:

Argomento non valido

Potresti visualizzare errori simili ai seguenti quando ti connetti a una VM tramite SSH o utilizzi SCP per trasferire 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:

  1. Visualizza il tuo profilo 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 le eventuali chiavi SSH inutilizzate.

  3. Rimuovi dall'output eventuali chiavi inutilizzate utilizzando il comando gcloud compute os-login ssh-keys remove:

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

    Sostituisci KEY con l'impronta digitale della chiave 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 profilo di accesso 48 ore dopo la scadenza oppure quando aggiungi una nuova chiave al profilo.

Codice risposta HTTP: 503

Quando tenti di connetterti a una VM mediante 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 del server dei metadati di 100 query al secondo per istanza di macchina virtuale. Questo limite non può essere modificato. Per risolvere il problema, attendi qualche secondo e poi riprova a connettersi.

Per evitare questo problema in futuro, prova a procedere nel seguente modo:

  • Implementa un meccanismo di nuovo tentativo nel codice dell'applicazione. Per saperne di più, consulta:
  • Riutilizza le connessioni SSH esistenti.
  • Invia i comandi in batch per ridurre le connessioni SSH e le query sui metadati di OS Login.

Voci predefinite dei metadati di OS Login

Compute Engine definisce un insieme di voci di metadati predefinite che pubblicano le 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 puoi 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 amministrativo o di accesso per un utente OS Login.

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

Controllo della configurazione di OS Login in corso...

Utilizza la console Google Cloud o Google Cloud CLI per eseguire query sui metadati per determinare se lOS Login è abilitato. OS Login è abilitato quando la chiave dei metadati enable-oslogin è impostata su TRUE nei metadati del progetto o dell'istanza. Se sono impostati sia i metadati dell'istanza che del progetto, il valore impostato nei metadati dell'istanza ha la precedenza.

Visualizzazione degli utenti di OS Login

Per visualizzare le informazioni del profilo di più utenti, devi specificare i 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 questo comando:

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

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

Visualizzazione di un utente OS Login specifico

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

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

Sostituisci USERNAME con il nome utente dell'utente per il quale vuoi eseguire la query.

Ad esempio, puoi eseguire una richiesta per cercare l'utente user_example_com. Il comando e l'output seguenti 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..."
            }
        }
    }]
}

Sulla 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 accedere alla VM.

Controllo delle autorizzazioni di accesso in corso...

Per visualizzare le autorizzazioni a livello di accesso e amministrativo, devi fornire i parametri di ricerca policy=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 una query sulle autorizzazioni di accesso per l'utente user_example_com che è stato visualizzato nella 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}

Controllare se la VM ha un account di servizio

Puoi eseguire una query sul server dei metadati per trovare l'account di servizio associato alla VM. Sulla tua VM, esegui questo 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.

Passaggi successivi