Questo documento descrive come configurare e utilizzare l'autenticazione del cluster Workload Identity per Google Distributed Cloud connesso. Anziché le chiavi dei account di servizio, l'autenticazione cluster di Workload Identity utilizza token di breve durata e la federazione delle identità per i workload per consentire ai tuoi workload di accedere Google Cloud alle risorse in modo sicuro. Le credenziali di breve durata sono token di accesso OAuth 2.0. Per impostazione predefinita, i token di accesso scadono dopo 1 ora.
Con l'autenticazione del cluster Workload Identity, i tuoi carichi di lavoro possono utilizzare la propria identità Kubernetes per accedere direttamente alle risorse Google Cloud o simulare un account di servizio Google.
L'autenticazione del cluster Workload Identity offre due vantaggi principali rispetto all'utilizzo delle chiavi del account di servizio:
Maggiore sicurezza: le chiavi dei service account comportano un rischio per la sicurezza se non vengono gestite correttamente. I token OAuth 2.0 e la federazione delle identità per i workload sono considerati alternative consigliate alle chiavi dei account di servizio. Per saperne di più sui token dei account di servizio, consulta Credenziali dei account di servizio di breve durata. Per maggiori informazioni sulla federazione delle identità per i workload, consulta Federazione delle identità per i workload.
Manutenzione ridotta: le chiavi del service account richiedono più manutenzione. La rotazione e la protezione regolari di queste chiavi possono creare un onere amministrativo.
Questa pagina è rivolta ad amministratori, architetti e operatori che configurano, monitorano e gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti GKE.
Gestione dei cluster
Questa guida tratta la federazione delle identità per i workload per le tue applicazioni. La federazione delle identità per i workload a livello di cluster viene gestita automaticamente per i cluster connessi a Distributed Cloud.
I cluster connessi di Distributed Cloud vengono creati e gestiti da Google tramite l'API Distributed Cloud Edge Container, utilizzando il comando gcloud edge-cloud container clusters create o nella console Google Cloud .
I cluster connessi di Distributed Cloud vengono registrati automaticamente in un parco risorse nel progetto in cui vengono creati. Non è necessario eseguire alcuna registrazione manuale del parco risorse. Il pool federazione delle identità per i workload è disponibile automaticamente e
segue il formato PROJECT_ID.svc.id.goog.
Prima di iniziare
Prima di poter configurare la federazione delle identità per i carichi di lavoro, verifica che le seguenti API nel tuo progetto Google Cloud siano abilitate. Per informazioni sull'attivazione delle API, vedi Attivazione dei servizi:
iam.googleapis.comsts.googleapis.comiamcredentials.googleapis.comgkehub.googleapis.com
Assicurati di aver installato i seguenti strumenti a riga di comando:
- L'ultima versione di Google Cloud CLI, che
include
gcloud, lo strumento a riga di comando per interagire con Google Cloud. kubectl
Se utilizzi Cloud Shell come ambiente shell per interagire con Google Cloud, questi strumenti vengono installati automaticamente.
- L'ultima versione di Google Cloud CLI, che
include
Assicurati di aver inizializzato gcloud CLI per l'utilizzo con il tuo progetto.
Assicurati di disporre dei seguenti ruoli IAM nel progetto. Per eseguire la configurazione sono necessari i seguenti ruoli:
- Proprietario (
roles/owner) o - Amministratore della sicurezza IAM (
roles/iam.securityAdmin) e amministratore account di servizio (roles/iam.serviceAccountAdmin)
- Proprietario (
Nelle sezioni seguenti, crea service account e concedi i ruoli necessari per l'autenticazione del cluster Workload Identity.
Consigliato: accesso diretto alle risorse della federazione delle identità per i workload
Con l'accesso diretto alle risorse della federazione delle identità per i workload, utilizzi la federazione delle identità per i workload per concedere un ruolo IAM a un ServiceAccount Kubernetes in modo che possa accedere direttamente alle risorse Google Cloud.
| Identità | Finalità | Ruoli |
|---|---|---|
| ServiceAccount Kubernetes |
L'identità Kubernetes utilizzata dal carico di lavoro. Concedi a questa identità i ruoli necessari per accedere alle risorse richieste. Google Cloud Questo esempio
concede il ruolo roles/storage.objectViewer e il
ruolo roles/logging.admin.
|
roles/storage.objectViewerroles/logging.admin |
Alternativa: simulazione dell'identità del account di servizio IAM
In alternativa, puoi configurare il service account Kubernetes in modo che utilizzi la simulazione dell'identità del account di servizio IAM.
| Service account | Finalità | Ruoli |
|---|---|---|
| Service account Google | Il account di servizio Google rappresentato dal carico di lavoro in-cluster. Concedi a questo account di servizio i ruoli necessari per accedere alle risorse Google Cloud richieste. | Dipende dalle risorse a cui si accede. |
| ServiceAccount Kubernetes |
Concedi a questa identità la possibilità di simulare l'identità del account di servizio Google.
Questa concessione utilizza il ruolo roles/iam.workloadIdentityUser.
|
roles/iam.workloadIdentityUser
|
Configurare service account
Le sezioni seguenti contengono le istruzioni per creare l'oggetto Kubernetes ServiceAccount richiesto e per concedergli i ruoli necessari per l'autenticazione del cluster Workload Identity utilizzando l'accesso diretto alle risorse di federazione delle identità per i workload o la simulazione dell'identità dei account di servizio Google.
Crea un ServiceAccount Kubernetes
Nel cluster, utilizza il comando
kubectl create
per creare un ServiceAccount Kubernetes per i tuoi pod. Puoi anche
utilizzare qualsiasi ServiceAccount esistente, incluso ServiceAccount predefinito nello
spazio dei nomi.
kubectl create serviceaccount KSA_NAME --namespace NAMESPACE
Sostituisci i seguenti valori:
KSA_NAME: un nome per il tuo service account KubernetesNAMESPACE: lo spazio dei nomi del cluster
Utilizzare la federazione delle identità per i workload per concedere l'accesso diretto alle risorse
Per concedere ruoli Identity and Access Management direttamente all'identità ServiceAccount di Kubernetes, segui questi passaggi.
Utilizza il comando gcloud projects describe per trovare il numero di progetto numerico:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Sostituisci
PROJECT_IDcon l'ID del tuo progetto.Utilizza il comando gcloud projects add-iam-policy-binding per concedere i ruoli richiesti all'entità identità Kubernetes:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/logging.adminSostituisci i seguenti valori:
PROJECT_NUMBER: il numero di progetto numericoNAMESPACE: lo spazio dei nomi del clusterKSA_NAME: il nome del tuo service account Kubernetes
Alternativa: utilizza la simulazione dell'identità del account di servizio IAM per concedere l'accesso
Se preferisci che i tuoi carichi di lavoro rappresentino un account di servizio Google, segui questi passaggi.
Utilizza il comando gcloud iam service-accounts create per creare un account di servizio Google:
gcloud iam service-accounts create my-app-sa \ --project=PROJECT_IDSostituisci
PROJECT_IDcon l'ID del tuo progetto.Utilizza il comando gcloud projects add-iam-policy-binding per concedere all'account di servizio Google i ruoli richiesti:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.adminUtilizza il comando gcloud iam service-accounts add-iam-policy-binding per concedere a Kubernetes ServiceAccount la possibilità di simulare l'identità dell'account di servizio Google:
gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"Sostituisci i seguenti valori:
NAMESPACE: lo spazio dei nomi del clusterKSA_NAME: il nome del tuo service account Kubernetes
Utilizza il comando kubectl annotate per annotare il service account Kubernetes e collegarlo al account di servizio Google:
kubectl annotate serviceaccount \ --namespace NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
Configura il workload
Aggiorna la specifica del pod per utilizzare il ServiceAccount Kubernetes e monta il volume del token proiettato. Poiché i cluster connessi di Distributed Cloud si trovano al di fuori di
Google Cloud, devi anche fornire un file di configurazione delle credenziali e impostare la
variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a quel file.
Le librerie clientGoogle Cloud all'interno del pod le utilizzano per scambiare il
token Kubernetes con un token di accesso Google Cloud tramite l'API Security Token Service.
Genera il file
credential-configuration.json. Scegli il comando in base al fatto che utilizzi l'accesso diretto alle risorse della federazione delle identità per i workload o la simulazione dell'identità del account di servizio IAM.Accesso diretto alle risorse della federazione delle identità per i workload
Utilizza il comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonUtilizza la simulazione dell'identità del account di servizio IAM per concedere l'accesso
Utilizza il comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonSostituisci
PROJECT_NUMBERcon il numero del tuo progetto Google Cloud . Puoi trovare il numero di progetto eseguendogcloud projects describe PROJECT_ID --format="value(projectNumber)".Utilizza il comando
kubectl create configmapper creare unConfigMapKubernetes in cui archiviare il file di configurazione:kubectl create configmap CREDENTIAL_CONFIG_MAP \ --namespace NAMESPACE \ --from-file=credential-configuration.jsonSostituisci i seguenti valori:
CREDENTIAL_CONFIG_MAP: un nome per il tuoConfigMap, che contiene il file di configurazione delle credenzialiNAMESPACE: lo spazio dei nomi del cluster
Aggiorna la specifica del pod con i seguenti contenuti YAML:
spec: serviceAccountName: KSA_NAME containers: - name: MY_CONTAINER image: MY_IMAGE env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json volumeMounts: - mountPath: /var/run/secrets/tokens/gcp-ksa name: gcp-ksa - mountPath: /var/run/secrets/tokens/gcp-creds name: gcp-creds readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 0420 sources: - serviceAccountToken: path: token audience: PROJECT_ID.svc.id.goog expirationSeconds: 3600 - name: gcp-creds configMap: name: CREDENTIAL_CONFIG_MAPSostituisci i seguenti valori:
KSA_NAME: un nome per il tuo ServiceAccount KubernetesMY_CONTAINER: il nome del contenitoreMY_IMAGE: il nome dell'immagine
Limitazioni
Le seguenti funzionalità non sono supportate quando utilizzi la federazione delle identità per i carichi di lavoro per Distributed Cloud connesso:
- Utilizzo di un server proxy per il processo di scambio dei token
Per informazioni sull'utilizzo della federazione delle identità per i workload con i Controlli di servizio VPC, consulta Configurare l'integrazione dei Controlli di servizio VPC.
Passaggi successivi
- Esegui il deployment dei carichi di lavoro su Distributed Cloud connected
- Gestire i servizi
- Applicare le best practice per la sicurezza