Criar registros de auditoria de backup e restauração

Esta página contém as etapas para instalar e configurar os componentes necessários para criar um backup. Ela também descreve como restaurar e recuperar o acesso aos registros de auditoria históricos do backup.

Configurar um backup em um bucket remoto

Esta seção contém as etapas para criar um backup dos registros de auditoria em um bucket compatível com o S3.

Antes de começar

Antes de criar um backup dos registros de auditoria, você precisa ter acesso aos seguintes recursos:

  • Um bucket do S3 remoto com um endpoint, uma chave de acesso secreta e um ID de chave de acesso.
  • Um certificado de autoridade de certificação (CA) para o sistema de armazenamento.
  • Um cluster em funcionamento.

Receber as credenciais para acessar o bucket de origem

Siga estas etapas para encontrar as credenciais do bucket que contém os registros de auditoria:

  1. No cluster de administrador raiz, liste os buckets no namespace do projeto:

    kubectl get bucket -n PROJECT_NAMESPACE
    

    A saída precisa ser semelhante ao exemplo a seguir, em que os buckets de registro de auditoria mostram um nome e um 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. Usando as informações da saída obtida, defina as seguintes variáveis de ambiente para a transferência:

    SRC_BUCKET= BUCKET_NAME
    SRC_ENDPOINT = ENDPOINT
    SRC_PATH= FULLY_QUALIFIED_BUCKET_NAME
    

    Substitua:

    • BUCKET_NAME: o nome do bucket que contém os registros de auditoria para os quais você quer criar o backup. Esse valor está no campo BUCKET NAME da saída.
    • ENDPOINT: o endpoint do bucket que contém os registros de auditoria para os quais você quer criar o backup. Esse valor está no campo ENDPOINT da saída.
    • FULLY_QUALIFIED_BUCKET_NAME: o nome totalmente qualificado do bucket que contém os registros de auditoria para os quais você quer criar o backup. Esse valor está no campo FULLY-QUALIFIED-BUCKET-NAME da saída.
  3. Extraia o secret do bucket selecionado na etapa 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'
    

    A saída precisa ser semelhante ao exemplo a seguir, em que o nome do secret do bucket é exibido:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  4. Usando o nome do secret na saída obtida, defina a seguinte variável de ambiente:

    SRC_CREDENTIALS="PROJECT_NAMESPACE/SECRET_NAME"
    

    Substitua SECRET_NAME pelo nome do secret que você recebeu na saída anterior.

  5. Crie o secret para o certificado de CA do sistema de armazenamento:

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

    Substitua CERTIFICATE pelo certificado da CA do sistema de armazenamento.

  6. Defina a variável de ambiente a seguir:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-ca
    

Conseguir as credenciais para acessar o bucket remoto

Siga estas etapas para encontrar as credenciais do bucket em que você quer criar o backup:

  1. Configure as variáveis de ambiente a seguir:

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

    Substitua:

    • ACCESS_KEY: a chave de acesso do bucket remoto de destino.
    • ACCESS_SECRET: o secret de acesso do bucket remoto de destino.
    • REMOTE_ENDPOINT: o endpoint do bucket remoto de destino.
    • REMOTE_BUCKET_NAME: o nome do bucket remoto de destino.
  2. Crie um secret para o 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. Defina a seguinte variável de ambiente com o local do secret:

    DST_CREDENTIALS=PROJECT_NAMESPACE/s3-bucket-credentials
    
  4. Se o bucket de destino exigir a configuração de um certificado de CA, crie um secret com o certificado de CA do bucket:

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

    Substitua REMOTE_CERTIFICATE pelo certificado da CA do bucket remoto de destino.

  5. Defina a seguinte variável de ambiente com o local do certificado:

    DST_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-bucket-ca
    

Configurar a transferência de registros de auditoria

Siga estas etapas para configurar a transferência de registros de auditoria do bucket de origem para o de destino do backup:

  1. Crie uma conta de serviço para o job de transferência registro de auditoria. Você precisa dar acesso à conta de serviço para ler o bucket de origem e os secrets no namespace do projeto.

    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. Crie um job de transferência para exportar os registros para o 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
    

Depois de programar o job, monitore a transferência de dados fornecendo o nome do job como audit-log-transfer-job e o namespace do projeto.

O job termina quando todos os dados são transferidos para o bucket de destino.

Restaurar registros de auditoria do backup

Esta seção contém as etapas para restaurar os registros de auditoria do backup.

Antes de começar

Antes de restaurar os registros de auditoria, você precisa ter acesso aos seguintes recursos:

  • O bucket de backup do registro de auditoria com um endpoint, uma chave de acesso secreta e um ID da chave de acesso.
  • Um certificado de autoridade de certificação (CA) para o sistema de armazenamento.
  • Um cluster em funcionamento.

Criar um bucket para restaurar registros de auditoria

Siga estas etapas para criar um bucket e armazenar os registros de auditoria restaurados:

  1. Crie o recurso de bucket e a conta de serviço:

    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
    

    O bucket e o secret são criados.

  2. Confira o bucket criado:

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

    A saída precisa ser semelhante ao exemplo a seguir. A criação do bucket pode levar alguns 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.
    

    A saída precisa mostrar o bucket que você criou. A criação do bucket pode levar alguns minutos.

  3. Usando as informações da saída obtida, defina as seguintes variáveis de ambiente:

    DST_BUCKET= RESTORE_BUCKET_NAME
    DST_ENDPOINT = RESTORE_ENDPOINT
    DST_PATH= RESTORE_FULLY_QUALIFIED_BUCKET_NAME
    

    Substitua:

    • RESTORE_BUCKET_NAME: o nome do bucket para a restauração de registros de auditoria. Esse valor está no campo BUCKET NAME da saída.
    • RESTORE_ENDPOINT: o endpoint do bucket para a restauração de registros de auditoria. Esse valor está no campo ENDPOINT da saída.
    • RESTORE_FULLY_QUALIFIED_BUCKET_NAME: o nome totalmente qualificado do bucket para a restauração de registros de auditoria. Esse valor está no campo FULLY-QUALIFIED-BUCKET-NAME da saída.
  4. Extraia o secret do bucket criado:

    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'
    

    A saída precisa ser semelhante ao exemplo a seguir, em que o nome do secret do bucket é exibido:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  5. Usando o nome do secret da saída obtida, defina as seguintes variáveis de ambiente:

    DST_SECRET_NAME=RESTORE_SECRET_NAME
    DST_CREDENTIALS="PROJECT_NAMESPACE/RESTORE_SECRET_NAME"
    

    Substitua RESTORE_SECRET_NAME pelo nome do secret que você recebeu na saída anterior.

  6. Crie o secret para o certificado de CA do sistema de armazenamento:

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

    Substitua CERTIFICATE pelo certificado da CA do sistema de armazenamento.

  7. Defina a seguinte variável de ambiente para o local do certificado:

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

Receber as credenciais para acessar o bucket de backup

Siga as etapas abaixo para encontrar as credenciais do bucket que contém o backup dos registros de auditoria:

  1. Configure as variáveis de ambiente a seguir:

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

    Substitua:

    • ACCESS_KEY: a chave de acesso do bucket de backup.
    • ACCESS_SECRET: o secret de acesso do bucket de backup.
    • REMOTE_ENDPOINT: o endpoint do bucket de backup.
    • REMOTE_BUCKET_NAME: o nome do bucket de backup.
  2. Crie um secret para o bucket de 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. Defina a seguinte variável de ambiente com o local do secret:

    SRC_CREDENTIALS=PROJECT_NAMESPACE/s3-backup-bucket-credentials
    
  4. Crie um secret com o certificado da CA do bucket:

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

    Substitua BACKUP_CERTIFICATE pelo certificado da CA do bucket de backup.

  5. Defina a seguinte variável de ambiente com o local do certificado:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-backup-bucket-ca
    

Configurar a restauração de registros de auditoria

Siga estas etapas para configurar a transferência de registros de auditoria do bucket de backup para o de restauração:

  1. Crie uma conta de serviço para o job de transferência registro de auditoria. Você precisa dar acesso à conta de serviço para ler e gravar no bucket e nos secrets no namespace do projeto.

    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. Crie um job de transferência para restaurar os registros do bucket de 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
    

Depois de programar o job, monitore a transferência de dados fornecendo o nome do job como audit-log-restore-job e o namespace do projeto.

O job termina quando todos os dados são transferidos para o bucket de destino.

Implante uma instância de registro de auditoria para acessar os registros

É necessário implantar uma instância do Loki, também chamada de instância de registro de auditoria, para acessar os registros restaurados.

Para configurar a instância de registro de auditoria, use a conta de serviço audit-log-restore-sa que você criou para o job de restauração. Siga as etapas abaixo para implantar a instância:

  1. Crie um objeto ConfigMap para a configuração da instância:

    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. Implante a instância com um serviço para acessar registros do bucket de restauração:

    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
    

Configurar a instância de monitoramento para ver registros da fonte de dados

Siga as etapas abaixo para configurar o Grafana, também chamado de instância de monitoramento, e ver os registros de auditoria restaurados da instância de registro de auditoria:

  1. Acesse o endpoint da instância de monitoramento do seu projeto.
  2. No menu de navegação da interface do usuário (UI), clique em Administração > Fontes de dados.
  3. Clique em Adicionar nova fonte de dados.
  4. Na página Adicionar fonte de dados, selecione Loki.
  5. Na página Configurações, insira Audit Logs - Restore como valor no campo Nome.
  6. Na seção HTTP, insira o seguinte valor no campo URL:

    http://audit-logs-loki-restore.PROJECT_NAMESPACE.svc:3100
    
  7. Na seção Cabeçalhos HTTP personalizados, insira os seguintes valores nos campos correspondentes:

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

Na figura 1, o Loki aparece como uma opção na página Adicionar fonte de dados da UI da instância de monitoramento. Na Figura 2, a página Configurações mostra os campos que você precisa preencher para configurar a fonte de dados.

A opção Loki aparece como uma fonte de dados na página &quot;Adicionar fonte de dados&quot; da UI.

Figura 1. A página Adicionar fonte de dados na UI da instância de monitoramento.

Os campos relevantes para configurar o Loki como a fonte de dados são mostrados na página &quot;Configurações&quot;.

Figura 2. A página Configurações na UI da instância de monitoramento.

A opção Audit Logs - Restore agora está disponível como uma fonte de dados no Explorador de registros.