Questo documento fornisce una panoramica della federazione di Workload Identity. Utilizzando la federazione delle identità per i carichi di lavoro, puoi fornire servizi on-premise o multi-cloud carichi di lavoro con accesso alle risorse Google Cloud mediante identità federate anziché una chiave dell'account di servizio.
Puoi utilizzare la federazione delle identità per i carichi di lavoro con carichi di lavoro in esecuzione su Amazon Web Services (AWS) e Azure; Active Directory on-premise; di deployment, come GitHub e GitLab; e con qualsiasi provider di identità (IdP) che supporti OpenID Connect (OIDC) o SAML (Security Assertion Markup Language) V2.0.
Perché la federazione delle identità per i carichi di lavoro?
In genere, le applicazioni in esecuzione al di fuori di Google Cloud possono utilizzare chiavi dell'account di servizio per accedere alle risorse Google Cloud. Tuttavia, le chiavi degli account di servizio credenziali molto potenti e possono comportare un rischio per la sicurezza se non vengono gestite in modo corretto. La federazione delle identità per i carichi di lavoro elimina il carico di manutenzione e sicurezza associato alle chiavi dell'account di servizio.
Con la federazione delle identità per i carichi di lavoro, puoi utilizzare Identity and Access Management (IAM) per concedere ruoli IAM alle identità esterne, l'accesso diretto alle risorse Google Cloud. Puoi anche concedere l'accesso tramite la simulazione dell'identità degli account di servizio.
Pool di identità per i carichi di lavoro
Un pool di identità per i carichi di lavoro è un'entità che consente di gestire le identità di altro tipo.
In generale, consigliamo di creare un nuovo pool per ogni ambiente non Google Cloud che deve accedere alle risorse Google Cloud, ad esempio gli ambienti di sviluppo, di gestione temporanea o di produzione.
Provider di pool di identità per i carichi di lavoro
Un provider di pool di identità dei carichi di lavoro è un'entità che descrive una relazione tra Google Cloud e il tuo provider di identità, tra cui:
- AWS
- Microsoft Entra ID
- GitHub
- GitLab
- Cluster Kubernetes
- Okta
- Active Directory Federation Services (ADFS) on-premise
- Terraform
La federazione delle identità per i carichi di lavoro segue lo scambio di token OAuth 2.0 la specifica del container. Fornisci una credenziale del tuo IdP al Security Token Service, che verifica l'identità sulla credenziale e restituisce un token federato in cambio.
Provider OIDC con JWK locali
Per federare i carichi di lavoro che non dispongono di un endpoint OIDC pubblico, puoi caricare i set di chiavi web JSON OIDC (JWKS) direttamente nel pool. Questo è comune se hai Terraform o GitHub Enterprise ospitato nel tuo ambiente o se hai requisiti normativi che non ti consentono di esporre URL pubblici. Per ulteriori informazioni, consulta Gestire i JWK OIDC (facoltativo)
Mappature attributi
I token emessi dall'IdP esterno contengono uno o più attributi. Alcuni IdP fanno riferimento a questi attributi come rivendicazioni.
I token del servizio token di sicurezza di Google contengono anche uno o più attributi elencati nella tabella seguente:
Attributo | Descrizione |
---|---|
google.subject |
Obbligatorio. Un identificatore univoco per l'utente. Questo attributo viene utilizzato nelle associazioni di ruoli principal:// IAM e visualizzato nei log di Cloud Logging.
Il valore deve essere univoco e non può superare i 127 caratteri.
|
google.groups |
Facoltativo. Un insieme di gruppi a cui appartiene l'identità. Questo attributo è
utilizzato nelle associazioni di ruoli IAM principalSet:// a
concedere l'accesso a tutti i membri di un gruppo.
|
attribute.NAME |
Facoltativo. Puoi definire fino a 50 attributi personalizzati e utilizzarli nelle associazioni dei ruoli principalSet:// IAM per concedere l'accesso a tutte le identità con un determinato attributo.
|
Un mapping degli attributi definisce come ricavare il valore dell'attributo Attributo token di servizio del token di sicurezza da un token esterno. Per ogni attributo del token di Google Security Token Service, puoi definire una mappatura degli attributi, formattata come segue:
TARGET_ATTRIBUTE
=SOURCE_EXPRESSION
Sostituisci quanto segue:
TARGET_ATTRIBUTE
è un attributo del token del Servizio token di sicurezza di GoogleSOURCE_EXPRESSION
è un'espressione Common Expression Language (CEL) che trasforma uno o più attributi dei token emessi dalla tua IdP esterna
Di seguito sono riportati alcuni esempi di mappatura degli attributi:
Assegna l'attributo di affermazione
sub
agoogle.subject
:google.subject=assertion.sub
Concatena più attributi di asserzione:
google.subject="myprovider::" + assertion.aud + "::" + assertion.sub
Mappa un attributo di asserzione con valore GUID
workload_id
a un nome e assegna il risultato a un attributo personalizzato denominatoattribute.my_display_name
:attribute.my_display_name={ "8bb39bdb-1cc5-4447-b7db-a19e920eb111": "Workload1", "55d36609-9bcf-48e0-a366-a3cf19027d2a": "Workload2" }[assertion.workload_id]
Utilizza gli operatori e le funzioni logiche di CEL per impostare un attributo personalizzato denominato
attribute.environment
suprod
otest
, a seconda dell'ARN (Amazon Resource Name) dell'identità:attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
Utilizza la funzione
extract
per compilare un attributo personalizzatoaws_role
con il nome del ruolo assunto o, se non è stato assunto alcun ruolo, con l'ARN dell'identità.attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn
La funzione
split
suddivide una stringa in base al valore del separatore fornito. Ad esempio, per estrarre l'attributousername
da un attributo di indirizzo email suddividendone il valore in corrispondenza di@
e utilizzando la prima stringa, usa la seguente mappatura degli attributi:attribute.username=assertion.email.split("@")[0]
La funzione
join
unisce un elenco di stringhe in base al valore del separatore fornito. Ad esempio, per compilare l'attributo personalizzatodepartment
concatenando un elenco di stringhe con.
come separatore, utilizza la seguente mappatura degli attributi:attribute.department=assertion.department.join(".")
Per AWS, Google fornisce mappature predefinite che coprono la maggior parte degli scenari comuni. Puoi anche fornire mappature personalizzate.
Per i provider OIDC, fornisci le mappature. Per creare la mappatura, consulta la documentazione del provider per un elenco degli attributi delle credenziali.
Per ulteriori dettagli, consulta la documentazione dell'API per
Campo attributeMapping
:
Condizioni degli attributi
Una condizione dell'attributo è un'espressione CEL che può controllare gli attributi dell'asserzione
e attributi target. Se la condizione dell'attributo restituisce true
per un
una determinata credenziale, questa viene accettata. In caso contrario, la credenziale
rifiutato.
Puoi utilizzare una condizione dell'attributo per limitare le identità che possono autenticarsi utilizzando il pool di identità per i carichi di lavoro.
Le condizioni degli attributi sono utili in scenari come i seguenti:
Se il tuo carico di lavoro utilizza un provider di identità disponibile per il pubblico in generale, puoi limitare l'accesso in modo che solo le identità che scegli abbiano accesso al pool di identità del carico di lavoro.
Se utilizzi un IdP con più piattaforme cloud, puoi impedire l'utilizzo di credenziali destinate all'uso con un'altra piattaforma con Google Cloud e viceversa. In questo modo si evita il problema del rappresentante confuso.
La condizione dell'attributo per un provider di pool di identità per i carichi di lavoro può utilizzare
Parola chiave assertion
, che si riferisce a una mappa che rappresenta l'autenticazione
credenziale rilasciata dall'IdP. Puoi utilizzare la notazione a punti per accedere ai valori della mappa. Ad esempio, le credenziali AWS includono un valore arn
, a cui puoi accedere come assertion.arn
. Inoltre, la condizione dell'attributo può utilizzare qualsiasi attributo definito nella mappatura degli attributi del provider.
L'esempio seguente consente solo richieste da identità con un indirizzo Ruolo AWS:
attribute.aws_role == "ROLE_MAPPING"
Per ulteriori dettagli, consulta la documentazione dell'API per
Campo attributeCondition
:
Gestione degli accessi
Il flusso di scambio di token restituisce un token di accesso federato. Puoi utilizzare questo per concedere l'accesso al carico di lavoro per conto di identità entità sulle risorse Google Cloud e ottenere token di accesso OAuth 2.0 di breve durata.
Puoi utilizzare questo token di accesso per fornire l'accesso IAM.
Ti consigliamo di utilizzare la federazione delle identità per i carichi di lavoro per fornire l'accesso direttamente a una risorsa Google Cloud. Sebbene la maggior parte delle API Google Cloud supporti la federazione delle identità per i carichi di lavoro, alcune API presentano limitazioni. In alternativa, puoi utilizzare il furto d'identità degli account di servizio.
Il token di accesso a breve termine ti consente di chiamare qualsiasi API Google Cloud a cui ha accesso la risorsa o l'account di servizio.
Accesso diretto alle risorse
Puoi utilizzare l'accesso diretto alle risorse per concedere all'identità esterna l'accesso direttamente a una risorsa Google Cloud utilizzando ruoli specifici per le risorse.
Alternativa: simulazione dell'identità dell'account di servizio
In alternativa al accesso diretto alle risorse, puoi utilizzare l'impersonificazione dell'account di servizio.
Devi concedere al tuo account di servizio il ruolo Utente Workload Identity
(roles/iam.workloadIdentityUser
).
Ambiti principali e sicurezza
Puoi concedere l'accesso alle entità o ai relativi sottoinsiemi utilizzando i tipi di entità.
Tipi di entità
La tabella seguente descrive come definire le entità come individui e gruppi di identità:
Identità | Formato dell'identificatore |
---|---|
Singola identità |
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Tutte le identità in un gruppo |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Tutte le identità con un valore dell'attributo specifico |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Passaggi successivi
Utilizza la federazione delle identità per i carichi di lavoro per consentire ai carichi di lavoro di accedere alle risorse di AWS o Azure, Active Directory, pipeline di deployment o provider OIDC o SAML.
Scopri come gestire i pool di identità per i carichi di lavoro con Google Cloud CLI o l'API REST.