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 cluster Google Kubernetes Engine (GKE) mettendo in correlazione i log GKE con i log 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 relative approvazioni di Access Approval mediante la correlazione con fonti di logging aggiuntive di GKE. Questa verifica è del tutto facoltativa e non è necessaria per proteggere il control plane.

Assicurati di avere familiarità con i seguenti concetti:

Questa pagina descrive una parte di un insieme di funzionalità opzionali del control plane in GKE che ti consente di eseguire attività come la verifica del livello di sicurezza del control plane o la configurazione della crittografia e della firma delle credenziali nel control plane utilizzando chiavi che gestisci. Per maggiori dettagli, consulta l'articolo Informazioni sull'autorità del piano di controllo GKE.

Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al piano di controllo gestito. Questa pagina descrive le funzionalità facoltative che offrono maggiore visibilità o controllo sul piano di controllo 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 dell'affidabilità del sito e i dipendenti di assistenza clienti Google Cloud, potrebbe aver bisogno dell'accesso amministrativo alle istanze di Compute Engine che ospitano il tuo control plane. A seconda del pacchetto di assistenza clienti e della configurazione, Access Transparency fornisce audit logging dettagliato per questo accesso amministrativo. Access Approval ti consente di richiedere l'approvazione esplicita prima che qualsiasi membro del personale 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 Google.

Log di accesso al control plane

Quando abiliti l'autorità del control plane GKE, GKE genera log di accesso al control plane che puoi utilizzare facoltativamente per eseguire il cross-reference dei log di controllo generati da Access Transparency e da Access Approval. GKE aggiunge i log di accesso al control plane al bucket _Default in Logging per registrare le connessioni di rete in entrata e gli eventi SSH specifici nelle istanze del control plane. Per generare i log di accesso al piano di controllo per i tuoi cluster, devi abilitare l'autorità del piano di controllo GKE nel tuo progetto.

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 di zona) 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 piano di controllo, individua i log di accesso al piano di controllo per il tuo cluster e abbinali ai log di controllo di Access Transparency e Approvazione accesso. In questo modo puoi verificare che tutte le connessioni SSH alle istanze del control plane siano il risultato di un accesso amministrativo autorizzato da parte del personale di Google. Quando abiliti 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à, installala e poi inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Requisiti

I log di accesso al control plane richiedono GKE 1.31.1-gke.1846000 o versioni successive.

Ruoli e autorizzazioni richiesti

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

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.

Abilita i log di accesso al control plane del cluster GKE

Puoi abilitare la generazione di 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

Abilita 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 del 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 metodo projects.locations.clusters.create, imposta i valori corrispondenti nell'oggetto LoggingConfig della risorsa Cluster.

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 del control plane, devi:

  1. Trova i componenti di logging esistenti utilizzati dal cluster.
  2. Identifica i valori corrispondenti da specificare nel flag --logging nell'gcloud CLI per mantenere attive queste componenti di logging.
  3. 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 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 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.

  3. Aggiorna la configurazione della registrazione 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 di componenti di logging già utilizzati dal cluster. Assicurati di specificare i valori 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 attivare 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 specificare i componenti di logging quando aggiorni un cluster utilizzando l'API GKE, nel metodo projects.locations.clusters.update, imposta i valori dei componenti di logging esistenti e nuovi nell'oggetto LoggingConfig della risorsa ClusterUpdate.

Esempio di aggiornamento del cluster per abilitare i log di accesso al control plane

Considera 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 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

Eseguire il cross-reference dei 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:

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

    Vai a Esplora log

  2. Per ottenere tutti i log per un cluster specifico, inclusi i log di accesso del 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 deve mostrare tutti i seguenti tipi di log per il 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 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, quindi il volume dei log dovrebbe essere ridotto.

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

  1. Per ogni log SSH del control plane, verifica se esiste un log Access Transparency in un intervallo di 15 minuti prima del timestamp del log SSH. Questa finestra di tempo tiene conto della chiusura della sessione SSH finale che avviene diversi minuti dopo che la connessione iniziale è stata registrata da 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, verifica se ogni log di Access Transparency ha un campo accessApprovals corrispondente. Fai un riferimento incrociato di questo campo con le richieste di approvazione dell'accesso per il tuo cluster.

    Per ricevere le 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. (Facoltativo) 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 control plane che GKE genera quando il personale 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 di destinazione
  • Direzione e protocollo di connessione

Il seguente esempio mostra un 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 della 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 cluster.
    • LOCATION: la Google Cloud posizione del tuo cluster.
    • CLUSTER_NAME: il nome del tuo cluster.
  • connection: Dettagli del 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 piano di controllo.
    • dest_port: il numero di porta di destinazione.
    • direction: la direzione della connessione. Il valore è sempre INGRESS.
    • protocol: il protocollo IP, ad esempio TCP.

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 è stato modificato 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 della 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 cluster.
    • LOCATION: la Google Cloud posizione del tuo cluster.
    • CLUSTER_NAME: il nome del tuo cluster.
  • message: dettagli sulla connessione SSH.

Disattiva i log di accesso al control plane

  1. Per visualizzare i tipi di log specifici utilizzati dal cluster, esegui questo 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 disabilitare i log di accesso del control plane per un cluster, esegui questo 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 disattiva i log di accesso al control plane, ma mantiene attivi gli altri log dei componenti del control plane.

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