Questa pagina descrive come verificare le connessioni effettuate dal personale di Google al control plane del cluster Google Kubernetes Engine (GKE) mettendo in correlazione i log di GKE con i log di Access Transparency.
I log di Access Transparency registrano le azioni intraprese dal personale di Google quando accede ai tuoi contenuti. Questa guida è destinata agli amministratori della sicurezza che vogliono una verifica aggiuntiva dei contenuti dei log di Access Transparency e delle approvazioni di Access Approval associate mettendo in correlazione con altre origini di logging di GKE. Questa verifica è completamente facoltativa e non è necessaria per proteggere il control plane.
Assicurati di conoscere i seguenti concetti:
Questa pagina descrive una parte di un insieme di funzionalità facoltative del control plane in GKE che ti consentono di eseguire attività come la verifica della security posture del control plane o la configurazione della crittografia e della firma delle credenziali nel control plane utilizzando le chiavi che gestisci. Per i dettagli, consulta Informazioni su GKE control plane authority.
Per impostazione predefinita, Cloud de Confiance applica varie misure di sicurezza al control plane gestito. Questa pagina descrive le funzionalità facoltative che ti offrono maggiore visibilità o controllo su control plane GKE.
Informazioni sull'accesso di Google alle istanze del control plane del cluster
Durante le sessioni di risoluzione dei problemi o per altri motivi aziendali giustificati, il personale di Google, come gli ingegneri di affidabilità del sito e i dipendenti dell'assistenza clienti Google Cloud, potrebbe aver bisogno dell'accesso amministrativo alle istanze Compute Engine che ospitano il control plane. A seconda del pacchetto di assistenza clienti e della configurazione, Access Transparency fornisce log di controllo dettagliati per questo accesso amministrativo. Access Approval ti consente di richiedere l'approvazione esplicita prima che il personale di Google possa accedere alle tue risorse. Per saperne di più sull'accesso amministrativo e sugli strumenti che puoi utilizzare per autorizzare l'accesso e registrare le modifiche, consulta Accesso amministrativo per i dipendenti di Google.
Log di accesso al control plane
Quando abiliti GKE control plane authority, GKE genera log di accesso al control plane che puoi utilizzare facoltativamente per fare riferimento incrociato agli audit log generati da Access Transparency e da Access Approval. GKE adds control plane access
logs to the
_Default bucket in Logging
to record incoming network connections and specific SSH events
in your control plane instances. Devi abilitare GKE control plane authority nel tuo progetto per generare i log di accesso al control plane per i tuoi cluster.
GKE genera i seguenti log di accesso per il control plane:
Il volume dei log di connessione del control plane dipende da fattori quali il numero di nodi nel cluster, il numero di istanze del control plane (i cluster regionali hanno più istanze del control plane rispetto ai cluster zonali) e la frequenza con cui i carichi di lavoro chiamano il server API Kubernetes. Il volume dei log SSH è ridotto e dipende dal numero di riavvii dei nodi.
Per verificare le connessioni al control plane, trova i log di accesso al control plane per il tuo cluster e abbinali agli audit log di Access Transparency e Access Approval. In questo modo puoi confermare che tutte le connessioni SSH alle istanze del control plane sono state il risultato dell'accesso amministrativo autorizzato da parte del personale di Google. Quando abiliti GKE control plane authority per il tuo cluster, tutto l'accesso SSH del personale di Google al tuo control plane è non interattivo, il che significa che ogni connessione SSH esegue un singolo comando che autorizzi. Per visualizzare i dettagli a livello di comando per l'accesso amministrativo, registrati ad Augmented Access Approval e Augmented Access Transparency. Per ulteriori informazioni sull'idoneità e sulla registrazione, contatta il tuo Cloud de Confiance by S3NS team dedicato all'account.
Prezzi
Si applicano le seguenti considerazioni sui prezzi:
- I log di accesso al control plane sono soggetti a prezzi di Logging.
- Access Transparency è incluso in abbonamenti specifici all'assistenza clienti. Per i dettagli, consulta i prezzi di Access Transparency.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Abilita l'API Cloud Logging.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.Abilita Access Transparency per la tua organizzazione. Per le istruzioni, consulta Abilitare Access Transparency.
Facoltativamente, abilita Access Approval per il tuo progetto e seleziona il servizio GKE. Per le istruzioni, consulta Esaminare e approvare le richieste di accesso utilizzando la chiave di firma gestita da Google.
Assicurati che il tuo ambiente sia idoneo all'utilizzo delle funzionalità di GKE control plane authority. Per attivare queste funzionalità, contatta il tuo Cloud de Confiance team di vendita.
Requisiti
I log di accesso al control plane richiedono la versione 1.31.1-gke.1846000 di GKE o versioni successive.
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni necessarie per abilitare la generazione dei log e per accedere ed elaborare i log, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Abilita la registrazione delle connessioni del control plane nel cluster:
Amministratore cluster Kubernetes Engine (
roles/container.clusterAdmin) nel tuo progetto -
Accedi ai log e utilizza Esplora log e Analisi dell'osservabilità:
Visualizzatore log (
roles/logging.viewer) nel tuo progetto -
Abilita Access Transparency per l'organizzazione:
Amministratore Access Transparency (
roles/axt.admin) nella tua organizzazione
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Abilitare i log di accesso al control plane del cluster GKE
Puoi abilitare la generazione dei log di accesso al control plane per i cluster in modalità Autopilot e in modalità Standard abilitando il componente di logging corrispondente. Per saperne di più sui tipi di log del control plane, consulta Visualizzare i log di GKE.
I nomi dei componenti di logging supportati per i log di accesso al control plane sono i seguenti:
- Log SSH del control plane:
KCP_SSHD - Log di connessione del control plane:
KCP_CONNECTION
Abilitare i log di accesso al control plane su un nuovo cluster
L'esempio seguente crea un cluster in modalità Autopilot con entrambi i tipi di log di accesso al control plane abilitati. Per abilitare un solo tipo di log di accesso al control plane, ometti il nome del componente corrispondente dal comando.
gcloud container clusters create-auto CLUSTER_NAME \
--location=LOCATION \
--logging=SYSTEM,KCP_SSHD,KCP_CONNECTION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la località in cui creare il cluster.
Per specificare i componenti di logging quando crei un cluster utilizzando l'
API GKE, nel
projects.locations.clusters.create
metodo, imposta i valori corrispondenti nell'
LoggingConfig oggetto
della Cluster risorsa.
Abilitare i log di accesso al control plane su un cluster esistente
Per aggiornare la configurazione di logging di un cluster esistente in modo da abilitare i log di accesso al control plane, devi procedere nel seguente modo:
- Trova i componenti di logging esistenti utilizzati dal cluster.
- Identifica i valori corrispondenti da specificare nel flag
--loggingin gcloud CLI per mantenere abilitati questi componenti di logging. - Aggiorna la configurazione di logging del cluster per abilitare i log di accesso al control plane insieme alla configurazione di logging esistente.
I valori specificati per il flag --logging nel comando gcloud container clusters update sono diversi dai valori visualizzati quando descrivi il cluster.
Controlla la configurazione di logging esistente del cluster:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --flatten=loggingConfig \ --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'L'output è simile al seguente:
SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGERIdentifica i valori di gcloud CLI per il flag
--loggingche corrispondono alla configurazione del componente di logging dall'output del passaggio precedente. Per un elenco dei valori di gcloud CLI che corrispondono a componenti di logging specifici, consulta la tabella Log disponibili.Aggiorna la configurazione di logging con i log di accesso al control plane:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGSSostituisci quanto segue:
EXISTING_LOGS: un elenco separato da virgole dei componenti di logging già utilizzati dal cluster. Assicurati di specificare i valori di gcloud CLI che corrispondono a questi componenti di logging, presi dalla tabella Log disponibili.KCP_ACCESS_LOGS: un elenco separato da virgole dei tipi di log di accesso al control plane da abilitare per il cluster, come segue:- Per i log SSH del control plane, specifica
KCP_SSHD. - Per i log di connessione del control plane, specifica
KCP_CONNECTION.
- Per i log SSH del control plane, specifica
Per specificare i componenti di logging quando aggiorni un cluster utilizzando l'
API GKE, nel
projects.locations.clusters.update
metodo, imposta i valori dei componenti di logging esistenti e nuovi nell'
LoggingConfig oggetto
della
ClusterUpdate risorsa.
Esempio di aggiornamento del cluster per abilitare i log di accesso al control plane
Considera un cluster che mostra la seguente configurazione di logging dopo aver eseguito il comando gcloud container clusters describe:
SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
Il seguente comando di aggiornamento del cluster abilita entrambi i tipi di log di accesso al control plane mantenendo la configurazione dei log esistente per questo cluster di esempio:
gcloud container clusters update example-cluster \
--location=us-central1 \
--logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
Fare riferimento incrociato ai log di accesso al control plane con i log di Access Transparency
Per verificare l'accesso al control plane per un cluster, recupera i log di connessione del control plane, i log SSH del control plane e i log di Access Transparency per quel cluster:
Nella Cloud de Confiance console, apri la pagina Esplora log.
Per recuperare tutti i log di un cluster specifico, inclusi i log di accesso al control plane e i log di Access Transparency, esegui la seguente query:
(logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection" resource.labels.cluster_name="CLUSTER_NAME" jsonPayload.connection.dest_port="22") OR (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-sshd" resource.labels.cluster_name="CLUSTER_NAME") OR (logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Faccess_transparency" json_payload.accesses.methodName="GoogleInternal.SSH.Master" json_payload.accesses.resourceName="//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME")
L'output dovrebbe mostrare tutti i seguenti tipi di log per il tuo cluster:
- Log di Access Transparency
- Log di connessione del control plane
- Log SSH per ogni sessione SSH
Eseguire i controlli di verifica
Il controllo di verifica principale consiste nel verificare se vengono visualizzati tutti i tipi di log per le connessioni SSH quando esegui la query di Logging nella sezione precedente. Ogni log di Access Transparency deve avere un log di connessione del control plane corrispondente e uno o più log SSH. Questi log riguardano le azioni eseguite dagli utenti nelle istanze del control plane, quindi il volume dei log dovrebbe essere ridotto.
Facoltativamente, puoi eseguire i seguenti controlli aggiuntivi dei contenuti dei log:
- Per ogni log SSH del control plane, controlla se esiste un log di Access Transparency in un intervallo di 15 minuti prima del timestamp del log SSH. Questo intervallo di tempo tiene conto della chiusura finale della sessione SSH che avviene diversi minuti dopo la registrazione della connessione iniziale da parte di Access Transparency.
- Per ogni log di connessione del control plane, controlla se esiste un log di Access Transparency in un intervallo di 5 minuti prima del timestamp del log di connessione del control plane.
Se utilizzi Access Approval per il tuo cluster, controlla se ogni log di Access Transparency ha un campo
accessApprovalscorrispondente. Fai riferimento incrociato a questo campo con le richieste di Access Approval per il tuo cluster.Per ottenere le richieste di Access Approval per il tuo progetto, consulta Visualizzare le richieste di Access Approval storiche. Access Approval potrebbe essere soggetto a esclusioni.
Facoltativamente, convalida la firma di Access Approval firmata associata al log di Access Transparency.
Dettagli dei log di accesso al control plane
Questa sezione fornisce dettagli ed esempi dei log di accesso al control plane generati da GKE quando il personale di Google si connette alle istanze del control plane.
Log di connessione del control plane
GKE aggiunge un log di connessione del control plane per ogni nuova connessione di rete in entrata a un'istanza del control plane. Questi log includono dettagli specifici come i seguenti:
- Indirizzi IP e porte di origine e destinazione
- Direzione e protocollo di connessione
Di seguito è riportato un esempio di log di connessione del control plane:
{
insertId: "z1eq8wonio335a5h",
jsonPayload: {
instance: {
vm_name: "gke-dee49f0d6fa34ce3a2ac-f513-d195-vm",
zone: "us-central1-c"
},
cluster: {
cluster_id: "CLUSTER_ID",
cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1-c/clusters/CLUSTER_NAME"
},
connection: {
state: "NEW",
src_ip: "192.0.2.100",
src_port: 32774,
dest_ip: "203.0.113.12",
dest_port: 22,
direction: "INGRESS"
protocol: "TCP"
},
}
logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection",
receiveTimestamp: "2024-04-11T04:08:01.883070399Z",
resource: {
labels: {
cluster_name: "CLUSTER_NAME",
location: "us-central1-c",
project_id: "PROJECT_ID"
}
type: "gke_cluster",
}
severity: "NOTICE",
timestamp: "2024-04-11T04:07:59.019330Z"
}
I seguenti campi nella voce di log sono pertinenti per la verifica delle azioni di Google:
cluster.cluster_urn: l'identificatore di risorsa completo del cluster. Questo identificatore ha il formato//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, con le seguenti variabili:PROJECT_NUMBER: il numero di progetto numerico del progetto dei cluster.LOCATION: la Cloud de Confiance località del cluster.CLUSTER_NAME: il nome del cluster.
connection: dettagli sul tentativo di connessione. Questo campo contiene le seguenti informazioni:state: lo stato della connessione. Per le nuove connessioni, il valore èNEW.src_ip: l'indirizzo IP dell'origine della connessione.src_port: il numero di porta dell'origine della connessione.dest_ip: l'indirizzo IP interno della VM del control plane.dest_port: il numero di porta di destinazione.direction: la direzione della connessione. Il valore è sempreINGRESS.protocol: il protocollo IP, ad esempioTCP.
Log SSH del control plane
GKE aggiunge i log SSH del control plane per gli eventi relativi alle connessioni SSH alle istanze del control plane. GKE registra i seguenti eventi:
- Chiave SSH accettata per un utente
- Lo stato della sessione è cambiato da 0 a 1, il che indica che l'utente ha eseguito l'accesso correttamente
- Sessione SSH aperta
- Sessione SSH chiusa
- Lo stato della sessione è cambiato da 1 a 0, il che indica che l'utente ha eseguito la disconnessione
- Sessione SSH non riuscita
Ad esempio, il seguente log SSH del control plane riguarda l'apertura di una sessione SSH:
{
insertId: "8llczemdulwbbwpa",
jsonPayload: {
instance: {
vm_name: "gke-06cb920c609941c0a5ce-6840-40e9-vm",
zone: "us-central1-c"
},
cluster: {
cluster_id: "891e6d12889747748c1ac16ffcc6cb7c0a96450b36864eb680917c119fd801d0",
cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1/clusters/CLUSTER_NAME",
},
message: "pam_unix(sshd:session): session opened for user REDACTED by (uid=0)",
},
logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-ssh",
receiveTimestamp: "2024-04-09T13:21:55.231436462Z"
resource: {
type: "gke_cluster",
labels: {
cluster_name: "CLUSTER_NAME",
location: "us-central1",
project_id: "PROJECT_ID"
}
},
severity: "NOTICE",
timestamp: "2024-04-09T13:21:50.742246Z"
}
I seguenti campi nella voce di log sono pertinenti per la verifica delle azioni di Google:
cluster.cluster_urn: l'identificatore di risorsa completo del cluster. Questo identificatore ha il formato//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, con le seguenti variabili:PROJECT_NUMBER: il numero di progetto numerico del progetto del cluster.LOCATION: la Cloud de Confiance località del cluster.CLUSTER_NAME: il nome del cluster.
message: dettagli sulla connessione SSH.
Disabilitare i log di accesso al control plane
Per visualizzare i tipi di log specifici utilizzati dal cluster, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --flatten=loggingConfig \ --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'L'output è simile al seguente:
SYSTEM_COMPONENTS,WORKLOADS,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTIONPer disabilitare i log di accesso al control plane per un cluster, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
Nel flag --logging, specifica i componenti di logging dall'output del comando precedente. Questo comando di esempio disabilita i log di accesso al control plane, ma mantiene abilitati gli altri log dei componenti del control plane.
Per disabilitare i componenti di logging utilizzando l'API GKE, imposta i
valori corrispondenti nell'oggetto LoggingConfig della risorsa ClusterUpdate nel
metodo
projects.locations.clusters.update.
Passaggi successivi
- Scopri di più sulla sicurezza del control plane.
- Scopri di più sull'accesso amministrativo per i dipendenti di Google.
- Scopri come configurare il logging e il monitoraggio per GKE.
- Scopri come configurare l'accesso a livello di campo ai log.
- Scopri di più sui limiti di utilizzo del logging.
- Scopri di più sull'accesso amministrativo aumentato.