Audit logging

Panoramica

Questo documento descrive come utilizzare Cloud Audit Logs per Google Distributed Cloud (solo software). Google Distributed Cloud utilizza Kubernetes Audit Logging, che mantiene un record cronologico delle chiamate effettuate a un server dell'API Kubernetes del cluster. I log di controllo sono utili per esaminare le richieste API sospette e per raccogliere statistiche. Per informazioni sugli audit log per l'API GKE On-Prem, consulta Audit log dell'API Cloud.

Informazioni su Cloud Audit Logs

Gli audit log vengono scritti in Cloud Audit Logs nel tuo progetto Google Cloud . La scrittura in Cloud Audit Logs offre diversi vantaggi rispetto alla scrittura su disco o all'acquisizione dei log in un sistema di logging on-premise:

  • I log di controllo per tutti i cluster possono essere centralizzati.
  • Le voci di log scritte in Cloud Audit Logs sono immutabili.
  • Le voci di Cloud Audit Logs vengono conservate per 400 giorni.
  • La funzionalità Cloud Audit Logs è inclusa nel prezzo di Google Distributed Cloud.
  • Puoi configurare Google Distributed Cloud in modo che scriva i log su disco o in Cloud Audit Logs.

Audit logging basato su disco

Per impostazione predefinita, i log di controllo vengono scritti su un disco permanente in modo che i riavvii e gli upgrade delle VM non causino la scomparsa dei log.

  • Se il cluster avanzato non è abilitato:

    Google Distributed Cloud conserva fino a 12 GB di voci di audit log.

  • Se è abilitato il cluster avanzato

    Google Distributed Cloud conserva fino a 1 GB di voci di audit log.

Cloud Audit Logs

Se abiliti Cloud Audit Logs per un cluster, le voci del log di controllo Attività di amministrazione del server API Kubernetes del cluster vengono inviate a Google Cloud, utilizzando il progetto Google Cloud che specifichi nel campo cloudAuditLogging.projectID del file di configurazione del cluster. Questo progetto Google Cloud è chiamato progetto di logging di controllo.

Il progetto di logging di controllo deve essere lo stesso del progetto host del parco risorse.

Per memorizzare nel buffer e scrivere le voci di log in Cloud Audit Logs, Google Distributed Cloud esegue il deployment di un pod audit-proxy nel cluster di amministrazione. Questo componente è disponibile anche come container collaterale nei cluster utente.

Limitazioni

Cloud Audit Logs presenta le seguenti limitazioni:

  • Il logging dell'accesso ai dati (richieste get, list, watch) non è supportato.
  • La modifica della policy di controllo di Kubernetes non è supportata.
  • Cloud Audit Logs non è resiliente a interruzioni di rete prolungate. Se le voci di log non possono essere esportate in Google Cloud, vengono memorizzate nella cache in un buffer del disco da 10 GB. Se il buffer si riempie, le voci meno recenti vengono eliminate.
  • Un progetto può supportare fino a circa 1000 service account da utilizzare con Cloud Audit Logs. Più cluster possono utilizzare lo stesso account di servizio.

Abilita l'API Anthos Audit

Abilita l'API Anthos Audit nel progetto di audit logging.

Abilita l'API Anthos Audit

Crea un account di servizio per Cloud Audit Logs

Hai già uno o più service account che hai creato per l'utilizzo con Google Distributed Cloud. Per questa funzionalità, devi creare un account di servizio aggiuntivo chiamato service account di logging di controllo.

  1. Crea il account di servizio di audit logging:

    gcloud iam service-accounts create audit-logging-service-account
  2. Crea un file della chiave JSON per il account di servizio Cloud Audit Logs:

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    dove AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL è l'indirizzo email del tuo account di servizio.

  3. Salva audit-logging-key.json sulla workstation amministrativa nella stessa posizione delle altre chiavi dell'account di servizio.

AVVISO: prima di eliminare questo account di servizio, assicurati di sostituirlo con il nuovo account di servizio nella configurazione del cluster. La procedura è simile a Abilitare Cloud Audit Logs per un cluster utente esistente. Se dimentichi di farlo, segui la guida alla pulizia.

Crea un cluster di amministrazione con Cloud Audit Logs abilitato

Puoi abilitare Cloud Audit Logs per un cluster di amministrazione solo quando lo crei per la prima volta. Non puoi modificare un cluster di amministrazione esistente per attivare Cloud Audit Logs.

  1. Consulta la sezione Creazione di un cluster di amministrazione.

  2. Nel file di configurazione del cluster di amministrazione, compila la sezione cloudAuditLogging.

  3. Imposta cloudAuditLogging.projectID sull'ID del progetto di logging di controllo.

  4. Imposta cloudAuditLogging.clusterLocation su una regione Google Cloud in cui vuoi archiviare gli audit log. Per una latenza migliore, scegli una regione vicina al tuo data center on-premise.

  5. Imposta cloudAuditLogging.serviceAccountKeyPath sul percorso del file della chiave JSON per l'account di servizio di registrazione degli audit.

Ad esempio:

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continua la creazione del cluster come di consueto.

Creare un cluster utente con Cloud Audit Logs abilitato

  1. Consulta Creazione di un cluster utente.

  2. Nel file di configurazione del cluster utente, compila la sezione cloudAuditLogging.

  3. Imposta cloudAuditLogging.projectID sull'ID del progetto di logging di controllo.

  4. Imposta cloudAuditLogging.clusterLocation su una regione Google Cloud in cui vuoi archiviare gli audit log. Per una latenza migliore, scegli una regione vicina al tuo data center on-premise.

  5. Imposta cloudAuditLogging.serviceAccounKeyPath sul percorso del file della chiave JSON per il tuo account di servizio Cloud Audit Logs.

  6. Assicurati che la sezione gkeConnect sia compilata e che gkeConnect.projectID sia uguale a cloudAuditLogging.projectID.

Ad esempio:

gkeConnect:
  projectID: "my-project"
  registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continua la creazione del cluster come di consueto.

Abilita Cloud Audit Logs per un cluster utente esistente

Cloud Audit Logs può essere attivato solo nel Google Cloud progetto in cui è registrato il cluster utente.

Se un cluster utente esistente non è registrato, registralo seguendo questi passaggi prima di attivare Cloud Audit Logs:

  1. Aggiungi una sezione gkeConnect al file di configurazione del cluster utente. Ad esempio:

    gkeConnect:
      projectID: "my-project"
      registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
    
  2. Aggiorna il cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Dopo aver registrato il cluster utente, segui questi passaggi per attivare Cloud Audit Logs:

  1. Compila la sezione cloudAuditLogging del file di configurazione del cluster utente. Per informazioni dettagliate sui singoli campi, consulta Creare un cluster utente con Cloud Audit Logs abilitato. Il projectID nella sezione cloudAuditLogging deve essere uguale a quello nella sezione gkeConnect.

  2. Aggiorna il cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Disabilita Cloud Audit Logs per un cluster utente esistente

  1. Nel file di configurazione del cluster utente, elimina la sezione cloudAuditLogging.

  2. Aggiorna il cluster utente:

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]

Accedere ai log di controllo

Audit logging basato su disco

Puoi trovare i log di controllo per il cluster di amministrazione sui nodi del piano di controllo in /var/log/kube-audit/kube-apiserver-audit.log. Gli audit log del cluster utente si trovano nel bucket PersistentVolumeClaim denominato kube-audit-kube-apiserver-0. Puoi accedere a questi dati all'interno dei tuoi Pod tramite le voci volumes:

Aggiungi questa voce per il cluster di amministrazione:

    volumes:
    - name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""

Aggiungi questa voce per il cluster utente:

    volumes:
    - name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0

Per pianificare il pod sul nodo del cluster di amministrazione appropriato (e solo su questo nodo), devi aggiungere le sezioni nodeSelector e tolerations alle specifiche del pod, come segue:

    spec:
      nodeSelector:
        node-role.kubernetes.io/master: ''
      tolerations:
      - key: node-role.kubernetes.io/master
        value: ""
        effect: NoSchedule

Per il cluster utente, imposta namespace come nome del cluster utente, poi imposta nodeName sullo stesso valore di kube-apiserver-0:

   spec:
     nodeName: NODE_NAME

Per indicare nodeName di kube-apiserver-0, esegui questo comando:

kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'

Il nome file di ogni log di controllo include un timestamp che indica quando il file è stato ruotato. Un file contiene i log di controllo fino a quella data e ora.

Accedere a Cloud Audit Logs

Console

  1. Nella console Google Cloud , vai alla pagina Esplora log nel menu Logging.

    Vai a Esplora log

    Se si apre la pagina Visualizzatore log legacy, scegli Esegui l'upgrade al nuovo Esplora log dal menu a discesa Esegui l'upgrade.

  2. Fai clic nel campo Query per inserire una query.

  3. Inserisci la seguente query nel campo Query:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    Sostituisci PROJECT_ID con l'ID progetto.

  4. Fai clic su Esegui query per visualizzare tutti i log di controllo dei cluster configurati per accedere a questo progetto.

gcloud

  1. Elenca le prime due voci di log nel Log delle attività di amministrazione del tuo progetto che si applicano al tipo di risorsa k8s_cluster:
gcloud logging read \
    'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d
  1. Sostituisci PROJECT_ID con l'ID progetto.

L'output mostra due voci di log. Nota che per ogni voce di log, il campo logName ha il valore projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity e protoPayload.serviceName è uguale a anthosgke.googleapis.com.

Criteri di audit

I criteri di controllo di Kubernetes definiscono le regole per gli eventi registrati come voci di log e specificano i dati che le voci di log devono includere. Il comportamento di Cloud Audit Logs è determinato da una policy di audit logging di Kubernetes configurata staticamente. La modifica di questo criterio per modificare il comportamento di Cloud Audit Logs non è supportata.