Autenticazione cluster Workload Identity

L'autenticazione del cluster Workload Identity consente di creare e proteggere i cluster per il software Distributed Cloud solo per bare metal utilizzando token di breve durata e la federazione delle identità per i workload. Questo approccio sostituisce le chiavi dei account di servizio persistenti con token di accesso OAuth 2.0, riducendo l'overhead di manutenzione ed eliminando i rischi per la sicurezza delle credenziali di lunga durata.

Puoi attivare questa funzionalità solo quando crei nuovi cluster. Questa funzionalità è disponibile nella versione 1.33 e successive e in anteprima nelle versioni 1.30, 1.31 e 1.32. Non puoi aggiornare i cluster esistenti per utilizzarlo. Per ulteriori restrizioni, consulta Limitazioni.

Come funziona l'autenticazione dei cluster Workload Identity

Le credenziali di breve durata per il account di servizio sono sotto forma di token di accesso OAuth 2.0. Per impostazione predefinita, i token di accesso scadono dopo un'ora. Analogamente, anche i token di pull delle immagini scadono dopo un'ora per impostazione predefinita.

Al contrario, la modalità con chiave, il metodo standard per la creazione e la protezione dei cluster, utilizza le chiavi dei account di servizio scaricate. Quando crei un cluster autogestito (amministratore, ibrido o autonomo), specifichi il percorso delle chiavi scaricate. Le chiavi vengono quindi archiviate come secret nel cluster e in tutti i cluster utente gestiti. Per impostazione predefinita, le chiavi dei account di servizio non scadono e comportano un rischio per la sicurezza se non vengono gestite correttamente. Per informazioni sull'impostazione di una data di scadenza per le chiavi dei account di servizio, consulta Date di scadenza per le chiavi gestite dall'utente.

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

  • Sicurezza migliorata: le chiavi dei service account rappresentano 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 best practice 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 dei service account richiedono una maggiore manutenzione. La rotazione e la protezione regolare di queste chiavi possono rappresentare un onere amministrativo significativo.

Prima di iniziare

Nelle sezioni seguenti, creerai i service account e concederai i ruoli necessari per l'autenticazione del cluster Workload Identity. Le istruzioni di configurazione riportate in questo documento non sostituiscono quelle contenute in Configura le risorse Google Cloud, ma sono necessarie in aggiunta ai prerequisiti di installazione standard di Distributed Cloud solo software. I service account richiesti per l'autenticazione del cluster di Workload Identity sono simili ai service account descritti in Configura le risorseGoogle Cloud , ma hanno un nome univoco, in modo da non interferire con i cluster che utilizzano le chiavi dei account di servizio predefiniti.

I service account richiesti per l'autenticazione del cluster Workload Identity sono diversi per le offerte in Anteprima e GA, come descritto nella tabella seguente:

1.33 e versioni successive

Service account Finalità Ruoli
admin-sa Utilizza questo account di servizio per generare i token. Ogni token ha i privilegi associati ai ruoli del account di servizio. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/iam.workloadIdentityPoolAdmin*
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr Google Distributed Cloud utilizza questo account di servizio per scaricare immagini container da Artifact Registry. Nessuno

* Il ruolo IAM roles/iam.workloadIdentityPoolAdmin è richiesto solo per la versione 1.34 e successive.

1.30-1.32

Service account Finalità Ruoli
admin-sa Utilizza questo account di servizio per generare i token. Ogni token ha i privilegi associati ai ruoli del account di servizio. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller Connect Agent utilizza questo account di servizio per mantenere una connessione tra il cluster e Google Cloud e per registrare i cluster in un parco risorse. Questo account di servizio aggiorna anche i token di aggiornamento per il account di servizio baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops L'agente Stackdriver utilizza questo account di servizio per esportare log e metriche dai cluster a Cloud Logging e Cloud Monitoring. roles/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr Google Distributed Cloud utilizza questo account di servizio per scaricare immagini container da Artifact Registry. Nessuno

Configura i service account

Le sezioni seguenti contengono le istruzioni per creare i service account richiesti e concedere loro i ruoli necessari per l'autenticazione del cluster Workload Identity. Per un elenco dei service account e dei ruoli richiesti, consulta la tabella nella sezione precedente.

Creazione di account di servizio

Per creare i service account per l'autenticazione del cluster Workload Identity, segui questi passaggi:

  1. Sulla workstation di amministrazione, accedi a Google Cloud CLI:

    gcloud auth login
    
  2. Crea i service account richiesti per l'autenticazione del cluster Workload Identity:

    Il nome account di servizio admin-sa è arbitrario. Puoi modificare il nome se causa un conflitto nel progetto. Gli altri service account per l'autenticazione del cluster Workload Identity hanno nomi predeterminati che possono essere personalizzati, se vuoi.

    1.33 e versioni successive

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del tuo progettoGoogle Cloud .

    1.30-1.32

    ```sh gcloud iam service-accounts create admin-sa
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-controller
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-cloud-ops
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-gcr
    --project=PROJECT_ID ```

    Sostituisci PROJECT_ID con l'ID del tuo progettoGoogle Cloud .

Aggiungi associazioni di policy di Identity and Access Management per i service account

Segui questi passaggi per applicare le associazioni delle policy di Identity and Access Management richieste ai nuovi service account:

1.33 e versioni successive

  1. Aggiungi le associazioni delle policy IAM per i ruoli richiesti per il account di servizio admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. Aggiungi le associazioni delle policy IAM per i ruoli richiesti per il account di servizio admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/monitoring.admin
    
  2. Aggiungi le associazioni delle policy IAM per i ruoli richiesti per il account di servizio baremetal-controller:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Aggiungi le associazioni delle policy IAM per i ruoli richiesti per il account di servizio baremetal-cloud-ops:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. Concedi al account di servizio baremetal-controller la possibilità di generare token di accesso per conto del account di servizio baremetal-gcr:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID. \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    

Configura l'autenticazione

I passaggi seguenti configurano il flusso di autenticazione che utilizza un token di breve durata per l'autenticazione delle operazioni del cluster:

  1. Sulla workstation di amministrazione, accedi a Google Cloud CLI:

    gcloud auth login
    
  2. Sulla tua workstation di amministrazione, crea e scarica una chiave per il account di servizio admin-sa:

    Questa chiave è necessaria per autorizzare l'accesso per il service account admin-sa.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Sostituisci TMP_KEY_FILE_PATH con il percorso, incluso il nome file, del file della chiave scaricato.

  3. Nella workstation di amministrazione, crea una variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS con il valore della chiave del account di servizio scaricata:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. Nella workstation di amministrazione, crea una variabile di ambiente GCP_ACCESS_TOKEN con il valore di un token di accesso creato dal account di servizio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Per impostazione predefinita, il token di accesso ha una durata di 1 ora.

  5. Verifica che il token sia generato dal account di servizio admin-sa con la scadenza corretta:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    La risposta dovrebbe includere righe simili alle seguenti:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

    Il valore di scadenza è espresso in secondi e deve essere inferiore a 3600, indicando che il token scade in meno di un'ora.

Configura la federazione delle identità per i workload per i tuoi cluster

Per fornire l'accesso Google Cloud con Workload Identity Federation for GKE, devi creare una policy IAM di autorizzazione che conceda l'accesso a una risorsaGoogle Cloud specifica a un'entità corrispondente all'identità della tua applicazione. In questo caso, la federazione delle identità per i workload concede l'accesso a operatori specifici nel cluster. Per saperne di più sulla federazione delle identità dei workload per GKE, consulta Federazione delle identità dei workload nella documentazione di IAM.

1.33 e versioni successive

Per le versioni del cluster in cui l'autenticazione del cluster Workload Identity è in GA, utilizza il comando bmctl configure projects per configurare la federazione delle identità per i workload per i tuoi cluster. Questo comando è incorporato nei passaggi per la creazione di un cluster di amministrazione e la creazione di un cluster utente.

Per evitare l'instabilità di containerd quando utilizzi un mirror del registry per eseguire il pull delle immagini container per il tuo cluster, devi aggiungere l'annotazione del cluster baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false". Questa annotazione è disponibile per le versioni 1.33.200-gke.70 e successive:

---
...
registryMirrors:
  - endpoint: https://198.51.20.1:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
    hosts:
      - somehost.io
      - otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
  annotations:
    baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false"
spec:
  type: admin
  anthosBareMetalVersion: 1.33.200-gke.70
  ...

1.30-1.32

Per le versioni del cluster in cui l'autenticazione del cluster Workload Identity è in Anteprima, devi configurare manualmente la federazione delle identità per i workload per i tuoi cluster, come descritto nelle sezioni seguenti.

Aggiungi associazioni delle policy IAM per l'operatore del cluster

I seguenti comandi concedono al service account Kubernetes anthos-cluster-operator la possibilità di impersonare il account di servizio baremetal-controller e interagire con le risorse Google Cloud per conto del cluster:

  1. Per ogni cluster configurato per l'autenticazione del cluster Workload Identity (o che prevede di utilizzare l'autenticazione del cluster Workload Identity), incluso il cluster di bootstrap, concedi a anthos-cluster-operator nel cluster la possibilità di impersonare il service account baremetal-controller:

    Nel comando seguente, principalSet è costituito dal pool di identità del workload e da un account di servizio Kubernetes, anthos-cluster-operator, nello spazio dei nomi kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • PROJECT_NUM: l'identificatore univoco del progetto generato automaticamente.

    • REGION: la località di appartenenza al parco risorse per il tuo cluster, che per impostazione predefinita è global. Per saperne di più, consulta Località di appartenenza al parco risorse.

    • CLUSTER_NAME: il nome del cluster. Per impostazione predefinita, il nome del cluster di bootstrap è bmctl-MACHINE_NAME.

  2. Verifica le associazioni delle policy per il account di servizio baremetal-controller:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.
    

    La risposta dovrebbe essere simile alla seguente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

Aggiungi associazioni delle policy IAM per gli operatori di Google Cloud Observability

I seguenti comandi concedono ai seguenti service account Kubernetes di Google Cloud Observability la possibilità di impersonare il account di servizio baremetal-cloud-ops e interagire con le risorse Google Cloud per conto del cluster:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. Per ogni cluster configurato per l'autenticazione del cluster Workload Identity (o che prevede di utilizzare l'autenticazione del cluster Workload Identity), incluso il cluster di bootstrap, concedi agli operatori di Google Cloud Observability nel cluster la possibilità di impersonare il service account baremetal-cloud-ops:

    In ciascuno dei seguenti comandi, principalSet è costituito dal pool di identità del workload e da un account di servizio Kubernetes, ad esempio cloud-audit-logging, nello spazio dei nomi kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. Verifica le associazioni delle policy per il account di servizio baremetal-cloud-ops:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.
    

    La risposta dovrebbe essere simile alla seguente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

Crea un cluster di amministrazione

I passaggi per la creazione di un cluster di amministrazione sono leggermente diversi per le offerte in anteprima (versioni 1.30-1.32) e GA (versioni 1.33 e successive). I passaggi per la versione GA utilizzano il comando bmctl configure projects per configurare la federazione delle identità per i workload per i tuoi cluster.

1.33 e versioni successive

La differenza più evidente nella configurazione dei cluster che utilizzano l'autenticazione del cluster Workload Identity è che non specifichi i percorsi delle chiavi dei account di servizio scaricati.

  1. Quando compili le impostazioni del cluster nel file di configurazione, lascia vuoti i percorsi delle chiavi dei account di servizio nella sezione delle credenziali, come mostrato nell'esempio seguente:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Aggiungi l'annotazione baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" al file di configurazione del cluster:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. Nella workstation di amministrazione, aggiorna la variabile di ambiente GCP_ACCESS_TOKEN con un token di accesso appena recuperato:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora). Quando utilizzi l'autenticazione del cluster Workload Identity, bmctl controlla la data di scadenza del token. Se la scadenza del token è entro 1800 secondi (30 minuti), bmctl segnala un errore ed esce.

  4. Configura la federazione delle identità per i workload per il cluster che stai creando:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. Esegui il comando bmctl create cluster per creare il cluster di amministrazione.

1.30-1.32

La differenza più evidente nella configurazione dei cluster che utilizzano l'autenticazione del cluster Workload Identity è che non specifichi i percorsi delle chiavi dei account di servizio scaricati.

  1. Quando compili le impostazioni del cluster nel file di configurazione, lascia vuoti i percorsi delle chiavi dei account di servizio nella sezione delle credenziali, come mostrato nell'esempio seguente:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Sulla tua workstation di amministrazione, crea e scarica una chiave per il account di servizio admin-sa:

    Questa chiave è necessaria per autorizzare l'accesso per il account di servizio admin-sa e la elimini immediatamente dopo l'autorizzazione del account di servizio.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Sostituisci TMP_KEY_FILE_PATH con il percorso, incluso il nome file, del file della chiave scaricato.

  3. Autorizza l'accesso a Google Cloud con il account di servizio admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID. \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Elimina il file della chiave JSON scaricato:

    rm TMP_KEY_FILE_PATH
    

    Il token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi bmctl per le operazioni del cluster, come la creazione, l'upgrade o il reset di un cluster.

  5. Nella workstation di amministrazione, crea una variabile di ambiente GCP_ACCESS_TOKEN con il valore di un token di accesso creato dal account di servizio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.)
    

    Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora).

  6. Esegui il comando bmctl create cluster per creare il cluster di amministrazione.

Creazione di un cluster utente

I passaggi per la creazione di un cluster di amministrazione sono leggermente diversi per le offerte in anteprima (versioni 1.30-1.32) e GA (versioni 1.33 e successive). I passaggi per la versione GA utilizzano il comando bmctl configure projects per configurare la federazione delle identità per i workload per i tuoi cluster.

1.33 e versioni successive

  1. Aggiungi l'annotazione baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" al file di configurazione del cluster:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

    Il token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi bmctl per le operazioni sul cluster, come la creazione, l'upgrade o il reset di un cluster.

  2. Nella workstation di amministrazione, aggiorna la variabile di ambiente GCP_ACCESS_TOKEN con un token di accesso appena recuperato:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora).

  3. Configura la federazione delle identità per i workload per il cluster che stai creando:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Utilizza kubectl per eseguire il deployment del manifest del cluster utente:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Sostituisci quanto segue:

  • USER_CLUSTER_CONFIG: il percorso del file di configurazione del cluster utente.

  • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.

1.30-1.32

  1. Sulla tua workstation di amministrazione, crea e scarica una chiave per il account di servizio admin-sa:

    Questa chiave è necessaria per autorizzare l'accesso per il account di servizio admin-sa e la elimini immediatamente dopo l'autorizzazione del account di servizio.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Sostituisci TMP_KEY_FILE_PATH con il percorso, incluso il nome file, del file della chiave scaricato.

  2. Autorizza l'accesso a Google Cloud con il account di servizio admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID. \
        --key-file=TMP_KEY_FILE_PATH
    
  3. Elimina il file della chiave JSON scaricato:

    rm TMP_KEY_FILE_PATH
    

    Il token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi bmctl per le operazioni del cluster, come la creazione, l'upgrade o il reset di un cluster.

  4. Nella workstation di amministrazione, crea una variabile di ambiente GCP_ACCESS_TOKEN con il valore di un token di accesso creato dal account di servizio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.)
    

    Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora).

  5. Esegui il comando bmctl create cluster per creare il cluster utente.

Altre operazioni del cluster

Per i cluster che utilizzano l'autenticazione del cluster Workload Identity, i seguenti comandi bmctl richiedono di impostare la variabile di ambiente GCP_ACCESS_TOKEN su un token di accesso valido e attivo:

  • bmctl configure projects
  • bmctl create cluster
  • bmctl register bootstrap
  • bmctl reset cluster
  • bmctl upgrade cluster

bmctl register bootstrap supporta l'utilizzo della variabile di ambiente GCP_ACCESS_TOKEN per l'autenticazione del cluster Workload Identity solo per Google Distributed Cloud versione 1.34.0 e successive. Per le versioni precedenti alla 1.34.0, devi utilizzare i file della chiave del account di servizio per autenticare bmctl register bootstrap.

Se bmctl rileva che la variabile di ambiente GCP_ACCESS_TOKEN è stata impostata, esegue la convalida del token:

  • Se il token è valido, bmctl lo utilizza per le operazioni del cluster.

  • Se il token non è valido, recuperane uno nuovo:

    Il token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi bmctl per le operazioni sul cluster, come la creazione, l'upgrade o il reset di un cluster. Nella workstation di amministrazione, aggiorna la variabile di ambiente GCP_ACCESS_TOKEN con un token di accesso appena recuperato:

    1.33 e versioni successive

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    sh export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.)

    Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora). Quando utilizzi l'autenticazione del cluster Workload Identity, bmctl controlla la data di scadenza del token. Se la scadenza del token è entro 1800 secondi (30 minuti), bmctl segnala un errore ed esce.

Personalizzazione

Puoi utilizzare service account con nomi univoci per l'autenticazione del cluster Workload Identity, purché abbiano associazioni per i ruoli richiesti.

1.33 e versioni successive

Per impostazione predefinita, l'autenticazione del cluster Workload Identity per i cluster versione 1.33 e successive utilizza solo il account di servizio baremetal-gcr. Pertanto, questo è l'unico service account che può essere personalizzato.

  1. Assicurati che il account di servizio che vuoi utilizzare disponga dei ruoli identificati nella tabella in Prima di iniziare.

  2. Annota il file di configurazione del cluster per specificare il nome personalizzato per il account di servizio di autenticazione del cluster Workload Identity:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

Sostituisci CUSTOM_AR_GSA con il nome dell'indirizzo email del account di servizio utilizzato da Google Distributed Cloud per scaricare le immagini container da Artifact Registry.

1.30-1.32

  1. Assicurati che i service account che vuoi utilizzare dispongano dei ruoli identificati nella tabella in Prima di iniziare.

  2. Annota il file di configurazione del cluster per specificare i nomi personalizzati per i service account di autenticazione del cluster Workload Identity:

    La specifica di nomi personalizzati ti consente di utilizzare i service account esistenti. Assicurati che i nomi dei account di servizio personalizzati che specifichi siano diversi l'uno dall'altro. Non supportiamo l'utilizzo di un singolo account di servizio per sostituire due o più service account predefiniti.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    

Sostituisci quanto segue:

  • CUSTOM_CONTROLLER_GSA: il nome dell'indirizzo email del account di servizio utilizzato dall'agente Connect per mantenere una connessione tra il cluster e Google Cloude per registrare i cluster.

  • CUSTOM_CLOUD_OPS_GSA: il nome dell'indirizzo email del account di servizio utilizzato dall'agente Stackdriver per esportare log e metriche dai cluster a Cloud Logging e Cloud Monitoring.

  • CUSTOM_AR_GSA: il nome dell'indirizzo email del service account utilizzato da Google Distributed Cloud per scaricare le immagini container da Artifact Registry.

Limitazioni

Le seguenti caratteristiche e funzionalità non sono supportate quando utilizzi l'autenticazione del cluster Workload Identity per Distributed Cloud solo software per bare metal:

  • Utilizzo di un server proxy
  • Controlli di servizio VPC
  • Aggiorna i cluster keyed mode esistenti per utilizzare l'autenticazione del cluster Workload Identity
  • Gestione del ciclo di vita dei cluster utilizzando i client API GKE On-Prem, come Google Cloud CLI, Terraform o la console Google Cloud

Passaggi successivi