Autenticazione cluster Workload Identity

Questo documento descrive come configurare e utilizzare l'autenticazione del cluster Workload Identity per Google Distributed Cloud (solo software) su bare metal. Anziché le chiavi dei account di servizio, l'autenticazione del cluster Workload Identity utilizza token di breve durata e la federazione di Workload Identity per creare e proteggere i tuoi cluster. Le credenziali di breve durata per il service account sono sotto forma di token di accesso OAuth 2.0. Per impostazione predefinita, i token di accesso scadono dopo 1 ora. Allo stesso modo, anche i token di pull delle immagini scadono dopo 1 ora per impostazione predefinita.

Al contrario, la modalità con chiave, il metodo standard per creare e proteggere i cluster, utilizza le chiavi account di servizio scaricate. Quando crei un cluster self-managed (amministrativo, 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 rappresentano un rischio per la sicurezza se non vengono gestite correttamente. Per informazioni sull'impostazione di un periodo di scadenza per le chiavi del account di servizio, consulta Tempi di scadenza per le chiavi gestite dall'utente.

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 carichi di lavoro sono considerati alternative consigliate alle chiavi degli account di servizio. Per ulteriori informazioni sui token del account di servizio, consulta Credenziali 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 rappresentare un onere amministrativo significativo.

L'autenticazione del cluster Workload Identity è stata introdotta per l'anteprima con la release 1.30 ed è disponibile a livello generale per la release 1.33 e successive. L'autenticazione del cluster Workload Identity può essere abilitata solo durante la creazione di nuovi cluster. Non puoi configurare un cluster esistente per utilizzare l'autenticazione del cluster Workload Identity durante un aggiornamento. Per ulteriori limitazioni, vedi Limitazioni.

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.

Prima di iniziare

Nelle sezioni seguenti, crea service account e concedi i ruoli necessari per l'autenticazione del cluster Workload Identity. Le istruzioni di configurazione riportate in questo documento non sostituiscono le istruzioni nelle risorse Configurazione Google Cloud, ma sono necessarie in aggiunta ai prerequisiti di installazione solo software standard di Google Distributed Cloud. I service account richiesti per l'autenticazione del cluster Workload Identity sono simili a quelli descritti in Configurare le risorseGoogle Cloud , ma hanno un nome univoco, quindi non interferiscono con i cluster che utilizzano le chiavi del account di servizio predefinite.

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

1.33 e versioni successive

Service account Finalità Ruoli
admin-sa Utilizzi questo account di servizio per generare token. Ogni token ha i privilegi associati ai ruoli delaccount di serviziot. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
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

1.30-1.32

Service account Finalità Ruoli
admin-sa Utilizzi questo account di servizio per generare token. Ogni token ha i privilegi associati ai ruoli delaccount di serviziot. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller L'agente Connect 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 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

Configurare i service account

Le seguenti sezioni 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 amministrativa, accedi a Google Cloud CLI:

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

    Il nome del 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

    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 Identity and Access Management per i service account

Per applicare i binding dei criteri Identity and Access Management richiesti ai nuovi service account:

1.33 e versioni successive

  1. Aggiungi i binding 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.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. Aggiungi i binding 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.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
  2. Aggiungi i binding 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.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Aggiungi i binding 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.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. Concedi all'account di servizio baremetal-controller la possibilità di generare token di accesso per conto dell'account di servizio baremetal-gcr:

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

Configura l'autenticazione

I seguenti passaggi configurano il flusso di autenticazione che utilizza un token di breve durata per autenticare le operazioni del cluster:

  1. Sulla workstation amministrativa, accedi a Google Cloud CLI:

    gcloud auth login
    
  2. Nella workstation amministrativa, 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.iam.gserviceaccount.com
    

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

  3. Nella workstation amministrativa, 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 amministrativa, 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 è in secondi e deve essere inferiore a 3600, a indicare 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 la federazione delle identità per i carichi di lavoro per GKE, crea una policy di autorizzazione IAM che conceda l'accesso a una risorsaGoogle Cloud specifica a un principal che corrisponde all'identità della tua applicazione. In questo caso, Workload Identity Federation concede l'accesso a operatori specifici nel cluster. Per saperne di più su Workload Identity Federation for GKE, consulta Workload Identity Federation 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 Workload Identity Federation per i tuoi cluster. Questo comando è incorporato nei passaggi per creare un cluster di amministrazione e creare un cluster utente.

1.30-1.32

Per le versioni del cluster in cui l'autenticazione del cluster Workload Identity è in anteprima, devi configurare Workload Identity Federation per i tuoi cluster manualmente, come descritto nelle sezioni seguenti.

Aggiungi binding dei criteri IAM per l'operatore del cluster

I seguenti comandi concedono al service account Kubernetes anthos-cluster-operator la possibilità di rappresentare 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 cluster Workload Identity (o per cui è prevista l'autenticazione cluster Workload Identity), incluso il cluster di bootstrap, concedi a anthos-cluster-operator nel cluster la possibilità di rappresentare l'account di servizio baremetal-controller:

    Nel comando seguente, principalSet è costituito dal pool di identità dei carichi di lavoro 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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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:

  2. Verifica i binding dei criteri per il account di servizio baremetal-controller:

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

    La risposta dovrebbe essere simile alla seguente:

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

Aggiungi binding dei criteri IAM per gli operatori Google Cloud Observability

I seguenti comandi concedono ai seguenti service account Kubernetes di Google Cloud Observability la possibilità di rappresentare 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 per cui è previsto l'utilizzo dell'autenticazione del cluster Workload Identity), incluso il cluster di bootstrap, concedi agli operatori Google Cloud Observability nel cluster la possibilità di rappresentare l'account di servizio baremetal-cloud-ops:

    In ognuno dei seguenti comandi, principalSet è costituito dal pool di identità dei carichi di lavoro 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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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 i binding dei criteri per il account di servizio baremetal-cloud-ops:

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

    La risposta dovrebbe essere simile alla seguente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/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 creare un cluster di amministrazione variano leggermente per le offerte Anteprima (versioni 1.30-1.32) e GA (versioni 1.33 e successive). I passaggi GA utilizzano il comando bmctl configure projects per configurare la federazione delle identità per i carichi di lavoro per i tuoi cluster.

1.33 e versioni successive

La differenza più ovvia nella configurazione dei cluster che utilizzano l'autenticazione del cluster Workload Identity è che non devi specificare i percorsi delle chiavi delaccount di serviziot scaricate.

  1. Quando compili le impostazioni del cluster nel file di configurazione, lascia vuoti i percorsi delle chiavi dell'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. Sulla 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ù ovvia nella configurazione dei cluster che utilizzano l'autenticazione del cluster Workload Identity è che non devi specificare i percorsi delle chiavi delaccount di serviziot scaricate.

  1. Quando compili le impostazioni del cluster nel file di configurazione, lascia vuoti i percorsi delle chiavi dell'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. Nella workstation amministrativa, 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 puoi eliminarla subito dopo l'autorizzazione del account di servizio.

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

    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.iam.gserviceaccount.com \
        --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 ripristino di un cluster.

  5. Nella workstation amministrativa, 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.iam.gserviceaccount.com)
    

    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 creare un cluster di amministrazione variano leggermente per le offerte Anteprima (versioni 1.30-1.32) e GA (versioni 1.33 e successive). I passaggi GA utilizzano il comando bmctl configure projects per configurare la federazione delle identità per i carichi di lavoro 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 del cluster, ad esempio la creazione, l'upgrade o il ripristino di un cluster.

  2. Sulla 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. Nella workstation amministrativa, 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 puoi eliminarla subito dopo l'autorizzazione del account di servizio.

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

    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.iam.gserviceaccount.com \
        --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 ripristino di un cluster.

  4. Nella workstation amministrativa, 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.iam.gserviceaccount.com)
    

    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 che la variabile di ambiente GCP_ACCESS_TOKEN sia impostata su un token di accesso valido e attivo:

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

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 del cluster, ad esempio la creazione, l'upgrade o il ripristino 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

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

    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 binding 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 account di servizio 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. Aggiungi un'annotazione al file di configurazione del cluster per specificare il nome personalizzato per l'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'email del account di servizio utilizzato da Google Distributed Cloud per scaricare 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. Aggiungi un'annotazione al file di configurazione del cluster per specificare i nomi personalizzati per gli account di servizio del servizio di autenticazione del cluster Workload Identity:

    La specifica di nomi personalizzati consente di utilizzare service account esistenti. Assicurati che i nomi deiaccount di serviziot personalizzati che specifichi siano diversi tra loro. Non è supportato 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'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 email del service account utilizzato da Google Distributed Cloud per scaricare le immagini container da Artifact Registry.

Limitazioni

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

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

Passaggi successivi