Configura l'autenticazione gestita di Workload Identity

Questa pagina spiega come configurare le identità dei carichi di lavoro gestiti utilizzando gcloud CLI.

Questa pagina descrive inoltre come configurare il provisioning automatico e la gestione del ciclo di vita delle identità dei carichi di lavoro gestiti per Compute Engine. Puoi configurare i pool di autorità di certificazione (CA) per emettere certificati utilizzando Certificate Authority Service. CA Service è un servizio Google Cloud scalabile e a disponibilità elevata che semplifica e automatizza il deployment, la gestione e la sicurezza dei servizi CA. Puoi creare istanze di macchine virtuali (VM) di cui viene eseguito il provisioning con credenziali X.509 dal pool di CA configurato. Queste credenziali possono essere quindi utilizzate per stabilire connessioni mTLS tra carichi di lavoro.

Prima di iniziare

  1. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. Richiedi l'accesso all'anteprima delle identità dei carichi di lavoro gestite.

  3. Scopri di più sulle identità dei carichi di lavoro gestiti.

  4. Scopri di più sull'emissione di certificati utilizzando Certificate Authority Service.

  5. Scopri come autenticare i carichi di lavoro Compute Engine utilizzando identità gestite dei carichi di lavoro.

  6. Abilita le API IAM and Certificate Authority Service.

    gcloud services enable iam.googleapis.com privateca.googleapis.com

  7. Configura Google Cloud CLI per utilizzare il progetto aggiunto alla lista consentita per fatturazione e quota.

    gcloud config set billing/quota_project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del progetto che è stato aggiunto alla lista consentita per l'anteprima di Workload Identity gestito.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare identità dei carichi di lavoro gestiti ed eseguire il provisioning di certificati di identità per i carichi di lavoro gestiti, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

In alternativa, il ruolo di base Proprietario IAM (roles/owner) include anche le autorizzazioni per configurare le identità dei carichi di lavoro gestiti. Non devi concedere ruoli di base in un ambiente di produzione, ma puoi concederli in un ambiente di sviluppo o test.

Panoramica

Per utilizzare le identità dei carichi di lavoro gestiti per le tue applicazioni, devi eseguire le attività seguenti:

  1. Amministratore della sicurezza:

  2. Amministratore Compute:

    Abilita le identità dei carichi di lavoro gestiti per i carichi di lavoro in esecuzione in Compute Engine:

Creazione di identità dei carichi di lavoro gestiti

Le identità per i carichi di lavoro gestiti consentono a Google Cloud di eseguire automaticamente il provisioning delle credenziali per le identità dei pool di identità per i carichi di lavoro nei carichi di lavoro. Le identità dei carichi di lavoro sono definite all'interno di un pool di identità per i carichi di lavoro e organizzate in confini amministrativi chiamati spazi dei nomi.

Crea un pool di identità per i carichi di lavoro

Per creare identità dei carichi di lavoro gestiti, devi creare un pool in modalità TRUST_DOMAIN. Per creare un pool di identità per i carichi di lavoro, utilizza il comando workload-identity-pools create.

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

Sostituisci quanto segue:

  • POOL_ID: l'ID univoco del pool. L'ID deve essere compreso tra 4 e 32 caratteri, può contenere solo caratteri alfanumerici minuscoli e trattini. Inoltre, può iniziare e terminare con un carattere alfanumerico. Dopo aver creato un pool di identità per i carichi di lavoro, non puoi modificarne l'ID.

Per verificare che il pool di identità per i carichi di lavoro sia stato creato in modalità TRUST_DOMAIN, utilizza il comando workload-identity-pools describe.

gcloud iam workload-identity-pools describe POOL_ID \
    --location="global"

L'output comando dovrebbe essere simile al seguente:

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID
state: ACTIVE

Se mode: TRUST_DOMAIN non è presente nell'output comando, verifica che il progetto sia stato aggiunto alla lista consentita per l'anteprima di Workload Identity gestito e di aver configurato correttamente gcloud CLI per utilizzare il progetto corretto per la fatturazione e la quota. Potrebbe essere necessario eseguire l'aggiornamento a una versione più recente di gcloud CLI.

Crea uno spazio dei nomi

Il comando workload-identity-pools namespaces create consente di creare uno spazio dei nomi in un pool di identità per i carichi di lavoro.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Sostituisci quanto segue:

  • NAMESPACE_ID: l'ID univoco dello spazio dei nomi. L'ID deve essere compreso tra 2 e 63 caratteri, deve contenere solo caratteri alfanumerici minuscoli e trattini e deve iniziare e terminare con un carattere alfanumerico. Dopo aver creato uno spazio dei nomi, non puoi modificarne l'ID.
  • POOL_ID: l'ID pool di identità per i carichi di lavoro creato in precedenza.

Crea un'identità del carico di lavoro gestita

Il comando workload-identity-pools managed-identities create consente di creare un'identità per i carichi di lavoro gestita in un pool di identità per i carichi di lavoro.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Sostituisci quanto segue:

  • MANAGED_IDENTITY_ID: l'ID univoco per l'identità gestita. L'ID deve essere compreso tra 2 e 63 caratteri, deve contenere solo caratteri alfanumerici minuscoli e trattini e deve iniziare e terminare con un carattere alfanumerico. Dopo aver creato un'identità del carico di lavoro gestita, non puoi modificarne l'ID.
  • NAMESPACE_ID: l'ID spazio dei nomi che hai creato in precedenza.
  • POOL_ID: l'ID pool di identità per i carichi di lavoro creato in precedenza.

L'identità SPIFFE per l'identità del carico di lavoro gestito è uguale a:

spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Definisci il criterio di attestazione dei carichi di lavoro

Un criterio di attestazione dei carichi di lavoro assicura che solo i carichi di lavoro attendibili possano utilizzare l'identità gestita. Prima che possano ricevere le credenziali, devi consentire al carico di lavoro di utilizzare l'identità del carico di lavoro gestita.

Per farlo, devi creare un account di servizio gestito dall'utente e collegarlo al tuo carico di lavoro. Il carico di lavoro utilizzerà l'identità del carico di lavoro gestito come identità quando si autentica in altri carichi di lavoro utilizzando TLS mutuale (mTLS) e il carico di lavoro utilizzerà l'account di servizio come identità quando accede ad altri servizi e risorse Google Cloud.

Il comando service-accounts create consente di creare un'identità per i carichi di lavoro gestita in un pool di identità per i carichi di lavoro.

Per creare l'account di servizio collegato, esegui questo comando:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

Sostituisci quanto segue:

  • SERVICE_ACCOUNT_NAME: nome dell'account di servizio

Per creare un criterio di attestazione dei carichi di lavoro che consenta ai carichi di lavoro a cui è associato l'account di servizio di ricevere le credenziali per l'identità dei carichi di lavoro gestiti, utilizza il comando workload-identity-pools managed-identities workload-sources create:

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors "compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity MANAGED_IDENTITY_ID \
    --namespace NAMESPACE_ID \
    --workload-identity-pool POOL_ID \
    --location "global"

Sostituisci quanto segue:

  • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio.
  • WORKLOAD_PROJECT_NUMBER: il numero del progetto che contiene il carico di lavoro. Il criterio consente ai carichi di lavoro all'interno di questo progetto di utilizzare l'identità dei carichi di lavoro gestita.
  • PROJECT_ID: l'ID del progetto contenente l'account di servizio.
  • MANAGED_IDENTITY_ID: l'ID univoco per l'identità gestita.
  • NAMESPACE_ID: l'ID spazio dei nomi che hai creato in precedenza.
  • POOL_ID: l'ID pool di identità per i carichi di lavoro creato in precedenza.

Per un determinato pool di identità per i carichi di lavoro, puoi definire un massimo di 50 selettori singoli di attributi per il progetto dei carichi di lavoro.

Per scoprire come aggiornare o eliminare un criterio di attestazione, esegui questo comando:

gcloud iam workload-identity-pools managed-identities workload-sources --help

Configura Certificate Authority Service per emettere certificati per le identità dei carichi di lavoro gestiti

Crea la configurazione consigliata per le autorità di certificazione (CA) principali e subordinate utilizzando i pool di Certificate Authority Service. Il pool di CA subordinato rilascia i certificati di identità per i carichi di lavoro X.509 alle VM.

Dopo aver configurato i pool di CA, autorizzi le identità dei carichi di lavoro gestiti a richiedere e ricevere i certificati firmati dai pool di CA.

Configura il pool di CA radice

Utilizza l'interfaccia di Google Cloud CLI per Certificate Authority Service per configurare un pool di CA radice.

gcloud

Crea il pool di CA radice.

  1. Crea nel livello Enterprise il pool di CA radice destinato all'emissione di certificati a lunga durata e a basso volume utilizzando il comando gcloud privateca pools create.

    gcloud privateca pools create ROOT_CA_POOL_ID \
       --location=REGION \
       --tier=enterprise
    

    Sostituisci quanto segue:

    • ROOT_CA_POOL_ID: un ID univoco per il pool di CA principale. L'ID può avere una lunghezza massima di 64 caratteri e deve contenere solo caratteri alfanumerici minuscoli e maiuscoli, trattini bassi o trattini. L'ID pool deve essere univoco all'interno della regione.
    • REGION: la regione in cui si trova il pool di CA radice.

    Per ulteriori informazioni, consulta la pagina relativa alla creazione di pool di CA.

  2. Crea una CA radice nel pool di CA radice utilizzando il comando gcloud privateca roots create. È possibile che ti venga richiesto di abilitare la CA radice se questa è l'unica CA nel pool di CA radice.

    Ad esempio, potresti utilizzare un comando simile al seguente per creare una CA radice.

    gcloud privateca roots create ROOT_CA_ID \
       --pool=ROOT_CA_POOL_ID \
       --subject "CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

    Sostituisci quanto segue:

    • ROOT_CA_ID: nome univoco della CA principale. Il nome della CA può contenere fino a 64 caratteri e deve contenere solo caratteri alfanumerici minuscoli e maiuscoli, trattini bassi o trattini. Il nome della CA deve essere univoco all'interno della regione.
    • ROOT_CA_POOL_ID: l'ID del pool di CA principale.
    • ROOT_CA_CN: il nome comune della CA radice.
    • ROOT_CA_ORGANIZATION: l'organizzazione della CA radice.
    • REGION: la regione in cui si trova il pool di CA radice.

    Per maggiori informazioni, consulta Creare un'autorità di certificazione principale. Per maggiori informazioni sui campi subject per la CA, consulta Oggetto.

  3. (Facoltativo) Ripeti i passaggi precedenti per creare una CA radice aggiuntiva nel pool di CA radice. Questo può essere utile per la rotazione di CA radice.

Configura le CA subordinate

Utilizza l'interfaccia di Google Cloud CLI per Certificate Authority Service per creare un pool di CA subordinato e una CA subordinata.

Se esistono più scenari di emissione di certificati, puoi creare una CA subordinata per ciascuno di questi scenari. Inoltre, l'aggiunta di più CA subordinate in un pool di CA consente di ottenere un migliore bilanciamento del carico delle richieste di certificati.

gcloud

Utilizza il comando gcloud privateca pools create per creare un pool di CA subordinato.

  1. Crea il pool di CA subordinato nel livello DevOps, pensato per l'emissione di certificati a breve durata e volumi elevati .

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

    Sostituisci quanto segue:

    • SUBORDINATE_CA_POOL_ID: un ID univoco per il pool di CA subordinato. L'ID può contenere fino a 64 caratteri e deve contenere solo caratteri alfanumerici minuscoli e maiuscoli, trattini bassi o trattini. L'ID pool deve essere univoco all'interno della regione.
    • REGION: la regione in cui creare il pool di CA subordinato.

    Per ulteriori informazioni, consulta la pagina relativa alla creazione di pool di CA.

  2. Crea una CA subordinata nel pool di CA subordinate utilizzando il comando gcloud privateca subordinates create. Non modificare la modalità di emissione basata su configurazione predefinita.

    Ad esempio, potresti utilizzare un comando simile al seguente per creare una CA subordinata.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

    Sostituisci quanto segue:

    • SUBORDINATE_CA_ID: nome univoco della CA subordinata. Il nome può avere una lunghezza massima di 64 caratteri e deve contenere solo caratteri alfanumerici minuscoli e maiuscoli, trattini bassi o trattini. Il nome del pool deve essere univoco all'interno della regione.
    • SUBORDINATE_CA_POOL_ID: il nome del pool di CA subordinato.
    • REGION: la regione in cui si trova il pool di CA subordinato.
    • ROOT_CA_POOL_ID: l'ID del pool di CA principale.
    • REGION: la regione del pool di CA principale.
    • SUBORDINATE_CA_CN: nome comune della CA subordinata.
    • SUBORDINATE_CA_ORGANIZATION: nome dell'organizzazione emittente CA subordinata.

    Per ulteriori informazioni, consulta la pagina relativa alla creazione di pool di CA. Per maggiori informazioni sui campi subject per la CA, consulta Oggetto.

Autorizza le identità dei carichi di lavoro gestiti per richiedere certificati dal pool di CA

Le identità dei carichi di lavoro gestiti richiedono le autorizzazioni per richiedere certificati dal servizio CA e ottenere i certificati pubblici.

gcloud

  1. Concedi il ruolo IAM Richiedente certificati carichi di lavoro dei servizi CA (roles/privateca.workloadCertificateRequester) su ogni pool di CA subordinato all'identità del carico di lavoro gestito. Il seguente comando gcloud privateca pools add-iam-policy-binding autorizza l'identità del carico di lavoro gestito a richiedere certificati dalle catene di certificati di CA Service.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Sostituisci quanto segue:

    • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato.
    • REGION: la regione del pool di CA subordinato.
    • PROJECT_NUMBER: il numero 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.
  2. Concedi il ruolo IAM Lettore pool di servizi CA (roles/privateca.poolReader) per i pool di CA subordinati all'identità del carico di lavoro gestito. Questo autorizza l'identità del carico di lavoro gestito a ottenere i certificati X.509 firmati dalle catene di certificati dell'autorità di certificazione.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Sostituisci quanto segue:

    • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato.
    • REGION: la regione del pool di CA subordinato.
    • PROJECT_NUMBER: il numero 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.

Definisci la configurazione di attendibilità e emissione dei certificati

Puoi utilizzare queste informazioni per creare un file JSON da caricare come dati del partner durante la creazione di una VM.

Definisci la configurazione di emissione del certificato

Per abilitare le identità dei carichi di lavoro gestiti per Compute Engine, è necessaria la seguente configurazione di emissione dei certificati.

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": "DURATION",
  "rotation_window_percentage": "ROTATION_WINDOW_PERCENTAGE"
}

Sostituisci quanto segue:

  • PROJECT_NAME: il nome del progetto che contiene il pool di CA
  • REGION: la regione in cui si trova il pool di CA subordinato
  • SUBORDINATE_CA_POOL_ID: il nome del pool di CA subordinato
  • ALGORITHM: l'algoritmo di crittografia utilizzato per generare la chiave privata. I valori validi sono rsa-2048 (predefinito), rsa-3072, rsa-4096, ecdsa-p256 e ecdsa-p384.
  • DURATION: facoltativo: la durata della validità del certificato foglia, in secondi. Il valore deve essere compreso tra 3600 e 315360000. Se non specificato, viene utilizzato il valore predefinito 86400. La validità effettiva del certificato emesso dipende anche dalla CA emittente, in quanto potrebbe limitare la durata del certificato emesso.
  • ROTATION_WINDOW_PERCENTAGE: facoltativo: la percentuale della durata del certificato in cui viene attivato un rinnovo. Il valore deve essere compreso tra 1 e 100. Il valore predefinito è 66%. Devi impostare la percentuale della finestra di rotazione in relazione alla durata del certificato in modo che il rinnovo avvenga almeno sette giorni dopo l'emissione del certificato e almeno sette giorni prima della scadenza.

Definisci la configurazione di attendibilità

La configurazione di attendibilità contiene il set di trust anchor per la convalida dei certificati peer. È incluso quanto segue:

  • URI delle risorse del pool di CA attendibili: un insieme di URI delle risorse del pool di CA in grado di emettere certificati nello stesso dominio di attendibilità a cui appartengono le VM.
  • Certificati CA in formato PEM: un insieme di certificati CA in formato PEM in grado di emettere certificati nello stesso dominio di attendibilità a cui appartengono le VM.
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/PROJECT_NAME/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM-encoded certificate"
      }
    ]
  }
}

Sostituisci quanto segue:

  • POOL_ID: l'ID del pool di identità per i carichi di lavoro
  • PROJECT_NUMBER: il numero del progetto che contiene il pool di identità per i carichi di lavoro
  • PROJECT_NAME: il nome del progetto che contiene il pool di CA
  • REGION: la regione in cui si trova il pool di CA subordinato
  • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato
  • PEM-encoded certificate: facoltativo: un insieme di certificati CA in formato PEM attendibili per emettere certificati nello stesso dominio di attendibilità a cui appartengono le VM

Crea un file di configurazione per caricare i metadati del partner per una VM

Crea un file JSON contenente quanto segue:

Salva questo file come CONFIGS.json. Questo file viene utilizzato per creare VM per eseguire applicazioni che utilizzano identità di carichi di lavoro gestiti.

Il file CONFIGS.json dovrebbe essere simile al seguente:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Passaggi successivi

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente