Questa guida descrive come utilizzare la federazione delle identità per i workload per consentire ai workload delle VM AWS e Azure di autenticarsi a Trusted Cloud by S3NS senza una chiave del account di servizio.
Se utilizzi Amazon Elastic Kubernetes Service (Amazon EKS) o Azure Kubernetes Service (AKS), consulta Configurare la federazione delle identità per i carichi di lavoro con Kubernetes per scoprire come configurare la federazione delle identità per i carichi di lavoro per i tuoi cluster. Questa pagina tratta solo la configurazione della federazione delle identità per i workload per le VM AWS e Azure.
Utilizzando la federazione delle identità per i workload, i workload eseguiti su AWS EC2 e le VM Azure possono scambiare le proprie credenziali specifiche dell'ambiente con token Trusted Cloud Security Token Service di breve durata.
Le credenziali specifiche dell'ambiente includono:
- Le istanze AWS EC2 possono utilizzare i profili istanza per richiedere credenziali temporanee.
- Le VM Azure possono utilizzare le identità gestite per ottenere token di accesso Azure.
Se configuri la federazione delle identità per i workload, puoi consentire a questi workload di scambiare queste credenziali specifiche dell'ambiente con credenzialiTrusted Cloud di breve durata. I carichi di lavoro possono utilizzare queste credenziali di breve durata per accedere alle API Trusted Cloud .
Prima di iniziare
Configurare l'autenticazione.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.
gcloud
Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il seguente comando:
gcloud init
Python
Per utilizzare gli esempi di Python questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.
Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata.
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione Trusted Cloud .
Prepara il tuo provider di identità esterno
Devi eseguire questi passaggi una sola volta per ogni tenant Microsoft Entra ID o account AWS.
AWS
Non è necessario apportare modifiche alla configurazione nel tuo account AWS.
Dopo aver configurato un pool di identità del workload in modo che consideri attendibile il tuo account AWS, puoi consentire a utenti AWS e ruoli AWS di utilizzare credenziali di sicurezza AWS permanenti o temporanee per ottenere credenziali Trusted Cloud di breve durata.
Azure
Devi creare una nuova applicazione Microsoft Entra ID nel tuo tenant Microsoft Entra ID e configurarla in modo che possa essere utilizzata per la federazione delle identità per i carichi di lavoro.
Dopo aver configurato un pool di identità del workload in modo che consideri attendibile l'applicazione, gli utenti e i service principal di Azure possono richiedere token di accesso per questa applicazione e scambiarli con credenziali Trusted Cloud di breve durata.
Per creare l'applicazione:
Crea un'applicazione Microsoft Entra ID e un'entità di servizio.
Imposta un URI ID applicazione per l'applicazione. Puoi utilizzare l'URI ID applicazione predefinito (
APPID
) o specificare un URI personalizzato.L'URI dell'ID applicazione ti servirà in un secondo momento per configurare il provider del pool di identità per i carichi di lavoro.
Per consentire a un'applicazione di ottenere token di accesso per l'applicazione Microsoft Entra ID, puoi utilizzare le identità gestite:
Crea un'identità gestita. Prendi nota dell'ID oggetto dell'identità gestita. Ti servirà in un secondo momento quando configurerai la rappresentazione.
Assegna l'identità gestita a una macchina virtuale o a un'altra risorsa che esegue l'applicazione.
Configura la federazione delle identità per i workload
Devi eseguire questi passaggi una sola volta per account AWS o tenant Microsoft Entra ID. Puoi quindi utilizzare lo stesso pool e lo stesso provider di identità del carico di lavoro per più carichi di lavoro e in più progetti. Trusted Cloud
Per iniziare a configurare la federazione delle identità per i workload:
-
In the Trusted Cloud console, go to the project selector page.
-
Select or create a Trusted Cloud project.
È consigliabile
utilizzare un progetto dedicato per gestire i pool e i provider di identità del workload.
Verify that billing is enabled for your Trusted Cloud project.
Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.
Definisci una mappatura degli attributi e una condizione
Le credenziali specifiche dell'ambiente del tuo workload AWS o Azure contengono più attributi e devi decidere quale attributo vuoi utilizzare come identificatore del soggetto (
google.subject
) in Trusted Cloud.Trusted Cloud utilizza l'identificatore del soggetto in Cloud Audit Logs e negli identificatori delle entità per identificare in modo univoco un utente o un ruolo AWS o Azure.
Se vuoi, puoi mappare altri attributi. Puoi quindi fare riferimento a questi attributi aggiuntivi quando concedi l'accesso alle risorse.
AWS
La mappatura degli attributi può utilizzare i campi di risposta per
GetCallerIdentity
come attributi di origine. Questi campi includono:account
: il numero dell'account AWS.arn
: l'ARN AWS dell'entità esterna.userid
: l'identificatore univoco dell'entità chiamante.
Se la tua applicazione viene eseguita su un'istanza Amazon Elastic Compute Cloud (EC2) con un ruolo collegato, puoi utilizzare il seguente mapping degli attributi:
google.subject=assertion.arn attribute.account=assertion.account attribute.aws_role=assertion.arn.extract('assumed-role/{role}/') attribute.aws_ec2_instance=assertion.arn.extract('assumed-role/{role_and_session}').extract('/{session}')
La mappatura esegue le seguenti operazioni:
- Utilizza l'ARN come identificatore del soggetto, ad esempio:
"arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000
- Introduce un attributo personalizzato
account
e gli assegna l'ID account AWS - Introduce un attributo personalizzato
aws_role
e gli assegna il nome del ruolo AWS, ad esempio:ec2-my-role
- Introduce un attributo personalizzato
aws_ec2_instance
e gli assegna l'ID istanza EC2, ad esempio:i-00000000000000000
Utilizzando questa mappatura, puoi concedere l'accesso a:
Un'istanza EC2 specifica:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_ec2_instance/EC2_INSTANCE_ID
Tutti gli utenti e le istanze di un ruolo:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_NAME
Azure
Le mappature degli attributi possono utilizzare le rivendicazioni incorporate nei token di accesso di Azure, incluse le rivendicazioni personalizzate, come attributi di origine. Nella maggior parte dei casi, è meglio utilizzare l'attestazione
sub
come identificatore del soggetto: Quando l'attestazione "sub" supera il limite di 127 caratteri per google.subject, è consigliabile utilizzare una funzione [`extract`](/iam/docs/conditions-attribute-reference#extract) per derivare attestazioni significative da utilizzare come identificatore del soggetto:google.subject=assertion.sub
google.subject=assertion.sub.extract('/eid1/c/pub/t/{sub_claim}')
Per un token di accesso rilasciato a un'identità gestita, l'attestazione
sub
contiene l'ID oggetto dell'identità gestita. Se utilizzi una rivendicazione diversa, assicurati che sia univoca e non possa essere riassegnata.Se non sai quali rivendicazioni puoi citare, procedi nel seguente modo:
Connettiti a una VM Azure a cui è assegnata un'identità gestita.
Ottieni un token di accesso da Azure Instance Metadata Service (IMDS):
Bash
curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token
Questo comando utilizza lo strumento
jq
.jq
è disponibile per impostazione predefinita in Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Sostituisci
APP_ID_URI
con l'URI ID applicazione dell'applicazione che hai configurato per la federazione delle identità per i carichi di lavoro.In un browser web, vai su
https://jwt.ms/
e incolla il token di accesso nel campo.Fai clic su Rivendicazioni per visualizzare l'elenco delle rivendicazioni incorporate nel token di accesso.
Per le identità di servizio, in genere non è necessario creare una mappatura per
google.groups
o per attributi personalizzati.(Facoltativo) Definisci una condizione dell'attributo. Le condizioni degli attributi sono espressioni CEL che possono controllare gli attributi dell'asserzione e gli attributi di destinazione. Se la condizione dell'attributo restituisce il valore
true
per una determinata credenziale, la credenziale viene accettata. In caso contrario, la credenziale viene rifiutata.AWS
Puoi utilizzare una condizione di attributo per limitare gli utenti e i ruoli IAM che possono utilizzare la federazione delle identità per i carichi di lavoro per ottenere token Trusted Cloud di breve durata.
Ad esempio, la seguente condizione limita l'accesso ai ruoli AWS e non consente altri identificatori IAM:
assertion.arn.startsWith('arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/')
Azure
Puoi utilizzare una condizione dell'attributo per limitare gli utenti e i service principal che possono utilizzare la federazione delle identità per i carichi di lavoro per ottenere token Trusted Cloud di breve durata. In alternativa, puoi configurare l'applicazione Microsoft Entra ID per utilizzare le assegnazioni di ruoli dell'app.
Crea il fornitore e il pool di identità del workload
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare la federazione delle identità per i carichi di lavoro, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Amministratore del pool di identità dei carichi di lavoro (
roles/iam.workloadIdentityPoolAdmin
) -
Amministratore account di servizio (
roles/iam.serviceAccountAdmin
)
Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
In alternativa, il ruolo di base Proprietario IAM (roles/owner
) include anche le autorizzazioni per configurare la federazione delle identità. Non devi concedere ruoli di base in un ambiente di produzione, ma puoi concederli in un ambiente di sviluppo o di test.Ora hai raccolto tutte le informazioni necessarie per creare un fornitore e un pool di identità del workload:
Console
Nella console Trusted Cloud , vai alla pagina Nuovo provider e pool di workload.
Nella sezione Crea un pool di identità, inserisci quanto segue:
- Nome: il nome del pool. Il nome viene utilizzato anche come ID pool. Non potrai modificare l'ID pool in un secondo momento.
- Descrizione: testo che descrive lo scopo del pool.
Fai clic su Continua.
Configura le impostazioni del provider:
AWS
Configura le seguenti impostazioni del fornitore:
- Seleziona un provider: AWS.
- Nome provider: il nome del provider. Il nome viene utilizzato anche come ID provider. Non potrai modificare l'ID fornitore in un secondo momento.
Azure
Configura le seguenti impostazioni del fornitore:
- Seleziona un provider: OpenID Connect (OIDC).
- Nome provider: nome del provider. Il nome viene utilizzato anche come ID provider. Non potrai modificare l'ID fornitore in un secondo momento.
- URL emittente:
https://sts.windows.net/TENANT_ID
. SostituisciTENANT_ID
con l'ID tenant (GUID) del tuo tenant Microsoft Entra ID. - Destinatari consentiti: URI ID applicazione che hai utilizzato quando hai registrato l'applicazione in Microsoft Entra ID.
Fai clic su Continua.
Nella sezione Configura gli attributi del fornitore, aggiungi le mappature degli attributi che hai identificato in precedenza.
Nella sezione Condizioni degli attributi, inserisci la condizione degli attributi che hai identificato in precedenza. Lascia il campo vuoto se non hai una condizione dell'attributo.
Fai clic su Salva per creare il fornitore e il pool di identità del workload.
gcloud
Crea un nuovo pool di identità del workload:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Sostituisci quanto segue:
POOL_ID
: l'ID univoco del pool.DISPLAY_NAME
: il nome del pool.DESCRIPTION
: la descrizione del pool. Questa descrizione viene visualizzata quando si concede l'accesso alle identità dei pool.
Aggiungi un provider di pool di identità del workload:
AWS
Per creare il fornitore del pool di identità del workload per AWS, esegui il seguente comando:
gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --account-id="ACCOUNT_ID" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Sostituisci quanto segue:
PROVIDER_ID
: l'ID univoco del fornitore.POOL_ID
: l'ID del pool.ACCOUNT_ID
: il numero di 12 cifre che identifica il tuo account AWS.MAPPINGS
: elenco separato da virgole di mappature degli attributi che hai identificato in precedenza.CONDITIONS
: condizione dell'attributo che hai identificato in precedenza. Rimuovi il parametro se non hai una condizione dell'attributo.
Esempio:
gcloud iam workload-identity-pools providers create-aws example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --account-id="123456789000" \ --attribute-mapping="google.subject=assertion.arn"
Azure
Per creare il fornitore del pool di identità del workload per Azure, esegui il seguente comando:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER_URI" \ --allowed-audiences="APPLICATION_ID_URI" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Sostituisci quanto segue:
PROVIDER_ID
: l'ID univoco del fornitore.POOL_ID
: l'ID del pool.ISSUER_URI
: l'ID tenant (GUID) del tuo tenant Microsoft Entra ID, a volte formattato comehttps://sts.windows.net/TENANT_ID
. L'URI dell'emittente può variare e, per trovarlo, puoi eseguire il debug del JWT utilizzando JWT.io.APPLICATION_ID_URI
: URI ID applicazione che hai utilizzato quando hai registrato l'applicazione in Microsoft Entra ID.MAPPINGS
: l'elenco separato da virgole di mappature degli attributi che hai identificato in precedenza.CONDITIONS
: (facoltativo) la condizione dell'attributo che hai identificato in precedenza.
Esempio:
gcloud iam workload-identity-pools providers create-oidc example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --issuer-uri="https://sts.windows.net/00000000-1111-2222-3333-444444444444" \ --allowed-audiences="api://my-app" \ --attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"
Autenticare un workload
Devi eseguire questi passaggi una volta per carico di lavoro.
Consenti al carico di lavoro esterno di accedere alle risorse Trusted Cloud
Per fornire al tuo workload l'accesso alle risorse Trusted Cloud , ti consigliamo di concedere l'accesso diretto alle risorse all'entità. In questo caso, il principal è l'utente federato. Alcuni prodotti Trusted Cloud hanno limitazioni dell'API Google Cloud. Se il tuo carico di lavoro chiama un endpoint API che presenta una limitazione, puoi invece utilizzare la rappresentazione dell'identità delaccount di serviziot. In questo caso, l'entità è il service accountTrusted Cloud , che funge da identità. Concedi l'accesso alaccount di serviziot sulla risorsa.
Accesso diretto alle risorse
Puoi concedere l'accesso a un'identità federata direttamente alle risorse utilizzando la console Trusted Cloud o gcloud CLI.
Console
Per utilizzare la console Trusted Cloud per concedere i ruoli IAM direttamente su una risorsa, devi andare alla pagina della risorsa e poi concedere il ruolo. L'esempio seguente mostra come accedere alla pagina Cloud Storage e concedere il ruolo Visualizzatore oggetti Storage (
roles/storage.objectViewer
) a un'identità federata direttamente in un bucket Cloud Storage.- Nella console Trusted Cloud , vai alla pagina Bucket in Cloud Storage.
Nell'elenco dei bucket, fai clic sul nome del bucket per cui vuoi concedere il ruolo.
Seleziona la scheda Autorizzazioni nella parte superiore della pagina.
Fai clic sul pulsante add_box Concedi l'accesso.
Viene visualizzata la finestra di dialogo Aggiungi entità.
Nel campo Nuove entità, inserisci una o più identità che devono accedere al tuo bucket.
Per argomento
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoPOOL_ID
: l'ID pool di workloadSUBJECT
: il soggetto individuale mappato dal tuo IdP, ad esempioadministrator@example.com
Per gruppo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoWORKLOAD_POOL_ID
: l'ID pool di workloadGROUP
: il gruppo mappato dal tuo IdP, ad esempio:administrator-group@example.com
Per attributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoWORKLOAD_POOL_ID
: l'ID pool di workloadATTRIBUTE_NAME
: uno degli attributi mappati dal tuo IdPATTRIBUTE_VALUE
: il valore dell'attributo
Seleziona un ruolo (o più ruoli) dal menu a discesa Seleziona un ruolo. I ruoli selezionati vengono visualizzati nel riquadro con una breve descrizione delle autorizzazioni che concedono.
Fai clic su Salva.
gcloud
Per utilizzare gcloud CLI per concedere ruoli IAM a una risorsa in un progetto, procedi nel seguente modo:
Ottieni il numero di progetto del progetto in cui è definita la risorsa.
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Concedi l'accesso alla risorsa.
Per utilizzare gcloud CLI per concedere il ruolo Visualizzatore oggetti Storage (
roles/storage.objectViewer
) alle identità esterne che soddisfano determinati criteri, esegui il seguente comando.Per argomento
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Per gruppo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Per attributo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Sostituisci quanto segue:
BUCKET_ID
: il bucket su cui concedere l'accessoPROJECT_NUMBER
: il numero di progetto del progetto che contiene il pool di identità del workload.POOL_ID
: l'ID pool del pool di identità del workloadSUBJECT
: il valore previsto per l'attributo che hai mappato sugoogle.subject
GROUP
: il valore previsto per l'attributo che hai mappato sugoogle.groups
ATTRIBUTE_NAME
: il nome di un attributo personalizzato nella mappatura degli attributiATTRIBUTE_VALUE
: il valore dell'attributo personalizzato nella mappatura degli attributi
Puoi concedere ruoli su qualsiasi risorsa Trusted Cloud che supporta i criteri di autorizzazione IAM.
Simulazione dell'identità dei service account
Per creare un account di servizio per il workload esterno:
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
Crea un service account che rappresenti il workload. Ti consigliamo di utilizzare un account di servizio dedicato per ogni workload. Il account di servizio non deve trovarsi nello stesso progetto del pool di identità del carico di lavoro, ma devi fare riferimento al progetto che contiene il account di servizio.
Concedi al account di servizio l'accesso alle risorse a cui vuoi che accedano le identità esterne.
Per consentire all'identità federata di rappresentare il account di servizio, procedi nel seguente modo:
Console
Per utilizzare la console Trusted Cloud per concedere ruoli IAM a un'identità federata con account di servizio, procedi nel seguente modo:
Service Account nello stesso progetto
Per concedere l'accesso utilizzando la simulazione dell'identità del account di servizio per un account di servizio nello stesso progetto:
Vai alla pagina Pool di identità per i carichi di lavoro.
Seleziona Concedi l'accesso.
Nella finestra di dialogo Concedi l'accesso al service account, seleziona Concedi l'accesso utilizzando la simulazione dell'identità dei service account.
Nell'elenco Service account, seleziona il account di servizio per le identità esterne da rappresentare e procedi nel seguente modo:
Per scegliere quali identità nel pool possono rappresentare l'account di servizio, esegui una delle seguenti azioni:
Per consentire solo a identità specifiche del pool di identità del workload di simulare l'identità del account di servizio, seleziona Solo le identità corrispondenti al filtro.
Nell'elenco Nome attributo, seleziona l'attributo in base al quale vuoi filtrare.
Nel campo Valore attributo, inserisci il valore previsto dell'attributo. Ad esempio, se utilizzi una mappatura degli attributi
google.subject=assertion.sub
, imposta il nome dell'attributo susubject
e il valore dell'attributo sul valore dell'attestazionesub
nei token emessi dal tuo IdP esterno.
Per salvare la configurazione, fai clic su Salva e poi su Ignora.
Service account in un altro progetto
Per concedere l'accesso utilizzando la rappresentazione del account di servizio per un account di servizio in un altro progetto:
Vai alla pagina Service Accounts.
Seleziona l'account di servizio che vuoi rappresentare.
Fai clic su Gestisci accesso.
Fai clic su Aggiungi entità.
Nel campo Nuova entità, inserisci uno dei seguenti identificatori dell'entità per le identità nel tuo pool che rappresenteranno l'account di servizio.
Per argomento
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoPOOL_ID
: l'ID pool di workloadSUBJECT
: il soggetto individuale mappato dal tuo IdP, ad esempioadministrator@example.com
Per gruppo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoWORKLOAD_POOL_ID
: l'ID pool di workloadGROUP
: il gruppo mappato dal tuo IdP, ad esempio:administrator-group@example.com
Per attributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoWORKLOAD_POOL_ID
: l'ID pool di workloadATTRIBUTE_NAME
: uno degli attributi mappati dal tuo IdPATTRIBUTE_VALUE
: il valore dell'attributo
Per piscina
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del progettoWORKLOAD_POOL_ID
: l'ID pool di workload
In Seleziona un ruolo, seleziona il ruolo Utente Workload Identity (
roles/iam.workloadIdentityUser
).Per salvare la configurazione, fai clic su Salva.
gcloud
Per concedere il ruolo Utente Workload Identity (
roles/iam.workloadIdentityUser
) a un'entità federata o a un insieme di entità, esegui questo comando. Per scoprire di più sugli identificatori delle entità della federazione delle identità per i workload, consulta Tipi di entità.Per argomento
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Per gruppo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Per attributo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Sostituisci quanto segue:
SERVICE_ACCOUNT_EMAIL
: l'indirizzo email del account di servizioPROJECT_NUMBER
: il numero di progetto del progetto che contiene il pool di identità del workload.POOL_ID
: l'ID pool del pool di identità del workloadSUBJECT
: il valore previsto per l'attributo che hai mappato sugoogle.subject
GROUP
: il valore previsto per l'attributo che hai mappato sugoogle.groups
ATTRIBUTE_NAME
: il nome di un attributo personalizzato nella mappatura degli attributiATTRIBUTE_VALUE
: il valore dell'attributo personalizzato nella mappatura degli attributi
Scaricare o creare una configurazione delle credenziali
Le librerie client Cloud, la gcloud CLId e Terraform possono ottenere automaticamente le credenziali esterne e utilizzarle per rappresentare uaccount di serviziont. Per consentire a librerie e strumenti di completare questa procedura, devi fornire un file di configurazione delle credenziali. Questo file definisce quanto segue:
- Dove ottenere le credenziali esterne
- Quale fornitore e pool di identità del workload utilizzare
- Quale account di servizio rappresentare
Per creare un file di configurazione delle credenziali:
Console
Per scaricare un file di configurazione delle credenziali nella console Trusted Cloud , segui questi passaggi:
Nella console Trusted Cloud , vai alla pagina Pool di identità per i workload.
Trova il pool Workload Identity per l'IdP che vuoi utilizzare e fai clic.
Se hai scelto di utilizzare l'accesso diretto alle risorse, procedi nel seguente modo:
Fai clic su Concedi accesso.
Seleziona Concedi l'accesso usando identità federate (consigliato).
Fai clic su Scarica.
Continua con le istruzioni per la finestra di dialogo Configura l'applicazione, più avanti in questa procedura.
Se hai scelto di utilizzare la rappresentazione dell'identità del account di servizio:
Seleziona Account di servizio collegati.
Trova il account di servizio che vuoi utilizzare e fai clic su
Scarica.Continua con le istruzioni per la finestra di dialogo Configura l'applicazione, più avanti in questa procedura.
Nella finestra di dialogo Configura l'applicazione, seleziona il provider che contiene le identità esterne.
Fornisci le seguenti impostazioni aggiuntive:
AWS
Non sono necessarie impostazioni aggiuntive.
Azure
URL ID applicazione: URI ID applicazione dell'applicazione Azure
Seleziona
Scarica configurazione per scaricare il file di configurazione delle credenziali, quindi fai clic su Ignora.
gcloud
Per creare un file di configurazione delle credenziali utilizzando
gcloud iam workload-identity-pools create-cred-config
, segui questi passaggi:AWS
Per creare un file di configurazione delle credenziali che consenta alla libreria di ottenere un token di accesso dai metadati dell'istanza EC2, procedi nel seguente modo:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --aws \ --output-file=FILEPATH.json
Sostituisci quanto segue:
PROJECT_NUMBER
: Il numero di progetto del progetto che contiene il pool di identità del workloadPOOL_ID
: l'ID del pool di identità del workload.PROVIDER_ID
: l'ID del fornitore del pool di identità del workload.SERVICE_ACCOUNT_EMAIL
: se utilizzi la simulazione dell'identità del service account, sostituisci questo valore con l'indirizzo email del account di servizio. Ometti questo flag se non utilizzi l'impersonificazione delaccount di serviziot.SERVICE_ACCOUNT_TOKEN_LIFETIME
: se utilizzi l'imitazione del account di servizio, sostituisci con la durata del token di accesso al account di servizio, in secondi; il valore predefinito è un'ora se non viene specificato. Ometti questo flag se non utilizzi l'impersonificazione delaccount di serviziot. Per specificare una durata superiore a un'ora, devi configurare ilconstraints/iam.allowServiceAccountCredentialLifetimeExtension
vincolo dei criteri dell'organizzazione.FILEPATH
: il file in cui salvare la configurazione.
Se utilizzi AWS IMDSv2, al comando
gcloud iam workload-identity-pools create-cred-config
deve essere aggiunto un flag aggiuntivo--enable-imdsv2
:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --aws \ --enable-imdsv2 \ --output-file=FILEPATH.json
Se l'utilizzo del server di metadati AWS non è un'opzione, puoi fornire le credenziali di sicurezza AWS tramite le seguenti variabili di ambiente AWS:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
oAWS_DEFAULT_REGION
- (Facoltativo)
AWS_SESSION_TOKEN
gcloud CLI e le librerie utilizzano queste variabili di ambiente AWS quando il server di metadati AWS non è disponibile.
Azure
Crea un file di configurazione delle credenziali che consenta alla libreria di ottenere un token di accesso dal servizio di metadati dell'istanza di Azure (IMDS):
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --azure \ --app-id-uri APPLICATION_ID_URI \ --output-file=FILEPATH.json
Sostituisci quanto segue:
PROJECT_NUMBER
: Il numero di progetto del progetto che contiene il pool di identità del workload.POOL_ID
: l'ID del pool di identità del workload.PROVIDER_ID
: l'ID del fornitore del pool di identità del workload.SERVICE_ACCOUNT_EMAIL
: se utilizzi la simulazione dell'identità del service account, sostituisci questo valore con l'indirizzo email del account di servizio. Ometti questo flag se non utilizzi l'impersonificazione delaccount di serviziot.APPLICATION_ID_URI
: l'URI dell'ID applicazione dell'applicazione Azure.SERVICE_ACCOUNT_TOKEN_LIFETIME
: se utilizzi l'impersonificazione del account di servizio,la durata del token di accesso del account di servizio, in secondi; il valore predefinito è un'ora se non viene fornito. Ometti questo flag se non utilizzi l'impersonificazione delaccount di serviziot. Per specificare una durata superiore a un'ora, devi configurare ilconstraints/iam.allowServiceAccountCredentialLifetimeExtension
vincolo dei criteri dell'organizzazione.FILEPATH
: il file in cui salvare la configurazione.
Utilizza la configurazione delle credenziali per accedere a Trusted Cloud
Per consentire a strumenti e librerie client di utilizzare la configurazione delle credenziali, esegui le seguenti operazioni nel tuo ambiente AWS o Azure:
Inizializza una variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
e indirizzala al file di configurazione delle credenziali:Bash
doveexport GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
FILEPATH
è il percorso relativo al file di configurazione delle credenziali.PowerShell
dove$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
FILEPATH
è il percorso relativo al file di configurazione delle credenziali.Utilizza una libreria client o uno strumento che supporti la federazione delle identità per i carichi di lavoro e che possa trovare automaticamente le credenziali:
C++
Le librerie client per C++ supportano la federazione delle identità per i workload a partire dalla versione v2.6.0.Trusted Cloud Per utilizzare la federazione delle identità per i carichi di lavoro, devi creare le librerie client con gRPC versione 1.36.0 o successive.
Vai
Le librerie client per Go supportano la federazione delle identità per i carichi di lavoro se utilizzano la versione v0.0.0-20210218202405-ba52d332ba99 o successive del modulo
golang.org/x/oauth2
.Per controllare quale versione di questo modulo utilizza la tua libreria client, esegui i seguenti comandi:
cd $GOPATH/src/cloud.google.com/go go list -m golang.org/x/oauth2
Java
Le librerie client per Java supportano la federazione delle identità per i carichi di lavoro se utilizzano la versione 0.24.0 o successive dell'artefatto
com.google.auth:google-auth-library-oauth2-http
.Per controllare quale versione di questo artefatto utilizza la libreria client, esegui il seguente comando Maven nella directory dell'applicazione:
mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
Node.js
Le librerie client per Node.js supportano la federazione delle identità per i carichi di lavoro se utilizzano la versione 7.0.2 o successive del pacchetto
google-auth-library
.Per controllare quale versione di questo pacchetto utilizza la tua libreria client, esegui questo comando nella directory dell'applicazione:
npm list google-auth-library
Quando crei un oggetto
GoogleAuth
, puoi specificare un ID progetto oppure consentire aGoogleAuth
di trovare automaticamente l'ID progetto. Per trovare automaticamente l'ID progetto, il account di servizio nel file di configurazione deve disporre del ruolo Browser (roles/browser
) o di un ruolo con autorizzazioni equivalenti per il tuo progetto. Per maggiori dettagli, consulta iREADME
per il pacchettogoogle-auth-library
.Python
Le librerie client per Python supportano la federazione delle identità per i carichi di lavoro se utilizzano la versione 1.27.0 o successive del pacchetto
google-auth
.Per controllare quale versione di questo pacchetto utilizza la tua libreria client, esegui il seguente comando nell'ambiente in cui è installato il pacchetto:
pip show google-auth
Per specificare un ID progetto per il client di autenticazione, puoi impostare la variabile di ambiente
GOOGLE_CLOUD_PROJECT
oppure puoi consentire al client di trovare automaticamente l'ID progetto. Per trovare automaticamente l'ID progetto, il service account nel file di configurazione deve disporre del ruolo Browser (roles/browser
) o di un ruolo con autorizzazioni equivalenti per il tuo progetto. Per maggiori dettagli, consulta la guida dell'utente per il pacchettogoogle-auth
.gcloud
Per l'autenticazione tramite la federazione delle identità per i carichi di lavoro, utilizza il comando
gcloud auth login
:gcloud auth login --cred-file=FILEPATH.json
Sostituisci
FILEPATH
con il percorso del file di configurazione delle credenziali.Il supporto della federazione delle identità per i workload in gcloud CLI è disponibile nella versione 363.0.0 e successive di gcloud CLI.
Terraform
Il Trusted Cloud provider supporta la federazione delle identità per i carichi di lavoro se utilizzi la versione 3.61.0 o successive:
terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.61.0" } } }
bq
Per l'autenticazione tramite la federazione delle identità per i carichi di lavoro, utilizza il comando
gcloud auth login
come segue:gcloud auth login --cred-file=FILEPATH.json
Sostituisci
FILEPATH
con il percorso del file di configurazione delle credenziali.Il supporto della federazione delle identità per i carichi di lavoro in bq è disponibile nella versione 390.0.0 e successive della gcloud CLI.
Se non puoi utilizzare una libreria client che supporta la federazione delle identità dei carichi di lavoro, puoi autenticarti in modo programmatico utilizzando l'API REST.
Scenari avanzati
Autenticare un workload utilizzando l'API REST
Se non puoi utilizzare le librerie client, segui questi passaggi per consentire a un carico di lavoro esterno di ottenere un token di accesso di breve durata utilizzando l'API REST:
Ottieni le credenziali dal tuo IdP esterno:
AWS
Crea un documento JSON che contenga le informazioni che normalmente includeresti in una richiesta all'endpoint AWS
GetCallerIdentity()
, inclusa una firma della richiesta valida.Workload Identity Federation fa riferimento a questo documento JSON come token
GetCallerIdentity
. Il token consente alla federazione delle identità per i workload di verificare l'identità senza rivelare la chiave di accesso segreta AWS.Un token
GetCallerIdentity
è simile al seguente:{ "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15", "method": "POST", "headers": [ { "key": "Authorization", "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd" }, { "key": "host", "value": "sts.amazonaws.com" }, { "key": "x-amz-date", "value": "20200228T225005Z" }, { "key": "x-goog-cloud-target-resource", "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider" }, { "key": "x-amz-security-token", "value": "GizFWJTqYX...xJ55YoJ8E9HNU=" } ] }
Il token contiene i seguenti campi:
url
: l'URL dell'endpoint AWS STS perGetCallerIdentity()
, con il corpo di una richiestaGetCallerIdentity()
standard aggiunto come parametri di ricerca. Ad esempiohttps://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15
. Ti consigliamo di utilizzare gli endpoint STS regionali e di progettare un'infrastruttura affidabile per i tuoi workload. Per maggiori informazioni, consulta Endpoint AWS STS regionali.method
: Il metodo di richiesta HTTP:POST
.headers
: le intestazioni delle richieste HTTP, che devono includere:Authorization
: La firma della richiesta.host
: il nome host del campourl
, ad esempiosts.amazonaws.com
.x-amz-date
: l'ora in cui invierai la richiesta, formattata come stringa ISO 8601 Basic. Questo valore viene in genere impostato sull'ora corrente e viene utilizzato per contribuire a prevenire attacchi di replay.x-goog-cloud-target-resource
: il nome completo della risorsa del provider di identità senza il prefissohttps:
. Ad esempio://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
x-amz-security-token
: token di sessione. Obbligatorio solo se utilizzi credenziali di sicurezza temporanee.
L'esempio seguente crea un token
GetCallerIdentity
codificato nell'URL. Estrai il token codificato nell'URL per utilizzarlo in un secondo momento. Crea anche un token leggibile da persone solo per riferimento:Inizializza le seguenti variabili:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request" SUBJECT_TOKEN=TOKEN
PowerShell
$SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request" $SubjectToken = "TOKEN"
Dove
TOKEN
è il token codificato come URLGetCallerIdentity
generato dallo script.Azure
Connettiti a una VM Azure a cui è stata assegnata un'identità gestita e ottieni un token di accesso da Azure Instance Metadata Service (IMDS):
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt" SUBJECT_TOKEN=$(curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token) echo $SUBJECT_TOKEN
Questo comando utilizza lo strumento
jq
.jq
è disponibile per impostazione predefinita in Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Dove
APP_ID_URI
è l'URI ID applicazione dell'applicazione che hai configurato per la federazione delle identità per i workload.Utilizza l'API Security Token Service per scambiare la credenziale con un token di accesso di breve durata:
Bash
STS_TOKEN=$(curl https://sts.googleapis.com/v1/token \ --data-urlencode "audience=//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \ --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \ --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \ --data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \ --data-urlencode "subject_token_type=$SUBJECT_TOKEN_TYPE" \ --data-urlencode "subject_token=$SUBJECT_TOKEN" | jq -r .access_token) echo $STS_TOKEN
PowerShell
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 $StsToken = (Invoke-RestMethod ` -Method POST ` -Uri "https://sts.googleapis.com/v1/token" ` -ContentType "application/json" ` -Body (@{ "audience" = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" "grantType" = "urn:ietf:params:oauth:grant-type:token-exchange" "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token" "scope" = "https://www.googleapis.com/auth/cloud-platform" "subjectTokenType" = $SubjectTokenType "subjectToken" = $SubjectToken } | ConvertTo-Json)).access_token Write-Host $StsToken
Sostituisci i seguenti valori:
PROJECT_NUMBER
: il numero di progetto del progetto che contiene il pool di identità del workloadPOOL_ID
: ID del pool di identità del workloadPROVIDER_ID
: ID del fornitore del pool di identità del workload
Se utilizzi la rappresentazione dell'identità del account di servizio, utilizza il token del servizio token di sicurezza per richiamare il metodo
generateAccessToken
dell'API IAM Service Account Credentials per ottenere un token di accesso.
Token per i servizi Cloud Run
Quando accedi a un servizio Cloud Run, devi utilizzare un token ID.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .token { "audience": "SERVICE_URL" } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "audience" = "SERVICE_URL" } | ConvertTo-Json)).token Write-Host $Token
Sostituisci quanto segue:
-
SERVICE_ACCOUNT_EMAIL
: l'indirizzo email delaccount di serviziot. -
SERVICE_URL
: l'URL del servizio, ad esempiohttps://my-service-12345-us-central1.run.app
. Puoi anche impostarlo sull'endpoint di servizio personalizzato. Per saperne di più, vedi Informazioni sui segmenti di pubblico personalizzati.
Token per altre piattaforme
Quando accedi a un altro servizio, devi utilizzare un token di accesso.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .accessToken { "scope": [ "https://www.googleapis.com/auth/cloud-platform" ] } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "scope" = , "https://www.googleapis.com/auth/cloud-platform" } | ConvertTo-Json)).accessToken Write-Host $Token
Sostituisci quanto segue:
-
SERVICE_ACCOUNT_EMAIL
: l'indirizzo email delaccount di serviziot.
Passaggi successivi
- Scopri di più sulla federazione delle identità per i workload.
- Scopri le best practice per l'utilizzo della federazione delle identità per i workload.
- Scopri come gestire i fornitori e i pool di identità del workload.
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 2025-08-08 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-08-08 UTC."],[[["Workload Identity Federation allows AWS and Azure workloads to authenticate to Google Cloud without using a service account key."],["AWS EC2 instances and Azure VMs can use their respective environment-specific credentials, such as instance profiles and managed identities, to obtain short-lived Google Cloud Security Token Service tokens."],["By configuring Workload Identity Federation, you can enable workloads to exchange these environment-specific credentials for short-lived Google Cloud credentials, granting them access to Google Cloud APIs."],["Setting up Workload Identity Federation involves creating a workload identity pool and provider, mapping attributes from external credentials, and defining conditions to control access."],["You can grant federated identities direct resource access on Google Cloud or use service account impersonation, with proper roles and permissions, depending on the needs of the application."]]],[]]