Audit logging

Panoramica

Cluster Anthos su VMware (GKE On-Prem) utilizza l'audit logging di Kubernetes, che conserva un record cronologico delle chiamate effettuate al server API di Kubernetes. Gli audit log sono utili per esaminare le richieste API sospette e per raccogliere statistiche.

Puoi configurare un cluster per scrivere audit log su disco o su Cloud Audit Logs in un progetto Google Cloud. La scrittura in Cloud Audit Logs ha diversi vantaggi rispetto alla scrittura su disco o persino all'acquisizione di log in un sistema di logging on-premise:

  • Gli audit log per tutti i cluster Anthos 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.
  • Cloud Audit Logs è incluso nel prezzo di Anthos.

Audit log basato su disco

Per impostazione predefinita, gli audit log vengono scritti in un disco permanente in modo che i VM riavviati e gli upgrade non scompaiano i log. Cluster Anthos su VMware conserva fino a 12 GB di voci di audit log.

Cloud Audit Logs

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

Il progetto di audit logging deve essere uguale al progetto di connessione.

Quando abiliti Cloud Audit Logs, Cluster Anthos su VMware disabilita gli audit logging basati su disco.

Per eseguire il buffer e scrivere voci di log in Cloud Audit Logs, Cluster Anthos su VMware 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 per Cluster Anthos su VMware è una funzionalità in anteprima. Questa release di anteprima ha diverse limitazioni:

  • Il logging degli accessi ai dati non è supportato.

  • La modifica del criterio di controllo di Kubernetes non è supportata.

  • Cloud Audit Logs non è resiliente alle interruzioni di rete estese. Se le voci di log non possono essere esportate in Google Cloud, vengono memorizzate nella cache in un buffer di disco da 10 G. Se il buffer si riempie, le voci successive vengono eliminate.

Abilita l'API Anthos Audit

Abilitare l'API Anthos Audit nel tuo progetto di audit logging.

Abilita l'API Anthos Audit

Crea un account di servizio per Cloud Audit Logs

Hai già uno o più account di servizio che hai creato per l'utilizzo con Cluster Anthos su VMware. Per questa funzionalità, devi creare un account di servizio aggiuntivo chiamato account di servizio di audit logging.

  1. Crea il tuo account di servizio per l'audit logging:

    gcloud iam service-accounts create audit-logging-service-account
  2. Crea un file di chiave JSON per il tuo 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. Risparmia audit-logging-key.json sulla workstation di amministrazione nella stessa località delle altre chiavi dell'account di servizio.

Crea un cluster di amministrazione con Cloud Audit Logs abilitati

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 abilitare Cloud Audit Logs.

  1. Fai riferimento a 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 tuo progetto di audit logging.

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

  5. Imposta cloudAuditLogging.serviceAccountKeyPath sul percorso del file della chiave JSON per il tuo account di servizio di audit logging.

Ecco alcuni esempi:

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

Continua con la creazione del cluster come di consueto.

Crea un cluster utente con Cloud Audit Logs abilitati

  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 tuo progetto di audit logging.

  4. Imposta cloudAuditLogging.clusterLocation su una regione Google Cloud in cui vuoi archiviare gli audit log. Per migliorare la latenza, 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.

Ecco alcuni esempi:

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 con la creazione del cluster come di consueto.

Abilita audit log di Cloud per un cluster utente esistente

Per abilitare Cloud Audit Logs, il cluster deve essere già registrato. Ciò significa che hai compilato la sezione gkeConnect del file di configurazione del cluster prima di creare il cluster.

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

  2. Imposta cloudAuditLogging.projectId sull'ID del tuo progetto di audit logging.

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

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

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

Ecco alcuni esempi:

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"

Aggiorna il cluster utente:

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

Disabilita audit log di Cloud 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 log basato su disco

  1. Visualizza i server API di Kubernetes in esecuzione nel cluster di amministrazione e tutti i cluster utente associati:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
    

    dove [ADMIN_CLUSTER_KUBECONFIG] è il file kubeconfig del cluster di amministrazione.

  2. Scarica gli audit log del server API:

    kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
    

    Questo comando recupera il file di log più recente, che può contenere fino a 1 GB di dati per il cluster di amministrazione e fino a 850 GB per i cluster utente.

    Gli audit log per il cluster di amministrazione sono disponibili anche nei nodi del piano di controllo in /var/log/kube-audit/kube-apiserver-audit.log. Gli audit log per il cluster utente si trovano nella proprietà kube-audit-kube-apiserver-0 con nome PersistentVolumeClaim. Puoi accedere a questi dati all'interno dei tuoi pod tramite le voci volume come segue:

    volumes:
    ‐ name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""
    
    volumes:
    ‐ name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0
        readOnly: true
    

    Per pianificare il tuo pod sul nodo del cluster di amministrazione appropriato (e solo su questo nodo), dovrai aggiungere le sezioni nodeSelector e tolerations alla specifica del pod, in questo modo:

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

    Per il cluster utente, utilizza questo nodeSelector:

    spec:
     nodeSelector:
       kubernetes.googleapis.com/cluster-name: [USER_CLUSTER_NAME]
    

    I record di controllo meno recenti vengono conservati in file separati. Per visualizzare questi file:

    kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
    

    Il nome file di ogni log di controllo presenta un timestamp che indica quando è stato eseguito la rotazione del file. Un file contiene i log di controllo risalenti fino a quel momento e a quella data.

Cloud Audit Logs

Console

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

    Vai a Esplora log

  2. Nella casella Filtra per etichetta o testo, appena sopra i menu a discesa visualizzati sopra, fai clic sulla Freccia giù per aprire il menu a discesa. Nel menu, scegli Converti in filtro avanzato.

  3. Compila la casella di testo con il seguente filtro:

    resource.type="k8s_cluster"
    logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  4. Fai clic su Invia filtro per visualizzare tutti gli audit log dei cluster Anthos sui cluster VMware configurati per accedere a questo progetto.

gcloud

Elenca le prime due voci nel log dell'Log delle attività di amministrazione del 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

dove [PROJECT_ID] è l'ID progetto.

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

Criteri di audit

Il comportamento di Cloud Audit Logs è determinato da un criterio di audit logging di Kubernetes configurato in modo statico. La modifica di questo criterio non è attualmente supportata.