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 passo passo, consulta Configurazione di OS Login.

Puoi eseguire query sul server dei metadati dall'interno di un'istanza di Compute Engine. Per saperne di più, consulta Archiviazione e recupero dei metadati dell'istanza.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Seleziona la scheda relativa alla modalità di utilizzo degli esempi in questa pagina:

    Console

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

    gcloud

    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  • Imposta una regione e una zona predefinite.
  • REST

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

      Installa Google Cloud CLI.

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella Google Cloud documentazione sull'autenticazione di.

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

In alcune istanze di calcolo che utilizzano OS Login, potresti ricevere il seguente messaggio di errore dopo che la connessione è stata stabilita:

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

Ignora questo messaggio di errore. Questo errore non influisce sulle istanze di calcolo.

Errore durante il recupero dei gruppi

Quando crei istanze di calcolo, 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 la tua organizzazione non ha gruppi Linux di OS Login configurati. Ignora questi messaggi.

Errore condizione necessaria

Quando ti connetti all'istanza di calcolo utilizzando 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 OS Login tenta di generare un nome utente già esistente all'interno di un'organizzazione. Questo è comune 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 questo problema, procedi in uno dei seguenti modi:

Limite dimensioni profilo OS Login superato

Quando ti connetti a un'istanza di calcolo Linux utilizzando SSH o utilizzi SCP per trasferire i file, potresti visualizzare uno dei seguenti errori:

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.

Per risolvere questi errori:

  1. Controlla le dimensioni del tuo profilo OS Login. Per controllare le dimensioni del tuo profilo, esportalo in un file JSON temporaneo e controlla le dimensioni del file eseguendo il comando seguente:

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

    Se le dimensioni sono vicine o superano i 32 KiB, devi rimuovere le chiavi SSH inutilizzate.

  2. Esamina il tuo profilo OS Login per identificare eventuali chiavi SSH inutilizzate:

    gcloud compute os-login describe-profile
    

    L'output è simile al seguente:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  3. Rimuovi le chiavi inutilizzate utilizzando il gcloud compute os-login ssh-keys remove comando:

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

    Sostituisci KEY con l'impronta digitale della chiave o la stringa completa della chiave pubblica SSH.

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 la scadenza o quando aggiungi una nuova chiave al tuo profilo.

Codice di risposta HTTP: 429

Quando tenti di connetterti a un'istanza di calcolo utilizzando SSH, potresti visualizzare il seguente errore:

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

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

Per evitare questo problema in futuro, prova a:

  • Implementare un meccanismo di nuovi tentativi nel codice dell'applicazione. Per saperne di più, consulta:
  • Riutilizzare le connessioni SSH esistenti.
  • Inviare i comandi in batch per ridurre le connessioni SSH e le query sui metadati di OS Login.

Voci dei metadati di OS Login predefinite

Compute Engine definisce un insieme di voci dei metadati predefinite che forniscono informazioni su 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 query.

Rispetto a http://metadata.google.internal/computeMetadata/v1/
Voce dei metadati Descrizione
project/attributes/enable-oslogin Verifica se OS Login è attivato nel Google Cloud progetto corrente.
instance/attributes/enable-oslogin Verifica se OS Login è attivato nell'istanza di computing corrente.
oslogin/users/ Recupera le informazioni del profilo per gli utenti di OS Login. Puoi passare parametri di ricerca come username, uid, pagesize e pagetoken.
oslogin/authorize/

Recupera le impostazioni delle autorizzazioni di accesso o a livello amministrativo per un OS Login user.

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

Verifica della configurazione di OS Login

Utilizza la Google Cloud console o Google Cloud CLI per eseguire query sui metadati e determinare se OS Login è attivato. OS Login è attivato 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 sia quelli 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, puoi specificare il parametro pagesize. Sostituisci pagesize con il valore numerico richiesto.

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

L'output potrebbe contenere un token di pagina, che può essere utilizzato nelle chiamate successive per elencare altri utenti.

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

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

Per ottenere l'utente successivo, imposta pagesize su 1 e pagetoken sul token di pagina dell'output del comando precedente.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=PAGE_TOKEN" -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.

Visualizzazione di un utente di OS Login specifico

Per visualizzare le informazioni del profilo di un utente specifico sull'istanza di computing, esegui il comando seguente:

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

Sostituisci USERNAME con il nome utente dell'utente su cui vuoi eseguire la query.

Ad esempio, puoi eseguire una richiesta per cercare l'utente user_example_com. Il comando e l'output seguenti mostrano la 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 di un utente, puoi anche eseguire /usr/bin/google_authorized_keys USERNAME. Se non vengono restituite chiavi, l'utente potrebbe non disporre delle autorizzazioni necessarie per accedere all'istanza di computing.

Controllo delle autorizzazioni di accesso

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

  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 il seguente 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 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 all'istanza di computing:

{"success":true}

Verifica se l'istanza di computing ha un account di servizio

Puoi eseguire query sul server dei metadati per trovare il account di servizio associato all'istanza di computing. Accedi all'istanza di computing ed esegui il comando seguente:

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