Esta página descreve como proteger os registos de auditoria do seu ambiente de dispositivo isolado do Google Distributed Cloud (GDC) em contentores de cópias de segurança remotas para preservar e restaurar dados quando necessário. O processo inclui passos para instalar e configurar os componentes necessários para recuperar os registos de auditoria do histórico dessas cópias de segurança.
As cópias de segurança garantem que os registos de auditoria são preservados, mesmo que os dados originais sejam perdidos ou danificados, o que ajuda a cumprir os requisitos e permite recuperar informações em caso de falhas do sistema ou eliminações acidentais. Os registos de auditoria restaurados oferecem acesso a dados do histórico, o que permite a análise de eventos passados, incidentes de segurança e atividade do utilizador.
A implementação de um processo de cópia de segurança e restauro para registos de auditoria é benéfica para manter a integridade dos dados, garantir a conformidade e permitir a análise do histórico.
Antes de começar
Certifique-se de que tem acesso aos seguintes recursos:
- Um contentor remoto para cópias de segurança com um ponto final, uma chave de acesso secreta e um ID da chave de acesso.
- Um certificado de autoridade de certificação (AC) para o sistema de armazenamento.
- Um cluster do Kubernetes funcional.
Para receber as autorizações de que precisa para gerir cópias de segurança, peça ao administrador da IAM do projeto que lhe conceda uma das seguintes funções no espaço de nomes do projeto:
- Audit Logs Platform Restore Bucket Creator
- Visualizador de contentor da plataforma de registos de auditoria
Consoante o nível de acesso e as autorizações de que precisa, pode obter funções de criador ou visitante para recursos de contentores de cópias de segurança no espaço de nomes do seu projeto. Para mais informações sobre estas funções, consulte o artigo Prepare as autorizações de IAM.
Defina variáveis de ambiente: defina as seguintes variáveis de ambiente para executar os comandos desta página:
* The path of the kubeconfig file:
```sh
export KUBECONFIG=KUBECONFIG_PATH
```
Replace `KUBECONFIG_PATH` with the path to the
kubeconfig file for the Management API server.
* Your project namespace:
```sh
export PROJECT_NAMESPACE=PROJECT_NAMESPACE
```
Proteja os registos de auditoria numa cópia de segurança
Esta secção contém os passos para criar uma cópia de segurança dos registos de auditoria num contentor remoto.
Defina as credenciais do contentor
Tem de definir as credenciais de acesso para os seguintes contentores:
- Bucket de origem: o bucket do GDC local que contém os registos de auditoria originais que quer proteger.
- Bucket de destino: o bucket remoto onde quer criar a cópia de segurança para registos de auditoria.
Defina as credenciais para ambos os contentores:
Segmento de origem
Liste os contentores no espaço de nomes do seu projeto a partir do servidor da API Management:
kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${PROJECT_NAMESPACE}
O campo
DESCRIPTION
no resultado indica que contentores contêm registos de auditoria. Selecione o contentor que contém os registos que quer proteger.De acordo com as informações da saída, defina as seguintes variáveis de ambiente:
SRC_BUCKET= BUCKET_NAME SRC_ENDPOINT = ENDPOINT SRC_PATH= FULLY_QUALIFIED_BUCKET_NAME
Substitua o seguinte:
BUCKET_NAME
: o valorBUCKET NAME
da saída.ENDPOINT
: o valorENDPOINT
da saída.FULLY_QUALIFIED_BUCKET_NAME
: o valor deFULLY-QUALIFIED-BUCKET-NAME
da saída.
Obtenha o nome do Secret do contentor:
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'
Defina a variável de credenciais:
SRC_CREDENTIALS="PROJECT_NAMESPACE/SECRET_NAME"
Substitua
SECRET_NAME
pelo nome do segredo que obteve.Crie o segredo do certificado da AC:
kubectl create secret generic -n PROJECT_NAMESPACE audit-log-loki-ca \ --from-literal=ca.crt=CERTIFICATE
Substitua
CERTIFICATE
pelo certificado da AC do sistema de armazenamento.Defina a variável do certificado da AC:
SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-ca
Segmento de destino
Defina as seguintes variáveis de ambiente para o contentor de destino remoto:
DST_ACCESS_KEY_ID= ACCESS_KEY DST_SECRET_ACCESS_KEY= ACCESS_SECRET DST_ENDPOINT= REMOTE_ENDPOINT DST_PATH= REMOTE_BUCKET_NAME
Substitua o seguinte:
ACCESS_KEY
: a chave de acesso do contentor.ACCESS_SECRET
: o segredo de acesso do contentor.REMOTE_ENDPOINT
: o ponto final do contentor.REMOTE_BUCKET_NAME
: o nome do segmento.
Crie um segredo do contentor 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
Substitua
PROJECT_NAMESPACE
pelo espaço de nomes do seu projeto.Defina a variável de credenciais:
DST_CREDENTIALS=PROJECT_NAMESPACE/s3-bucket-credentials
Se necessário, crie um segredo com o certificado da AC do contentor e defina a variável do certificado da AC:
kubectl create secret generic -n PROJECT_NAMESPACE s3-bucket-ca \ --from-literal=ca.crt=REMOTE_CERTIFICATE
Substitua
REMOTE_CERTIFICATE
pelo certificado de CA do bucket de destino.Defina a variável do certificado da AC:
DST_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-bucket-ca
Transfira registos de auditoria
O operador de infraestrutura (IO) tem de criar uma tarefa de transferência para exportar
registos de auditoria do contentor de origem para o contentor de destino da cópia de segurança. O IO usa a conta de serviço audit-log-pa-backup-restore-sa
pré-configurada para configurar o serviço de transferência para contentores predefinidos de registos de auditoria da plataforma.
Use a seguinte tarefa para transferir registos de auditoria:
apiVersion: batch/v1
kind: Job
metadata:
name: audit-log-transfer-job
namespace: PROJECT_NAMESPACE
spec:
template:
spec:
serviceAccountName: audit-log-pa-backup-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 # 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.
Monitorize a transferência de dados
usando o nome da tarefa (audit-log-transfer-job
) e o espaço de nomes do projeto.
A tarefa termina quando todos os dados são transferidos para o contentor de destino.
Restaure registos de auditoria a partir de uma cópia de segurança
Esta secção contém os passos para restaurar registos de auditoria a partir de uma cópia de segurança num contentor remoto.
Crie um contentor para registos restaurados
Crie um contentor para armazenar os registos de auditoria restaurados:
Crie o contentor de restauro:
apiVersion: object.gdc.goog/v1 kind: Bucket metadata: annotations: object.gdc.goog/audit-logs: PA labels: logging.private.gdch.goog/loggingpipeline-name: default name: audit-logs-loki-restore-pa namespace: PROJECT_NAMESPACE spec: bucketPolicy: lockingPolicy: defaultObjectRetentionDays: 1 description: Bucket for storing audit-logs-loki logs restore storageClass: Standard
Substitua
PROJECT_NAMESPACE
pelo espaço de nomes do seu projeto.Veja o bloco:
kubectl get bucket audit-logs-loki-restore-pa -n PROJECT_NAMESPACE
A criação do contentor pode demorar alguns minutos.
De acordo com as informações da saída, defina as seguintes variáveis de ambiente:
DST_BUCKET= RESTORE_BUCKET_NAME DST_ENDPOINT = RESTORE_ENDPOINT DST_PATH= RESTORE_FULLY_QUALIFIED_BUCKET_NAME
Substitua o seguinte:
RESTORE_BUCKET_NAME
: o valorBUCKET NAME
da saída.RESTORE_ENDPOINT
: o valorENDPOINT
da saída.RESTORE_FULLY_QUALIFIED_BUCKET_NAME
: o valor deFULLY-QUALIFIED-BUCKET-NAME
da saída.
Obtenha o nome do Secret do contentor:
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'
Defina as variáveis de credenciais:
DST_SECRET_NAME=RESTORE_SECRET_NAME DST_CREDENTIALS="PROJECT_NAMESPACE/RESTORE_SECRET_NAME"
Substitua
RESTORE_SECRET_NAME
pelo nome do segredo que obteve.Crie o segredo do certificado da AC:
kubectl create secret generic -n PROJECT_NAMESPACE audit-log-loki-restore-ca \ --from-literal=ca.crt=CERTIFICATE
Substitua
CERTIFICATE
pelo certificado da AC do sistema de armazenamento.Defina a variável do certificado da AC:
DST_CA_CERTIFICATE=PROJECT_NAMESPACE/audit-log-loki-restore-ca
Defina as credenciais do contentor de origem
Defina as credenciais do contentor que contém a cópia de segurança dos registos de auditoria:
Defina as seguintes variáveis de ambiente:
SRC_ACCESS_KEY_ID= ACCESS_KEY SRC_SECRET_ACCESS_KEY= ACCESS_SECRET SRC_ENDPOINT= REMOTE_ENDPOINT SRC_PATH= REMOTE_BUCKET_NAME
Substitua o seguinte:
ACCESS_KEY
: a chave de acesso do contentor de cópia de segurança.ACCESS_SECRET
: o segredo de acesso do contentor de cópia de segurança.REMOTE_ENDPOINT
: o ponto final do contentor de cópia de segurança.REMOTE_BUCKET_NAME
: o nome do contentor de cópia de segurança.
Crie um segredo do contentor de cópias de segurança:
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
Defina a variável de credenciais:
SRC_CREDENTIALS=PROJECT_NAMESPACE/s3-backup-bucket-credentials
Crie um segredo com o certificado da AC do contentor:
kubectl create secret generic -n PROJECT_NAMESPACE s3-backup-bucket-ca \ --from-literal=ca.crt=BACKUP_CERTIFICATE
Substitua
BACKUP_CERTIFICATE
pelo certificado da AC do contentor de cópia de segurança.Defina a variável do certificado da AC:
SRC_CA_CERTIFICATE=PROJECT_NAMESPACE/s3-backup-bucket-ca
Transfira registos de auditoria restaurados
O operador de infraestrutura (IO) tem de criar uma tarefa de transferência para restaurar os registos de auditoria do contentor de cópia de segurança para o contentor de restauro. O IO usa a conta de serviço audit-log-pa-backup-restore-sa
pré-configurada para configurar o serviço de transferência para contentores predefinidos de registos de auditoria da plataforma.
Use a seguinte tarefa para transferir registos de auditoria:
apiVersion: batch/v1
kind: Job
metadata:
name: audit-log-restore-job
namespace: PROJECT_NAMESPACE
spec:
template:
spec:
serviceAccountName: audit-log-pa-backup-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.
Monitorize a transferência de dados
usando o nome da tarefa (audit-log-restore-job
) e o espaço de nomes do projeto.
A tarefa termina quando todos os dados são transferidos para o contentor de restauro.
Registos de acesso restaurados
Implemente uma instância do Loki para aceder aos registos restaurados através dos manifestos de configuração e implementação fornecidos:
Crie um objeto
ConfigMap
para a configuração da instância.Segue-se um exemplo de um objeto
ConfigMap
:apiVersion: v1 kind: ConfigMap metadata: name: audit-logs-loki-restore-pa 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
Implemente a instância como um objeto
StatefulSet
com umService
para aceder aos registos.Segue-se um exemplo de objetos
StatefulSet
eService
:apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: audit-logs-loki-restore-pa logging.private.gdch.goog/loggingpipeline-name: default name: audit-logs-loki-restore-pa namespace: PROJECT_NAMESPACE spec: persistentVolumeClaimRetentionPolicy: whenDeleted: Retain whenScaled: Retain podManagementPolicy: OrderedReady replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: audit-logs-loki-restore-pa serviceName: audit-logs-loki-restore-pa template: metadata: labels: app: audit-logs-loki-restore-pa app.kubernetes.io/part-of: audit-logs-loki-restore-pa 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-pa 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-pa 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-log-pa-backup-restore-sa serviceAccountName: audit-log-pa-backup-restore-sa terminationGracePeriodSeconds: 4800 volumes: - emptyDir: {} name: temp - configMap: defaultMode: 420 name: audit-logs-loki-restore-pa 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-pa 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-pa sessionAffinity: None type: ClusterIP
Veja os registos restaurados
Configure o Grafana para ver os registos de auditoria restaurados da instância do Loki:
- Abra o ponto final do Grafana do seu projeto. Para mais informações, consulte o artigo Consulte e veja registos.
- No menu de navegação da interface do utilizador, clique em Administração > Origens de dados.
- Clique em Adicionar nova origem de dados.
- Na página Adicionar origem de dados, selecione Loki.
- Na página Definições, introduza
Audit Logs - Restore
no campo Nome. Na secção HTTP, introduza o seguinte valor no campo URL:
http://audit-logs-loki-restore-pa.PROJECT_NAMESPACE.svc:3100
Na secção Cabeçalhos HTTP personalizados, introduza os seguintes valores nos campos correspondentes:
- Header:
X-Scope-OrgID
- Valor:
infra-obs
- Header:
Na figura 1, o Loki é apresentado como uma opção na página Adicionar origem de dados.
Figura 1. A página Adicionar origem de dados na IU da instância de monitorização.
Figura 2. A página Definições na IU da instância de monitorização.
A opção Audit Logs - Restore
está agora disponível como uma origem de dados no explorador de registos.