Questo documento descrive come configurare il provisioning automatico e la gestione del ciclo di vita delle identità dei carichi di lavoro gestiti per Compute Engine. Configura i pool di CA per emettere certificati utilizzando Certificate Authority Service (CA), un servizio Google Cloud scalabile e ad alta disponibilità che semplifica e automatizza il deployment, la gestione e la sicurezza dei servizi CA. Per ogni VM viene eseguito il provisioning con credenziali X.509 dal pool di CA configurato. Queste credenziali possono essere utilizzate per stabilire connessioni mTLS.
Con le identità dei workload gestite per Compute Engine, puoi implementare comunicazioni mutuamente autenticate e criptate tra due VM Compute Engine. Le applicazioni di carico di lavoro in esecuzione sulle VM configurate possono utilizzare le credenziali X.509 per mTLS per VM. Questi certificati mTLS vengono ruotati e gestiti automaticamente da Certificate Authority Service.
Prima di iniziare
Richiedi l'accesso all'anteprima dell'identità del carico di lavoro gestito.
Configura Google Cloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Configura Google Cloud CLI in modo da utilizzare il progetto inserito nella lista consentita per la fatturazione e la quota.
gcloud config set billing/quota_project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del progetto che è stato aggiunto alla lista consentita per l'anteprima dell'identità del carico di lavoro gestito.- Consulta la documentazione relativa alla panoramica delle identità di carico di lavoro gestite.
-
Enable the Compute Engine API:
gcloud services enable compute.googleapis.com
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare VM che utilizzano certificati di identità del workload gestiti per l'autenticazione ad altri workload, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Amministratore istanze Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Utente account di servizio (
roles/iam.serviceAccountUser
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Panoramica
Per utilizzare le identità di carico di lavoro gestite per le tue applicazioni, devi eseguire le seguenti attività:
Amministratore della sicurezza:
- Crea identità del workload gestite in un pool di identità del workload.
- Definisci il criterio di attestazione del carico di lavoro.
- Configura Certificate Authority Service per emettere certificati per le identità per i carichi di lavoro gestiti.
- Autorizza le identità per i carichi di lavoro gestite a richiedere certificati dal pool di CA.
- Definisci la configurazione dell'attendibilità e dell'emissione dei certificati.
Amministratore di Compute:
- Ottieni il file di configurazione per caricare i metadati del partner.
- Abilita le identità dei carichi di lavoro gestiti per i carichi di lavoro in esecuzione in Compute Engine:
- Per le VM per privati
- Per i gruppi di istanze gestite (MIG).
- Accedi alle credenziali del carico di lavoro su una VM Linux.
Configurare le identità per i carichi di lavoro gestite in Identity and Access Management
Segui le istruzioni riportate in Configurare l'autenticazione delle identità per i carichi di lavoro gestiti .
Queste istruzioni descrivono in dettaglio come completare quanto segue:
- Crea un pool di identità del workload.
- Crea spazi dei nomi nel pool di identità del workload. Utilizzi gli spazi dei nomi per creare confini amministrativi per le identità dei carichi di lavoro gestiti, ad esempio uno spazio dei nomi per ciascuna delle applicazioni di proprietà della tua organizzazione.
- Crea un'identità del workload gestita in uno spazio dei nomi nel pool di identità del workload. Ad esempio, puoi creare uno spazio dei nomi per un'applicazione e creare identità gestite all'interno di questo spazio dei nomi per i microservizi che supportano l'applicazione.
- Crea un account di servizio. Le VM Compute Engine possono essere autorizzate a ricevere un'identità del carico di lavoro gestito in base al servizio Google Cloud account collegato alla VM.
- Crea un criterio di attestazione del workload che consenta di emettere credenziali per l'identità del workload gestito. Per poter emettere le credenziali per l'identità del workload gestito, il workload deve trovarsi in un progetto specificato e avere l'account di servizio collegato.
- Configura Certificate Authority Service per emettere certificati per le identità di workload gestite:
- Configura il pool di CA radice
- Configura le CA subordinate
- Autorizza le identità per i carichi di lavoro gestite a richiedere certificati dal pool CA
Ottenere il file di configurazione per caricare i metadati del partner
L'amministratore della sicurezza crea un file JSON contenente quanto segue:
- La configurazione dell'identità del carico di lavoro
- La configurazione dell'emissione dei certificati
- La configurazione dell'attendibilità
Il nome del file deve essere CONFIGS.json
. Utilizza questo file quando crei un
modello di istanza per i gruppi di istanze gestite o quando crei una singola VM.
Il file CONFIGS.json
dovrebbe essere simile al seguente:
{ "wc.compute.googleapis.com": { "entries": { "certificate-issuance-config": { "primary_certificate_authority_config": { "certificate_authority_config": { "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" } }, "key_algorithm": "rsa-2048" }, "trust-config": { "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trust_anchors": [{ "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" }] } } } }, "iam.googleapis.com": { "entries": { "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID" } } }
Abilita le identità di carico di lavoro gestite per un gruppo di istanze gestite (MIG)
Un gruppo di istanze gestite è un gruppo di istanze di macchine virtuali (VM) che puoi trattare come un'unica entità. Ogni VM in un gruppo di istanze gestite viene creata utilizzando un modello di istanza. Per consentire alle VM nel gruppo di istanze gestite di utilizzare le identità di carico di lavoro gestite, specifica la configurazione nel modello di istanza.
Crea un modello di istanza
Crea un modello di istanza con la funzionalità delle identità dei workload gestite abilitata. Quindi utilizza questo modello per creare un gruppo di istanze gestite (MIG).
gcloud
Utilizza il comando gcloud beta compute instance-templates create
per creare un nuovo modello di istanza che attivi le identità per i carichi di lavoro gestiti.
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Puoi aggiungere altri flag durante la creazione del modello di istanza per personalizzare le VM create, ad esempio specificando il tipo di macchina e l'immagine, anziché utilizzare i valori predefiniti.
Sostituisci quanto segue:
- INSTANCE_TEMPLATE_NAME: il nome del nuovo modello.
- SERVICE_ACCOUNT_NAME: il nome dell'account servizio autorizzato a ricevere l'identità gestita.
- PROJECT_ID: l'ID del progetto in cui è stato creato il account di servizio.
- CONFIGS.json: il file di configurazione contenente la configurazione dell'emissione dei certificati, la configurazione della attendibilità e l'identità del carico di lavoro gestito.
Per saperne di più, consulta Creare modelli di istanze.
Crea un gruppo di istanze gestite dal modello
Crea un gruppo di istanze gestite che utilizza un modello di istanza che attiva le identità di carico di lavoro gestite. Per informazioni dettagliate su come creare il modello di istanza, consulta Creare un modello di istanza.
gcloud
Crea un gruppo di istanze gestite utilizzando il modello di istanza e il
comando gcloud compute instance-groups managed create
.
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_NAME \ --zone=ZONE
Sostituisci quanto segue:
- INSTANCE_GROUP_NAME: un ID univoco per il gruppo di istanze gestite. Per dettagli sui nomi validi, vedi Assegnare un nome alle risorse.
- SIZE: la dimensione del gruppo di istanze gestite
- INSTANCE_TEMPLATE_NAME: il nome del modello di istanza da utilizzare per la creazione delle VM nel gruppo di istanze gestite.
- ZONE: la zona in cui creare le VM
Per informazioni dettagliate sulla creazione di gruppi di istanze gestite, consulta Scenari di base per la creazione di gruppi di istanze gestite
Attivare le identità di carico di lavoro gestite per le singole VM
Puoi attivare le identità dei carichi di lavoro gestiti per una VM durante la creazione della VM o aggiornando i metadati del partner per una VM esistente.
Creare VM con le identità dei workload gestite abilitate
Quando crei una VM, per attivare la funzionalità delle identità per i carichi di lavoro gestite per la VM, devi eseguire i seguenti passaggi:
- Specifica un account di servizio da utilizzare per la VM
- Imposta l'attributo dei metadati
enable-workload-certificate
sutrue
Specifica le informazioni sulla configurazione dell'emissione dei certificati e sulla configurazione della attendibilità come metadati del partner.
gcloud
Utilizza il comando gcloud beta compute instances create
per creare una nuova VM. Utilizza il file CONFIGS.json
fornito dall'amministratore della sicurezza o creato seguendo le istruzioni riportate in Creare un file di configurazione per caricare i metadati del partner.
Crea una VM con la funzionalità delle identità dei workload gestite abilitata.
gcloud beta compute instances create INSTANCE_NAME \ --zone=INSTANCE_ZONE \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Puoi aggiungere altre righe al comando per configurare la VM, come il tipo di macchina e l'immagine, anziché utilizzare i valori predefiniti. Per ulteriori informazioni, consulta Creare e avviare un'istanza VM.
Sostituisci quanto segue:
- INSTANCE_NAME: un nome univoco per la VM. Per informazioni dettagliate sui nomi di istanze validi, vedi Assegnare un nome alle risorse.
- INSTANCE_ZONE: la zona in cui creare la VM.
- SERVICE_ACCOUNT_NAME: il nome dell'account di servizio autorizzato a ricevere l'identità gestita.
- PROJECT_ID: l'ID del progetto in cui è stato creato il account di servizio.
- CONFIGS.json: il nome del file di configurazione che contiene la configurazione di emissione dei certificati, la configurazione della attendibilità e la configurazione dell'identità del carico di lavoro gestito.
Abilita le identità di carico di lavoro gestite sulle VM esistenti
Per attivare le identità di carico di lavoro gestite per una VM esistente, aggiorna la VM per configurare quanto segue:
- Se la VM non ha già un account di servizio associato, crea e collega un account di servizio alla VM.
- Imposta l'attributo dei metadati
enable-workload-certificate
sutrue
. - Specifica le informazioni sulla configurazione dell'emissione dei certificati e sulla configurazione della attendibilità come metadati del partner.
Riavvia la VM.
gcloud
Questa attività utilizza il file CONFIGS.json
fornito dall'amministratore della sicurezza o creato seguendo le istruzioni riportate in Creare un file di configurazione per caricare i metadati del partner.
Se alla VM non è già associato un account di servizio, associa l'account di servizio alla VM.
Aggiorna i metadati di una VM esistente per attivare le identità di workload gestite.
gcloud beta compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata enable-workload-certificate=true
Sostituisci quanto segue:
- VM_NAME: il nome della VM
- ZONE: la zona in cui si trova la VM
Aggiorna la configurazione di una VM esistente per aggiungere il file di configurazione.
gcloud beta compute instances update VM_NAME \ --zone=ZONE \ --partner-metadata-from-file CONFIGS.json
Sostituisci quanto segue:
- VM_NAME: il nome della VM
- ZONE: la zona in cui si trova la VM
- CONFIGS.json: il file di configurazione contenente la configurazione dell'emissione dei certificati, la configurazione della attendibilità e l'identità del carico di lavoro gestito.
Arresta la VM.
gcloud beta compute instances stop VM_NAME \ --zone=ZONE
Sostituisci quanto segue:
- VM_NAME: il nome della VM
- ZONE: la zona in cui si trova la VM.
Avvia la VM.
gcloud beta compute instances start VM_NAME \ --zone=ZONE
Sostituisci quanto segue:
- VM_NAME: il nome della VM
- ZONE: la zona in cui si trova la VM.
Accedere alle credenziali del carico di lavoro su una VM Linux
Dopo aver configurato correttamente l'autenticazione dei carichi di lavoro utilizzando mTLS, puoi accedere alle credenziali emesse sulla VM.
Esistono due modi per accedere alle credenziali dell'identità del carico di lavoro gestito da Compute Engine e al bundle di attendibilità associato:
- Il file system sulla VM
- Il server di metadati di Compute Engine
Accedi alle credenziali del workload e al bundle di attendibilità utilizzando il file system sulla VM
Questo metodo inserisce le credenziali X.509 e il bundle di attendibilità in un percorso specifico all'interno del file system della VM. Le applicazioni possono leggere direttamente le credenziali e il trust bundle dal file system. Per esempi su come recuperare le credenziali, consulta i seguenti esempi su GitHub:
La VM deve eseguire l'agente guest Compute Engine versione 20231103.01 o successiva. Utilizza il seguente comando per controllare la versione dell'agente guest Compute Engine sulla tua VM:
gcloud beta compute instances get-serial-port-output INSTANCE_NAME \ --zone=ZONE | grep "GCE Agent Started"
Se la versione dell'agente guest è precedente alla 20231103.01, puoi aggiornarla seguendo le istruzioni riportate in Aggiornare l'ambiente guest.
Per rendere disponibili le credenziali del workload e il trust bundle nel file system di una VM, svolgi i seguenti passaggi:
Installa o aggiorna l'agente guest Compute Engine alla versione 20231103.01 o successiva. L'agente guest esegue le seguenti operazioni:
- Recupera automaticamente le credenziali e il bundle di attendibilità dal server di metadati di Compute Engine.
- Garantisce le scritture atomiche nel file system durante l'aggiornamento del certificato X.509 e della chiave privata corrispondente.
- Aggiorna automaticamente le credenziali e il trust bundle, ad esempio quando vengono ruotati i certificati mTLS.
Dopo aver installato o aggiornato l'agente guest Compute Engine sul sistema operativo guest, il job di aggiornamento del carico di lavoro crea la directory
/var/run/secrets/workload-spiffe-credentials
e imposta le autorizzazioni della directory su0755 (rwxr-xr-x)
.La directory contiene i seguenti file creati con autorizzazioni
0644 (rw-r--r--)
:private_key.pem
: una chiave privata in formato PEMcertificates.pem
: un insieme di certificati X.509 in formato PEM che possono essere presentati ad altre VM come catena di certificati client o utilizzati come catena di certificati server.ca_certificates.pem
: un insieme di certificati X.509 in formato PEM da utilizzare come ancore di attendibilità per la convalida dei certificati dei peer.spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
config_status
: un file di log contenente messaggi di errore.
Le applicazioni possono leggere i certificati, la chiave privata e il bundle di attendibilità direttamente dal file system per stabilire connessioni mTLS.
Accedere alle credenziali del carico di lavoro e al bundle di attendibilità utilizzando il server metadati
Un'applicazione in esecuzione su una VM Compute Engine può eseguire direttamente query sugli endpoint del server dei metadati e recuperare le credenziali e il bundle di attendibilità. L'applicazione è responsabile di controllare periodicamente gli endpoint del server dei metadati per verificare la presenza di nuove credenziali e aggiornamenti al trust bundle.
Il server di metadati di Compute Engine espone tre endpoint HTTP per abilitare l'utilizzo della funzionalità delle identità di workload gestite da parte delle applicazioni in esecuzione all'interno della VM.
gce-workload-certificates/config-status
: un endpoint contenente eventuali errori nei valori di configurazione forniti tramite i metadati della VM.gce-workload-certificates/workload-identities
: un endpoint di identità gestito dal piano di controllo di Compute Engine. Questo endpoint contiene il certificato X.509 e la chiave privata per il dominio attendibile della VM.gce-workload-certificates/trust-anchors
: un endpoint contenente un insieme di certificati attendibili per la convalida della catena di certificati X.509 dei peer.
Per scoprire di più su come eseguire query sui metadati di un'istanza VM, consulta Informazioni sui metadati della VM.
Per accedere alle credenziali del carico di lavoro e al bundle di attendibilità utilizzando il server di metadati, la tua applicazione deve:
Esegui una query sull'endpoint
gce-workload-certificates/config-status
. Assicurati che il codice di risposta HTTP sia200
e che la risposta non contenga erroripartnerMetadataConfigsErrors
. Se si verificano questi errori, aggiorna la configurazione appropriata con valori validi seguendo i passaggi descritti in Aggiornare la configurazione di emissione e attendibilità dei certificati.Per controllare il valore, puoi eseguire il seguente comando sulla VM:
curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
L'endpoint
config-status
restituisce una risposta JSON con la seguente struttura:{ "partnerMetadataConfigsErrors": { "errors": { // A map of errors keyed by attribute name. "ATTRIBUTE_NAME" : "ERROR_DETAILS", ... } } }
Esegui una query sull'endpoint
gce-workload-certificates/workload-identities
. Assicurati che il codice di risposta HTTP sia200
. L'endpoint restituisce una risposta JSON con la seguente struttura:{ "workloadCredentials": { // Credentials for the VM's trust domains "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": { "certificatePem" : "X.509 certificate or certificate chain", "privateKeyPem" : "Private for X.509 leaf certificate" } } }
Estrai il
certificatePem
e ilprivateKeyPem
. È fondamentale che entrambi i valori vengano letti dalla stessa risposta per evitare la mancata corrispondenza tra la chiave privata e la chiave pubblica nel caso in cui le identità dei carichi di lavoro gestiti siano state aggiornate dall'infrastruttura Compute Engine.Esegui una query sull'endpoint
gce-workload-certificates/trust-anchors
. Assicurati che il codice di risposta HTTP sia200
. La risposta conterrà solo gli ancoraggi di attendibilità per il dominio attendibile SPIFFE, se specificato. In caso contrario, la query restituisce un errore. L'endpointtrust-anchors
restituisce una risposta JSON con la seguente struttura:{ "trustAnchors": { // Trust bundle for the VM's trust domains "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trustAnchorsPem" : "Trust bundle containing the X.509 roots certificates" } } }
I contenuti di
trustAnchorsPem
contengono il bundle di attendibilità che può essere utilizzato per autenticare le credenziali X.509 del peer durante l'instaurazione di una connessione mTLS.
Aggiornamento delle credenziali e del bundle di attendibilità
Il piano di controllo di Compute Engine esegue automaticamente la rotazione periodica delle credenziali di identità del carico di lavoro gestito e delle ancore di attendibilità.
Se le tue applicazioni utilizzano il file system per accedere alle credenziali del carico di lavoro e al bundle di attendibilità, l'agente guest di Compute Engine aggiorna automaticamente le credenziali e il bundle di attendibilità, ad esempio quando vengono ruotati i certificati mTLS.
Se le applicazioni eseguono query sul server dei metadati, devono eseguire periodicamente query sugli endpoint del server dei metadati per ottenere l'insieme più recente di credenziali di identità del carico di lavoro gestito e il bundle di attendibilità. In caso contrario, le applicazioni potrebbero non funzionare a causa della scadenza dei certificati o delle modifiche al trust bundle, il che potrebbe causare il fallimento dell'instaurazione della connessione mTLS. Google consiglia alle applicazioni di eseguire query sul server dei metadati per le credenziali dell'identità del carico di lavoro gestito e per il bundle di attendibilità ogni 5 minuti.
Aggiorna la configurazione dell'emissione e della attendibilità dei certificati
Puoi modificare la configurazione di emissione dei certificati e la configurazione della attendibilità per una VM che utilizza le identità per i workload gestite.
Aggiorna il modello di istanza per un gruppo di istanze gestite
Per aggiornare i valori di configurazione dell'emissione dei certificati e della configurazione della attendibilità in un modello di istanza, devi creare un nuovo modello con i nuovi valori. Pertanto, l'aggiornamento della configurazione dell'emissione dei certificati e della configurazione della attendibilità per i gruppi di istanze gestite (MIG) esistenti non è supportato.
Aggiornare singole VM Compute Engine
Per aggiornare la configurazione di emissione dei certificati e la configurazione della attendibilità, aggiorna i contenuti del file CONFIGS.json
e utilizza il comando gcloud beta compute instances update
per applicare gli aggiornamenti:
gcloud beta compute instances update INSTANCE_NAME \ --partner-metadata-from-file FILENAME.json
Sostituisci quanto segue:
- INSTANCE_NAME: il nome della VM per cui stai aggiornando i valori di configurazione
- FILENAME: il nome del file di configurazione modificato, ad esempio
CONFIGS.json
Risoluzione dei problemi
Per trovare metodi per diagnosticare e risolvere gli errori comuni relativi al recupero delle credenziali del workload, consulta la documentazione relativa alla risoluzione dei problemi di autenticazione del workload al workload.
Passaggi successivi
- Scopri di più sui seguenti concetti: