Configurare la federazione delle identità per i carichi di lavoro con i certificati X.509

Questa guida descrive come utilizzare la federazione delle identità per i carichi di lavoro con X.509 certificati emessi dall'autorità di certificazione (CA) per l'autenticazione in Google Cloud e accedere alle risorse Google Cloud.

Se i tuoi carichi di lavoro dispongono di un certificato client mTLS, puoi autenticarti su Google Cloud registrando una o più CA con la federazione Workload Identity come ancore di attendibilità. Puoi anche registrare CA intermedie.

Utilizzando la federazione delle identità per i carichi di lavoro, puoi consentire a questi carichi di lavoro di ottenere credenziali Google Cloud di breve durata tramite una connessione TLS mutuale (mTLS). I carichi di lavoro possono utilizzare queste credenziali di breve durata per accedere alle API Google Cloud.

Concetti

I concetti di federazione basata su certificati X.509 includono quanto segue:

  • Un trust anchor è un certificato CA considerato come radice di attendibilità. Qualsiasi catena di certificati client deve essere uno dei trust anchor.

  • Un'autorità di certificazione intermedia è un certificato facoltativo dell'autorità di certificazione che aiuta a creare la catena di certificati client.

  • Un archivio di attendibilità contiene i certificati per trust anchor e il livello intermedio I certificati CA utilizzati per convalidare della catena di certificati client. Un'autorità di certificazione emette certificati attendibili per il client.

    Puoi caricare i seguenti tipi di certificati client nell'archivio di attendibilità:

    • Certificati emessi da CA di terze parti a tua scelta
    • Certificati emessi dalle tue CA private
    • Certificati firmati, come descritto in Creare certificati autofirmati

Prima di iniziare

Per iniziare a configurare la federazione delle identità per i carichi di lavoro, segui questi passaggi:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Ti consigliamo di utilizzare un progetto dedicato per gestire i provider e i pool di identità per i carichi di lavoro.
  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.

    Enable the APIs

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare la federazione delle identità per i carichi di lavoro, chiedi all'amministratore di concederti seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

In alternativa, il ruolo Proprietario IAM (roles/owner) di base include anche le autorizzazioni per configurare la federazione delle identità. Non dovresti concedere ruoli di base in un ambiente di produzione, ma puoi farlo in un ambiente di sviluppo o di test.

Configura la federazione delle identità per i carichi di lavoro

Questa sezione mostra come configurare la federazione delle identità per i carichi di lavoro e il tuo magazzino delle credenziali. Devi eseguire questi passaggi una sola volta per ogni elenco attendibile. Puoi quindi utilizzare lo stesso provider e lo stesso pool di identità di carico di lavoro per più carichi di lavoro e in più progetti Google Cloud.

Creare e configurare un magazzino attendibile

Questa sezione mostra come creare un file di configurazione YAML dell'archivio di attendibilità certificato CA autofirmato.

Genera una chiave e i certificati firmati

Questa sezione utilizza i comandi openssl per creare elementi radice e intermedi certificati.

Se hai già i certificati, puoi saltare questo passaggio e continuare con Formattare i certificati.

Per generare un certificato radice e un certificato intermedio firmato con campi keyUsage e extendedKeyUsage validi, svolgi i seguenti passaggi:

  1. Crea un file example.cnf di esempio con la configurazione minima richiesta per creare certificati di firma validi. Puoi modificare questo file per impostare campi aggiuntivi su questi certificati.

    cat > example.cnf << EOF
    [req]
    distinguished_name = empty_distinguished_name
    [empty_distinguished_name]
    # Kept empty to allow setting via -subj command line arg.
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    EOF
    
  2. Crea il certificato radice:

    openssl req -x509 \
        -new -sha256 -newkey rsa:2048 -nodes \
        -days 3650 -subj '/CN=root' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout root.key -out root.cert
    
  3. Crea la richiesta di firma per il certificato intermedio:

    openssl req \
        -new -sha256 -newkey rsa:2048 -nodes \
        -subj '/CN=int' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout int.key -out int.req
    
  4. Crea il certificato intermedio:

    openssl x509 -req \
        -CAkey root.key -CA root.cert \
        -set_serial 1 \
        -days 3650 \
        -extfile example.cnf \
        -extensions ca_exts \
        -in int.req -out int.cert
    

Formatta i certificati

Per includere certificati nuovi o esistenti in un archivio di attendibilità, formatta il certificati in un'unica riga e li archiviamo in variabili di ambiente, in modo che possano essere letti . I certificati devono essere in formato PEM. Per formattare i certificati e e archiviarli in variabili di ambiente:

  1. Salva il certificato radice come stringa di una riga:

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
    
  2. Salva un certificato intermedio come stringa di una riga:

    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
    

Crea un file YAML del trust store

In questa sezione crei un file YAML dell'archivio attendibilità contenente le ancore di attendibilità e le CA intermedie.

Per creare il file YAML del trust store, esegui il seguente comando. Questo file contiene i contenuti dei certificati delle variabili di ambiente che hai creato in Formattare i certificati. Per aggiungere altri riferimenti di attendibilità, aggiungi altre voci trustAnchors in trustStore. Per aggiungere altri certificati CA intermedi, aggiungi altre voci intermediateCas in trustStore.

cat << EOF > trust_store.yaml
trustStore:
  trustAnchors:
  - pemCertificate: "${ROOT_CERT}"
  intermediateCas:
  - pemCertificate: "${INTERMEDIATE_CERT}"
EOF

Definire una mappatura degli attributi e una condizione

Il certificato X.509 del client può contenere più attributi. Devi selezionare l'attributo da utilizzare come identificatore dell'oggetto mappandogoogle.subject in Google Cloud all'attributo del certificato. Ad esempio, se l'attributo nel certificato è nome comune del soggetto, il mapping sarà il seguente: google.subject=assertion.subject.dn.cn

Se vuoi, puoi mappare altri attributi. Puoi quindi fare riferimento a questi attributi quando concedi l'accesso alle risorse.

Le mappature degli attributi possono utilizzare gli attributi all'interno del client certificato, incluso quanto segue:

  • serialNumberHex: il numero di serie
  • subject.dn.cn: il nome comune del soggetto
  • subject.dn.o: il nome dell'organizzazione soggetta
  • subject.dn.ou: l'unità organizzativa della materia
  • issuer.dn.cn: il nome comune dell'emittente
  • issuer.dn.o: nome dell'organizzazione dell'emittente
  • issuer.dn.ou: l'unità organizzativa dell'emittente
  • san.dns: il primo nome DNS del nome alternativo dell'oggetto
  • san.uri: il primo URI del nome alternativo del soggetto

Devi mappare uno di questi attributi a google.subject per identificarlo in modo univoco l'oggetto. Per proteggerti dalle minacce di spoofing, scegli un attributo con un valore unico che non può essere modificato. Per impostazione predefinita, l'identificatore google.subject è impostato sul nome comune del soggetto del certificato client, assertion.subject.dn.cn.

(Facoltativo) Definisci una condizione dell'attributo. Le condizioni degli attributi sono espressioni CEL che possono controllare gli attributi di asserzione e gli attributi di destinazione. Se la condizione dell'attributo ha valore true per una determinata credenziale, la credenziale viene accettata. In caso contrario, la credenziale viene rifiutata.

Puoi utilizzare una condizione dell'attributo per limitare quali soggetti puoi utilizzare la federazione delle identità per i carichi di lavoro per ottenere Google Cloud di breve durata di token.

Ad esempio, la seguente condizione limita l'accesso ai certificati client contenenti l'ID SPIFFE spiffe://example/path:

assertion.san.uri=="spiffe://example/path"

Crea il pool e il provider di identità per i carichi di lavoro

  1. Per creare un nuovo pool di identità per i carichi di lavoro, esegui il seguente comando:

    gcloud iam workload-identity-pools create POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Sostituisci quanto segue:

    • POOL_ID: l'ID univoco per il pool.
    • DISPLAY_NAME: il nome del pool.
    • DESCRIPTION: una descrizione del pool scelto. Questa descrizione viene visualizzata quando concedi l'accesso alle identità del pool.
  2. Per aggiungere un provider di pool di identità per i carichi di lavoro X.509, esegui il seguente comando:

    gcloud iam workload-identity-pools providers create-x509 PROVIDER_ID \
        --location=global \
        --workload-identity-pool="POOL_ID" \
        --trust-store-config-path="TRUST_STORE_CONFIG" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS" \
        --billing-project="ALLOWLISTED_PROJECT"
    

    Sostituisci quanto segue:

    • PROVIDER_ID: un'identità del carico di lavoro univoca con l'ID provider di pool che preferisci.
    • POOL_ID: ID pool di identità per i carichi di lavoro che hai creato in precedenza.
    • TRUST_STORE_CONFIG: il file YAML del trust store.
    • MAPPINGS: un elenco separato da virgole di mappature degli attributi che hai creato in precedenza. Se non specifichi google.subject, la mappatura predefinita sarà google.subject=assertion.subject.dn.cn
    • CONDITIONS: un'condizione dell'attributo facoltativa creata in precedenza in questa guida. Rimuovi il parametro se non hai una condizione dell'attributo.
    • ALLOWLISTED_PROJECT: l'ID progetto.

Autentica un carico di lavoro

Devi eseguire questi passaggi una volta per ogni carico di lavoro.

Consenti al tuo carico di lavoro esterno di accedere alle risorse Google Cloud

Per fornire al tuo carico di lavoro l'accesso alle risorse Google Cloud, ti consigliamo di concedere all'entità l'accesso diretto alle risorse. In questo caso, l'entità è l'utente federato. Alcuni prodotti Google Cloud includono Limitazioni delle API Google Cloud. Se il carico di lavoro chiama un endpoint API con una limitazione, puoi scegliere la simulazione dell'identità degli account di servizio. In questo caso, l'entità è Account di servizio Google Cloud, che funge da identità. Concedi l'accesso all'account di servizio sulla risorsa.

Accesso diretto alle risorse

Puoi concedere l'accesso a un'identità federata direttamente sulle risorse utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.

Console

Utilizzare la console Google Cloud per concedere i ruoli IAM direttamente su una risorsa, devi andare alla pagina della risorsa concedere il ruolo. L'esempio seguente mostra come procedere alla pagina Cloud Storage e concedi il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer) a un'identità federata direttamente su un nel bucket Cloud Storage.

  1. Nella console Google Cloud, vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket per cui vuoi concedere il ruolo.

  3. Seleziona la scheda Autorizzazioni nella parte superiore della pagina.

  4. Fai clic sulla Pulsante Concedi l'accesso.

    Viene visualizzata la finestra di dialogo Aggiungi entità.

  5. Nel campo Nuove entità, inserisci una o più identità che richiedono l'accesso al 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 progetto
    • POOL_ID: carico di lavoro ID pool
    • SUBJECT: la persona soggetto mappato dal tuo IdP, ad esempio administrator@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 progetto
    • WORKLOAD_POOL_ID: carico di lavoro ID pool
    • GROUP: il gruppo mappato dall'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 progetto
    • WORKLOAD_POOL_ID: carico di lavoro ID pool
    • ATTRIBUTE_NAME: uno dei che sono stati mappati dal tuo IdP
    • ATTRIBUTE_VALUE: il valore dell'attributo
  6. Seleziona un ruolo o più ruoli dal menu a discesa Seleziona un ruolo. I ruoli selezionati vengono visualizzati nel riquadro con una breve descrizione le autorizzazioni che concedono.

  7. Fai clic su Salva.

gcloud

Per utilizzare gcloud CLI per concedere ruoli IAM su un di una risorsa di un progetto, segui questi passaggi:

  1. Ottenere il numero del progetto in cui la risorsa viene definito.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Concedi l'accesso alla risorsa.

    Per utilizzare gcloud CLI per concedere il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer) a identità esterne che soddisfano determinati criteri, esegui il seguente comando.

    Per soggetto

    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 a cui concedere l'accesso
    • PROJECT_NUMBER: il numero di progetto del progetto che contiene il pool di identità per i carichi di lavoro
    • POOL_ID: l'ID del pool di identità per i carichi di lavoro
    • SUBJECT: il valore previsto per l'attributo che hai mappato a google.subject
    • GROUP: il valore previsto per l'attributo che che hai mappato a google.groups
    • ATTRIBUTE_NAME: il nome di un attributo personalizzato nella mappatura degli attributi
    • ATTRIBUTE_VALUE: il valore dell'attributo personalizzato nella mappatura degli attributi

    Puoi concedere ruoli su qualsiasi risorsa Google Cloud che supporta di autorizzazione IAM.

Simulazione dell'identità degli account di servizio

  1. Per creare un account di servizio per il carico di lavoro esterno:

    1. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

      Enable the APIs

    2. Crea un account di servizio che rappresenta il carico di lavoro. Ti consigliamo di utilizzare un account di servizio dedicato per ogni carico di lavoro. L'account di servizio non deve necessariamente trovarsi nello stesso progetto del pool di identità del carico di lavoro, ma devi fare riferimento al progetto che contiene l'account di servizio.

    3. Concedi all'account di servizio l'accesso alle risorse a cui vuoi che le identità esterne accedano.

    4. Concedi il ruolo Utente Workload Identity (roles/iam.workloadIdentityUser) all'account di servizio.

  2. Per concedere l'accesso a un'identità federata utilizzando la simulazione dell'identità dell'account di servizio tramite la console Google Cloud o gcloud CLI:

Console

Per utilizzare la console Google Cloud per concedere i ruoli IAM a un'identità federata con account di servizio, segui questi passaggi:

Account di servizio nello stesso progetto

  1. Per concedere l'accesso utilizzando la simulazione dell'identità degli account di servizio per un nello stesso progetto, segui questi passaggi:

    1. Vai alla pagina Pool di identità per carichi di lavoro.

      Vai ai pool di identità per i carichi di lavoro

    2. Seleziona Concedi accesso.

    3. Nella finestra di dialogo Concedi l'accesso all'account di servizio, seleziona Concedi l'accesso utilizzando la simulazione dell'identità degli account di servizio.

    4. Nell'elenco Account di servizio, seleziona l'account di servizio per le identità esterne da rubare e svolgi i seguenti passaggi:

    5. Per scegliere quali identità nel pool possono rappresentare di account di servizio, esegui una delle seguenti azioni:

      • Per consentire solo a identità specifiche del pool di identità del carico di lavoro di simulare l'identità dell'account di servizio, seleziona Solo le identità corrispondenti al filtro.

      • Nell'elenco Nome attributo, seleziona l'attributo su cui vuoi applicare il filtro.

      • 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 su subject e il valore dell'attributo sul valore dell'affermazione sub nei token emessi dal tuo provider di identità esterno.

    6. Per salvare la configurazione, fai clic su Salva e poi Ignora.

Account di servizio in un altro progetto

  1. Per concedere l'accesso utilizzando la rappresentazione dell'account di servizio per un account di servizio in un progetto diverso:

    1. Vai alla pagina Service Accounts.

      Vai a Service account

    2. Seleziona l'account di servizio di cui vuoi assumere il ruolo.

    3. Fai clic su Gestisci accesso.

    4. Fai clic su Aggiungi entità.

    5. Nel campo Nuova entità, inserisci uno dei seguenti valori: identificatori di entità per le identità nel pool che impersoneranno l'account di servizio.

      Per soggetto

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      

      Sostituisci quanto segue:

      • PROJECT_NUMBER: il numero del progetto
      • POOL_ID: carico di lavoro ID pool
      • SUBJECT: la persona soggetto mappato dal tuo IdP, ad esempio administrator@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 progetto
      • WORKLOAD_POOL_ID: carico di lavoro ID pool
      • GROUP: il gruppo mappato dall'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 progetto
      • WORKLOAD_POOL_ID: carico di lavoro ID pool
      • ATTRIBUTE_NAME: uno dei che sono stati mappati dal tuo IdP
      • ATTRIBUTE_VALUE: il valore dell'attributo

      Vicino alla piscina

      <principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

      Sostituisci quanto segue:

      • PROJECT_NUMBER: il numero del progetto
      • WORKLOAD_POOL_ID: l'ID del pool di carichi di lavoro
    6. In Seleziona un ruolo, seleziona l'utente Workload Identity (roles/iam.workloadIdentityUser).

    7. Per salvare la configurazione, fai clic su Salva.

gcloud

Per utilizzare gcloud CLI al fine di concedere il ruolo Utente Workload Identity (roles/iam.workloadIdentityUser) alle identità esterne che soddisfano determinati criteri, esegui il comando seguente .

Per soggetto

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 dell'account per il servizio
  • PROJECT_NUMBER: il numero di progetto del progetto che contiene il pool di identità per i carichi di lavoro
  • POOL_ID: l'ID pool del pool di identità per i carichi di lavoro
  • SUBJECT: il valore previsto per l'attributo che hai mappato a google.subject
  • GROUP: il valore previsto per l'attributo che che hai mappato a google.groups
  • ATTRIBUTE_NAME: il nome di un attributo personalizzato nella mappatura degli attributi
  • ATTRIBUTE_VALUE: il valore dell'attributo personalizzato nella mappatura degli attributi

Scarica o crea una configurazione delle credenziali

Le librerie client di Cloud e gcloud CLI può ottenere automaticamente e utilizzale per simulare l'identità di un account di servizio. Per consentire alle librerie e agli strumenti di completare questa procedura, devi fornire un file di configurazione delle credenziali. Questo file definisce quanto segue:

  • Da dove ottenere le credenziali esterne
  • Quale pool di identità per i carichi di lavoro e provider utilizzare
  • Quale account di servizio rappresentare

Inoltre, per la federazione dei certificati X.509 è necessario un file di configurazione del certificato. Questo file contiene i percorsi dei file del certificato client X.509 e della chiave privata.

Per creare i file di configurazione delle credenziali e dei certificati, segui questi passaggi:

Accesso diretto alle risorse

Per creare file di configurazione di credenziali e certificati per l'accesso diretto alle risorse utilizzando gcloud iam workload-identity-pools create-cred-config, segui questi passaggi:

Crea file di configurazione delle credenziali e dei certificati che consentono alla libreria di ottenere un token di accesso utilizzando un certificato X.509.

gcloud iam workload-identity-pools create-cred-config
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --credential-cert-path CLIENT_CERT_PATH \
    --credential-cert-private-key-path CLIENT_KEY_PATH \
    --output-file=FILEPATH.json

Sostituisci quanto segue:

  • PROJECT_NUMBER: il numero del progetto che contiene il pool di identità per i carichi di lavoro.
  • POOL_ID: l'ID dell'identità del carico di lavoro piscina.
  • PROVIDER_ID: l'ID del carico di lavoro o provider di pool di identità.
  • CLIENT_CERT_PATH: il percorso del file del certificato del cliente.
  • CLIENT_KEY_PATH: il percorso del file della chiave privata del client.
  • FILEPATH: il file in cui salvare la configurazione.

L'esecuzione di questo comando creerà anche un file di configurazione del certificato e lo immagazzinerà nella posizione predefinita di Google Cloud CLI:

  • Linux e macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Rappresentazione dell'identità dell'account di servizio

Per creare file di configurazione delle credenziali e dei certificati con la simulazione dell'identità degli account di servizio utilizzando gcloud iam workload-identity-pools create-cred-config, segui questi passaggi:

Crea file di configurazione delle credenziali e dei certificati che consentano alla libreria di ottenere un token di accesso utilizzando un certificato X.509.

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 \
    --credential-cert-path CLIENT_CERT_PATH \
    --credential-cert-private-key-path CLIENT_KEY_PATH \
    --output-file=FILEPATH.json

Sostituisci quanto segue:

  • PROJECT_NUMBER: il numero del progetto che contiene il pool di identità per i carichi di lavoro.
  • POOL_ID: l'ID dell'identità del carico di lavoro piscina.
  • PROVIDER_ID: l'ID del provider del pool di identità del carico di lavoro.
  • SERVICE_ACCOUNT_EMAIL: se utilizzi l'usurpazione di identità dell'account di servizio, sostituisci con l'indirizzo email dell'account di servizio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: se utilizzi la simulazione dell'account di servizio, la durata del token di accesso dell'account di servizio in secondi. Se non viene fornito, il valore predefinito è un'ora. Ometti questo flag se non usi l'account di servizio il furto d'identità. Per specificare una durata superiore a un'ora, devi configurare il constraints/iam.allowServiceAccountCredentialLifetimeExtension vincolo dei criteri dell'organizzazione.
  • CLIENT_CERT_PATH: il percorso del file del certificato del cliente.
  • CLIENT_KEY_PATH: il percorso del file della chiave privata del client.
  • FILEPATH: il file in cui salvare la configurazione.

L'esecuzione di questo comando creerà anche un file di configurazione del certificato e lo immagazzinerà nella posizione predefinita di Google Cloud CLI:

  • Linux e macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Utilizzare la configurazione delle credenziali per accedere a Google Cloud

Per consentire agli strumenti e alle librerie client di utilizzare la configurazione delle credenziali, svolgi i seguenti passaggi:

  1. Inizializza una variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS e indirizzala al file di configurazione delle credenziali:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    dove FILEPATH è il percorso relativo al file di configurazione delle credenziali.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    dove FILEPATH è il percorso relativo al file di configurazione delle credenziali.
  2. Assicurati che la libreria client possa trovare il file di configurazione del certificato. Il file di configurazione del certificato deve essere archiviato nel percorso predefinito Percorso Google Cloud CLI:

    • Linux e macOS: ~/.config/gcloud/certificate_config.json

    • Windows: %APPDATA%\gcloud\certificate_config.json

    o indicati dal GOOGLE_API_CERTIFICATE_CONFIG variabile di ambiente.

  3. Utilizza una libreria client o uno strumento che supporti la federazione delle identità per i carichi di lavoro e possa trova automaticamente le credenziali:

Vai

Le librerie client per Go supportano la federazione delle identità di lavoro X.509 se utilizzano la versione 0.8.0 o successive del modulo cloud.google.com/go/auth e la versione 0.189.0 del modulo google.golang.org/api.

Per verificare quale versione di questi moduli è utilizzata dalla libreria client, esegui il seguente nella directory contenente il file go.mod per modulo:

  go list -m cloud.google.com/go/auth
  go list -m cloud.google.com/api

Python

Le librerie client per Python supportano la federazione delle identità per i carichi di lavoro X.509 se usano la versione 2.32.0 o versioni successive del Pacchetto google-auth

Per verificare quale versione di questo pacchetto viene utilizzata dalla libreria client, esegui il comando questo 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 ambienteGOOGLE_CLOUD_PROJECT o consentire al client di trovare automaticamente l'ID progetto. Per trovare automaticamente l'ID progetto, nel file di configurazione deve avere il ruolo Browser (roles/browser), o un ruolo con autorizzazioni equivalenti, nel tuo progetto. Per maggiori dettagli, consulta guida dell'utente per il pacchetto google-auth.

gcloud

Per eseguire l'autenticazione mediante la federazione delle identità per i carichi di lavoro X.509, utilizza Comando gcloud auth login:

  gcloud auth login --cred-file=FILEPATH.json
  

Sostituisci FILEPATH con il percorso del file di configurazione delle credenziali.

Il supporto per la federazione delle identità per i carichi di lavoro X.509 in gcloud CLI è disponibile in Versione 488.0.0 e versioni successive di gcloud CLI.

Ottenere un token di accesso utilizzando una richiesta semplice di accesso a Google Cloud

Per ottenere il token di accesso:

  1. Utilizza curl per eseguire lo scambio di token con mTLS e il certificato client:

    curl --key CLIENT_CERT_KEY \
    --cert CLIENT_CERT \
    --request POST 'https://sts.mtls.googleapis.com/v1/token' \
    --header "Content-Type: application/json" \
    --data-raw '{
        "subject_token_type": "urn:ietf:params:oauth:token-type:mtls",
        "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
        "audience": "WORKLOAD_IDENTITY_POOL_URI",
        "requested_token_type": "urn:ietf:params:oauth:token-type:access_token",
        "scope": "https://www.googleapis.com/auth/cloud-platform",
    }'
    

    Sostituisci quanto segue:

    • CLIENT_CERT_KEY: la chiave privata del certificato client
    • CLIENT_CERT: il certificato client
    • WORKLOAD_IDENTITY_POOL_URI: l'URL del carico di lavoro provider di pool di identità nel formato seguente:

      //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

  2. Per accedere, utilizza il token di accesso di connessione generato nel passaggio precedente Risorse Google Cloud, ad esempio:

    curl -X GET 'https://storage.googleapis.com/my_object' -H "Authorization: Bearer $ACCESS_TOKEN"
    

Quote e limiti

La tabella seguente elenca quote e limiti.

Elemento Quote e limiti Note
Numero di trust anchor Limite: 3 Ogni certificato non deve superare i 32 KB.
Numero di certificati intermedi Limite: 10 Ogni certificato non deve superare i 32 KB.
Numero di vincoli relativi ai nomi consentiti durante la convalida dei certificati radice e intermedi Limite: 10
Certificati intermedi che condividono le stesse informazioni relative a Soggetto e Chiave pubblica del soggetto Limite: 5 Questo limite si applica a ogni elenco attendibile.
Profondità della catena di certificati Limite: 5 La profondità massima per una catena di certificati, inclusa la profondità e certificati client.
Numero di volte in cui è possibile utilizzare i certificati intermedi valutati al momento di creare una catena di attendibilità Limite: 100
Chiavi dei certificati caricati e trasmessi dal client

Limite: le chiavi RSA possono variare da 2048 a 4096 bit

I certificati ECDSA devono utilizzare curve P-256 o P-384

RSA-2048 e P-256 sono consigliati per i normali casi d'uso, usane altri per best practice di sicurezza

Passaggi successivi