Collecter les journaux d'audit Oracle Cloud Infrastructure

Compatible avec :

Ce document explique comment ingérer des journaux d'audit Oracle Cloud Infrastructure dans Google Security Operations à l'aide de Google Cloud Storage.

Le service Oracle Cloud Infrastructure Audit enregistre automatiquement les appels à tous les points de terminaison d'interface de programmation d'application (API) publics Oracle Cloud Infrastructure compatibles en tant qu'événements de journaux. Actuellement, tous les services sont compatibles avec la journalisation par Oracle Cloud Infrastructure Audit. Les événements de journaux enregistrés par Oracle Cloud Infrastructure Audit incluent les appels d'API effectués par la console Oracle Cloud Infrastructure, l'interface de ligne de commande (CLI), les kits de développement logiciel (SDK), vos propres clients personnalisés ou d'autres services Oracle Cloud Infrastructure.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Une instance Google SecOps
  • Un projet GCP avec l'API Cloud Storage activée
  • Autorisations pour créer et gérer des buckets GCS
  • Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
  • Autorisations permettant de créer des services Cloud Run, des sujets Pub/Sub et des tâches Cloud Scheduler
  • Compte Oracle Cloud Infrastructure disposant des autorisations nécessaires pour créer et gérer :
    • Service Connector Hub
    • Fonctions
    • Buckets Object Storage
    • Stratégies IAM
  • Accès privilégié à la console Oracle Cloud Infrastructure

Créer un bucket Google Cloud Storage

  1. Accédez à la console Google Cloud.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage> Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nommer votre bucket Saisissez un nom unique (par exemple, oci-audit-logs-gcs).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion).
    Emplacement Sélectionnez l'emplacement (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé)
    Outils de protection Facultatif : Activer la gestion des versions des objets ou la règle de conservation
  6. Cliquez sur Créer.

Configurer Oracle Cloud Infrastructure pour exporter les journaux d'audit vers GCS

Oracle Cloud Infrastructure n'est pas compatible avec l'exportation native vers Google Cloud Storage. Vous utiliserez Oracle Cloud Infrastructure Service Connector Hub avec une fonction pour transférer les journaux d'audit vers GCS.

Créer une fonction Oracle Cloud Infrastructure pour transférer les journaux vers GCS

  1. Connectez-vous à la console Oracle Cloud.
  2. Accédez à Services pour les développeurs > Fonctions > Applications.
  3. Sélectionnez le compartiment dans lequel vous souhaitez créer l'application de fonction.
  4. Cliquez sur Créer une application.
  5. Fournissez les informations de configuration suivantes :
    • Nom : saisissez audit-logs-to-gcs-app.
    • VCN : sélectionnez un réseau cloud virtuel.
    • Sous-réseaux : sélectionnez un sous-réseau avec accès à Internet.
  6. Cliquez sur Créer.
  7. Une fois l'application créée, cliquez sur Getting Started (Premiers pas), puis suivez les instructions pour configurer votre environnement de développement local avec la CLI Fn.
  8. Créez un répertoire de fonctions sur votre ordinateur local :

    mkdir oci-audit-to-gcs
    cd oci-audit-to-gcs
    
  9. Initialisez une fonction Python :

    fn init --runtime python oci-audit-to-gcs
    cd oci-audit-to-gcs
    
  10. Remplacez le contenu du fichier func.py par le code suivant :

    import io
    import json
    import logging
    import os
    from fdk import response
    from google.cloud import storage
    from google.oauth2 import service_account
    from datetime import datetime
    
    # Configure logging
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger()
    
    # Environment variables
    GCS_BUCKET = os.environ.get('GCS_BUCKET')
    GCS_PREFIX = os.environ.get('GCS_PREFIX', 'oci-audit-logs')
    GCS_CREDENTIALS_JSON = os.environ.get('GCS_CREDENTIALS_JSON')
    
    def handler(ctx, data: io.BytesIO = None):
        """
        Oracle Cloud Infrastructure Function to forward Audit logs to GCS.
    
        Args:
            ctx: Function context
            data: Input data containing Audit log events
        """
    
        if not all([GCS_BUCKET, GCS_CREDENTIALS_JSON]):
            logger.error('Missing required environment variables: GCS_BUCKET or GCS_CREDENTIALS_JSON')
            return response.Response(
                ctx, response_data=json.dumps({"error": "Missing configuration"}),
                headers={"Content-Type": "application/json"}
            )
    
        try:
            # Parse input data
            body = json.loads(data.getvalue())
            logger.info(f"Received event: {json.dumps(body)}")
    
            # Extract log entries
            log_entries = []
            if isinstance(body, list):
                log_entries = body
            elif isinstance(body, dict):
                # Service Connector Hub sends data in specific format
                if 'data' in body:
                    log_entries = [body['data']] if isinstance(body['data'], dict) else body['data']
                else:
                    log_entries = [body]
    
            if not log_entries:
                logger.info("No log entries to process")
                return response.Response(
                    ctx, response_data=json.dumps({"status": "no_logs"}),
                    headers={"Content-Type": "application/json"}
                )
    
            # Initialize GCS client with service account credentials
            credentials_dict = json.loads(GCS_CREDENTIALS_JSON)
            credentials = service_account.Credentials.from_service_account_info(credentials_dict)
            storage_client = storage.Client(credentials=credentials, project=credentials_dict.get('project_id'))
            bucket = storage_client.bucket(GCS_BUCKET)
    
            # Write logs to GCS as NDJSON
            timestamp = datetime.utcnow().strftime('%Y%m%d_%H%M%S_%f')
            object_key = f"{GCS_PREFIX}/logs_{timestamp}.ndjson"
            blob = bucket.blob(object_key)
    
            ndjson = '\n'.join([json.dumps(entry, ensure_ascii=False) for entry in log_entries]) + '\n'
            blob.upload_from_string(ndjson, content_type='application/x-ndjson')
    
            logger.info(f"Wrote {len(log_entries)} records to gs://{GCS_BUCKET}/{object_key}")
    
            return response.Response(
                ctx, response_data=json.dumps({"status": "success", "records": len(log_entries)}),
                headers={"Content-Type": "application/json"}
            )
    
        except Exception as e:
            logger.error(f'Error processing logs: {str(e)}')
            return response.Response(
                ctx, response_data=json.dumps({"error": str(e)}),
                headers={"Content-Type": "application/json"},
                status_code=500
            )
    
  11. Mettez à jour requirements.txt avec les dépendances suivantes :

    fdk>=0.1.0
    google-cloud-storage>=2.0.0
    google-auth>=2.0.0
    
  12. Déployez la fonction sur Oracle Cloud Infrastructure :

    fn -v deploy --app audit-logs-to-gcs-app
    
  13. Une fois le déploiement terminé, notez l'OCID de la fonction. Vous en aurez besoin lors de la tâche suivante.

Configurer les variables d'environnement de la fonction

  1. Dans la console Oracle Cloud, accédez à Services pour les développeurs > Fonctions > Applications.
  2. Cliquez sur l'application (audit-logs-to-gcs-app).
  3. Cliquez sur le nom de la fonction (oci-audit-to-gcs).
  4. Cliquez sur Configuration
  5. Ajoutez les variables de configuration suivantes :

    Clé Valeur
    GCS_BUCKET Nom de votre bucket GCS (par exemple, oci-audit-logs-gcs)
    GCS_PREFIX Préfixe des fichiers journaux (par exemple, oci-audit-logs)
    GCS_CREDENTIALS_JSON Chaîne JSON de la clé du compte de service GCP (voir ci-dessous)
  6. Cliquez sur Enregistrer les modifications.

Créer un compte de service GCP pour la fonction Oracle Cloud Infrastructure

La fonction Oracle Cloud Infrastructure a besoin d'un compte de service GCP pour écrire dans le bucket GCS.

  1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
  2. Cliquez sur Créer un compte de service.
  3. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez oci-function-gcs-writer.
    • Description du compte de service : saisissez Service account for OCI Function to write Audit logs to GCS.
  4. Cliquez sur Créer et continuer.
  5. Dans la section Autoriser ce compte de service à accéder au projet, ajoutez le rôle suivant :
    1. Cliquez sur Sélectionner un rôle.
    2. Recherchez et sélectionnez Administrateur des objets de l'espace de stockage.
  6. Cliquez sur Continuer.
  7. Cliquez sur OK.
  8. Cliquez sur l'adresse e-mail du compte de service que vous venez de créer.
  9. Accédez à l'onglet Clés.
  10. Cliquez sur Ajouter une clé > Créer une clé.
  11. Sélectionnez JSON comme type de clé.
  12. Cliquez sur Créer.
  13. Le fichier de clé JSON est téléchargé sur votre ordinateur.
  14. Ouvrez le fichier de clé JSON et copiez l'intégralité de son contenu.
  15. Revenez à la configuration de la fonction Oracle Cloud Console.
  16. Collez le contenu JSON dans la variable de configuration GCS_CREDENTIALS_JSON.

Accorder des autorisations IAM sur un bucket GCS

Accordez au compte de service des autorisations d'écriture sur le bucket GCS :

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (oci-audit-logs-gcs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (oci-function-gcs-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Attribuer des rôles : sélectionnez Administrateur des objets Storage.
  6. Cliquez sur Enregistrer.

Créer un hub de connecteurs de service Oracle Cloud Infrastructure

  1. Connectez-vous à la console Oracle Cloud.
  2. Accédez à Observabilité et gestion> Journalisation> Service Connector Hub.
  3. Sélectionnez le compartiment dans lequel vous souhaitez créer le connecteur de service.
  4. Cliquez sur Créer un connecteur de service.
  5. Fournissez les informations de configuration suivantes :

    • Informations sur le connecteur de service :
    Paramètre Valeur
    Nom du connecteur Saisissez audit-logs-to-gcs-connector.
    Description Saisissez Forward OCI Audit logs to Google Cloud Storage.
    Compartiment de ressources Sélectionnez le compartiment.
    • Configurer la source :
    Paramètre Valeur
    Source Sélectionnez Journalisation.
    Compartiment Sélectionnez le compartiment contenant les journaux d'audit.
    Enregistrer un groupe Sélectionnez _Audit (groupe de journaux par défaut pour les journaux d'audit).
  6. Cliquez sur + Another Log (Autre journal).

  7. Sélectionnez le journal d'audit de votre compartiment (par exemple, _Audit_Include_Subcompartment).

    • Configurer la cible :
    Paramètre Valeur
    Cible Sélectionnez Fonctions.
    Compartiment de fonction Sélectionnez le compartiment contenant la fonction.
    Application de la fonction Sélectionner audit-logs-to-gcs-app
    Fonction Sélectionner oci-audit-to-gcs
  8. Faites défiler la page jusqu'à Configurer la tâche (facultatif) et conservez les paramètres par défaut.

  9. Cliquez sur Créer.

Créer une stratégie IAM pour Service Connector Hub

Le Service Connector Hub nécessite des autorisations pour appeler la fonction.

  1. Dans la console Oracle Cloud, accédez à Identité et sécurité > Stratégies.
  2. Sélectionnez le compartiment dans lequel vous avez créé le Service Connector Hub.
  3. Cliquez sur Créer une règle.
  4. Fournissez les informations de configuration suivantes :
    • Nom : saisissez service-connector-functions-policy.
    • Description : saisissez Allow Service Connector Hub to invoke Functions.
    • Compartiment : sélectionnez le compartiment.
  5. Dans la section Créateur de règles, activez l'option Afficher l'éditeur manuel.
  6. Saisissez les instructions suivantes concernant les règles :

    Allow any-user to use fn-function in compartment <compartment-name> where all {request.principal.type='serviceconnector'}
    Allow any-user to use fn-invocation in compartment <compartment-name> where all {request.principal.type='serviceconnector'}
    
    • Remplacez <compartment-name> par le nom de votre compartiment.
  7. Cliquez sur Créer.

Tester l'intégration

  1. Connectez-vous à la console Oracle Cloud.
  2. Effectuez des actions qui génèrent des journaux d'audit (par exemple, créez ou modifiez une ressource).
  3. Attendez deux à cinq minutes que les journaux soient traités.
  4. Accédez à Cloud Storage > Buckets dans la console GCP.
  5. Cliquez sur le nom de votre bucket (oci-audit-logs-gcs).
  6. Accédez au dossier de préfixe (oci-audit-logs/).
  7. Vérifiez que de nouveaux fichiers .ndjson apparaissent dans le bucket.

Récupérer le compte de service Google SecOps

Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.

Obtenir l'adresse e-mail du compte de service

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Oracle Cloud Audit Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez Oracle Cloud Infrastructure comme Type de journal.
  7. Cliquez sur Obtenir un compte de service. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copiez cette adresse e-mail pour l'utiliser à l'étape suivante.

Accorder des autorisations IAM au compte de service Google SecOps

Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (oci-audit-logs-gcs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
    • Attribuez des rôles : sélectionnez Lecteur des objets de l'espace de stockage.
  6. Cliquez sur Enregistrer.

Configurer un flux dans Google SecOps pour ingérer les journaux d'audit Oracle Cloud Infrastructure

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Oracle Cloud Audit Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez Oracle Cloud Infrastructure comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URL du bucket Storage : saisissez l'URI du bucket GCS avec le préfixe du chemin d'accès :

       gs://oci-audit-logs-gcs/oci-audit-logs/
      
      • Remplacez :

        • oci-audit-logs-gcs : nom de votre bucket GCS.
        • oci-audit-logs : préfixe/chemin d'accès au dossier facultatif où les journaux sont stockés (laisser vide pour la racine).
      • Exemples :

        • Bucket racine : gs://company-logs/
        • Avec préfixe : gs://company-logs/oci-audit-logs/
        • Avec un sous-dossier : gs://company-logs/oracle/audit/
    • Option de suppression de la source : sélectionnez l'option de suppression de votre choix :

      • Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
      • Supprimer les fichiers transférés : supprime les fichiers après un transfert réussi.
      • Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides après un transfert réussi.

    • Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.

    • Espace de noms de l'élément : espace de noms de l'élément.

    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.

  9. Cliquez sur Suivant.

  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.