Questo documento descrive come risolvere i OS Login utilizzando il server di metadati. Per informazioni sulla configurazione di OS Login o per istruzioni dettagliate, consulta Configurare OS Login.
Puoi eseguire query sul server di metadati da 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.
L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud.
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Ripristina l'account eliminato.
- Rimuovi le informazioni POSIX dell'account prima di eliminarlo.
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: ... ...
Esamina l'output per identificare eventuali chiavi SSH non utilizzate.
Rimuovi le chiavi non utilizzate 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 delle chiavi o con la stringa della chiave.- 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.
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
login
utilizzando il valore diname
:curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- Integrità della VM: controlla se la VM è in esecuzione e dispone di risorse sufficienti (CPU, memoria, disco).
- Autorizzazioni:assicurati di disporre delle autorizzazioni IAM necessarie per configurare le chiavi SSH.
- Impostazioni VM:verifica che le chiavi SSH e altri metadati siano configurati correttamente.
- Regole di rete:esamina le regole firewall per verificare che il traffico SSH sia consentito.
- Sistema operativo guest:cerca problemi interni del sistema operativo che potrebbero bloccare SSH.
- Completa e poi copia il seguente comando.
- Apri la console Google Cloud e attiva Cloud Shell. Apri Cloud Console
- Incolla il comando copiato.
- Esegui il comando
gcpdiag
, che scarica l'immagine Dockergcpdiag
, quindi esegui i controlli diagnostici. Se applicabile, segui le istruzioni di output per risolvere i problemi relativi ai controlli non riusciti. - Copia ed esegui il seguente comando sulla tua workstation locale.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Esegui il comando
gcpdiag
../gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
- PROJECT_ID: l'ID del progetto contenente la risorsa
- VM_NAME: il nome della VM di destinazione all'interno del progetto.
- ZONE: la zona in cui si trova la VM di destinazione.
- PRINCIPAL: il principale account utente o di servizio che avvia la connessione SSH. Per l'autenticazione basata su chiavi, utilizza l'utente autenticato dallo strumento a riga di comando Cloud Shell o che ha eseguito l'accesso alla console Google Cloud. Per l'impersonificazione dell'account di servizio, deve essere l'email dell'account di servizio.
- IAP_ENABLED: un valore booleano (true o false) che indica se Identity-Aware Proxy viene utilizzato per stabilire la connessione SSH.
Valore predefinito:
true
- LOCAL_USER:utente Posix sulla VM.
- CHECK_OS_LOGIN: un valore booleano (true o false) che indica se deve essere utilizzato OS Login per l'autenticazione SSH.
- CHECK_SSH_IN_BROWSER:un valore booleano per verificare che SSH nel browser sia fattibile.
--universe-domain
: se applicabile, il dominio Trusted Partner Sovereign Cloud che ospita la risorsa--parameter
o-p
: parametri del runbook- Scopri di più su OS Login.
- Scopri come funzionano le connessioni SSH alle VM Linux su Compute Engine.
- Per istruzioni dettagliate, consulta una delle seguenti risorse:
- Consulta la sezione Gestire OS Login in un'organizzazione
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, consulta Eseguire 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 Accesso OS Login.
Impossibile trovare il nome del gruppo
In alcune VM che utilizzano OS Login, dopo aver stabilito la connessione potresti ricevere il seguente messaggio di errore:
/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 configurati gruppi Linux di accesso al sistema operativo. Ignora questi messaggi.
Precondizione non riuscita
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 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, esegui una delle seguenti operazioni:
Argomento non valido
Quando ti connetti a una VM utilizzando SSH o 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:
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: 503
Quando provi a connetterti a una VM utilizzando 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 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 effettuare la connessione.
Per evitare questo problema in futuro, prova quanto segue:
Voci predefinite dei metadati di OS Login
Compute Engine definisce un insieme di voci di metadati predefinite che forniscono 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 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 corrente. instance/attributes/enable-oslogin
Controlla se lOS Login è abilitato sulla VM corrente. oslogin/users/
Recupera le informazioni del profilo per gli utenti di OS Login. Puoi passare parametri di ricerca come username
,uid
,pagesize
epagetoken
.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 sulogin
(per verificare l'autorizzazione di accesso) oadminLogin
(per verificare l'accesso sudo).Verificare se OS Login è configurato
Utilizza la console Google Cloud o Google Cloud CLI per eseguire query sui metadati per determinare se l'OS Login è abilitato. L'OS Login è abilitato quando la chiave dei metadati
enable-oslogin
è impostata suTRUE
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.Visualizzare gli utenti di OS Login
Per visualizzare le informazioni del profilo di più utenti, devi specificare i parametri
pagesize
epagetoken
. Sostituiscipagesize
epagetoken
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
su1
epagetoken
su0
, 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.Visualizzazione di un utente di 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 su cui vuoi eseguire una 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
ogetent 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 di accesso e amministrativo, devi fornire i parametri di ricerca
policy=login&email=LOGIN_NAME
.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}
Verificare se la VM ha un account di servizio
Puoi eseguire query sul server dei 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.
Eseguire il debug dei problemi di OS Login con gcpdiag
gcpdiag
è uno strumento open source. Non è un prodotto Google Cloud supportato ufficialmente. Puoi utilizzare lo strumentogcpdiag
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:Console Google Cloud
gcpdiag runbook gce/ssh \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE \ --parameter principal=PRINCIPAL \ --parameter tunnel_through_iap=IAP_ENABLED \ --parameter local_user=LOCAL_USER \ --parameter check_os_login=CHECK_OS_LOGIN \ --parameter check_ssh_in_browser=CHECK_SSH_IN_BROWSER
Docker
Puoi eseguire
gcpdiag
utilizzando un wrapper che avviagcpdiag
in un container Docker. È necessario installare Docker o Podman.Visualizza i parametri disponibili per questo runbook.
Sostituisci quanto segue:
Flag utili:
Per un elenco e una descrizione di tutti i flag dello strumento
gcpdiag
, consulta le istruzioni per l'utilizzo digcpdiag
.Passaggi successivi
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-12-22 UTC.
-