Verificare l'emissione e l'utilizzo delle identità


Questa pagina mostra come utilizzare i log per controllare l'emissione e l'utilizzo delle identità Kubernetes, sotto forma di certificati e token dell'account di servizio, dal piano di controllo del cluster Google Kubernetes Engine (GKE). Questa verifica è del tutto facoltativa e non è obbligatoria per proteggere il tuo control plane.

Questa guida è rivolta agli amministratori della sicurezza e ai proprietari della piattaforma che hanno requisiti specifici di conformità o criteri dell'organizzazione per il controllo dell'emissione e della firma delle credenziali. Dovresti già avere configurato chiavi e CA autogestite con l'autorità del piano di controllo GKE.

Dovresti già 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 sui log di emissione dell'identità

I log di emissione delle identità GKE sono audit log del piano di controllo che registrano quando il piano di controllo emette le credenziali e quando queste vengono impiegate nel cluster. Puoi utilizzare questi log per monitorare la durata di una credenziale, inclusi il rilascio e l'utilizzo, correlando i log di rilascio delle identità con i log di Cloud KMS, Certificate Authority Service e dell'API Kubernetes. I log di emissione delle identità GKE vengono attivati quando si utilizza l'autorità del control plane GKE. Questi log monitorano il rilascio e l'utilizzo dei seguenti tipi di credenziali:

  • Certificati X.509
  • Token web JSON (JWT) del cluster

Certificati X.509

Kubernetes utilizza i certificati X.509 per l'autenticazione dei certificati client. Per emettere i certificati, il piano di controllo di Kubernetes invia una richiesta di firma del certificato (CertificateSigningRequest) approvata a un'autorità di certificazione (CA) in CA Service. L'CA poi rilascia un certificato utilizzando la chiave corrispondente in Cloud KMS per firmare il digest del certificato.

I log del server dell'API Kubernetes contengono i dettagli della firma del certificato per qualsiasi chiamata all'API Kubernetes autenticata con un certificato. La voce ID credenza nel log ha il seguente formato:

"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"

Il valore CERTIFICATE_HASH è l'hash SHA256 del certificato, che puoi utilizzare per tracciare il ciclo di vita del certificato.

Puoi utilizzare i log dei certificati del server API Kubernetes per tracciare il ciclo di vita del certificato correlando i log dei seguenti servizi:

  • Log di emissione delle identità GKE: utilizza la query protoPayload.metadata.credentialId per trovare log specifici di emissione delle identità GKE in base all'ID credenziale dei log del server API Kubernetes. Quindi, utilizza il campo protoPayload.metadata.certificateFingerprint del log di emissione delle identità GKE per correlare i log di emissione delle identità con i log del servizio CA.
  • Log del servizio CA: trova la voce di log di emissione del certificato, che contiene i seguenti ID:
    • cert_fingerprint.sha256_hash: l'hash SHA256 del certificato firmato. Utilizza questo ID per abbinare i log agli eventi dell'API GKE e Kubernetes.
    • tbs_certificate_digest: un hash dei contenuti del certificato che sono stati inviati per la firma da una chiave Cloud KMS. Utilizza questo ID per abbinare i log ai log di Cloud KMS.
  • Log di firma Cloud KMS: utilizza il valore tbs_certificate_digest del log del servizio CA per confermare che la chiave Cloud KMS prevista ha firmato il certificato.

Token web JSON (JWT)

I JWT (token web JSON) firmati vengono utilizzati come token bearer per le entità del cluster, come gli account di servizio Kubernetes, per autenticare le richieste all'API Kubernetes. Quando viene creato un pod che utilizza un account di servizio specifico, Kubernetes crea un JWT e lo monta nel pod. Quando utilizzi l'autorità del piano di controllo GKE per eseguire le tue chiavi e CA, questo JWT viene firmato e successivamente verificato utilizzando la chiave di firma dell'account di servizio in Cloud KMS.

I log del server dell'API Kubernetes contengono i dettagli della firma del token per qualsiasi chiamata all'API Kubernetes autenticata con un JWT. La voce della firma del token nel log ha il seguente formato:

"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"

Il valore JWT_ID è una stringa che identifica il JWT utilizzato nella chiamata all'API Kubernetes.

Puoi utilizzare l'ID JWT dai log del server API Kubernetes per tracciare il ciclo di vita di un JWT correlando i seguenti log:

  • Log di emissione delle identità GKE: utilizza l'ID JWT dei log del server API Kubernetes per trovare voci di emissione JWT specifiche. Ogni voce contiene anche il campo toBeSignedDigest, il cui valore può corrispondere ai log di Cloud KMS.
  • Log di firma Cloud KMS: utilizza il valore del campo toBeSignedDigest nei log di emissione dell'identità GKE per confermare che la chiave Cloud KMS prevista ha firmato il JWT.

Prezzi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

  1. Configura il piano di controllo del cluster GKE con CA o chiavi autogestite.

  2. Abilita le seguenti API del servizio Cloud Audit Logging:

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per accedere ai log di emissione delle identità, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Esegui tutte le azioni in Logging: Amministratore Logging (roles/logging.admin).
  • Visualizza i log: Private Logs Viewer (roles/logging.privateLogViewer).

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.

Requisiti e limitazioni

Si applicano i seguenti requisiti e limitazioni:

  • Devi utilizzare GKE 1.31.1-gke.1846000 o versioni successive.
  • I log di emissione delle identità vengono registrati come log di Cloud Audit Logs e hanno un periodo di conservazione impostato di 400 giorni. Il periodo di conservazione non è configurabile, ma puoi indirizzare gli audit log degli eventi di sistema ad altre destinazioni per periodi di conservazione più lunghi.

Verifica i certificati

Puoi utilizzare i log di emissione dell'identità dell'autorità del piano di controllo GKE per confermare che un certificato è stato emesso o utilizzato correttamente. Puoi utilizzare uno dei seguenti log o una combinazione di log per confermare le informazioni sull'emissione e sull'utilizzo dei certificati:

Log dei certificati

Log dell'API Kubernetes per l'utilizzo del certificato

Registra i dettagli della firma del certificato ogni volta che il certificato viene utilizzato con l'API Kubernetes.

Log GKE per le operazioni di emissione dei certificati

Registra tutte le operazioni di emissione dei certificati come audit log Evento di sistema. Questi log sono abilitati per impostazione predefinita su qualsiasi cluster che utilizza chiavi o CA gestite dall'utente dell'autorità del piano di controllo GKE.

Log di controllo del servizio CA

Registra una voce ogni volta che viene emesso un certificato.

Audit log di Cloud KMS

Registra una voce ogni volta che viene firmato un digest, in risposta a una richiesta di firma da parte del servizio CA.

Verificare l'utilizzo del certificato con i log dell'API Kubernetes

Per trovare le voci di log per le chiamate API autenticate utilizzando i certificati, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"X509SHA256="
    
  3. Fai clic su Esegui query.

    Questa query restituisce tutti i log del server dell'API Kubernetes con un certificato X.509 associato. Trova voci di log specifiche da esaminare utilizzando gli strumenti di sicurezza o controllando i log manualmente.

Per correlare questi log con altri tipi di log, individua il seguente campo:

"authentication.k8s.io/credential-id":"CREDENTIAL_ID"

Il valore CREDENTIAL_ID è l'identificatore che puoi utilizzare per correlare i log di GKE, del servizio CA e di Cloud KMS. Il valore CREDENTIAL_ID ha il formato "X509SHA256=CERTIFICATE_HASH".

Verificare l'emissione del certificato con i log GKE

Per trovare le voci di log GKE per gli eventi di rilascio dei certificati, svolgi i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    resource.type="gke_cluster"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.metadata.credentialId="CREDENTIAL_ID"
    

    Sostituisci quanto segue:

  3. Fai clic su Esegui query.

Verificare l'emissione del certificato con i log del servizio CA

Per trovare i log del servizio CA corrispondenti agli eventi di rilascio dei certificati GKE:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    resource.type="audited_resource"
    protoPayload.serviceName="privateca.googleapis.com"
    protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate"
    protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
    

    Sostituisci CERTIFICATE_HASH con CERTIFICATE_HASH della sezione Verificare l'utilizzo del certificato con i log dell'API Kubernetes. Assicurati di omettere il prefisso X509SHA256= dall'hash.

  3. Fai clic su Esegui query.

    Questa query restituisce un log contenente un campo tbs_certificate_digest: DIGEST_VALUE nella sezione della risposta alla descrizione del certificato.

Puoi utilizzare DIGEST_VALUE per associare i log di firma Cloud KMS per il certificato.

Verificare l'emissione dei certificati con i log di firma di Cloud KMS

Per trovare gli eventi di firma Cloud KMS per gli eventi di rilascio dei certificati del servizio CA, completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Sostituisci DIGEST_VALUE con il valore del digest riportato nella sezione Verificare l'emissione del certificato con i log del servizio CA.

  3. Fai clic su Esegui query.

    Questa query restituisce i log per gli eventi di emissione dei certificati. I log di Cloud KMS non distinguono tra certificati e JWT, pertanto le voci di log per entrambi sono identiche.

Verificare i token

Puoi utilizzare i log di assegnazione dell'identità dell'autorità del piano di controllo di GKE e i log di firma di Cloud KMS per confermare che un token web JSON (JWT) sia stato emesso correttamente.

L'avvio del traceback dell'evento di emissione del token in genere inizia con il monitoraggio del log dell'API Kubernetes per l'attività dell'account di servizio. Dopo aver identificato un log delle attività che richiede ulteriori accertamenti, puoi utilizzare i seguenti log per confermare le informazioni sull'emissione e sull'utilizzo delle credenziali:

Log JWT

Log dell'API Kubernetes per l'utilizzo di JWT

Registra i dettagli della firma JWT ogni volta che viene utilizzato un JWT con l'API Kubernetes.

Log GKE per le operazioni di emissione JWT

Registra tutte le operazioni di emissione di token come audit log degli eventi di sistema. Questi log sono abilitati per impostazione predefinita su qualsiasi cluster che utilizza chiavi o CA gestite dall'utente dell'autorità del piano di controllo GKE.

Audit log di Cloud KMS

Registra una voce ogni volta che un token viene firmato e emesso.

Verificare l'utilizzo del token con i log del server dell'API Kubernetes

Per trovare le voci di log per gli eventi di utilizzo dei token:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"JTI="
    
  3. Fai clic su Esegui query.

    Questa query restituisce tutti i log del server dell'API Kubernetes con un JWT associato. Trova voci di log specifiche da esaminare utilizzando gli strumenti di sicurezza o controllando manualmente i log.

Per correlare questi log con altri tipi di log, individua il seguente campo:

"authentication.k8s.io/credential-id": "JTI=JWT_ID"

JWT_ID è l'identificatore del token che puoi utilizzare per correlare i log di GKE e Cloud KMS.

Verificare l'emissione del token con i log GKE

Per trovare le voci di log per gli eventi di emissione di token:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    resource.type="gke_cluster"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT"
    protoPayload.metadata.credentialId="JTI=JWT_ID"
    

    Sostituisci quanto segue:

  3. Fai clic su Esegui query.

    Questa query restituisce i log che contengono un campo toBeSignedDigest.

Puoi utilizzare il valore toBeSignedDigest per trovare gli eventi di firma Cloud KMS.

Verificare l'emissione dei token con i log di firma di Cloud KMS

Per trovare le voci di log per i digest firmati:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. Incolla la seguente espressione nel campo dell'editor di query:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Sostituisci DIGEST_VALUE con il valore nel campo toBeSignedDigest della sezione Verificare l'emissione di token con i log GKE.

  3. Fai clic su Esegui query.

    Questa query restituisce i log per gli eventi di emissione dei certificati. I log di Cloud KMS non distinguono tra certificati e JWT, pertanto le voci di log per entrambi sono identiche.

Passaggi successivi