Membuat log audit pencadangan dan pemulihan

Halaman ini berisi langkah-langkah untuk menginstal dan mengonfigurasi komponen yang diperlukan untuk membuat cadangan. Panduan ini juga menjelaskan cara memulihkan dan mendapatkan kembali akses ke log audit historis dari cadangan.

Menyiapkan cadangan di bucket jarak jauh

Bagian ini berisi langkah-langkah untuk membuat cadangan log audit di bucket yang kompatibel dengan S3.

Sebelum memulai

Sebelum dapat membuat cadangan untuk log audit, Anda harus memiliki akses ke resource berikut:

  • Bucket S3 jarak jauh dengan endpoint, kunci akses rahasia, dan ID kunci akses.
  • Sertifikat certificate authority (CA) untuk sistem penyimpanan.
  • Cluster yang berfungsi.

Dapatkan kredensial untuk mengakses bucket sumber

Lakukan langkah-langkah berikut untuk menemukan kredensial bucket yang berisi log audit:

  1. Di cluster admin root, cantumkan bucket di namespace project Anda:

    kubectl get bucket -n PROJECT_NAMESPACE
    

    Output harus terlihat seperti contoh berikut, dengan bucket audit logging menampilkan nama dan 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. Dengan menggunakan informasi dari output yang Anda peroleh, tetapkan variabel lingkungan berikut untuk transfer:

    SRC_BUCKET= BUCKET_NAME
    SRC_ENDPOINT = ENDPOINT
    SRC_PATH= FULLY_QUALIFIED_BUCKET_NAME
    

    Ganti kode berikut:

    • BUCKET_NAME: nama bucket yang berisi log audit yang ingin Anda buat cadangannya. Nilai ini ada di kolom BUCKET NAME output.
    • ENDPOINT: endpoint bucket yang berisi log audit yang ingin Anda buat cadangannya. Nilai ini ada di kolom ENDPOINT output.
    • FULLY_QUALIFIED_BUCKET_NAME: nama bucket yang sepenuhnya memenuhi syarat yang berisi log audit yang ingin Anda buat cadangannya. Nilai ini ada di kolom FULLY-QUALIFIED-BUCKET-NAME output.
  3. Dapatkan rahasia untuk bucket yang Anda pilih di langkah sebelumnya:

    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'
    

    Output harus terlihat seperti contoh berikut, dengan nama rahasia bucket ditampilkan:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  4. Dengan menggunakan nama secret dari output yang Anda peroleh, tetapkan variabel lingkungan berikut:

    SRC_CREDENTIALS="PROJECT_NAMESPACE/SECRET_NAME"
    

    Ganti SECRET_NAME dengan nama secret yang Anda dapatkan di output sebelumnya.

  5. Buat secret untuk sertifikat CA sistem penyimpanan:

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

    Ganti CERTIFICATE dengan sertifikat CA sistem penyimpanan.

  6. Tetapkan variabel lingkungan berikut:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-ca
    

Dapatkan kredensial untuk mengakses bucket jarak jauh

Ikuti langkah-langkah berikut untuk menemukan kredensial bucket tempat Anda ingin membuat cadangan:

  1. Tetapkan variabel lingkungan berikut:

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

    Ganti kode berikut:

    • ACCESS_KEY: kunci akses bucket jarak jauh tujuan.
    • ACCESS_SECRET: secret akses bucket jarak jauh tujuan.
    • REMOTE_ENDPOINT: endpoint bucket jarak jauh tujuan.
    • REMOTE_BUCKET_NAME: nama bucket jarak jauh tujuan.
  2. Buat secret untuk bucket jarak jauh:

    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. Tetapkan variabel lingkungan berikut dengan lokasi secret:

    DST_CREDENTIALS=PROJECT_NAMESPACE/s3-bucket-credentials
    
  4. Jika bucket tujuan memerlukan penyiapan sertifikat CA, buat secret dengan sertifikat CA bucket:

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

    Ganti REMOTE_CERTIFICATE dengan sertifikat CA bucket jarak jauh tujuan.

  5. Tetapkan variabel lingkungan berikut dengan lokasi sertifikat:

    DST_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-bucket-ca
    

Menyiapkan transfer log audit

Ikuti langkah-langkah berikut untuk mengonfigurasi transfer log audit dari bucket sumber ke bucket tujuan untuk pencadangan:

  1. Buat akun layanan untuk tugas transfer log audit. Anda harus memberikan akses ke akun layanan untuk membaca bucket sumber dan secret di namespace project.

    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. Buat tugas transfer untuk mengekspor log ke bucket jarak jauh:

    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
    

Setelah menjadwalkan tugas, Anda dapat memantau transfer data dengan memberikan nama tugas sebagai audit-log-transfer-job dan namespace project Anda.

Tugas berakhir saat semua data telah ditransfer ke bucket tujuan.

Memulihkan log audit dari cadangan

Bagian ini berisi langkah-langkah untuk memulihkan log audit dari cadangan.

Sebelum memulai

Sebelum dapat memulihkan log audit, Anda harus memiliki akses ke resource berikut:

  • Bucket cadangan log audit dengan endpoint, kunci akses rahasia, dan ID kunci akses.
  • Sertifikat certificate authority (CA) untuk sistem penyimpanan.
  • Cluster yang berfungsi.

Buat bucket untuk memulihkan log audit

Lakukan langkah-langkah berikut untuk membuat bucket guna menyimpan log audit yang dipulihkan:

  1. Buat resource bucket dan akun layanan:

    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
    

    Bucket dan secret telah dibuat.

  2. Lihat bucket yang dibuat:

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

    Output harus terlihat seperti contoh berikut. Pembuatan bucket mungkin memerlukan waktu beberapa menit.

    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.
    

    Output harus menampilkan bucket yang Anda buat. Pembuatan bucket mungkin memerlukan waktu beberapa menit.

  3. Dengan menggunakan informasi dari output yang Anda peroleh, tetapkan variabel lingkungan berikut:

    DST_BUCKET= RESTORE_BUCKET_NAME
    DST_ENDPOINT = RESTORE_ENDPOINT
    DST_PATH= RESTORE_FULLY_QUALIFIED_BUCKET_NAME
    

    Ganti kode berikut:

    • RESTORE_BUCKET_NAME: nama bucket untuk pemulihan log audit. Nilai ini ada di kolom BUCKET NAME output.
    • RESTORE_ENDPOINT: endpoint bucket untuk pemulihan log audit. Nilai ini ada di kolom ENDPOINT output.
    • RESTORE_FULLY_QUALIFIED_BUCKET_NAME: nama bucket yang sepenuhnya memenuhi syarat untuk pemulihan log audit. Nilai ini ada di kolom FULLY-QUALIFIED-BUCKET-NAME output.
  4. Dapatkan secret bucket yang dibuat:

    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'
    

    Output harus terlihat seperti contoh berikut, dengan nama rahasia bucket ditampilkan:

    "object-storage-key-sysstd-sa-olxv4dnwrwul4bshu37ikebgovrnvl773owaw3arx225rfi56swa"
    
  5. Dengan menggunakan nama secret dari output yang Anda peroleh, tetapkan variabel lingkungan berikut:

    DST_SECRET_NAME=RESTORE_SECRET_NAME
    DST_CREDENTIALS="PROJECT_NAMESPACE/RESTORE_SECRET_NAME"
    

    Ganti RESTORE_SECRET_NAME dengan nama secret yang Anda dapatkan di output sebelumnya.

  6. Buat secret untuk sertifikat CA sistem penyimpanan:

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

    Ganti CERTIFICATE dengan sertifikat CA sistem penyimpanan.

  7. Tetapkan variabel lingkungan berikut untuk lokasi sertifikat:

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

Dapatkan kredensial untuk mengakses bucket cadangan

Lakukan langkah-langkah berikut untuk menemukan kredensial bucket yang berisi cadangan log audit:

  1. Tetapkan variabel lingkungan berikut:

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

    Ganti kode berikut:

    • ACCESS_KEY: kunci akses bucket cadangan.
    • ACCESS_SECRET: secret akses bucket cadangan.
    • REMOTE_ENDPOINT: endpoint bucket cadangan.
    • REMOTE_BUCKET_NAME: nama bucket cadangan.
  2. Buat secret untuk bucket cadangan:

    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. Tetapkan variabel lingkungan berikut dengan lokasi secret:

    SRC_CREDENTIALS=PROJECT_NAMESPACE/s3-backup-bucket-credentials
    
  4. Buat secret dengan sertifikat CA bucket:

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

    Ganti BACKUP_CERTIFICATE dengan sertifikat CA bucket cadangan.

  5. Tetapkan variabel lingkungan berikut dengan lokasi sertifikat:

    SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-backup-bucket-ca
    

Menyiapkan pemulihan log audit

Selesaikan langkah-langkah berikut untuk mengonfigurasi transfer log audit dari bucket cadangan ke bucket pemulihan:

  1. Buat akun layanan untuk tugas transfer log audit. Anda harus memberikan akses ke akun layanan untuk membaca dan menulis dari bucket dan secret di namespace project.

    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. Buat tugas transfer untuk memulihkan log dari bucket cadangan jarak jauh:

    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
    

Setelah menjadwalkan tugas, Anda dapat memantau transfer data dengan memberikan nama tugas sebagai audit-log-restore-job dan namespace project Anda.

Tugas berakhir saat semua data telah ditransfer ke bucket tujuan.

Men-deploy instance log audit untuk mengakses log

Anda harus men-deploy instance Loki, yang juga disebut instance log audit, untuk mengakses log yang dipulihkan.

Untuk menyiapkan instance log audit, gunakan akun layanan audit-log-restore-sa yang Anda buat untuk tugas pemulihan. Ikuti langkah-langkah berikut untuk men-deploy instance:

  1. Buat objek ConfigMap untuk konfigurasi instance:

    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. Deploy instance dengan layanan untuk mengakses log dari bucket pemulihan:

    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
    

Mengonfigurasi instance pemantauan untuk melihat log dari sumber data

Lakukan langkah-langkah berikut untuk mengonfigurasi Grafana, yang juga disebut instance pemantauan, untuk melihat log audit yang dipulihkan dari instance log audit:

  1. Buka endpoint instance pemantauan project Anda.
  2. Dari menu navigasi antarmuka pengguna (UI), klik Administrasi > Sumber data.
  3. Klik Tambahkan sumber data baru.
  4. Di halaman Tambahkan sumber data, pilih Loki.
  5. Di halaman Setelan, masukkan Audit Logs - Restore sebagai nilai untuk kolom Nama.
  6. Di bagian HTTP, masukkan nilai berikut untuk kolom URL:

    http://audit-logs-loki-restore.PROJECT_NAMESPACE.svc:3100
    
  7. Di bagian Custom HTTP Headers, masukkan nilai berikut di kolom yang sesuai:

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

Pada gambar 1, Loki ditampilkan sebagai opsi di halaman Add data source pada UI instance pemantauan. Pada gambar 2, halaman Setelan menampilkan kolom yang harus Anda isi untuk menyiapkan sumber data.

Opsi Loki ditampilkan sebagai sumber data di halaman Tambahkan sumber data pada UI.

Gambar 1. Halaman Tambahkan sumber data di UI instance pemantauan.

Kolom yang relevan untuk mengonfigurasi Loki sebagai sumber data ditampilkan di halaman Setelan

Gambar 2. Halaman Setelan di UI instance pemantauan.

Opsi Audit Logs - Restore kini tersedia sebagai sumber data di penjelajah log.