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, vedi Configurare OS Login.

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

Prima di iniziare

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

    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. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Per saperne di più, consulta la sezione Autenticarsi 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 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 tue VM.

Errore durante il recupero dei gruppi

Quando crei 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 la tua organizzazione non ha gruppi Linux di OS Login configurati. 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 OS Login tenta di generare un nome utente che esiste già 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. Una volta eliminato un account utente, 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

Quando ti connetti a una VM utilizzando SSH o utilizzi SCP per trasferire file, potresti visualizzare errori simili ai seguenti:

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 chiavi SSH non utilizzate.

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

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

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

Per evitare che questo problema si ripresenti in futuro, aggiungi un tempo 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 una VM 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 di 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 riprova a connetterti.

Per evitare questo problema in futuro, prova quanto segue:

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

Voci di metadati OS Login predefinite

Compute Engine definisce un insieme di voci di 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 che puoi interrogare.

Rispetto a http://metadata.google.internal/computeMetadata/v1/
Voce di metadati Descrizione
project/attributes/enable-oslogin Controlla se OS Login è abilitato nel progetto Google Cloud corrente.
instance/attributes/enable-oslogin Controlla se OS Login è abilitato sulla VM corrente.
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 OS Login.

Per controllare 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 adminLogin (per verificare l'accesso sudo).

Verifica se OS Login è configurato

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

Visualizzazione degli utenti di OS Login

Per visualizzare le informazioni del profilo per 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"

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 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 che vuoi interrogare.

Ad esempio, puoi eseguire una richiesta per cercare l'utente user_example_com. Il seguente comando e output mostrano la formattazione aggiuntiva 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 alla VM.

Controllo delle autorizzazioni di accesso

Per visualizzare le autorizzazioni a livello amministrativo e di accesso, 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 visualizzato nella sezione precedente:

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

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

{"success":true}

Controllare se la VM ha un account di servizio

Puoi eseguire query sul server di metadati per trovare il account di servizio associato alla tua VM. Sulla 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