Crear registros de auditoría de copias de seguridad y restablecimiento

En esta página, se incluyen los pasos para instalar y configurar los componentes necesarios para crear una copia de seguridad. También se describe cómo restablecer y recuperar el acceso a los registros de auditoría históricos desde la copia de seguridad.

Configura una copia de seguridad en un bucket remoto

En esta sección, se incluyen los pasos para crear una copia de seguridad de los registros de auditoría en un bucket compatible con S3.

Antes de comenzar

Antes de crear una copia de seguridad de tus registros de auditoría, debes tener acceso a los siguientes recursos:

  • Un bucket de S3 remoto con un extremo, una clave de acceso secreta y un ID de clave de acceso.
  • Certificado de autoridad certificadora (CA) para el sistema de almacenamiento.
  • Un clúster en funcionamiento

Obtén las credenciales para acceder al bucket de origen

Sigue estos pasos para encontrar las credenciales del bucket que contiene los registros de auditoría:

  1. En el clúster de administrador raíz, enumera los buckets en el espacio de nombres de tu proyecto:

    kubectl get bucket -n PROJECT_NAMESPACE
    

    El resultado debe parecerse al siguiente ejemplo, en el que los buckets de registro de auditoría muestran un nombre y un extremo:

    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. Con la información del resultado que obtuviste, configura las siguientes variables de entorno para la transferencia:

    SRC_BUCKET= BUCKET_NAME
    SRC_ENDPOINT = ENDPOINT
    SRC_PATH= FULLY_QUALIFIED_BUCKET_NAME
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket que contiene los registros de auditoría para los que deseas crear la copia de seguridad. Este valor se encuentra en el campo BUCKET NAME del resultado.
    • ENDPOINT: Es el extremo del bucket que contiene los registros de auditoría para los que deseas crear la copia de seguridad. Este valor se encuentra en el campo ENDPOINT del resultado.
    • FULLY_QUALIFIED_BUCKET_NAME: Es el nombre completamente calificado del bucket que contiene los registros de auditoría para los que deseas crear la copia de seguridad. Este valor se encuentra en el campo FULLY-QUALIFIED-BUCKET-NAME del resultado.
  3. Obtén el secreto del bucket que seleccionaste en el paso anterior:

    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'
    

    El resultado debe verse como el siguiente ejemplo, en el que se muestra el nombre secreto del bucket:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  4. Con el nombre del secreto del resultado que obtuviste, configura la siguiente variable de entorno:

    SRC_CREDENTIALS="PROJECT_NAMESPACE/SECRET_NAME"
    

    Reemplaza SECRET_NAME por el nombre del secreto que obtuviste en el resultado anterior.

  5. Crea el secreto para el certificado de la CA del sistema de almacenamiento:

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

    Reemplaza CERTIFICATE por el certificado de CA del sistema de almacenamiento.

  6. Configura la siguiente variable del entorno:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-ca
    

Obtén las credenciales para acceder al bucket remoto

Sigue estos pasos para encontrar las credenciales del bucket en el que deseas crear la copia de seguridad:

  1. Configura las siguientes variables de entorno:

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

    Reemplaza lo siguiente:

    • ACCESS_KEY: Es la clave de acceso del bucket remoto de destino.
    • ACCESS_SECRET: Es el Secret de acceso del bucket remoto de destino.
    • REMOTE_ENDPOINT: Es el extremo del bucket remoto de destino.
    • REMOTE_BUCKET_NAME: Es el nombre del bucket remoto de destino.
  2. Crea un secreto para el 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. Configura la siguiente variable de entorno con la ubicación del secreto:

    DST_CREDENTIALS=PROJECT_NAMESPACE/s3-bucket-credentials
    
  4. Si el bucket de destino requiere la configuración de un certificado de CA, crea un secreto con el certificado de CA del bucket:

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

    Reemplaza REMOTE_CERTIFICATE por el certificado de CA del bucket remoto de destino.

  5. Configura la siguiente variable de entorno con la ubicación del certificado:

    DST_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-bucket-ca
    

Configura la transferencia de registros de auditoría

Sigue estos pasos para configurar la transferencia de registros de auditoría del bucket de origen al bucket de destino para la copia de seguridad:

  1. Crea una cuenta de servicio para el trabajo de transferencia del registro de auditoría. Debes proporcionar acceso a la cuenta de servicio para leer el bucket de origen y los secretos en el espacio de nombres del proyecto.

    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 trabajo de transferencia para exportar los registros al 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
    

Después de programar el trabajo, puedes supervisar la transferencia de datos proporcionando el nombre del trabajo como audit-log-transfer-job y el espacio de nombres de tu proyecto.

El trabajo finaliza cuando se transfieren todos los datos al bucket de destino.

Restablece los registros de auditoría desde la copia de seguridad

En esta sección, se incluyen los pasos para restablecer los registros de auditoría desde la copia de seguridad.

Antes de comenzar

Antes de restablecer tus registros de auditoría, debes tener acceso a los siguientes recursos:

  • El bucket de copia de seguridad del registro de auditoría con un extremo, una clave de acceso secreta y un ID de clave de acceso
  • Certificado de autoridad certificadora (CA) para el sistema de almacenamiento.
  • Un clúster en funcionamiento

Crea un bucket para restablecer los registros de auditoría

Sigue estos pasos para crear un bucket en el que se almacenarán los registros de auditoría restablecidos:

  1. Crea el recurso del bucket y la cuenta de servicio:

    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
    

    Se crean el bucket y el secreto.

  2. Visualiza el bucket creado:

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

    El resultado debe ser similar al siguiente ejemplo. La creación del bucket puede tardar unos minutos.

    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.
    

    El resultado debe mostrar el bucket que creaste. La creación del bucket puede tardar unos minutos.

  3. Con la información del resultado que obtuviste, configura las siguientes variables de entorno:

    DST_BUCKET= RESTORE_BUCKET_NAME
    DST_ENDPOINT = RESTORE_ENDPOINT
    DST_PATH= RESTORE_FULLY_QUALIFIED_BUCKET_NAME
    

    Reemplaza lo siguiente:

    • RESTORE_BUCKET_NAME: Es el nombre del bucket para la restauración de los registros de auditoría. Este valor se encuentra en el campo BUCKET NAME del resultado.
    • RESTORE_ENDPOINT: Es el extremo del bucket para la restauración de los registros de auditoría. Este valor se encuentra en el campo ENDPOINT del resultado.
    • RESTORE_FULLY_QUALIFIED_BUCKET_NAME: Es el nombre completamente calificado del bucket para la restauración de los registros de auditoría. Este valor se encuentra en el campo FULLY-QUALIFIED-BUCKET-NAME del resultado.
  4. Obtén el secreto del bucket creado:

    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'
    

    El resultado debe verse como el siguiente ejemplo, en el que se muestra el nombre secreto del bucket:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  5. Con el nombre del secreto que obtuviste en el resultado, configura las siguientes variables de entorno:

    DST_SECRET_NAME=RESTORE_SECRET_NAME
    DST_CREDENTIALS="PROJECT_NAMESPACE/RESTORE_SECRET_NAME"
    

    Reemplaza RESTORE_SECRET_NAME por el nombre del secreto que obtuviste en el resultado anterior.

  6. Crea el secreto para el certificado de la CA del sistema de almacenamiento:

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

    Reemplaza CERTIFICATE por el certificado de CA del sistema de almacenamiento.

  7. Configura la siguiente variable de entorno para la ubicación del certificado:

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

Obtén las credenciales para acceder al bucket de copia de seguridad

Sigue estos pasos para encontrar las credenciales del bucket que contiene la copia de seguridad de los registros de auditoría:

  1. Configura las siguientes variables de entorno:

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

    Reemplaza lo siguiente:

    • ACCESS_KEY: Es la clave de acceso del bucket de copia de seguridad.
    • ACCESS_SECRET: Es el secreto de acceso del bucket de copia de seguridad.
    • REMOTE_ENDPOINT: Es el extremo del bucket de copia de seguridad.
    • REMOTE_BUCKET_NAME: Es el nombre del bucket de copia de seguridad.
  2. Crea un secreto para el bucket de copia de seguridad:

    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. Configura la siguiente variable de entorno con la ubicación del secreto:

    SRC_CREDENTIALS=PROJECT_NAMESPACE/s3-backup-bucket-credentials
    
  4. Crea un secreto con el certificado de la CA del bucket:

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

    Reemplaza BACKUP_CERTIFICATE por el certificado de CA del bucket de copia de seguridad.

  5. Configura la siguiente variable de entorno con la ubicación del certificado:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-backup-bucket-ca
    

Configura la restauración de registros de auditoría

Sigue estos pasos para configurar la transferencia de registros de auditoría del bucket de copia de seguridad al bucket de restauración:

  1. Crea una cuenta de servicio para el trabajo de transferencia del registro de auditoría. Debes proporcionar acceso a la cuenta de servicio para leer y escribir desde el bucket y los secretos en el espacio de nombres del proyecto.

    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 trabajo de transferencia para restablecer los registros del bucket de copia de seguridad 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
    

Después de programar el trabajo, puedes supervisar la transferencia de datos proporcionando el nombre del trabajo como audit-log-restore-job y el espacio de nombres de tu proyecto.

El trabajo finaliza cuando se transfieren todos los datos al bucket de destino.

Implementa una instancia de registro de auditoría para acceder a los registros

Debes implementar una instancia de Loki, también llamada instancia de registro de auditoría, para acceder a los registros restaurados.

Para configurar la instancia del registro de auditoría, usa la cuenta de servicio audit-log-restore-sa que creaste para el trabajo de restauración. Sigue estos pasos para implementar la instancia:

  1. Crea un objeto ConfigMap para la configuración de la instancia:

    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. Implementa la instancia con un servicio para acceder a los registros del bucket de restauración:

    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 la instancia de supervisión para ver los registros de la fuente de datos

Sigue estos pasos para configurar Grafana, también llamada instancia de supervisión, para ver los registros de auditoría restaurados desde la instancia de registro de auditoría:

  1. Ve al extremo de la instancia de supervisión de tu proyecto.
  2. En el menú de navegación de la interfaz de usuario (IU), haz clic en Administración > Fuentes de datos.
  3. Haz clic en Agregar una fuente de datos nueva.
  4. En la página Agregar fuente de datos, selecciona Loki.
  5. En la página Configuración, ingresa Audit Logs - Restore como valor para el campo Nombre.
  6. En la sección HTTP, ingresa el siguiente valor en el campo URL:

    http://audit-logs-loki-restore.PROJECT_NAMESPACE.svc:3100
    
  7. En la sección Encabezados HTTP personalizados, ingresa los siguientes valores en los campos correspondientes:

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

En la figura 1, Loki se muestra como una opción en la página Agregar fuente de datos de la IU de la instancia de supervisión. En la figura 2, la página Configuración muestra los campos que debes completar para configurar la fuente de datos.

La opción Loki se muestra como una fuente de datos en la página Agregar fuente de datos de la IU.

Figura 1. La página Agregar fuente de datos en la IU de la instancia de supervisión.

En la página Configuración, se muestran los campos pertinentes para configurar Loki como fuente de datos.

Figura 2. La página Configuración en la IU de la instancia de supervisión

La opción Audit Logs - Restore ahora está disponible como fuente de datos en el Explorador de registros.