Questo documento descrive come risolvere i problemi relativi a OS Login utilizzando il server di 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 Compute Engine. Per ulteriori informazioni, vedi 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 a come prevedi di utilizzare i campioni in questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:
gcloud initSe 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 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
In alcune istanze di Compute 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 istanze di calcolo.
Errore durante il recupero dei gruppi
Quando crei istanze di computing, 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.
Precondizione non riuscita
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 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. 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:
- Recupera l'account eliminato.
- Rimuovi le informazioni POSIX dell'account prima di eliminarlo.
Limite dimensioni profilo OS Login superato
Quando ti connetti a un'istanza di calcolo Linux utilizzando SSH o utilizzi SCP per trasferire 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.
OS Login archivia le informazioni utente, incluse le chiavi pubbliche SSH, in un account POSIX con un limite di dimensioni di 32 KiB per utente. Se il tuo profilo OS Login supera questo limite o se hai più di 64 chiavi SSH nel profilo, non puoi aggiungerne altre, il che ti impedisce di connetterti alle VM utilizzando SSH.
Per risolvere questi errori:
Controlla le dimensioni del tuo profilo OS Login. Per controllare le dimensioni del tuo profilo, esporta il profilo in un file JSON temporaneo e controlla le dimensioni del file eseguendo il seguente comando:
gcloud compute os-login describe-profile --format="json" | wc
Se la dimensione è vicina o supera i 32 KiB, devi rimuovere le chiavi SSH inutilizzate.
Esamina il tuo profilo OS Login per identificare le chiavi SSH inutilizzate:
gcloud compute os-login describe-profile
L'output è simile al seguente:
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...Rimuovi le chiavi inutilizzate utilizzando il comando
gcloud compute os-login ssh-keys remove:gcloud compute os-login ssh-keys remove --key=KEY
Sostituisci
KEYcon l'impronta della chiave o la stringa completa della chiave SSH pubblica.
In alternativa, per evitare di generare nuove chiavi quando ti connetti alle VM, puoi procedere in uno dei seguenti modi:
Riutilizza una coppia di chiavi esistente specificando il flag
--ssh-key-filecon il comandogcloud compute ssh:gcloud compute ssh VM_NAME --ssh-key-file=PATH_TO_PRIVATE_KEY
Se ti connetti spesso alle VM utilizzando SSH con gcloud CLI, crea una coppia di chiavi SSH predefinita denominata
google_compute_enginenella directory.ssh/. La riga di comando gcloud CLI utilizza questa coppia di chiavi se esiste e non ne genera una nuova a ogni connessione. Per generare una coppia di chiavi predefinita, esegui:ssh-keygen -t rsa -f ~/.ssh/google_compute_engine -C USERNAME -b 2048
Quindi aggiungi la chiave pubblica al tuo profilo OS Login:
gcloud compute os-login ssh-keys add --key-file=~/.ssh/google_compute_engine.pub
Cloud Build
Se utilizzi Cloud Build e il profilo OS Login del tuo account di servizio supera il limite di 32 KiB, potresti riscontrare errori di connessione SSH e visualizzare il seguente messaggio di errore: Login profile size exceeds 32 KiB.... Per risolvere il problema, puoi configurare Cloud Build in modo che utilizzi service account specificati dall'utente anziché il account di servizio Cloud Build predefinito.
Per evitare che questo problema si verifichi 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 provi a 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 di metadati di 100 query al secondo per istanza di computing. Questo limite non può essere modificato. Per risolvere il problema, attendi qualche secondo, quindi riprova a eseguire la connessione.
Per evitare questo problema in futuro, prova quanto segue:
- Implementa 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 le query sui metadati di OS Login.
Voci di metadati di 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 dei 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 sull'istanza di computing 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 delle autorizzazioni a livello di accesso o amministrativo per un utente OS Login.
Per controllare un'autorizzazione, devi specificare il parametro di query |
Verifica della configurazione di OS Login
Utilizza la console Google Cloud o Google Cloud CLI per eseguire query sui metadati
per determinare se OS 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 sia 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 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 questo comando:
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 OS Login specifico
Per visualizzare le informazioni del profilo di un utente specifico sull'istanza di computing, 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 cui vuoi eseguire la query.
Ad esempio, puoi eseguire una richiesta per cercare l'utente user_example_com.
Il seguente comando e output 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 per 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 a livello amministrativo e di accesso, devi fornire i parametri di ricerca policy=login&email=LOGIN_NAME.
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"
Nell'output, prendi nota di
name.Esegui il seguente comando
loginutilizzando il valore diname: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 Compute:
{"success":true}Controllare se l'istanza di computing ha un account di servizio
Puoi eseguire query sul server dei metadati per trovare il account di servizio associato alla tua istanza di computing. Accedi alla tua istanza di Compute ed 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
- Scopri di più su OS Login.
- Scopri come funzionano le connessioni SSH alle istanze Linux su Compute Engine.
- Per istruzioni passo passo, consulta una delle seguenti risorse:
- Esamina Gestire OS Login in un'organizzazione