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.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/iam.workloadIdentityPoolAdmin*roles/logging.adminroles/monitoring.adminroles/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.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/logging.adminroles/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.adminroles/monitoring.dashboardEditorroles/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.publisherroles/logging.logWriterroles/monitoring.dashboardEditorroles/monitoring.metricWriterroles/monitoring.viewerroles/opsconfigmonitoring.resourceMetadata.writerroles/serviceusage.serviceUsageViewerroles/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:
Sulla workstation di amministrazione, accedi a Google Cloud CLI:
gcloud auth loginCrea 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_IDSostituisci
PROJECT_IDcon l'ID del tuo progettoGoogle Cloud .1.30-1.32
```sh gcloud iam service-accounts create admin-sa
--project=PROJECT_IDgcloud iam service-accounts create baremetal-controller
--project=PROJECT_IDgcloud iam service-accounts create baremetal-cloud-ops
--project=PROJECT_IDgcloud iam service-accounts create baremetal-gcr
--project=PROJECT_ID ```Sostituisci
PROJECT_IDcon 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
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
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.adminAggiungi 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.serviceUsageViewerAggiungi 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.writerConcedi al account di servizio
baremetal-controllerla possibilità di generare token di accesso per conto del account di serviziobaremetal-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:
Sulla workstation di amministrazione, accedi a Google Cloud CLI:
gcloud auth loginSulla 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_PATHcon il percorso, incluso il nome file, del file della chiave scaricato.Nella workstation di amministrazione, crea una variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALScon il valore della chiave del account di servizio scaricata:export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATHNella workstation di amministrazione, crea una variabile di ambiente
GCP_ACCESS_TOKENcon il valore di un token di accesso creato dal account di servizioadmin-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.
Verifica che il token sia generato dal account di servizio
admin-sacon 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:
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-operatornel cluster la possibilità di impersonare il service accountbaremetal-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 nomikube-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_IDSostituisci 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.
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-logginggke-metrics-agentkubestore-collectormetadata-agentstackdriver-log-forwarder
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 esempiocloud-audit-logging, nello spazio dei nomikube-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_IDVerifica 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.
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 ...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 ...Nella workstation di amministrazione, aggiorna la variabile di ambiente
GCP_ACCESS_TOKENcon 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,
bmctlcontrolla la data di scadenza del token. Se la scadenza del token è entro 1800 secondi (30 minuti),bmctlsegnala un errore ed esce.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_NAMEEsegui il comando
bmctl create clusterper 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.
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 ...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-sae 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_PATHcon il percorso, incluso il nome file, del file della chiave scaricato.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_PATHElimina il file della chiave JSON scaricato:
rm TMP_KEY_FILE_PATHIl token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi
bmctlper le operazioni del cluster, come la creazione, l'upgrade o il reset di un cluster.Nella workstation di amministrazione, crea una variabile di ambiente
GCP_ACCESS_TOKENcon il valore di un token di accesso creato dal account di servizioadmin-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).
Esegui il comando
bmctl create clusterper 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
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
bmctlper 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_TOKENcon 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).
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_NAMEUtilizza
kubectlper 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
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-sae 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_PATHcon il percorso, incluso il nome file, del file della chiave scaricato.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_PATHElimina il file della chiave JSON scaricato:
rm TMP_KEY_FILE_PATHIl token di accesso ha una durata breve, quindi in genere devi rigenerarlo prima di eseguire i comandi
bmctlper le operazioni del cluster, come la creazione, l'upgrade o il reset di un cluster.Nella workstation di amministrazione, crea una variabile di ambiente
GCP_ACCESS_TOKENcon il valore di un token di accesso creato dal account di servizioadmin-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).
Esegui il comando
bmctl create clusterper 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 projectsbmctl create clusterbmctl register bootstrapbmctl reset clusterbmctl 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,
bmctllo 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
bmctlper le operazioni sul cluster, come la creazione, l'upgrade o il reset di un cluster. Nella workstation di amministrazione, aggiorna la variabile di ambienteGCP_ACCESS_TOKENcon 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,
bmctlcontrolla la data di scadenza del token. Se la scadenza del token è entro 1800 secondi (30 minuti),bmctlsegnala 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.
Assicurati che il account di servizio che vuoi utilizzare disponga dei ruoli identificati nella tabella in Prima di iniziare.
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
Assicurati che i service account che vuoi utilizzare dispongano dei ruoli identificati nella tabella in Prima di iniziare.
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