Questo documento spiega come configurare una macchina virtuale (VM) esistente per utilizzare un account di servizio diverso. Un account di servizio è un tipo speciale di account in genere utilizzato da un'applicazione o da un carico di lavoro di computing per effettuare chiamate API autorizzate.
Gli account di servizio sono necessari per scenari in cui un carico di lavoro, ad esempio un'applicazione personalizzata, deve accedere alle risorse Google Cloud o eseguire azioni senza l'intervento dell'utente finale. Per ulteriori informazioni su quando utilizzare gli account di servizio, consulta le best practice per l'utilizzo degli account di servizio.
Se hai applicazioni che devono effettuare chiamate alle API Google Cloud, Google consiglia di collegare un account di servizio gestito dall'utente alla VM su cui sono in esecuzione l'applicazione o il carico di lavoro. Successivamente, concedi i ruoli IAM all'account di servizio, che consentono all'account di servizio e, di conseguenza, alle applicazioni in esecuzione sulla VM, di accedere alle risorse Google Cloud.
Prima di iniziare
-
Se non l'hai già fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale viene verificata l'identità dell'utente per ottenere l'accesso ai servizi e alle API Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione in Compute Engine come segue.
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
-
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
- Set a default region and zone.
-
compute.instances.setServiceAccount
-
compute.instances.stop
-
compute.instances.start
- Crea un nuovo account di servizio gestito dall'utente, anziché utilizzare l'account di servizio predefinito di Compute Engine, e assegna ruoli IAM a quell'account solo per le risorse e le operazioni di cui ha bisogno.
- Collega l'account di servizio alla VM.
- Imposta l'ambito della piattaforma cloud (
https://www.googleapis.com/auth/cloud-platform
) sulla tua VM. In questo modo l'account di servizio della VM può chiamare le API Google Cloud per le quali è autorizzato a utilizzare.- Se specifichi l'account di servizio utilizzando la console Google Cloud,
l'ambito di accesso della VM viene impostato automaticamente sull'ambito
cloud-platform
. - Se specifichi l'account di servizio tramite Google Cloud CLI o l'API Compute Engine, puoi usare il parametro
scopes
per impostare l'ambito di accesso.
- Se specifichi l'account di servizio utilizzando la console Google Cloud,
l'ambito di accesso della VM viene impostato automaticamente sull'ambito
La concessione di un ruolo IAM all'account di servizio predefinito interessa tutte le VM in esecuzione come account di servizio predefinito. Ad esempio, se concedi all'account di servizio predefinito il ruolo
roles/storage.objectAdmin
, tutte le VM in esecuzione come account di servizio predefinito con gli ambiti di accesso richiesti avranno le autorizzazioni concesse dal ruoloroles/storage.objectAdmin
. Allo stesso modo, se limiti l'accesso omettendo alcuni ruoli, questo influirà su tutte le VM in esecuzione come account di servizio predefinito.A seconda della configurazione dei criteri dell'organizzazione, all'account di servizio predefinito potrebbe essere concesso automaticamente il ruolo Editor per il progetto. Ti consigliamo vivamente di disabilitare la concessione automatica del ruolo applicando il vincolo
iam.automaticIamGrantsForDefaultServiceAccounts
del criterio dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.Se disabiliti la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti e poi concedere questi ruoli autonomamente.
Se l'account di servizio predefinito ha già il ruolo Editor, ti consigliamo di sostituire quest'ultimo con ruoli meno permissivi. Per modificare in modo sicuro i ruoli dell'account di servizio, utilizza il Simulatore di criteri per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
Vai alla pagina Istanze VM.
Fai clic sul nome dell'istanza VM per la quale vuoi modificare l'account di servizio.
Se la VM non viene arrestata, fai clic su Arresta. Attendi l'arresto della VM.
Fai clic su Modifica.
Scorri verso il basso fino alla sezione Account di servizio.
Dall'elenco a discesa, seleziona l'account di servizio da assegnare alla VM.
- Se scegli un account di servizio gestito dall'utente, l'ambito di accesso della VM
per impostazione predefinita è quello consigliato per
cloud-platform
. Se hai bisogno di un ambito diverso per il tuo account di servizio gestito dall'utente, utilizza gcloud CLI o l'API Compute Engine per collegare l'account di servizio. - Se scegli l'account di servizio predefinito di Compute Engine, puoi modificarne gli ambiti di accesso nella console Google Cloud.
- Per modificare gli ambiti, nella sezione Ambiti di accesso seleziona Imposta l'accesso per ogni API e imposta gli ambiti appropriati in base alle tue esigenze.
- Consigliato Se non hai la certezza degli ambiti di accesso corretti da impostare, scegli Consenti l'accesso completo a tutte le API Cloud e assicurati di limitare l'accesso impostando ruoli IAM nell'account di servizio.
- Se scegli un account di servizio gestito dall'utente, l'ambito di accesso della VM
per impostazione predefinita è quello consigliato per
Fai clic su Salva per salvare le modifiche.
Fai clic su Avvia/Riprendi per riavviare la VM.
Arresta la VM utilizzando il comando
instances stop
. SostituisciVM_NAME
con il nome della tua istanza VM.gcloud compute instances stop VM_NAME
Collega l'account di servizio. Per collegare l'account di servizio, utilizza il comando
instances set-service-account
e fornisci il nome della VM, l'email dell'account di servizio e gli ambiti desiderati. Per saperne di più sull'impostazione degli ambiti di accesso, consulta le best practice.gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
Sostituisci quanto segue:
SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizio che hai creato. Ad esempio:my-sa-123@my-project-123.iam.gserviceaccount.com
. Per visualizzare l'indirizzo email, consulta la sezione Elenco degli account di servizio.Se vuoi rimuovere l'account di servizio dalla VM, utilizza il flag
--no-service-account
.VM_NAME
: il nome dell'istanza VM.SCOPES
: un elenco separato da virgole di URI o alias dell'ambito forniti nella descrizione del flag--scopes
.Se vuoi rimuovere tutti gli ambiti per la VM, utilizza invece il flag
--no-scopes
.
Ad esempio, il comando seguente assegna l'account di servizio
my-sa-123@my-project-123.iam.gserviceaccount.com
a una VM denominata example-instance e imposta gli ambiti di accesso su questa VM per consentire l'accesso in lettura/scrittura a Compute Engine e l'accesso in sola lettura a Cloud Storage:gcloud compute instances set-service-account example-instance \ --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \ --scopes=compute-rw,storage-ro
Avvia la VM utilizzando il comando
instances start
. SostituisciVM_NAME
con il nome della tua istanza VM.gcloud compute instances start VM_NAME
Arresta la VM effettuando una richiesta
POST
utilizzando il metodoinstances.stop
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
Sostituisci quanto segue:
PROJECT_ID
: il progetto in cui si trova la tua VMZONE
: la zona in cui si trova la VMVM_NAME
: il nome della VM che vuoi arrestare
Collega l'account di servizio effettuando una richiesta
POST
al metodosetServiceAccount
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "SCOPE_URI", "SCOPE_URI", ... ] }
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto per questa richiesta.ZONE
: la zona a cui appartiene questa VM.VM_NAME
: il nome della VM.SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizio che hai creato. Ad esempio:my-sa-123@my-project-123.iam.gserviceaccount.com
. Per visualizzare l'indirizzo email, consulta la sezione Elenco degli account di servizio.SCOPE_URI
: l'URI dell'ambito richiesto.
Ad esempio, la seguente richiesta utilizza l'email dell'account di servizio
my-sa-123@my-project-123.iam.gserviceaccount.com
e imposta un ambito di Cloud Storage e BigQuery:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "my-sa-123@my-project-123.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/bigquery", "https://www.googleapis.com/auth/devstorage.read_only" ] }
Avvia la VM creando una richiesta
POST
utilizzando il metodoinstances.start
:POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
Sostituisci quanto segue:
PROJECT_ID
: il progetto in cui si trova la tua VMZONE
: la zona in cui si trova la VMVM_NAME
: il nome della VM che vuoi avviare
Vai alla pagina Istanze VM.
Fai clic sul nome dell'istanza VM per la quale vuoi modificare l'account di servizio.
Vai alla sezione Gestione di API e identità. Questa sezione mostra l'account di servizio e l'ambito di accesso utilizzati dalla VM.
- Limita i privilegi degli account di servizio e controlla regolarmente le autorizzazioni degli account di servizio per assicurarti che siano aggiornate.
- Elimina gli account di servizio con cautela. Prima di eliminare un account di servizio, assicurati che le applicazioni critiche non utilizzino più un account di servizio. Se non hai la certezza che un account di servizio venga utilizzato, ti consigliamo di disattivarlo anziché eliminarlo. Gli account di servizio disabilitati possono essere riabilitati se sono ancora necessari.
- Riduci i rischi per la sicurezza per il tuo account di servizio. Per ulteriori informazioni, consulta le best practice per l'utilizzo degli account di servizio.
- Consulta le best practice per l'account di servizio
Vedi Autenticare i carichi di lavoro utilizzando gli account di servizio.
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, quindi initialize eseguendo questo comando:
gcloud init
Per maggiori informazioni, consulta Autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare gli account di servizio sulla VM, chiedi all'amministratore di concederti il ruolo IAM Amministratore istanze Compute (v1) (
roles/compute.instanceAdmin.v1
) sulla VM o sul tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.Questo ruolo predefinito contiene le autorizzazioni necessarie per configurare gli account di servizio sulla tua VM. Per visualizzare esattamente le autorizzazioni necessarie, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per configurare gli account di servizio sulla tua VM sono necessarie le seguenti autorizzazioni:
Potresti anche riuscire a ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.
Panoramica
Ti consigliamo di configurare gli account di servizio per le VM come segue:
Configurare l'account di servizio
Puoi creare un account di servizio gestito dall'utente o utilizzare l'account di servizio predefinito di Compute Engine. Si consiglia un account di servizio gestito dall'utente.
Per l'account di servizio selezionato, assicurati che siano assegnati i ruoli IAM (Identity and Access Management) richiesti.
Gestita dall'utente
Se non hai ancora un account di servizio gestito dall'utente, creane uno. Per istruzioni dettagliate, vedi Configurare un account di servizio.
Predefinita
Se conosci l'account di servizio predefinito di Compute Engine e vuoi utilizzare le credenziali fornite dall'account di servizio predefinito anziché creare nuovi account di servizio, puoi concedere i ruoli IAM all'account di servizio predefinito.
Prima di assegnare i ruoli IAM all'account di servizio predefinito, tieni presente che:
Se hai dubbi sulla concessione dei ruoli IAM all'account di servizio predefinito, crea un nuovo account di servizio gestito dall'utente.
Collega l'account di servizio e aggiorna l'ambito di accesso
Per modificare l'account di servizio e gli ambiti di accesso di una VM, la VM deve essere arrestata temporaneamente.
Se l'account di servizio si trova in un progetto diverso dalla VM, devi configurare l'account di servizio per una risorsa in un progetto diverso.
Utilizza uno dei seguenti metodi per modificare l'account di servizio e gli ambiti di accesso sulla VM.
Console
gcloud
REST
Visualizza l'account di servizio utilizzato da una VM
Per visualizzare tutti gli account di servizio in un progetto, consulta Elenco degli account di servizio.
Se devi identificare l'account di servizio utilizzato da una VM, completa una delle seguenti procedure:
console
gcloud
Esegui il comando
gcloud compute instances describe
:gcloud compute instances describe VM_NAME \ --format json
L'output è simile al seguente:
{ ... "serviceAccounts":[ { "email":"123845678986-compute@developer.gserviceaccount.com", "scopes":[ "https://www.googleapis.com/auth/devstorage.full_control" ] } ] ... }
Se la VM non utilizza un account di servizio, ricevi una risposta senza la proprietà
serviceAccounts
.Server metadati
Esegui una query sul server metadati dall'interno della VM stessa. Invia una richiesta a
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/
:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \ -H "Metadata-Flavor: Google"
Se hai abilitato uno o più account di servizio quando hai creato l'istanza, questo comando
curl
restituisce un output simile al seguente:123845678986-compute@developer.gserviceaccount.com/ default/
Se l'istanza non utilizza un account di servizio, ricevi una risposta vuota.
Best practice
Che cosa succede dopo?
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-07-05 UTC.
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"Problema di traduzione" },{ "type": "thumb-down", "id": "otherDown", "label":"Altra" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Facile da capire" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Il problema è stato risolto" },{ "type": "thumb-up", "id": "otherUp", "label":"Altra" }] -