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:
Sulla workstation amministrativa, accedi a Google Cloud CLI:
gcloud auth login
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
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
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
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
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
Concedi all'account di servizio
baremetal-controller
la possibilità di generare token di accesso per conto dell'account di serviziobaremetal-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:
Sulla workstation amministrativa, accedi a Google Cloud CLI:
gcloud auth login
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.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
Nella workstation amministrativa, crea una variabile di ambiente
GCP_ACCESS_TOKEN
con 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-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:
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 serviziobaremetal-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 nomikube-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:
PROJECT_NUM
: l'identificatore univoco generato automaticamente per il tuo progetto.REGION
: la posizione dell'appartenenza al parco risorse per il tuo cluster, che èglobal
per impostazione predefinita. Per ulteriori informazioni, vedi Località dell'iscrizione al parco auto.CLUSTER_NAME
: il nome del cluster. Per impostazione predefinita, il nome del cluster di bootstrap èbmctl-MACHINE_NAME
.
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
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 esempiocloud-audit-logging
, nello spazio dei nomikube-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
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.
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 ...
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 ...
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.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
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.
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 ...
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.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
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.Nella workstation amministrativa, crea una variabile di ambiente
GCP_ACCESS_TOKEN
con 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.iam.gserviceaccount.com)
Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora).
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
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.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).
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
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
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.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
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.Nella workstation amministrativa, crea una variabile di ambiente
GCP_ACCESS_TOKEN
con 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.iam.gserviceaccount.com)
Per impostazione predefinita, il token di accesso ha una durata di 3600 secondi (1 ora).
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 ambienteGCP_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.
Assicurati che il account di servizio che vuoi utilizzare disponga dei ruoli identificati nella tabella in Prima di iniziare.
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
Assicurati che i service account che vuoi utilizzare dispongano dei ruoli identificati nella tabella in Prima di iniziare.
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