Audit logging

Panoramica

Google Distributed Cloud (solo software) per VMware supporta l'audit logging sia a livello di API Google Cloud e di cluster Kubernetes. Questo documento fornisce e informazioni sull'audit logging dei cluster Kubernetes. Per informazioni su Audit logging delle API Google Cloud, consulta Informazioni sugli audit log dell'API Cloud.

Google Distributed Cloud utilizza Audit logging di Kubernetes che conserva un registro cronologico delle chiamate effettuate all'API Kubernetes di un cluster o server web. Gli audit log sono utili per indagare sulle richieste API sospette e per raccogliendo statistiche.

Puoi configurare un cluster per scrivere audit log su disco Cloud Audit Logs in di un progetto Google Cloud. Scrivere in Cloud Audit Logs offre diversi vantaggi tramite la scrittura su disco o persino l'acquisizione dei log in un sistema di logging on-premise:

  • Gli audit log per tutti i cluster GKE 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 logging basato su disco

Per impostazione predefinita, gli audit log vengono scritti in un il disco in modo che i riavvii e gli upgrade delle VM non causino la scomparsa dei log. Google Distributed Cloud conserva fino a 12 GB di voci di audit log.

Cloud Audit Logs

Se abiliti Cloud Audit Logs per un cluster, allora l'audit log dell'attività di amministrazione le voci del server API Kubernetes del cluster vengono inviate a Google Cloud, utilizzando il progetto Google Cloud specificato 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 tuo progetto host del parco risorse.

Per eseguire il buffering 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 sui cluster utente.

Limitazioni

L'attuale versione di Cloud Audit Logs per Google Distributed Cloud presenta diverse limitazioni:

  • Il logging dell'accesso ai dati (get, list, watch) 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 buffer del 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 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 creato per essere utilizzato con Google Distributed Cloud. Per questa funzionalità, devi creare un account di servizio aggiuntivo account di servizio per gli audit log.

  1. Crea l'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'email del tuo account di servizio.

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

Crea un cluster di amministrazione con Cloud Audit Logs abilitato

Puoi abilitare Cloud Audit Logs per un cluster di amministrazione solo la prima volta per creare il cluster di amministrazione. Non puoi modificare un cluster di amministrazione esistente per abilitare Cloud Audit Logs.

  1. Consulta Creazione di un cluster di amministrazione.

  2. Nel file di configurazione del cluster di amministrazione, compila il campo cloudAuditLogging .

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

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

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

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.

Crea un cluster utente con Cloud Audit Logs abilitato

  1. Consulta Creazione di un cluster utente.

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

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

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

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

  6. Assicurati che la sezione gkeConnect sia compilata e che gkeConnect.projectID è lo stesso di 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 abilitato solo nel progetto Google Cloud in cui è registrato il cluster utente.

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

  1. Aggiungi una sezione gkeConnect a 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 abilitarlo Cloud Audit Logs:

  1. Compila la sezione cloudAuditLogging del tuo file di configurazione del cluster utente. Consulta Crea un cluster utente con Cloud Audit Logs abilitato per informazioni dettagliate sui singoli campi. projectID in cloudAuditLogging deve essere uguale a quello della 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 cloudAuditLogging .

  2. Aggiorna il cluster utente:

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

Accedi agli audit log

Audit logging basato su disco

Puoi trovare gli audit log per il cluster di amministrazione nella nodi del piano di controllo in /var/log/kube-audit/kube-apiserver-audit.log. La Gli audit log per il cluster utente si trovano nell'istanza PersistentVolumeClaim denominato kube-audit-kube-apiserver-0. Puoi accedere a questi dati all'interno Pod tramite 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 questo nodo) devi aggiungere le sezioni nodeSelector e tolerations le specifiche del tuo 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, imposta namespace come nome del cluster utente, quindi imposta nodeName e kube-apiserver-0:

   spec:
     nodeName: NODE_NAME

Per segnalare 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 audit log ha un timestamp che indica quando il file è stato ruotato. Un file contiene i log di controllo fino a quella data e ora.

Cloud Audit Logs

Console

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

    Vai alla pagina Log

  2. Nella casella Filtra per etichetta o testo, appena sopra il menu a discesa dai menu descritti sopra, fai clic sulla freccia giù per aprire il menu a discesa. Dal menu, scegli Converti in filtro avanzato.

  3. Compila il campo 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 i log di controllo configurati per accedere a questo progetto.

gcloud

Elenca le prime due voci di log nel Log delle attività di amministrazione del progetto che si applica 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. 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

Il comportamento di Cloud Audit Logs è determinato da un criterio di audit logging di Kubernetes configurato in modo statico. Al momento la modifica di questo criterio non è supportata, ma lo sarà disponibile in una release futura.