Exporter des journaux vers un bucket distant

Vous pouvez exporter les journaux d'audit et opérationnels d'un appareil Google Distributed Cloud (GDC) isolé vers un bucket de stockage distant compatible S3 à l'aide d'un job de transfert de stockage. Le déchargement de ces journaux vous aide à respecter les exigences de conservation à long terme pour la conformité et à effectuer des audits de sécurité externes.

Obtenir des rôles IAM

Pour obtenir les autorisations nécessaires pour exporter des journaux, demandez à l'administrateur IAM de votre organisation de vous accorder le rôle d'administrateur de transfert de journaux (logs-transfer-admin) dans l'espace de noms obs-system du cluster d'infrastructure et le rôle de lecteur de bucket de journaux (logs-bucket-viewer)) dans l'espace de noms obs-system du plan de gestion.

Pour en savoir plus sur ces rôles, consultez Préparer les autorisations IAM.

Obtenir le point de terminaison et le nom complet du bucket source

  1. Définissez KUBECONFIG sur l'API Org Management :

    export KUBECONFIG=MANAGEMENT_API_KUBECONFIG_PATH
    
  2. Obtenez le point de terminaison du bucket source :

    • Pour les journaux d'audit :

      kubectl get bucket audit-logs-loki-all -n obs-system -o json | jq '.status.endpoint'
      
    • Pour les journaux opérationnels :

      kubectl get bucket ops-logs-loki-all -n obs-system -o json | jq '.status.endpoint'
      
  3. Obtenez le nom complet du bucket source :

    • Pour les journaux d'audit :

      kubectl get bucket audit-logs-loki-all -n obs-system -o json | jq '.status.fullyQualifiedName'
      
    • Pour les journaux opérationnels :

      kubectl get bucket ops-logs-loki-all -n obs-system -o json | jq '.status.fullyQualifiedName'
      

Obtenir les identifiants d'accès du bucket source

  1. Définissez KUBECONFIG sur le cluster Org Infra :

      export KUBECONFIG=INFRA_CLUSTER_KUBECONFIG_PATH
    
  2. Obtenez l'ID de la clé d'accès du bucket source :

    • Pour les journaux d'audit :

      kubectl get secret audit-logs-loki-all-s3-auth -n obs-system -o json | jq -r '.data."access-key-id"' | base64 -di
      
    • Pour les journaux opérationnels :

      kubectl get secret ops-logs-loki-all-s3-auth -n obs-system -o json | jq -r '.data."access-key-id"' | base64 -di
      
  3. Obtenez la clé d'accès secrète du bucket source :

    • Pour les journaux d'audit :

      kubectl get secret audit-logs-loki-all-s3-auth -n obs-system -o json | jq -r '.data."secret-access-key"' | base64 -di
      
    • Pour les journaux opérationnels :

      kubectl get secret ops-logs-loki-all-s3-auth -n obs-system -o json | jq -r '.data."secret-access-key"' | base64 -di
      

Journaux de transfert

  1. Définissez KUBECONFIG sur le cluster Org Infra :

    export KUBECONFIG=INFRA_CLUSTER_KUBECONFIG_PATH
    
  2. Créez un secret avec les identifiants d'accès du bucket source :

    kubectl create secret generic -n obs-system SRC_BUCKET_SECRET_NAME
    --from-literal=access-key-id=SRC_BUCKET_ACCESS_KEY_ID
    --from-literal=secret-access-key=SRC_BUCKET_SECRET_ACCESS_KEY
    
  3. Créez un secret avec les identifiants d'accès du bucket de destination :

    kubectl create secret generic -n obs-system DST_BUCKET_SECRET_NAME 
    --from-literal=access-key-id=DST_BUCKET_ACCESS_KEY_ID   
    --from-literal=secret-access-key=DST_BUCKET_SECRET_ACCESS_KEY
    
  4. Créez un secret avec une autorité de certification pour authentifier le point de terminaison du bucket de destination :

    kubectl create secret generic -n obs-system DST_BUCKET_CA_SECRET_NAME 
    --from-file="ca.crt"=CA_FILE
    

    Pour continuer, obtenez les valeurs CA_FILE, DST_BUCKET_ACCESS_KEY_ID et DST_BUCKET_SECRET_ACCESS_KEY à partir du bucket distant. Le fonctionnement de l'outil de transfert de données dépend des emplacements spécifiques des points de terminaison du transfert.

  5. Créez un job de transfert de journaux :

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: JOB_NAME
      namespace: obs-system
    spec:
      template:
        spec:
          serviceAccountName: logs-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_BUCKET_ENDPOINT'
                - '--dst_endpoint=DST_BUCKET_ENDPOINT'
                - '--src_path=SRC_BUCKET_FULLY_QUALIFIED_NAME'
                - '--dst_path=DST_BUCKET_FULLY_QUALIFIED_NAME'
                - '--src_credentials=obs-system/SRC_BUCKET_SECRET_NAME'
                - '--dst_credentials=obs-system/DST_BUCKET_SECRET_NAME'
                - '--dst_ca_certificate_reference=obs-system/DST_BUCKET_CA_SECRET_NAME'
                - '--src_ca_certificate_reference=obs-system/trust-store-root-ext'
                - '--src_type=s3'
                - '--dst_type=s3'
                - '--bandwidth_limit=1G'
          restartPolicy: OnFailure.
    ---
    
  6. Attendez que le job de transfert se termine :

    kubectl wait --for=condition=complete job/JOB_NAME -n obs-system