Autenticazione cluster Workload Identity

Questo documento descrive come configurare e utilizzare l'autenticazione del cluster Workload Identity per Google Distributed Cloud connesso. Anziché le chiavi dei account di servizio, l'autenticazione cluster di Workload Identity utilizza token di breve durata e la federazione delle identità per i workload per consentire ai tuoi workload di accedere Google Cloud alle risorse in modo sicuro. Le credenziali di breve durata sono token di accesso OAuth 2.0. Per impostazione predefinita, i token di accesso scadono dopo 1 ora.

Con l'autenticazione del cluster Workload Identity, i tuoi carichi di lavoro possono utilizzare la propria identità Kubernetes per accedere direttamente alle risorse Google Cloud o simulare un account di servizio Google.

L'autenticazione del cluster Workload Identity offre due vantaggi principali rispetto all'utilizzo delle chiavi del account di servizio:

  • Maggiore sicurezza: le chiavi dei service account comportano un rischio per la sicurezza se non vengono gestite correttamente. I token OAuth 2.0 e la federazione delle identità per i workload sono considerati alternative consigliate alle chiavi dei account di servizio. Per saperne di più sui token dei account di servizio, consulta Credenziali dei account di servizio di breve durata. Per maggiori informazioni sulla federazione delle identità per i workload, consulta Federazione delle identità per i workload.

  • Manutenzione ridotta: le chiavi del service account richiedono più manutenzione. La rotazione e la protezione regolari di queste chiavi possono creare un onere amministrativo.

Questa pagina è rivolta ad amministratori, architetti e operatori che configurano, monitorano e gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti GKE.

Gestione dei cluster

Questa guida tratta la federazione delle identità per i workload per le tue applicazioni. La federazione delle identità per i workload a livello di cluster viene gestita automaticamente per i cluster connessi a Distributed Cloud.

I cluster connessi di Distributed Cloud vengono creati e gestiti da Google tramite l'API Distributed Cloud Edge Container, utilizzando il comando gcloud edge-cloud container clusters create o nella console Google Cloud .

I cluster connessi di Distributed Cloud vengono registrati automaticamente in un parco risorse nel progetto in cui vengono creati. Non è necessario eseguire alcuna registrazione manuale del parco risorse. Il pool federazione delle identità per i workload è disponibile automaticamente e segue il formato PROJECT_ID.svc.id.goog.

Prima di iniziare

  • Prima di poter configurare la federazione delle identità per i carichi di lavoro, verifica che le seguenti API nel tuo progetto Google Cloud siano abilitate. Per informazioni sull'attivazione delle API, vedi Attivazione dei servizi:

    • iam.googleapis.com
    • sts.googleapis.com
    • iamcredentials.googleapis.com
    • gkehub.googleapis.com
  • Assicurati di aver installato i seguenti strumenti a riga di comando:

    • L'ultima versione di Google Cloud CLI, che include gcloud, lo strumento a riga di comando per interagire con Google Cloud.
    • kubectl

    Se utilizzi Cloud Shell come ambiente shell per interagire con Google Cloud, questi strumenti vengono installati automaticamente.

  • Assicurati di aver inizializzato gcloud CLI per l'utilizzo con il tuo progetto.

  • Assicurati di disporre dei seguenti ruoli IAM nel progetto. Per eseguire la configurazione sono necessari i seguenti ruoli:

    • Proprietario (roles/owner) o
    • Amministratore della sicurezza IAM (roles/iam.securityAdmin) e amministratore account di servizio (roles/iam.serviceAccountAdmin)

Nelle sezioni seguenti, crea service account e concedi i ruoli necessari per l'autenticazione del cluster Workload Identity.

Consigliato: accesso diretto alle risorse della federazione delle identità per i workload

Con l'accesso diretto alle risorse della federazione delle identità per i workload, utilizzi la federazione delle identità per i workload per concedere un ruolo IAM a un ServiceAccount Kubernetes in modo che possa accedere direttamente alle risorse Google Cloud.

Identità Finalità Ruoli
ServiceAccount Kubernetes L'identità Kubernetes utilizzata dal carico di lavoro. Concedi a questa identità i ruoli necessari per accedere alle risorse richieste. Google Cloud Questo esempio concede il ruolo roles/storage.objectViewer e il ruolo roles/logging.admin. roles/storage.objectViewer
roles/logging.admin

Alternativa: simulazione dell'identità del account di servizio IAM

In alternativa, puoi configurare il service account Kubernetes in modo che utilizzi la simulazione dell'identità del account di servizio IAM.

Service account Finalità Ruoli
Service account Google Il account di servizio Google rappresentato dal carico di lavoro in-cluster. Concedi a questo account di servizio i ruoli necessari per accedere alle risorse Google Cloud richieste. Dipende dalle risorse a cui si accede.
ServiceAccount Kubernetes Concedi a questa identità la possibilità di simulare l'identità del account di servizio Google. Questa concessione utilizza il ruolo roles/iam.workloadIdentityUser. roles/iam.workloadIdentityUser

Configurare service account

Le sezioni seguenti contengono le istruzioni per creare l'oggetto Kubernetes ServiceAccount richiesto e per concedergli i ruoli necessari per l'autenticazione del cluster Workload Identity utilizzando l'accesso diretto alle risorse di federazione delle identità per i workload o la simulazione dell'identità dei account di servizio Google.

Crea un ServiceAccount Kubernetes

Nel cluster, utilizza il comando kubectl create per creare un ServiceAccount Kubernetes per i tuoi pod. Puoi anche utilizzare qualsiasi ServiceAccount esistente, incluso ServiceAccount predefinito nello spazio dei nomi.

kubectl create serviceaccount KSA_NAME --namespace NAMESPACE

Sostituisci i seguenti valori:

  • KSA_NAME: un nome per il tuo service account Kubernetes

  • NAMESPACE: lo spazio dei nomi del cluster

Utilizzare la federazione delle identità per i workload per concedere l'accesso diretto alle risorse

Per concedere ruoli Identity and Access Management direttamente all'identità ServiceAccount di Kubernetes, segui questi passaggi.

  1. Utilizza il comando gcloud projects describe per trovare il numero di progetto numerico:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  2. Utilizza il comando gcloud projects add-iam-policy-binding per concedere i ruoli richiesti all'entità identità Kubernetes:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role=roles/storage.objectViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role=roles/logging.admin
    

    Sostituisci i seguenti valori:

    • PROJECT_NUMBER: il numero di progetto numerico
    • NAMESPACE: lo spazio dei nomi del cluster
    • KSA_NAME: il nome del tuo service account Kubernetes

Alternativa: utilizza la simulazione dell'identità del account di servizio IAM per concedere l'accesso

Se preferisci che i tuoi carichi di lavoro rappresentino un account di servizio Google, segui questi passaggi.

  1. Utilizza il comando gcloud iam service-accounts create per creare un account di servizio Google:

    gcloud iam service-accounts create my-app-sa \
        --project=PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  2. Utilizza il comando gcloud projects add-iam-policy-binding per concedere all'account di servizio Google i ruoli richiesti:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/storage.objectViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
  3. Utilizza il comando gcloud iam service-accounts add-iam-policy-binding per concedere a Kubernetes ServiceAccount la possibilità di simulare l'identità dell'account di servizio Google:

    gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
    

    Sostituisci i seguenti valori:

    • NAMESPACE: lo spazio dei nomi del cluster
    • KSA_NAME: il nome del tuo service account Kubernetes
  4. Utilizza il comando kubectl annotate per annotare il service account Kubernetes e collegarlo al account di servizio Google:

    kubectl annotate serviceaccount \
        --namespace NAMESPACE KSA_NAME \
        iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
    

Configura il workload

Aggiorna la specifica del pod per utilizzare il ServiceAccount Kubernetes e monta il volume del token proiettato. Poiché i cluster connessi di Distributed Cloud si trovano al di fuori di Google Cloud, devi anche fornire un file di configurazione delle credenziali e impostare la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a quel file. Le librerie clientGoogle Cloud all'interno del pod le utilizzano per scambiare il token Kubernetes con un token di accesso Google Cloud tramite l'API Security Token Service.

  1. Genera il file credential-configuration.json. Scegli il comando in base al fatto che utilizzi l'accesso diretto alle risorse della federazione delle identità per i workload o la simulazione dell'identità del account di servizio IAM.

    Accesso diretto alle risorse della federazione delle identità per i workload

    Utilizza il comando gcloud iam workload-identity-pools create-cred-config:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \
        --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \
        --credential-source-type=text \
        --output-file=credential-configuration.json
    

    Utilizza la simulazione dell'identità del account di servizio IAM per concedere l'accesso

    Utilizza il comando gcloud iam workload-identity-pools create-cred-config:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \
        --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \
        --credential-source-type=text \
        --output-file=credential-configuration.json
    

    Sostituisci PROJECT_NUMBER con il numero del tuo progetto Google Cloud . Puoi trovare il numero di progetto eseguendo gcloud projects describe PROJECT_ID --format="value(projectNumber)".

  2. Utilizza il comando kubectl create configmap per creare un ConfigMap Kubernetes in cui archiviare il file di configurazione:

    kubectl create configmap CREDENTIAL_CONFIG_MAP \
        --namespace NAMESPACE \
        --from-file=credential-configuration.json
    

    Sostituisci i seguenti valori:

    • CREDENTIAL_CONFIG_MAP: un nome per il tuo ConfigMap, che contiene il file di configurazione delle credenziali

    • NAMESPACE: lo spazio dei nomi del cluster

  3. Aggiorna la specifica del pod con i seguenti contenuti YAML:

    spec:
      serviceAccountName: KSA_NAME
      containers:
      - name: MY_CONTAINER
        image: MY_IMAGE
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json
        volumeMounts:
        - mountPath: /var/run/secrets/tokens/gcp-ksa
          name: gcp-ksa
        - mountPath: /var/run/secrets/tokens/gcp-creds
          name: gcp-creds
          readOnly: true
      volumes:
      - name: gcp-ksa
        projected:
          defaultMode: 0420
          sources:
          - serviceAccountToken:
              path: token
              audience: PROJECT_ID.svc.id.goog
              expirationSeconds: 3600
      - name: gcp-creds
        configMap:
          name: CREDENTIAL_CONFIG_MAP
    

    Sostituisci i seguenti valori:

    • KSA_NAME: un nome per il tuo ServiceAccount Kubernetes

    • MY_CONTAINER: il nome del contenitore

    • MY_IMAGE: il nome dell'immagine

Limitazioni

Le seguenti funzionalità non sono supportate quando utilizzi la federazione delle identità per i carichi di lavoro per Distributed Cloud connesso:

  • Utilizzo di un server proxy per il processo di scambio dei token

Per informazioni sull'utilizzo della federazione delle identità per i workload con i Controlli di servizio VPC, consulta Configurare l'integrazione dei Controlli di servizio VPC.

Passaggi successivi