Creare audit log di backup e ripristino

Questa pagina contiene i passaggi per installare e configurare i componenti necessari per creare un backup. Descrive inoltre come ripristinare e recuperare l'accesso ai log di controllo storici dal backup.

Configurare un backup in un bucket remoto

Questa sezione contiene i passaggi per creare un backup per i log di controllo in un bucket compatibile con S3.

Prima di iniziare

Prima di poter creare un backup dei log di controllo, devi avere accesso alle seguenti risorse:

  • Un bucket S3 remoto con un endpoint, una chiave di accesso segreta e un ID chiave di accesso.
  • Un certificato dell'autorità di certificazione (CA) per il sistema di archiviazione.
  • Un cluster funzionante.

Ottieni le credenziali per accedere al bucket di origine

Segui questi passaggi per trovare le credenziali del bucket che contiene gli audit log:

  1. Nel cluster di amministrazione principale, elenca i bucket nello spazio dei nomi del progetto:

    kubectl get bucket -n PROJECT_NAMESPACE
    

    L'output deve essere simile all'esempio seguente, in cui i bucket di logging degli audit mostrano un nome e un endpoint:

    NAME                          BUCKET NAME                   DESCRIPTION                                                         STORAGE CLASS   FULLY-QUALIFIED-BUCKET-NAME         ENDPOINT                                       REGION   BUCKETREADY   REASON                    MESSAGE
    audit-logs-loki-all           audit-logs-loki-all           Bucket for storing audit-logs-loki-all logs                         Standard        wwq2y-audit-logs-loki-all           https://appliance-objectstorage.zone1.google.gdch.test   zone1    True          BucketCreationSucceeded   Bucket successfully created.
    cortex-metrics-alertmanager   cortex-metrics-alertmanager   storage bucket for cortex metrics alertmanager configuration data   Standard        wwq2y-cortex-metrics-alertmanager   https://appliance-objectstorage.zone1.google.gdch.test   zone1    True          BucketCreationSucceeded   Bucket successfully created.
    cortex-metrics-blocks         cortex-metrics-blocks         storage bucket for cortex metrics data                              Standard        wwq2y-cortex-metrics-blocks         https://appliance-objectstorage.zone1.google.gdch.test   zone1    True          BucketCreationSucceeded   Bucket successfully created.
    cortex-metrics-ruler          cortex-metrics-ruler          storage bucket for cortex metrics rules data                        Standard        wwq2y-cortex-metrics-ruler          https://appliance-objectstorage.zone1.google.gdch.test   zone1    True          BucketCreationSucceeded   Bucket successfully created.
    ops-logs-loki-all             ops-logs-loki-all             Bucket for storing ops-logs-loki-all logs                           Standard        wwq2y-ops-logs-loki-all             https://appliance-objectstorage.zone1.google.gdch.test```
    
  2. Utilizzando le informazioni dell'output ottenuto, imposta le seguenti variabili di ambiente per il trasferimento:

    SRC_BUCKET= BUCKET_NAME
    SRC_ENDPOINT = ENDPOINT
    SRC_PATH= FULLY_QUALIFIED_BUCKET_NAME
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket che contiene i log di controllo per i quali vuoi creare il backup. Questo valore si trova nel campo BUCKET NAME dell'output.
    • ENDPOINT: l'endpoint del bucket che contiene gli audit log per i quali vuoi creare il backup. Questo valore si trova nel campo ENDPOINT dell'output.
    • FULLY_QUALIFIED_BUCKET_NAME: il nome completo del bucket che contiene gli audit log per i quali vuoi creare il backup. Questo valore si trova nel campo FULLY-QUALIFIED-BUCKET-NAME dell'output.
  3. Recupera il secret per il bucket selezionato nel passaggio precedente:

    kubectl get secret -n PROJECT_NAMESPACE -o json| jq --arg jq_src $SRC_BUCKET '.items[].metadata|select(.annotations."object.gdc.goog/subject"==$jq_src)|.name'
    

    L'output deve essere simile all'esempio seguente, in cui viene visualizzato il nome segreto del bucket:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  4. Utilizzando il nome del secret dall'output ottenuto, imposta la seguente variabile di ambiente:

    SRC_CREDENTIALS="PROJECT_NAMESPACE/SECRET_NAME"
    

    Sostituisci SECRET_NAME con il nome del secret ottenuto nell'output precedente.

  5. Crea il secret per il certificato CA del sistema di archiviazione:

    kubectl create secret generic -n PROJECT_NAMESPACE audit-log-loki-ca \
    --from-literal=ca.crt=CERTIFICATE
    

    Sostituisci CERTIFICATE con il certificato CA del sistema di archiviazione.

  6. Imposta la seguente variabile di ambiente:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-ca
    

Ottieni le credenziali per accedere al bucket remoto

Segui questi passaggi per trovare le credenziali del bucket in cui vuoi creare il backup:

  1. Imposta le seguenti variabili di ambiente:

    DST_ACCESS_KEY_ID= ACCESS_KEY
    DST_SECRET_ACCESS_KEY= ACCESS_SECRET
    DST_ENDPOINT= REMOTE_ENDPOINT
    DST_PATH= REMOTE_BUCKET_NAME
    

    Sostituisci quanto segue:

    • ACCESS_KEY: la chiave di accesso del bucket remoto di destinazione.
    • ACCESS_SECRET: il segreto di accesso del bucket remoto di destinazione.
    • REMOTE_ENDPOINT: l'endpoint del bucket remoto di destinazione.
    • REMOTE_BUCKET_NAME: il nome del bucket remoto di destinazione.
  2. Crea un secret per il bucket remoto:

    kubectl create secret generic -n PROJECT_NAMESPACE s3-bucket-credentials \
      --from-literal=access-key-id=$DST_ACCESS_KEY_ID \
      --from-literal=secret-access-key=$DST_SECRET_ACCESS_KEY
    
  3. Imposta la seguente variabile di ambiente con la posizione del secret:

    DST_CREDENTIALS=PROJECT_NAMESPACE/s3-bucket-credentials
    
  4. Se il bucket di destinazione richiede la configurazione di un certificato CA, crea un secret con il certificato CA del bucket:

    kubectl create secret generic -n PROJECT_NAMESPACE s3-bucket-ca \
    --from-literal=ca.crt=REMOTE_CERTIFICATE
    

    Sostituisci REMOTE_CERTIFICATE con il certificato CA del bucket remoto di destinazione.

  5. Imposta la seguente variabile di ambiente con la posizione del certificato:

    DST_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-bucket-ca
    

Configurare il trasferimento degli audit log

Segui questi passaggi per configurare il trasferimento dei log di controllo dal bucket di origine al bucket di destinazione per il backup:

  1. Crea un account di servizio per il job di trasferimento dei log di controllo. Devi fornire l'accesso al account di servizio per leggere il bucket di origine e i secret nello spazio dei nomi del progetto.

    kubectl apply -f - <<EOF
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: audit-log-transfer-sa
      namespace: PROJECT_NAMESPACE
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: read-secrets-role
      namespace: PROJECT_NAMESPACE
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: read-secrets-rolebinding
      namespace: PROJECT_NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: audit-log-transfer-sa
      namespace: PROJECT_NAMESPACE
    roleRef:
      kind: Role
      name: read-secrets-role
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: audit-log-read-bucket-role
      namespace: PROJECT_NAMESPACE
    rules:
    - apiGroups:
      - object.gdc.goog
      resourceNames:
      - $SRC_BUCKET # Source bucket name
      resources:
      - buckets
      verbs:
      - read-object
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: audit-log-transfer-role-binding
      namespace: PROJECT_NAMESPACE
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: audit-log-read-bucket-role
    subjects:
    - kind: ServiceAccount
      name: audit-log-transfer-sa
      namespace: PROJECT_NAMESPACE
    ---
    EOF
    
  2. Crea un job di trasferimento per esportare i log nel bucket remoto:

    kubectl apply -f - <<EOF
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: audit-log-transfer-job
      namespace: PROJECT_NAMESPACE
    spec:
      template:
        spec:
          serviceAccountName: audit-log-transfer-sa
          containers:
            - name: storage-transfer-pod
              image: gcr.io/private-cloud-staging/storage-transfer:latest
              imagePullPolicy: Always
              command:
                - /storage-transfer
              args:
                - '--src_endpoint=$SRC_ENDPOINT
                - '--dst_endpoint=$DST_ENDPOINT
                - '--src_path=\$SRC_PATH
                - '--dst_path=\$DST_PATH
                - '--src_credentials=$SRC_CREDENTIALS
                - '--dst_credentials=$DST_CREDENTIALS
                - '--dst_ca_certificate_reference=$DST_CA_CERTIFICATE # Optional. Based on destination type.
                - '--src_ca_certificate_reference=$SRC_CA_CERTIFICATE
                - '--src_type=s3'
                - '--dst_type=s3'
                - '--bandwidth_limit=100M' # Optional of the form '10K', '100M', '1G' bytes per second
          restartPolicy: OnFailure # Will restart on failure.
    ---
    EOF
    

Dopo aver pianificato il job, puoi monitorare il trasferimento dei dati fornendo il nome del job come audit-log-transfer-job e lo spazio dei nomi del progetto.

Il job termina quando tutti i dati sono stati trasferiti nel bucket di destinazione.

Ripristinare i log di controllo dal backup

Questa sezione contiene i passaggi per ripristinare gli audit log dal backup.

Prima di iniziare

Prima di poter ripristinare i log di controllo, devi avere accesso alle seguenti risorse:

  • Il bucket di backup dei log di controllo con un endpoint, una chiave di accesso segreta e un ID chiave di accesso.
  • Un certificato dell'autorità di certificazione (CA) per il sistema di archiviazione.
  • Un cluster funzionante.

Crea un bucket per ripristinare i log di controllo

Segui questi passaggi per creare un bucket in cui archiviare gli audit log ripristinati:

  1. Crea la risorsa bucket e il account di servizio:

    kubectl apply -f - <<EOF
    ---
    apiVersion: object.gdc.goog/v1
    kind: Bucket
    metadata:
      annotations:
        object.gdc.goog/audit-logs: IO
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: audit-logs-loki-restore
      namespace: PROJECT_NAMESPACE
    spec:
      bucketPolicy:
        lockingPolicy:
          defaultObjectRetentionDays: 1
      description: Bucket for storing audit-logs-loki logs restore
      storageClass: Standard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: audit-logs-loki-restore-buckets-role
      namespace: PROJECT_NAMESPACE
    rules:
    - apiGroups:
      - object.gdc.goog
      resourceNames:
      - audit-logs-loki-restore
      resources:
      - buckets
      verbs:
      - read-object
      - write-object
    ---
    apiVersion: v1
    automountServiceAccountToken: false
    kind: ServiceAccount
    metadata:
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: audit-logs-loki-restore-sa
      namespace: PROJECT_NAMESPACE
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: audit-logs-loki-restore
      namespace: PROJECT_NAMESPACE
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: audit-logs-loki-restore-buckets-role
    subjects:
    - kind: ServiceAccount
      name: audit-logs-loki-restore-sa
      namespace: PROJECT_NAMESPACE
    EOF
    

    Il bucket e il secret vengono creati.

  2. Visualizza il bucket creato:

    kubectl get bucket audit-logs-loki-restore -n PROJECT_NAMESPACE
    

    L'output deve essere simile all'esempio seguente. La creazione del bucket potrebbe richiedere alcuni minuti.

    NAME                      BUCKET NAME               DESCRIPTION                                       STORAGE CLASS   FULLY-QUALIFIED-BUCKET-NAME     ENDPOINT                                       REGION   BUCKETREADY   REASON                    MESSAGE
    audit-logs-loki-restore   audit-logs-loki-restore   Bucket for storing audit-logs-loki logs restore   Standard        dzbl6-audit-logs-loki-restore   https://objectstorage.zone1.google.gdch.test   zone1    True          BucketCreationSucceeded   Bucket successfully created.
    

    L'output deve mostrare il bucket che hai creato. La creazione del bucket potrebbe richiedere alcuni minuti.

  3. Utilizzando le informazioni dell'output ottenuto, imposta le seguenti variabili di ambiente:

    DST_BUCKET= RESTORE_BUCKET_NAME
    DST_ENDPOINT = RESTORE_ENDPOINT
    DST_PATH= RESTORE_FULLY_QUALIFIED_BUCKET_NAME
    

    Sostituisci quanto segue:

    • RESTORE_BUCKET_NAME: il nome del bucket per il ripristino dei log di controllo. Questo valore si trova nel campo BUCKET NAME dell'output.
    • RESTORE_ENDPOINT: l'endpoint del bucket per il ripristino dei log di controllo. Questo valore si trova nel campo ENDPOINT dell'output.
    • RESTORE_FULLY_QUALIFIED_BUCKET_NAME: il nome completo del bucket per il ripristino dei log di controllo. Questo valore si trova nel campo FULLY-QUALIFIED-BUCKET-NAME dell'output.
  4. Recupera il secret del bucket creato:

    kubectl get secret -n PROJECT_NAMESPACE -o json| jq --arg jq_src $DST_BUCKET '.items[].metadata|select(.annotations."object.gdc.goog/subject"==$jq_src)|.name'
    

    L'output deve essere simile all'esempio seguente, in cui viene visualizzato il nome segreto del bucket:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  5. Utilizzando il nome del secret dall'output ottenuto, imposta le seguenti variabili di ambiente:

    DST_SECRET_NAME=RESTORE_SECRET_NAME
    DST_CREDENTIALS="PROJECT_NAMESPACE/RESTORE_SECRET_NAME"
    

    Sostituisci RESTORE_SECRET_NAME con il nome del secret ottenuto nell'output precedente.

  6. Crea il secret per il certificato CA del sistema di archiviazione:

    kubectl create secret generic -n PROJECT_NAMESPACE audit-log-loki-restore-ca \
    --from-literal=ca.crt=CERTIFICATE
    

    Sostituisci CERTIFICATE con il certificato CA del sistema di archiviazione.

  7. Imposta la seguente variabile di ambiente per la posizione del certificato:

    DST_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-restore-ca
    

Ottieni le credenziali per accedere al bucket di backup

Segui questi passaggi per trovare le credenziali del bucket che contiene il backup degli audit log:

  1. Imposta le seguenti variabili di ambiente:

    SRC_ACCESS_KEY_ID= ACCESS_KEY
    SRC_SECRET_ACCESS_KEY= ACCESS_SECRET
    SRC_ENDPOINT= REMOTE_ENDPOINT
    SRC_PATH= REMOTE_BUCKET_NAME
    

    Sostituisci quanto segue:

    • ACCESS_KEY: la chiave di accesso del bucket di backup.
    • ACCESS_SECRET: il secret di accesso del bucket di backup.
    • REMOTE_ENDPOINT: l'endpoint del bucket di backup.
    • REMOTE_BUCKET_NAME: il nome del bucket di backup.
  2. Crea un secret per il bucket di backup:

    kubectl create secret generic -n PROJECT_NAMESPACE s3-backup-bucket-credentials \
      --from-literal=access-key-id=$SRC_ACCESS_KEY_ID \
      --from-literal=secret-access-key=$SRC_SECRET_ACCESS_KEY
    
  3. Imposta la seguente variabile di ambiente con la posizione del secret:

    SRC_CREDENTIALS=PROJECT_NAMESPACE/s3-backup-bucket-credentials
    
  4. Crea un secret con il certificato CA del bucket:

    kubectl create secret generic -n PROJECT_NAMESPACE s3-backup-bucket-ca \
    --from-literal=ca.crt=BACKUP_CERTIFICATE
    

    Sostituisci BACKUP_CERTIFICATE con il certificato CA del bucket di backup.

  5. Imposta la seguente variabile di ambiente con la posizione del certificato:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-backup-bucket-ca
    

Configura il ripristino degli audit log

Segui questi passaggi per configurare il trasferimento dei log di controllo dal bucket di backup al bucket di ripristino:

  1. Crea un account di servizio per il job di trasferimento dei log di controllo. Devi fornire all'account di servizio l'accesso in lettura e scrittura al bucket e ai secret nello spazio dei nomi del progetto.

    kubectl apply -f - <<EOF
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: audit-log-restore-sa
      namespace: PROJECT_NAMESPACE
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: read-secrets-role
      namespace: PROJECT_NAMESPACE
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: read-secrets-rolebinding-restore
      namespace: PROJECT_NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: audit-log-restore-sa
      namespace: PROJECT_NAMESPACE
    roleRef:
      kind: Role
      name: read-secrets-role
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: audit-log-restore-bucket-role
      namespace: PROJECT_NAMESPACE
    rules:
    - apiGroups:
      - object.gdc.goog
      resourceNames:
      - $DST_BUCKET # Source bucket name
      resources:
      - buckets
      verbs:
      - read-object
      - write-object
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: audit-log-restore-role-binding
      namespace: PROJECT_NAMESPACE
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: audit-log-restore-bucket-role
    subjects:
    - kind: ServiceAccount
      name: audit-log-restore-sa
      namespace: PROJECT_NAMESPACE
    ---
    EOF
    
  2. Crea un job di trasferimento per ripristinare i log dal bucket di backup remoto:

    kubectl apply -f - <<EOF
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: audit-log-restore-job
      namespace: PROJECT_NAMESPACE
    spec:
      template:
        spec:
          serviceAccountName: audit-log-restore-sa
          containers:
            - name: storage-transfer-pod
              image: gcr.io/private-cloud-staging/storage-transfer:latest
              imagePullPolicy: Always
              command:
                - /storage-transfer
              args:
                - '--src_endpoint=$SRC_ENDPOINT
                - '--dst_endpoint=$DST_ENDPOINT
                - '--src_path=\$SRC_PATH
                - '--dst_path=\$DST_PATH
                - '--src_credentials=$SRC_CREDENTIALS
                - '--dst_credentials=$DST_CREDENTIALS
                - '--dst_ca_certificate_reference=$DST_CA_CERTIFICATE
                - '--src_ca_certificate_reference=$SRC_CA_CERTIFICATE # Optional. Based on destination type
                - '--src_type=s3'
                - '--dst_type=s3'
                - '--bandwidth_limit=100M' # Optional of the form '10K', '100M', '1G' bytes per second
          restartPolicy: OnFailure # Will restart on failure.
    ---
    EOF
    

Dopo aver pianificato il job, puoi monitorare il trasferimento dei dati fornendo il nome del job come audit-log-restore-job e lo spazio dei nomi del progetto.

Il job termina quando tutti i dati sono stati trasferiti nel bucket di destinazione.

Esegui il deployment di un'istanza di audit log per accedere ai log

Per accedere ai log ripristinati, devi eseguire il deployment di un'istanza Loki, chiamata anche istanza del log di controllo.

Per configurare l'istanza del log di controllo, utilizza il account di servizio audit-log-restore-sa che hai creato per il job di ripristino. Segui questi passaggi per eseguire il deployment dell'istanza:

  1. Crea un oggetto ConfigMap per la configurazione dell'istanza:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: audit-logs-loki-restore
      namespace: PROJECT_NAMESPACE
    data:
      loki.yaml: |-
        auth_enabled: true
        common:
          ring:
            kvstore:
              store: inmemory
        chunk_store_config:
          max_look_back_period: 0s
        compactor:
          shared_store: s3
          working_directory: /data/loki/boltdb-shipper-compactor
          compaction_interval: 10m
          retention_enabled: true
          retention_delete_delay: 2h
          retention_delete_worker_count: 150
        ingester:
          chunk_target_size: 1572864
          chunk_encoding: snappy
          max_chunk_age: 2h
          chunk_idle_period: 90m
          chunk_retain_period: 30s
          autoforget_unhealthy: true
          lifecycler:
            ring:
              kvstore:
                store: inmemory
              replication_factor: 1
              heartbeat_timeout: 10m
          max_transfer_retries: 0
          wal:
            enabled: true
            flush_on_shutdown: true
            dir: /wal
            checkpoint_duration: 1m
            replay_memory_ceiling: 20GB
        limits_config:
          retention_period: 48h
          enforce_metric_name: false
          reject_old_samples: false
          ingestion_rate_mb: 256
          ingestion_burst_size_mb: 256
          max_streams_per_user: 20000
          max_global_streams_per_user: 20000
          per_stream_rate_limit: 256MB
          per_stream_rate_limit_burst: 256MB
          shard_streams:
            enabled: false
            desired_rate: 3MB
        schema_config:
          configs:
          - from: "2020-10-24"
            index:
              period: 24h
              prefix: index_
            object_store: s3
            schema: v11
            store: boltdb-shipper
        server:
          http_listen_port: 3100
          grpc_server_max_recv_msg_size: 104857600
          grpc_server_max_send_msg_size: 104857600
        analytics:
          reporting_enabled: false
        storage_config:
          boltdb_shipper:
            active_index_directory: /data/loki/boltdb-shipper-active
            cache_location: /data/loki/boltdb-shipper-cache
            cache_ttl: 24h
            shared_store: s3
          aws:
            endpoint: $DST_ENDPOINT
            bucketnames: $DST_PATH
            access_key_id: ${S3_ACCESS_KEY_ID}
            secret_access_key: ${S3_SECRET_ACCESS_KEY}
            s3forcepathstyle: true
    EOF
    
  2. Esegui il deployment dell'istanza con un servizio per accedere ai log dal bucket di ripristino:

    kubectl apply -f - <<EOF
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      labels:
        app: audit-logs-loki-restore
        logging.private.gdch.goog/loggingpipeline-name: default
      name: audit-logs-loki-restore
      namespace: PROJECT_NAMESPACE
    spec:
      persistentVolumeClaimRetentionPolicy:
        whenDeleted: Retain
        whenScaled: Retain
      podManagementPolicy: OrderedReady
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: audit-logs-loki-restore
      serviceName: audit-logs-loki-restore
      template:
        metadata:
          labels:
            app: audit-logs-loki-restore
            app.kubernetes.io/part-of: audit-logs-loki-restore
            egress.networking.gke.io/enabled: "true"
            istio.io/rev: default
            logging.private.gdch.goog/log-type: audit
        spec:
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - preference:
                  matchExpressions:
                  - key: node-role.kubernetes.io/control-plane
                    operator: DoesNotExist
                  - key: node-role.kubernetes.io/master
                    operator: DoesNotExist
                weight: 1
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - audit-logs-loki-restore
                  topologyKey: kubernetes.io/hostname
                weight: 100
          containers:
          - args:
            - -config.file=/etc/loki/loki.yaml
            - -config.expand-env=true
            - -target=all
            env:
            - name: S3_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  key: access-key-id
                  name: $DST_SECRET_NAME
                  optional: false
            - name: S3_SECRET_ACCESS_KEY
              valueFrom:
                  secretKeyRef:
                    key: secret-access-key
                    name: $DST_SECRET_NAME
                    optional: false
            image: gcr.io/private-cloud-staging/loki:v2.8.4-gke.2
            imagePullPolicy: Always
            livenessProbe:
              failureThreshold: 3
              httpGet:
                path: /ready
                port: http-metrics
                scheme: HTTP
              initialDelaySeconds: 330
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 1
            name: audit-logs-loki-restore
            ports:
            - containerPort: 3100
              name: http-metrics
              protocol: TCP
            - containerPort: 7946
              name: gossip-ring
              protocol: TCP
            readinessProbe:
              failureThreshold: 3
              httpGet:
                path: /ready
                port: http-metrics
                scheme: HTTP
              initialDelaySeconds: 45
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 1
            resources:
              limits:
                ephemeral-storage: 2000Mi
                memory: 8000Mi
              requests:
                cpu: 300m
                ephemeral-storage: 2000Mi
                memory: 1000Mi
            securityContext:
              readOnlyRootFilesystem: true
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /etc/loki
              name: config
            - mountPath: /data
              name: loki-storage
            - mountPath: /tmp
              name: temp
            - mountPath: /tmp/loki/rules-temp
              name: tmprulepath
            - mountPath: /etc/ssl/certs/storage-cert.crt
              name: storage-cert
              subPath: ca.crt
            - mountPath: /wal
              name: loki-storage
          dnsPolicy: ClusterFirst
          priorityClassName: audit-logs-loki-priority
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext:
            fsGroup: 10001
            runAsGroup: 10001
            runAsUser: 10001
          serviceAccount: audit-logs-loki-restore-sa
          serviceAccountName: audit-logs-loki-restore-sa
          terminationGracePeriodSeconds: 4800
          volumes:
          - emptyDir: {}
            name: temp
          - configMap:
              defaultMode: 420
              name: audit-logs-loki-restore
            name: config
          - emptyDir: {}
            name: tmprulepath
          - name: storage-cert
            secret:
              defaultMode: 420
              secretName: web-tls
      updateStrategy:
        type: RollingUpdate
      volumeClaimTemplates:
      - apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          creationTimestamp: null
          name: loki-storage
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 50Gi
          storageClassName: standard-rwo
          volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: audit-logs-loki-restore
      namespace: PROJECT_NAMESPACE
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - name: http-metrics
        port: 3100
        protocol: TCP
        targetPort: http-metrics
      selector:
        app: audit-logs-loki-restore
      sessionAffinity: None
      type: ClusterIP
    ---
    EOF
    

Configura l'istanza di monitoraggio per visualizzare i log dell'origine dati

Segui i passaggi riportati di seguito per configurare Grafana, chiamata anche istanza di monitoraggio, in modo da visualizzare gli audit log ripristinati dall'istanza di audit log:

  1. Vai all'endpoint dell'istanza di monitoraggio del tuo progetto.
  2. Nel menu di navigazione dell'interfaccia utente, fai clic su Amministrazione > Origini dati.
  3. Fai clic su Aggiungi nuova origine dati.
  4. Nella pagina Aggiungi origine dati, seleziona Loki.
  5. Nella pagina Impostazioni, inserisci Audit Logs - Restore come valore per il campo Nome.
  6. Nella sezione HTTP, inserisci il seguente valore per il campo URL:

    http://audit-logs-loki-restore.PROJECT_NAMESPACE.svc:3100
    
  7. Nella sezione Intestazioni HTTP personalizzate, inserisci i seguenti valori nei campi corrispondenti:

    • Header: X-Scope-OrgID
    • Valore:infra-obs

Nella figura 1, Loki viene visualizzato come opzione nella pagina Aggiungi origine dati dell'interfaccia utente dell'istanza di monitoraggio. Nella figura 2, la pagina Impostazioni mostra i campi che devi compilare per configurare l'origine dati.

L&#39;opzione Loki viene visualizzata come origine dati nella pagina Aggiungi origine dati dell&#39;interfaccia utente.

Figura 1. La pagina Aggiungi origine dati nell'interfaccia utente dell'istanza di monitoraggio.

Nella pagina Impostazioni vengono visualizzati i campi pertinenti per configurare Loki come origine dati.

Figura 2. La pagina Impostazioni nell'interfaccia utente dell'istanza di monitoraggio.

L'opzione Audit Logs - Restore è ora disponibile come origine dati in Esplora log.