Questa guida descrive come utilizzare un pool Workload Identity e un provider per ottenere credenziali di breve durata seguendo questa procedura:
- Ottieni una credenziale dal provider di identità attendibile.
- Scambia le credenziali di un token dal Security Token Service.
- Utilizzare il token del Security Token Service per impersonare un account di servizio e ottenere un token di accesso a Google di breve durata.
Utilizzando i token di accesso Google di breve durata, puoi quindi accedere alle risorse Google Cloud a cui è stato concesso l'accesso all'account di servizio.
Prima di iniziare
Abilita le API IAM, Security Token Service, and Service Account Credentials.
Crea una federazione con un provider di identità esterno creando un provider di identità e un provider di identità del carico di lavoro.
Crea un account di servizio che vuoi utilizzare per le identità esterne.
Concedi all'account di servizio l'accesso alle risorse a cui vuoi consentire le identità esterne.
Concessione dell'autorizzazione per le identità esterne a impersonare un account di servizio
Per consentire alle identità esterne di impersonare un account di servizio, devi concedere loro il ruolo Utente Workload Identity (roles/iam.workloadIdentityUser
) nell'account di servizio. Puoi concedere il ruolo a un'identità esterna specifica o a più identità esterne:
- Per un'identità esterna specifica, scrivi una condizione per l'attributo che controlli l'attributo
google.subject
. - Per un gruppo di identità esterne, scrivi una condizione per l'attributo che controlli l'attributo
google.groups
o un attributo personalizzatoattribute.NAME
. - Per tutte le identità esterne nel pool Workload Identity, non devi utilizzare una condizione di attributo.
Console
Nella console Google Cloud, vai alla pagina Pool di Workload Identity.
Trova il pool Workload Identity che vuoi aggiornare e fai clic sul pool.
Fai clic su
Concedi l'accesso.Nell'elenco a discesa Account di servizio, seleziona l'account di servizio che utilizzerà le identità esterne.
Scegli quali identità nel pool possono impersonare l'account di servizio:
Per consentire solo alle identità specifiche del pool di identità del carico di lavoro di impersonare l'account di servizio, seleziona Solo le identità corrispondenti al filtro.
Nell'elenco a discesa 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 attributo
google.subject=assertion.sub
, imposta il nome Attributo susubject
e Valore attributo sul valore della rivendicazionesub
nei token emessi dal provider di identità esterno.Per consentire a tutte le identità esterne del pool Workload Identity di impersonare l'account di servizio, seleziona Tutte le identità nel pool.
Fai clic su Salva.
Fai clic su Ignora.
gcloud
Crea un identificatore per le identità esterne:
Un'identità esterna specifica:
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Un gruppo di identità esterne:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Tutte le identità esterne che hanno un determinato attributo:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Tutte le identità esterne in un pool Workload Identity:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
Sostituisci i seguenti valori:
PROJECT_NUMBER
: Numero del progetto del progetto contenente il pool Workload IdentityPOOL_ID
: ID pool del pool Workload IdentitySUBJECT
: valore previsto per l'attributo che hai mappato agoogle.subject
GROUP
: valore previsto per l'attributo che hai mappato agoogle.groups
ATTRIBUTE_NAME
: nome di un attributo personalizzato nella mappatura degli attributi
Per ottenere il numero di progetto attuale, puoi utilizzare questo comando:
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Concedi il ruolo Utente Workload Identity (
roles/iam.workloadIdentityUser
) all'entità nell'account di servizio:gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="MEMBER_ID"
Sostituisci i seguenti valori:
SERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioMEMBER_ID
: identificatore del membro identificato nel passaggio precedente
Autenticazione tramite librerie client, gcloud CLI o Terraform
Le librerie client Cloud, l'interfaccia a riga di comando gcloud e Terraform, possono ottenere automaticamente credenziali esterne e utilizzarle per impersonare un account di servizio. Per consentire alle librerie e agli strumenti di completare questo processo, devi fornire un file di configurazione delle credenziali. Questo file definisce quanto segue:
- Da dove scaricare le credenziali esterne
- Pool e provider di identità da utilizzare
- Quale account di servizio impersonare
Il modo in cui i file di configurazione delle credenziali vengono utilizzati dalle librerie client dipende dal provider di identità esterno:
AWS
Le librerie client ottengono automaticamente le credenziali temporanee dai metadati delle istanze EC2.
Azure
Le librerie client ricevono automaticamente i token di accesso dal servizio di metadati delle istanze Azure (ISSL).
Azioni GitHub
Poiché i parametri richiesti per ottenere un token ID GitHub variano a seconda dell'esecuzione del flusso di lavoro, non puoi utilizzare un file di configurazione delle credenziali statico in un flusso di lavoro di azioni GitHub.
Utilizza l'azione google-github-actions/auth
per generare automaticamente un file di configurazione delle credenziali durante l'esecuzione del flusso di lavoro. Le librerie client e gli strumenti come terraform
possono quindi utilizzare questo file di configurazione delle credenziali per ottenere automaticamente le credenziali di Google.
OIDC
Le librerie client ottengono le credenziali da un file locale, un URL HTTP o un eseguibile locale:
- Credenziali provenienti da file: i token vengono caricati da un file. Un altro processo deve aggiornare questo file con un nuovo token OIDC prima che il vecchio token scada. Ad esempio, se il token ha una durata di 1 ora, devi aggiornare il file prima che abbia un'ora.
- Credenziali provenienti dall'URL: i token vengono caricati da un server locale con un endpoint che risponde alle richieste HTTP
GET
. La risposta deve essere un token ID OIDC, in formato testo normale o JSON. Credenziali eseguibili: i token vengono caricati da un eseguibile locale. L'eseguibile deve gestire un token ID OIDC valido e non scaduto in formato JSON da stdout:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:id_token", "id_token": "HEADER.PAYLOAD.SIGNATURE", "expiration_time": 1620499962 }
Questi campi sono obbligatori per una risposta corretta, ad eccezione diexpiration_time
. Il campoexpiration_time
è obbligatorio solo quando è stato specificato un file di output nella configurazione delle credenziali.Se si verifica un errore, deve essere visualizzato dall'eseguibile nel seguente formato JSON per essere limitato:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Questi campi sono tutti obbligatori per la risposta agli errori. I campi Codice e Messaggio verranno utilizzati dalle librerie client quando assegni l'errore appropriato.Riepilogo dei campi del formato di risposta:
version
: versione dell'output JSON. Attualmente è supportata solo la versione 1.success
: lo stato della risposta. Se true, la risposta deve contenere il token di terze parti, il tipo di token e la scadenza. L'eseguibile deve anche uscire con il codice di uscita 0. Se è false, la risposta deve contenere i campi del messaggio e del codice di errore, nonché uscire con un valore diverso da zero.token_type
: tipo di token dell'oggetto di terze parti. I valori supportati sonourn:ietf:params:oauth:token-type:id_token
eurn:ietf:params:oauth:token-type:jwt
.id_token
: il token OIDC di terze parti.expiration_time
: la scadenza del token OIDC in secondi (tempo unix epoch).code
: la stringa del codice di errore.message
: il messaggio di errore.
Durante l'esecuzione, le librerie client completeranno le seguenti variabili di ambiente:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: il campo del pubblico della configurazione delle credenziali. Sempre presente.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: il tipo di token dell'oggetto previsto. Sempre presente.GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: l'indirizzo email dell'account di servizio. Presente solo quando viene usato il furto d'identità dell'account di servizio.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: posizione del file di output dalla configurazione delle credenziali. Presente solo quando specificato nella configurazione delle credenziali.
Queste variabili di ambiente possono essere utilizzate dall'eseguibile per evitare l'impostazione come hardcoded di questi valori.
Per abilitare questo metodo di origine delle credenziali con le librerie client, la variabile di ambiente
GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
deve essere impostata su1
.
OIDC (AD FS)
Le librerie client possono ottenere le credenziali da un file locale o da un URL HTTP, ma non supportano direttamente l'autenticazione Windows integrata (IWA). Per ottenere un token di accesso per l'utente che ha eseguito l'accesso e archiviarlo in un file locale, utilizza il seguente comando di PowerShell:
(Invoke-RestMethod ` -Uri "https://ADFS_DOMAIN/adfs/oauth2/token/" ` -Method POST ` -Body @{ client_id = 'CLIENT_ID' grant_type = 'client_credentials' scope = 'openid' resource = 'RELYING_PARTY_ID' use_windows_client_authentication = 'true' } ` -UseDefaultCredentials).access_token | Out-File -Encoding ASCII TOKEN_FILEPATH
Sostituisci i seguenti valori:
ADFS_DOMAIN
: nome di dominio pubblico del server AD FS dell'azienda agricola.CLIENT_ID
: ID client della registrazione dell'applicazione in AD FS.RELYING_PARTY_ID
: applicazione dell'identificatore di parti utilizzato durante la creazione di un'applicazione API web per il pool Workload Identity in AD FS.TOKEN_FILEPATH
: percorso verso un file temporaneo in cui salvare il token AD FS. Assicurati che il file sia archiviato in una posizione in cui solo gli utenti autorizzati possono leggere i contenuti del file.
Poiché le credenziali Google di breve durata sono valide solo per un periodo di tempo limitato (un'ora per impostazione predefinita), devi eseguire di nuovo questo comando periodicamente.
SAML
Le librerie client ottengono le credenziali da un file locale, un URL HTTP o un eseguibile locale:
- Credenziali provenienti da file: le asserzioni vengono caricate da un file. Un altro processo deve aggiornare questo file con una nuova asserzione SAML con codifica base64 prima della scadenza di quella precedente. Ad esempio, se la asserzione ha una durata di 1 ora, devi aggiornare il file prima che abbia un'ora.
- Credenziali basate su URL: le asserzioni vengono caricate da un server locale con un endpoint che risponde alle richieste HTTP
GET
. La risposta deve essere un'asserzione SAML con codifica base64 o un file JSON contenente un'asserzione con codifica base64. Credenziali eseguibili: le asserzioni vengono caricate da un eseguibile locale. L'eseguibile deve gestire un'asserzione SAML valida e non scaduta in formato JSON da stdout:
{ "version": 1, "success": true, "token_type": "urn:ietf:params:oauth:token-type:saml2", "saml_response": "...", "expiration_time": 1620499962 }
Questi campi sono obbligatori per una risposta corretta, ad eccezione diexpiration_time
. Il campoexpiration_time
è obbligatorio solo quando è stato specificato un file di output nella configurazione delle credenziali.Se si verifica un errore, deve essere visualizzato dall'eseguibile nel seguente formato JSON per essere limitato:
{ "version": 1, "success": false, "code": "401", "message": "Caller not authorized." }
Questi campi sono tutti obbligatori per la risposta agli errori. I campi Codice e Messaggio verranno utilizzati dalle librerie client quando assegni l'errore appropriato.Riepilogo dei campi del formato di risposta:
version
: versione dell'output JSON. Attualmente è supportata solo la versione 1.success
: lo stato della risposta. Se true, la risposta deve contenere il token di terze parti, il tipo di token e la scadenza. L'eseguibile deve anche uscire con il codice di uscita 0. Se è false, la risposta deve contenere i campi del messaggio e del codice di errore, nonché uscire con un valore diverso da zero.token_type
: tipo di token dell'oggetto di terze parti. Deve essereurn:ietf:params:oauth:token-type:saml2
.saml_response
: la risposta SAML di terze parti.expiration_time
: la scadenza di una risposta SAML di terze parti, in secondi (tempo di epoca Unix).code
: la stringa del codice di errore.message
: il messaggio di errore.
Durante l'esecuzione dell'eseguibile, le librerie client completeranno le seguenti variabili di ambiente: *
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: il campo del pubblico della configurazione delle credenziali. Sempre presente. *GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: il tipo di token oggetto previsto. Sempre presente. *GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: l'indirizzo email dell'account di servizio. Presente solo quando viene usato il furto d'identità dell'account di servizio. *GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: la posizione del file di output dalla configurazione delle credenziali. Presente solo quando specificato nella configurazione delle credenziali.Queste variabili di ambiente possono essere utilizzate dall'eseguibile per evitare l'impostazione come hardcoded di questi valori.
Per abilitare questo metodo di origine delle credenziali con le librerie client, la variabile di ambiente
GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
deve essere impostata su1
.
Segui questi passaggi per consentire alle librerie client o a Terraform di utilizzare la federazione delle identità per i carichi di lavoro per l'autenticazione:
Crea un file di configurazione delle credenziali:
Console
Scarica un file di configurazione delle credenziali nella console Google Cloud:
Nella console Google Cloud, vai alla pagina Pool di Workload Identity.
Trova il pool Workload Identity contenente il provider di identità che vuoi utilizzare e fai clic sul pulsante.
Seleziona Account di servizio collegati.
Trova l'account di servizio che vuoi utilizzare e fai clic su
Scarica.Nella finestra di dialogo Configura la tua applicazione, seleziona il provider che contiene le identità esterne che impersonano l'account di servizio.
Fornisci le seguenti impostazioni aggiuntive:
AWS
Non sono richieste impostazioni aggiuntive.
Azure
Percorso risorsa: URI dell'ID dell'applicazione Azure
OIDC
Percorso token OIDC: percorso del file locale o URL da cui ottenere le credenziali.
Tipo di formato: il formato del file o della risposta URL da cui viene recuperato il token ID.
Subject token field name (Nome del campo del token dell'oggetto): campo della risposta contenente il token (se il tipo di formato è
json
).SAML
Percorso di asserzione SAML: percorso di file locale o URL da cui ottenere le credenziali.
Tipo di formato: il formato del file o della risposta URL da cui viene recuperata l'asserzione.
Nome campo asserzione: campo nella risposta contenente l'asserzione (se il tipo di formato è
json
).Seleziona
Scarica configurazione per scaricare il file di configurazione delle credenziali, quindi fai clic su Ignora.
gcloud
Crea un file di configurazione delle credenziali utilizzando
gcloud iam workload-identity-pools create-cred-config
:AWS
Crea un file di configurazione delle credenziali che consenta alla libreria di ottenere un token di accesso dai metadati dell'istanza EC2:
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 i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazione
Se utilizzi AWS ISSLv2, è necessario aggiungere un flag aggiuntivo
--enable-imdsv2
al comandogcloud iam workload-identity-pools create-cred-config
: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
Azure
Crea un file di configurazione delle credenziali che consenta alla libreria di ottenere un token di accesso da Azure Instance Metadata Service (ISSL):
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 i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.APPLICATION_ID_URI
: URI dell'ID dell'applicazione AzureFILEPATH
: file in cui salvare la configurazione
OIDC
Per utilizzare le credenziali provenienti da file, utilizza il flag
--credential-source-file
: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 \ --output-file=FILEPATH.json \ --credential-source-file=TOKEN_FILEPATH \ --credential-source-type=SOURCE_TYPE \ --credential-source-field-name=FIELD_NAME
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneTOKEN_FILEPATH
: percorso in cui sono archiviati i token ID OIDCSOURCE_TYPE
: formato del file del token ID OIDC, impostato sutext
(valore predefinito) ojson
FIELD_NAME
: campo nel file di testo che contiene il token (seSOURCE_TYPE
èjson
)
Per utilizzare le credenziali provenienti dall'URL, usa il flag
--credential-source-url
: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 \ --output-file=FILEPATH.json \ --credential-source-url="TOKEN_URL" \ --credential-source-headers="KEY_1=VALUE_1,KEY_2=VALUE_2" \ --credential-source-type=SOURCE_TYPE \ --credential-source-field-name=FIELD_NAME
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneTOKEN_URL
: URL per recuperare il token ID OIDCKEY_n
,VALUE_n
: intestazioni personalizzate da includere nella richiesta HTTP aTOKEN_URL
SOURCE_TYPE
: formato del file del token ID OIDC, impostato sutext
(valore predefinito) ojson
FIELD_NAME
: campo nel file di testo che contiene il token (seSOURCE_TYPE
èjson
)
Per utilizzare le credenziali provenienti dall'eseguibile, utilizza il flag
--executable-command
: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 \ --output-file=FILEPATH.json \ --executable-command=EXECUTABLE_COMMAND \ --executable-timeout-millis=EXECUTABLE_TIMEOUT \ --executable-output-file=EXECUTABLE_OUTPUT_FILE
Sostituisci i seguenti valori:
PROJECT_NUMBER
: il numero del progetto contenente il pool Workload IdentityPOOL_ID
: l'ID del pool Workload IdentityPROVIDER_ID
: l'ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: il file in cui salvare la configurazioneEXECUTABLE_COMMAND
: il comando completo, inclusi gli argomenti, per eseguire il recupero del token ID OIDC (ad es. --executable-command="/path/to/command --foo=bar")EXECUTABLE_TIMEOUT
: la durata facoltativa in millisecondi dell'attesa dell'esecuzione dell'eseguibile (il valore predefinito è 30 secondi)EXECUTABLE_OUTPUT_FILE
: questo percorso file rimanda alle credenziali di terze parti generate dall'eseguibile. Questo è utile per memorizzare le credenziali nella cache. specificando questo percorso, prima di eseguire il file eseguibile le librerie di autenticazione ne verificano l'esistenza.
OIDC (AD FS)
Crea un file di configurazione delle credenziali che consenta alla libreria di leggere il token di accesso di AD FS dal file temporaneo:
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 \ --output-file=FILEPATH.json \ --credential-source-file=TOKEN_FILEPATH \ --credential-source-type=text
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneTOKEN_FILEPATH
: percorso al file temporaneo contenente il token AD FS
SAML
Per utilizzare le credenziali provenienti da file, utilizza il flag
--credential-source-file
: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 \ --output-file=FILEPATH.json \ --credential-source-file=TOKEN_FILEPATH \ --credential-source-type=SOURCE_TYPE \ --credential-source-field-name=FIELD_NAME \ --subject-token-type=urn:ietf:params:oauth:token-type:saml2
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneTOKEN_FILEPATH
: percorso in cui vengono archiviate le asserzioni SAMLSOURCE_TYPE
: formato del file di asserzione SAML, impostato sutext
(valore predefinito) ojson
FIELD_NAME
: campo nel file di testo contenente l'asserzione (seSOURCE_TYPE
èjson
)
Per utilizzare le credenziali provenienti dall'URL, usa il flag
--credential-source-url
: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 \ --output-file=FILEPATH.json \ --credential-source-url="TOKEN_URL" \ --credential-source-headers="KEY_1=VALUE_1,KEY_2=VALUE_2" \ --credential-source-type=source_type \ --credential-source-field-name=field_name --subject-token-type=urn:ietf:params:oauth:token-type:saml2
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneTOKEN_URL
: URL da cui recuperare l'asserzione SAML.KEY_n
,VALUE_n
: intestazioni personalizzate da includere nella richiesta HTTP aTOKEN_URL
SOURCE_TYPE
: formato del file di asserzione SAML, impostato sutext
(valore predefinito) ojson
FIELD_NAME
: campo nel file di testo contenente l'asserzione (seSOURCE_TYPE
èjson
)
Per utilizzare le credenziali provenienti dall'eseguibile, utilizza il flag
--executable-command
: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 \ --output-file=FILEPATH.json \ --executable-command=EXECUTABLE_COMMAND \ --executable-timeout-millis=EXECUTABLE_TIMEOUT \ --executable-output-file=EXECUTABLE_OUTPUT_FILE
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizioSERVICE_ACCOUNT_TOKEN_LIFETIME
: durata complessiva del token di accesso all'account di servizio, in secondi; se non viene fornito, il valore predefinito è un'ora. Se è necessaria una durata superiore a un'ora, l'account di servizio deve essere aggiunto come valore consentito in un criterio dell'organizzazione che applica il vincoloconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: file in cui salvare la configurazioneEXECUTABLE_COMMAND
: comando completo da eseguire per recuperare l'asserzione SAMLEXECUTABLE_TIMEOUT
: la durata facoltativa in millisecondi dell'attesa dell'esecuzione dell'eseguibile (il valore predefinito è 30 secondi)EXECUTABLE_OUTPUT_FILE
: il file di output facoltativo in cui è archiviata la risposta eseguibile
Azioni GitHub
Modifica il file YAML Actions di GitHub e aggiungi quanto segue:
Consenti al job di recuperare un token ID GitHub aggiungendo la seguente configurazione:
permissions: id-token: write contents: read
Aggiungi un passaggio per creare un file di configurazione delle credenziali:
- id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v0.3.1' with: create_credentials_file: true workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizio
Esempio:
jobs: build: # Allow the job to fetch a GitHub ID token permissions: id-token: write contents: read runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v0.3.1' with: create_credentials_file: true workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Inizializza una variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
e indirizzala al file di configurazione delle credenziali:Bash
export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
doveFILEPATH
è il percorso relativo del file per la configurazione delle credenziali.PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
doveFILEPATH
è il percorso relativo del file per la configurazione delle credenziali.YAML azioni GitHub
L'azionegoogle-github-actions/auth
inizializza automaticamenteGOOGLE_APPLICATION_CREDENTIALS
.Utilizza una libreria client che supporti la federazione di Workload Identity e può trovare automaticamente le credenziali:
C++
La maggior parte delle librerie client di Google Cloud per C++ supporta la federazione delle identità utilizzando un oggetto
ChannelCredentials
, creato chiamandogrpc::GoogleDefaultCredentials()
. Per inizializzare questa credenziale, devi creare le librerie client con la versione 1.36.0 o successive di gRPC.La libreria client di Cloud Storage per C++ utilizza l'API REST, non gRPC, quindi non supporta la federazione delle identità.
Go
Le librerie client per Go supportano la federazione delle identità se utilizzano la versione 00.0.0-20210218202405-ba52d332ba99 o versioni successive del modulo
golang.org/x/oauth2
.Per controllare quale versione di questo modulo utilizza la tua libreria client, esegui questi 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à 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 tua libreria client, esegui questo comando Maven nella directory della tua applicazione:
mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
Node.js
Le librerie client per Node.js supportano la federazione delle identità 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 della tua applicazione:
npm list google-auth-library
Quando crei un oggetto
GoogleAuth
, puoi specificare un ID progetto oppure consentire aGoogleAuth
di trovarlo automaticamente. Per trovare automaticamente l'ID progetto, l'account di servizio nel file di configurazione deve avere il ruolo Browser (roles/browser
) o un ruolo con autorizzazioni equivalenti sul progetto. Per i dettagli, consultaREADME
per il pacchettogoogle-auth-library
.Python
Le librerie client per Python supportano la federazione delle identità 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 questo comando nel 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 consentire al client di trovare automaticamente l'ID progetto. Per trovare automaticamente l'ID progetto, l'account di servizio nel file di configurazione deve avere il ruolo Browser (roles/browser
) o un ruolo con autorizzazioni equivalenti, sul progetto. Per maggiori dettagli, consulta la guida dell'utente per il pacchettogoogle-auth
.gcloud
Per eseguire l'autenticazione utilizzando la federazione delle identità per i carichi di lavoro, utilizza il comando
gcloud auth login
:gcloud auth login --cred-file=FILEPATH.json
dove
FILEPATH
è il percorso del file di configurazione delle credenziali.Il supporto per la federazione delle identità per i carichi di lavoro in gcloud CLI è disponibile nella versione 363.0.0 e successive di gcloud CLI.
Terraform
Il provider Google Cloud 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" } } }
gsutil
Per eseguire l'autenticazione utilizzando la federazione delle identità per i carichi di lavoro, utilizza uno dei seguenti metodi:
Quando utilizzi gsutil in combinazione con gcloud, accedi come di consueto:
gcloud auth login --cred-file=FILEPATH.json
Quando utilizzi gsutil come applicazione a riga di comando autonoma, modifica il file .boto in modo da includere la seguente sezione:
[Credentials] gs_external_account_file = FILEPATH
In entrambi i casi,
FILEPATH
è il percorso del file di configurazione delle credenziali.Il supporto per la federazione delle identità per i carichi di lavoro in gsutil è disponibile nella versione 379.0.0 e successive dell'interfaccia a riga di comando gcloud.
bq
Per eseguire l'autenticazione utilizzando la federazione delle identità per i carichi di lavoro, utilizza il comando
gcloud auth login
:gcloud auth login --cred-file=FILEPATH.json
dove
FILEPATH
è il percorso del file di configurazione delle credenziali.Il supporto per la federazione delle identità per i carichi di lavoro in bq è disponibile nella versione 390.0.0 e successive dell'interfaccia a riga di comando gcloud.
Autenticazione tramite l'API REST
Se non riesci a utilizzare le librerie client, puoi seguire questi passaggi per consentire a un'identità esterna di ottenere un token di accesso di breve durata utilizzando l'API REST:
Per ottenere le credenziali dal provider di identità esterno:
AWS
Crea un documento JSON contenente le informazioni che in genere includeresti in una richiesta all'endpoint
GetCallerIdentity()
di AWS, includendo una richiesta di firma valida.La federazione di Workload Identity si riferisce a questo documento JSON come token
GetCallerIdentity
. Il token consente alla federazione delle identità del carico di lavoro di verificare l'identità senza rivelare la chiave di accesso secret di 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 aggiunta come parametri di ricerca. Ad esempio:https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15
. Sono supportati anche gli endpoint a livello di regione.method
: il metodo di richiesta HTTP:POST
.headers
: le intestazioni della richiesta 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 di solito impostato sull'ora attuale e viene usato per contribuire a prevenire gli attacchi di riproduzione.x-goog-cloud-target-resource
: nome completo della risorsa del provider di identità senza un prefissohttps:
. Ad esempio://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
x-amz-security-token
: token della sessione. Obbligatorio solo se utilizzi le credenziali di sicurezza temporanee.
L'esempio seguente crea un token
GetCallerIdentity
con codifica URL. Estrai il token con codifica URL per utilizzarlo in seguito. Crea anche un token leggibile per l'utente: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 URLGetCallerIdentity
generato dallo script sopra.Azure
Connettiti a una VM Azure a cui è stata assegnata un'identità gestita e ottieni un token di accesso dal servizio di metadati delle istanze (AIZ) di Azure:
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 dell'ID applicazione dell'applicazione che hai configurato per la federazione delle identità per i carichi di lavoro.Azioni GitHub
Usa
google-github-actions/auth
per ottenere un token ID GitHub e scambiarlo con un token di accesso di breve durata:Consenti al job di recuperare un token ID GitHub aggiungendo la seguente configurazione:
permissions: id-token: write contents: read
Aggiungi un passaggio per generare un token di accesso e renderlo disponibile in una variabile
${{ steps.auth.outputs.access_token }}
:- id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v0.3.1' with: token_format: 'access_token' workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Sostituisci i seguenti valori:
PROJECT_NUMBER
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload IdentitySERVICE_ACCOUNT_EMAIL
: indirizzo email dell'account di servizio
Esempio:
jobs: build: # Allow the job to fetch a GitHub ID token permissions: id-token: write contents: read runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v0.3.1' with: token_format: 'access_token' workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Ignora i seguenti passaggi.
OIDC
Ottieni un token dal provider di identità esterno e inizializza le seguenti variabili:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt" SUBJECT_TOKEN=TOKEN
PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = "TOKEN"
Dove
TOKEN
è il token emesso dal tuo provider di identità esterno.OIDC (AD FS)
Utilizza i comandi PowerShell seguenti per autenticarti in AD FS mediante IWA e ottenere un token di accesso:
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "https://ADFS_DOMAIN/adfs/oauth2/token/" ` -Method POST ` -Body @{ client_id = 'CLIENT_ID' grant_type = 'client_credentials' scope = 'openid' resource = 'RELYING_PARTY_ID' use_windows_client_authentication = 'true' } ` -Credential USER).access_token
Sostituisci i seguenti valori:
ADFS_DOMAIN
: nome di dominio pubblico del server o della fattoria AD FS.CLIENT_ID
: ID client della registrazione dell'applicazione in AD FS.RELYING_PARTY_ID
: applicazione dell'identificatore di parti utilizzato durante la creazione di un'applicazione API web per il pool Workload Identity in AD FS. Questo parametro è necessario solo se utilizzi un identificativo personalizzato del fare affidamento.USER
: utente di Active Directory da utilizzare per IWA. In alternativa, sostituisci-Credential
con-UseDefaultCredentials
per utilizzare le tue credenziali attuali.
SAML
Ottieni un'asserzione dal tuo provider di identità esterno e inizializza una variabile:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:saml2" SUBJECT_TOKEN=ASSERTION
PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:saml2" $SubjectToken = "ASSERTION"
Dove
ASSERTION
è la dichiarazione con codifica base64 emessa dal provider di identità esterno.Utilizza l'API Security Token Service per scambiare le credenziali con un token di accesso di breve durata:
Bash
STS_TOKEN=$(curl -0 -X POST https://sts.googleapis.com/v1/token \ -H 'Content-Type: text/json; charset=utf-8' \ -d @- <<EOF | jq -r .access_token { "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" : "$SUBJECT_TOKEN_TYPE", "subjectToken" : "$SUBJECT_TOKEN" } EOF ) 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
: numero del progetto contenente il pool Workload IdentityPOOL_ID
: ID del pool Workload IdentityPROVIDER_ID
: ID del provider del pool Workload Identity
Utilizza il token del Security Token Service per richiamare il metodo
generateAccessToken
dell'API IAM Service Account Credentials per ottenere un token di accesso:Bash
ACCESS_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 $ACCESS_TOKEN
PowerShell
$AccessToken = (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 $AccessToken
Sostituisci
SERVICE_ACCOUNT_EMAIL
con l'indirizzo email dell'account di servizio.
Verifica delle credenziali esterne
L'API Security Token Service utilizza i seguenti passaggi per convalidare le credenziali emesse da un provider di identità esterno.
AWS
Verifica i seguenti campi nel token
GetCallerIdentity
:url
deve essere un URI HTTPS con un nome host uguale asts.amazonaws.com
(o un sottodominio a livello di regione) e nessuna porta. Sono esattamente presenti i seguenti parametri di ricerca:action
=getcalleridentity
version
(qualsiasi valore)
method
èPOST
- Sono presenti esattamente i seguenti
headers
:x-amz-date
,authorization
,host
,x-goog-cloud-target-resource
,x-amz-security-token
(facoltativo)- Il valore di
x-goog-cloud-target-resource
è il nome della risorsa per il provider del pool di identità del carico di lavoro. - Il valore di
x-amz-date
è al massimo di 15 minuti nel passato e non nel futuro.
- Il valore di
Esegui la richiesta in base a
sts.amazonaws.com
o al sottodominio regionale pertinente e verifica che il risultato sia riuscito e che l'ID account AWS corrisponda all'ID account configurato per il provider del pool di identità del carico di lavoro.
Azure
I token Azure sono token OIDC e sono verificati allo stesso modo dei token OIDC.
Azioni GitHub
I token GitHub sono token OIDC e sono verificati come i token OIDC.
OIDC
I token OIDC vengono verificati in base alla specifica OIDC. Nello specifico, il servizio token di sicurezza esegue i seguenti passaggi:
Verifica del documento e della firma di rilevamento:
- Crea l'URI dell'endpoint di rilevamento aggiungendo
/.well-known/openid-configuration
all'emittente configurato nel provider del pool di identità del carico di lavoro e recupera il documento di rilevamento OIDC. - Verifica che la rivendicazione
issuer
nel documento di rilevamento sia uguale all'emittente configurato nel provider del pool Workload Identity. STS dispone di logica di verifica personalizzata per i seguenti emittenti che non rispettano la specifica OIDC:- Cloud Oracle (
https://*.identity.oraclecloud.com
) - Microsoft (
https://login.microsoftonline.com/common/v2.0
,https://login.microsoftonline.com/consumers/v2.0
,https://login.microsoftonline.com/organizations/v2.0
)
- Cloud Oracle (
- Recupera il set di chiavi web JSON (JWKS) da jwks_uri elencato nel documento di rilevamento.
- Se nell'intestazione JWT è presente una rivendicazione
kid
, verifica la firma JWT utilizzando la chiave di JWKS con l'ID chiave corrispondente oppure rifiuta il token se non viene trovata alcuna chiave corrispondente. Se non è presente alcuna rivendicazionekid
nell'intestazione JWT, prova a verificare la firma JWT utilizzando ogni chiave elencata nel JWKS. La firma viene accettata se è possibile utilizzare una chiave qualsiasi per verificarla.
- Crea l'URI dell'endpoint di rilevamento aggiungendo
Verifica intestazione:
- Una rivendicazione
alg
deve essere presente ed essere uguale aRS256
oES256
.
- Una rivendicazione
Verifica del payload:
- Una rivendicazione
iss
deve essere presente e uguale alla rivendicazioneissuer
nel documento di rilevamento. STS dispone di una logica di verifica personalizzata per i seguenti emittenti che non rispettano la specifica OIDC:- Cloud Oracle (
https://*.identity.oraclecloud.com
) - Microsoft (
https://login.microsoftonline.com/common/v2.0
,https://login.microsoftonline.com/consumers/v2.0
,https://login.microsoftonline.com/organizations/v2.0
)
- Cloud Oracle (
- Una rivendicazione
aud
deve essere presente ed è uguale ahttps://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
. Se sono configurati altri segmenti allowed_audiences, la rivendicazioneaud
deve essere uguale a uno di questi valori. - Una rivendicazione di
exp
deve essere presente e in futuro - Deve essere presente una rivendicazione di
iat
con una data passata. - Il valore di
exp
deve essere superiore al valore diiat
al massimo 24 ore.
- Una rivendicazione
SAML
- Decodifica Base64 e rimuove le credenziali SAML in un oggetto
Response
oAssertion
. Se la credenziale SAML è rimossa in un oggetto
Response
, verifica quanto segue:- Il valore StatusCode della risposta è uguale a
urn:oasis:names:tc:SAML:2.0:status:Success
. - È presente esattamente un
Assertion
. - Almeno uno dei
Response
o ilAssertion
è firmato. Per ogni firma, prova a verificare la firma utilizzando ogni certificato X.509 configurato nel provider del pool di identità del carico di lavoro. La firma viene accettata se uno dei certificati verifica la firma. - Se
Response
è firmato, il valoreIssuer
diResponse
deve essere presente e corrispondere all'ID entità del provider di identità SAML configurato nel provider del pool di identità del carico di lavoro. Verifica inoltre cheFormat
sia omesso o uguale aurn:oasis:names:tc:SAML:2.0:nameid-format:entity
.
- Il valore StatusCode della risposta è uguale a
Se la credenziale SAML è rimossa in un oggetto
Assertion
, verifica quanto segue:Assertion
ha firmato. Per ogni firma, prova a verificare la firma utilizzando ogni certificato X.509 configurato nel provider del pool di identità del carico di lavoro. La firma viene accettata se uno qualsiasi dei certificati verifica correttamente la firma.
Che la credenziale SAML sia stata annullata in un oggetto
Response
oAssertion
, verifica cheAssertion
contenga i seguenti attributi:- È necessario che un
Issuer
sia presente e che corrisponda all'ID entità del provider di identità SAML configurato nel provider del pool di identità del carico di lavoro.Format
diIssuer
è omesso o ha un valore uguale aurn:oasis:names:tc:SAML:2.0:nameid-format:entity
. - L'elemento
IssueInstant
deve essere presente e risalente a meno di 1 ora prima dell'ora corrente. - Deve essere presente un
Subject
e contenere i seguenti attributi:- Deve essere presente un elemento
NameID
. - Deve essere presente un solo
SubjectConfirmation
, conMethod
uguale aurn:oasis:names:tc:SAML:2.0:cm:bearer
.NotOnOrAfter
deve essere presente inSubjectConfirmationData
ed è nel futuro. NotBefore
non è presente.
- Deve essere presente un elemento
- Deve essere presente un
Conditions
e contenere i seguenti attributi:- Se è presente un
NotBefore
, deve essere nel passato. - Se è presente un
NotOnOrAfter
, deve essere nel futuro. - Deve essere presente almeno un elemento
AudienceRestriction
. Tutti gli elementiAudienceRestriction
devono contenere un valoreAudience
uguale al nome della risorsa del provider di pool di identità di carico di lavoro.
- Se è presente un
- Deve essere presente almeno un elemento
AuthnStatement
. - Se sono presenti
SessionNotOnOrAfter
, devono essere tutti nel futuro.
- È necessario che un
Oltre ai passaggi di verifica specifici per il protocollo indicati sopra, l'API Security Service Token verifica anche che la condizione dell'attributo sia soddisfatta.
Passaggi successivi
- Scopri come configurare la federazione di Workload Identity.
- Scopri di più sulla federazione delle identità per i carichi di lavoro.
- Scopri come gestire i pool e i provider di Workload Identity.