Verificare le connessioni di Google al piano di controllo GKE


Questa pagina descrive come verificare le connessioni effettuate dal personale Google al control plane del tuo cluster Google Kubernetes Engine (GKE) correlando i log 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 è rivolta agli amministratori della sicurezza che vogliono verificare ulteriormente i contenuti dei log di Access Transparency e le approvazioni dell'accesso associate correlandoli con altre origini di registrazione di GKE. Questa verifica è del tutto facoltativa e non è obbligatoria per proteggere il tuo control plane.

Assicurati di conoscere i seguenti concetti:

Questa pagina descrive una parte di un insieme di funzionalità facoltative del piano di controllo in GKE che ti consente di eseguire attività come verificare la posizione di sicurezza del piano di controllo o configurare la crittografia e la firma delle credenziali nel piano di controllo utilizzando le chiavi che gestisci. Per maggiori dettagli, consulta Informazioni sull'autorità del piano di controllo GKE.

Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al control plane gestito. Questa pagina descrive funzionalità facoltative che ti offrono maggiore visibilità o controllo sul piano di controllo di GKE.

Informazioni sull'accesso di Google alle istanze del control plane del cluster

Durante le sessioni di risoluzione dei problemi o per altri motivi commerciali giustificati, il personale di Google, come gli addetti all'affidabilità del sito e i dipendenti assistenza clienti Google Cloud, potrebbe avere bisogno di accesso amministrativo alle istanze Compute Engine che ospitano il tuo piano di controllo. A seconda del pacchetto di assistenza clienti e della configurazione, Access Transparency fornisce audit log 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 scoprire 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 attivi l'autorità del piano di controllo GKE, GKE genera log di accesso al piano di controllo che puoi utilizzare facoltativamente per eseguire il cross-reference dei log di controllo generati da Access Transparency e Access Approval. GKE aggiunge i log di accesso al piano di controllo al bucket _Default in Logging per registrare le connessioni di rete in entrata ed eventi SSH specifici nelle istanze del piano di controllo. Per generare log di accesso al piano di controllo per i tuoi cluster, devi attivare l'autorità del piano di controllo GKE nel tuo progetto.

GKE genera i seguenti log di accesso per il piano di controllo:

Il volume dei log di connessione del piano di controllo dipende da fattori quali il numero di nodi nel cluster, il numero di istanze del piano di controllo (i cluster regionali hanno più istanze del piano di controllo rispetto ai cluster zonali) e la frequenza con cui i tuoi carichi di lavoro chiamano il server API Kubernetes. Il volume dei log SSH è ridotto e dipende dal numero di riavvii del nodo.

Per verificare le connessioni al piano di controllo, individua i log di accesso al piano di controllo per il tuo cluster e associali ai log di controllo di Access Transparency e Approvazione accesso. In questo modo puoi verificare che tutte le connessioni SSH alle istanze del piano di controllo sono state generate dall'accesso amministrativo autorizzato del personale di Google. Quando attivi l'autorità del control plane GKE per il tuo cluster, tutto l'accesso SSH da parte del personale di Google al tuo control plane è non interattivo, il che significa che ogni connessione SSH esegue un singolo comando che autorizzi.

Prezzi

Si applicano le seguenti considerazioni sui prezzi:

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Requisiti

I log di accesso al piano di controllo richiedono GKE 1.31.1-gke.1846000 o versioni successive.

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per attivare la generazione dei log e per accedere ed elaborare i log, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Abilita i log di accesso al control plane del cluster GKE

Puoi attivare la generazione di log di accesso al piano di controllo per i cluster in modalità Autopilot e in modalità standard attivando il componente di registrazione corrispondente. Per ulteriori informazioni 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 del piano di controllo sono i seguenti:

  • Log SSH del piano di controllo: KCP_SSHD
  • Log delle connessioni del piano di controllo: KCP_CONNECTION

Attivare i log di accesso al piano di controllo in un nuovo cluster

L'esempio seguente crea un cluster in modalità Autopilot con entrambi i tipi di log di accesso al piano di controllo abilitati. Per attivare un solo tipo di log di accesso al piano di controllo, 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 posizione in cui creare il cluster.

Per specificare i componenti di logging quando crei un cluster utilizzando l'API GKE, nel metodo projects.locations.clusters.create imposta i valori corrispondenti nell'oggetto LoggingConfig della risorsa Cluster.

Attivare i log di accesso al control plane su un cluster esistente

Per aggiornare la configurazione di logging di un cluster esistente in modo da attivare i log di accesso al piano di controllo, devi eseguire i seguenti passaggi:

  1. Individua i componenti di logging esistenti utilizzati dal tuo cluster.
  2. Identifica i valori corrispondenti da specificare nel flag --logging nell'gcloud CLI per mantenere attivi questi componenti di logging.
  3. Aggiorna la configurazione del logging del cluster per attivare 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 da quelli visualizzati quando descrivi il cluster.

  1. 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_MANAGER
    
  2. Identifica i valori gcloud CLI per il flag --logging che corrisponde alla configurazione del componente di logging dall'output del passaggio precedente. Per un elenco dei valori gcloud CLI che corrispondono a componenti di registrazione specifici, consulta la tabella Log disponibili.

  3. 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_LOGS
    

    Sostituisci quanto segue:

    • EXISTING_LOGS: un elenco separato da virgole dei componenti di logging già utilizzati dal cluster. Assicurati di specificare i valori della CLI gcloud corrispondenti a questi componenti di registrazione, ricavati dalla tabella Log disponibili.
    • KCP_ACCESS_LOGS: un elenco separato da virgole dei tipi di log di accesso al piano di controllo da attivare per il cluster, come segue:

      • Per i log SSH del piano di controllo, specifica KCP_SSHD.
      • Per i log di connessione del piano di controllo, specifica KCP_CONNECTION.

Per specificare i componenti di logging quando aggiorni un cluster utilizzando l'API GKE, nel metodo projects.locations.clusters.update imposta i valori esistenti e dei nuovi componenti di logging nell'oggetto LoggingConfig della risorsa ClusterUpdate.

Aggiornamento del cluster di esempio per abilitare i log di accesso al piano di controllo

Consideriamo un cluster per il quale il comando gcloud container clusters describe ha la seguente configurazione di logging:

SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER

Il seguente comando di aggiornamento del cluster attiva entrambi i tipi di log di accesso al piano di controllo 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

Eseguire il confronto incrociato dei log di accesso al piano di controllo 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:

  1. Nella console Google Cloud, apri la pagina Esplora log.

    Vai a Esplora log

  2. Per recuperare tutti i log di un cluster specifico, inclusi i log di accesso al piano di controllo 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 cluster:

  • Log di Access Transparency
  • Log delle connessioni 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 eventuali connessioni SSH quando esegui la query di logging della 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 piano di controllo, pertanto il volume dei log dovrebbe essere ridotto.

Se vuoi, puoi eseguire i seguenti controlli aggiuntivi dei contenuti dei log:

  1. Per ogni log SSH del piano di controllo, 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 della sessione SSH finale che si verifica diversi minuti dopo la registrazione della connessione iniziale da parte di Access Transparency.
  2. 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.
  3. Se utilizzi Access Approval per il tuo cluster, controlla se ogni log di Access Transparency ha un campo accessApprovals corrispondente. Esegui il confronto tra questo campo e le richieste di approvazione dell'accesso per il tuo cluster.

    Per ricevere richieste di approvazione di accesso per il tuo progetto, consulta Visualizzare le richieste di approvazione di accesso storiche. L'approvazione dell'accesso potrebbe essere soggetta a esclusioni.

  4. Se vuoi, convalida la firma dell'approvazione dell'accesso firmata associata al log di Access Transparency.

Dettagli del log di accesso al control plane

Questa sezione fornisce dettagli ed esempi dei log di accesso al piano di controllo che GKE genera quando il personale di Google si connette alle tue istanze del piano di controllo.

Log delle connessioni del piano di controllo

GKE aggiunge un log delle connessioni del piano di controllo per ogni nuova connessione di rete in entrata a un'istanza del piano di controllo. Questi log includono dettagli specifici come:

  • Indirizzi IP e porte di origine e di destinazione
  • Direzione e protocollo di connessione

Di seguito è riportato un esempio di log di connessione del piano di controllo:

{
  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 della voce di log sono pertinenti per verificare le azioni di Google:

  • cluster.cluster_urn: l'identificatore 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 numerico del progetto cluster.
    • LOCATION: la località Google Cloud del tuo cluster.
    • CLUSTER_NAME: il nome del tuo 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 della porta di destinazione.
    • direction: la direzione di connessione. Il valore è sempre INGRESS.
    • protocol: il protocollo IP, ad esempio TCP.

Log SSH del piano di controllo

GKE aggiunge i log SSH del piano di controllo per gli eventi correlati alle connessioni SSH alle istanze del piano di controllo. GKE registra i seguenti eventi:

  • Chiave SSH accettata per un utente
  • Lo stato della sessione è passato da 0 a 1, a indicare che l'utente ha eseguito l'accesso
  • Sessione SSH aperta
  • Sessione SSH chiusa
  • Lo stato della sessione è passato da 1 a 0, a indicare che l'utente ha eseguito la disconnessione
  • Sessione SSH non riuscita

Ad esempio, il seguente log SSH del piano di controllo 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 della voce di log sono pertinenti per verificare le azioni di Google:

  • cluster.cluster_urn: l'identificatore 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 numerico del progetto del cluster.
    • LOCATION: la località Google Cloud del tuo cluster.
    • CLUSTER_NAME: il nome del tuo cluster.
  • message: dettagli sulla connessione SSH.

Disattivare i log di accesso del control plane

  1. 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_CONNECTION
    
  2. Per disattivare i log di accesso al piano di controllo 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 registrazione dall'output del comando precedente. Questo comando di esempio disattiva i log di accesso al piano di controllo, ma mantiene attivi gli altri log dei componenti del piano di controllo.

Per disattivare 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