Raccogli i log di Oracle Cloud Infrastructure
Questo documento spiega come importare i log di Oracle Cloud Infrastructure in Google Security Operations utilizzando Google Cloud Storage.
Il servizio di audit Oracle Cloud Infrastructure (OCI) registra automaticamente le chiamate a tutti gli endpoint dell'interfaccia di programmazione delle applicazioni (API) pubblica OCI supportati come eventi di log. Gli eventi di log registrati dal servizio di controllo includono le chiamate API effettuate dalla console OCI, dall'interfaccia a riga di comando (CLI), dai kit di sviluppo software (SDK), dai tuoi client personalizzati o da altri servizi OCI. Le informazioni nei log includono l'ora in cui si è verificata l'attività API, l'origine e la destinazione dell'attività, il tipo di azione e il tipo di risposta.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto GCP con l'API Cloud Storage abilitata
- Autorizzazioni per creare e gestire bucket GCS
- Autorizzazioni per gestire le policy IAM nei bucket GCS
- Autorizzazioni per creare servizi Cloud Run, argomenti Pub/Sub e job Cloud Scheduler
- Un account Oracle Cloud Infrastructure con autorizzazioni per creare e gestire:
- Connettori di Service Connector Hub
- Applicazioni e funzioni
- Bucket Object Storage
- Criteri IAM
- Accesso con privilegi alla console Oracle Cloud
Crea un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio oci-audit-logs-gcs).Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo degli accessi Uniforme (consigliato) Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Configura Oracle Cloud Infrastructure per esportare i log di controllo in GCS
Oracle Cloud Infrastructure non supporta l'esportazione integrata in Google Cloud Storage. Utilizzerai OCI Service Connector Hub con una funzione OCI per inoltrare gli audit log a GCS.
Crea una funzione OCI per inoltrare i log a GCS
- Accedi alla console Oracle Cloud.
- Apri il menu di navigazione e seleziona Developer Services > Functions > Applications.
- Seleziona il comparto in cui vuoi creare l'applicazione di funzione.
- Fai clic su Crea applicazione.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci
audit-logs-to-gcs-app. - VCN: seleziona una Virtual Cloud Network.
- Subnet: seleziona una subnet con accesso a internet.
- Nome: inserisci
- Fai clic su Crea.
- Dopo aver creato l'applicazione, fai clic su Per iniziare e segui le istruzioni per configurare l'ambiente di sviluppo locale con la CLI Fn.
Crea una nuova directory di funzioni sulla tua macchina locale:
mkdir oci-audit-to-gcs cd oci-audit-to-gcsInizializza una funzione Python:
fn init --runtime python oci-audit-to-gcs cd oci-audit-to-gcsSostituisci i contenuti di
func.pycon il seguente codice: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): """ OCI 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 )Aggiorna
requirements.txtcon le seguenti dipendenze:fdk>=0.1.0 google-cloud-storage>=2.0.0 google-auth>=2.0.0Esegui il deployment della funzione su OCI:
fn -v deploy --app audit-logs-to-gcs-appAl termine del deployment, prendi nota dell'OCID della funzione. Lo utilizzerai durante la configurazione di Service Connector Hub.
Configura le variabili di ambiente della funzione
- Nella console Oracle Cloud, vai a Developer Services > Functions > Applications.
- Fai clic sull'applicazione (
audit-logs-to-gcs-app). - Fai clic sul nome della funzione (
oci-audit-to-gcs). - Fai clic su Configurazione.
Aggiungi le seguenti variabili di configurazione:
Chiave Valore GCS_BUCKETIl nome del bucket GCS (ad esempio, oci-audit-logs-gcs)GCS_PREFIXPrefisso per i file di log (ad esempio, oci-audit-logs)GCS_CREDENTIALS_JSONStringa JSON della chiave del account di servizio Google Cloud Fai clic su Salva modifiche.
Crea un account di servizio Google Cloud per la funzione OCI
La funzione OCI richiede un account di servizio Google Cloud per scrivere nel bucket GCS.
- Nella console Google Cloud, vai a IAM e amministrazione > Service account.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci
oci-function-gcs-writer. - Descrizione del service account: inserisci
Service account for OCI Function to write Audit logs to GCS.
- Nome service account: inserisci
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, aggiungi il seguente ruolo:
- Fai clic su Seleziona un ruolo.
- Cerca e seleziona Storage Object Admin.
- Fai clic su Continua.
- Fai clic su Fine.
- Fai clic sull'email del account di servizio appena creato.
- Vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON come tipo di chiave.
- Fai clic su Crea.
- Il file della chiave JSON verrà scaricato sul computer.
- Apri il file della chiave JSON e copia l'intero contenuto.
- Torna alla configurazione della funzione Oracle Cloud Console.
Incolla i contenuti JSON nella variabile di configurazione
GCS_CREDENTIALS_JSON.
Concedi autorizzazioni IAM sul bucket GCS
Concedi al account di servizio le autorizzazioni di scrittura sul bucket GCS:
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (
oci-audit-logs-gcs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: inserisci l'email del account di servizio (
oci-function-gcs-writer@PROJECT_ID.iam.gserviceaccount.com). - Assegna i ruoli: seleziona Storage Object Admin.
- Aggiungi entità: inserisci l'email del account di servizio (
- Fai clic su Salva.
Crea un connettore OCI Service Connector Hub
- Accedi alla console Oracle Cloud.
- Apri il menu di navigazione e seleziona Analytics e AI. In Messaggistica, seleziona Hub dei connettori.
- Seleziona il comparto in cui vuoi creare il connettore di servizio.
- Fai clic su Crea connettore.
Fornisci i seguenti dettagli di configurazione:
Informazioni sul connettore:
Impostazione Valore Nome connettore Inserisci audit-logs-to-gcs-connectorDescrizione Inserisci Forward OCI Audit logs to Google Cloud StorageCompartimento delle risorse Seleziona il compartimento. Configura origine:
Impostazione Valore Origine Seleziona Logging. Compartimento Seleziona il compartimento contenente i log di controllo Gruppo di log Seleziona _Audit (gruppo di log predefinito per i log di controllo). Fai clic su + Another Log (+ Un altro log).
Seleziona l'audit log per il tuo compartimento (ad esempio
_Audit_Include_Subcompartment).Configura target:
Impostazione Valore Destinazione Seleziona Funzioni. Compartimento della funzione Seleziona il comparto contenente la funzione Applicazione della funzione Seleziona audit-logs-to-gcs-appFunzione Seleziona oci-audit-to-gcsNella sezione Configura attività (facoltativo), lascia le impostazioni predefinite.
Se ti viene chiesto di creare una policy (necessaria per l'accesso per creare o aggiornare un connettore di servizio), seleziona Crea.
Fai clic su Crea.
Crea una policy IAM per Service Connector Hub
Service Connector Hub richiede le autorizzazioni per richiamare la funzione.
- Nella console Oracle Cloud, vai a Identity & Security > Policies.
- Seleziona il compartimento in cui hai creato il connettore Service Connector Hub.
- Fai clic su Crea criterio.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci
service-connector-functions-policy. - Descrizione: inserisci
Allow Service Connector Hub to invoke Functions. - Compartimento: seleziona il compartimento.
- Nome: inserisci
- Nella sezione Policy Builder, attiva/disattiva Mostra editor manuale.
Inserisci le seguenti dichiarazioni delle norme:
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'}Fai clic su Crea.
Testare l'integrazione
- Accedi alla console Oracle Cloud.
- Esegui alcune azioni che generano audit log (ad esempio, crea o modifica una risorsa).
- Attendi 2-5 minuti per l'elaborazione dei log.
- Vai a Cloud Storage > Bucket nella console di GCP.
- Fai clic sul nome del bucket (
oci-audit-logs-gcs). - Vai alla cartella del prefisso (
oci-audit-logs/). Verifica che nel bucket vengano visualizzati nuovi file
.ndjson.
Recuperare il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Recupera l'email del account di servizio
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Oracle Cloud Audit Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Oracle Cloud Infrastructure Audit Logs come Tipo di log.
Fai clic su Ottieni service account. Viene visualizzata un'email del account di servizio univoca, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel tuo bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (
oci-audit-logs-gcs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps.
- Assegna ruoli: seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
Configura un feed in Google SecOps per importare i log di controllo di Oracle Cloud Infrastructure
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Oracle Cloud Audit Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Oracle Cloud Infrastructure Audit Logs come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://oci-audit-logs-gcs/oci-audit-logs/Sostituisci:
oci-audit-logs-gcs: il nome del bucket GCS.oci-audit-logs: (Facoltativo) prefisso/percorso della cartella in cui vengono archiviati i log (lascia vuoto per la radice).
Esempi:
- Bucket radice:
gs://company-logs/ - Con prefisso:
gs://company-logs/oci-audit-logs/ - Con sottocartella:
gs://company-logs/oracle/audit/
- Bucket radice:
- Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Non eliminare mai i file: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
- Età massima file (giorni): includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
authorization_field |
additional.fields |
Unita |
compartment_id_field |
additional.fields |
Unita |
compartment_name_field |
additional.fields |
Unita |
content_length_field |
additional.fields |
Unita |
content_type_field |
additional.fields |
Unita |
event_grouping_id_field |
additional.fields |
Unita |
tenant_id_label |
additional.fields |
Unita |
data.message |
metadata.description |
Mappato direttamente |
time |
metadata.event_timestamp |
Analizzato come ISO8601 |
has_principal_hostname |
metadata.event_type |
Mappato: true → STATUS_UPDATE |
oracle.tenantid |
metadata.product_deployment_id |
Mappato direttamente |
type |
metadata.product_event_type |
Mappato direttamente |
oracle.logid |
metadata.product_log_id |
Mappato direttamente |
specversion |
metadata.product_version |
Mappato direttamente |
data.request.action |
network.http.method |
Mappato direttamente |
data.identity.userAgent |
network.http.parsed_user_agent |
Rinominate/mappate |
data.response.status |
network.http.response_code |
Rinominate/mappate |
ip_protocol_out |
network.ip_protocol |
Mappato direttamente |
data.bytesOut |
network.sent_bytes |
Rinominate/mappate |
data.packets |
network.sent_packets |
Rinominate/mappate |
data.identity.consoleSessionId |
network.session_id |
Rinominate/mappate |
id |
principal.asset.product_object_id |
Mappato direttamente |
source |
principal.hostname |
Mappato direttamente |
data.identity.ipAddress |
principal.ip |
Unita |
data.sourceAddress |
principal.ip |
Unita |
data.sourcePort |
principal.port |
Rinominate/mappate |
compartmentid_label |
principal.resource.attribute.labels |
Unita |
forward_label |
principal.resource.attribute.labels |
Unita |
loggroupid_label |
principal.resource.attribute.labels |
Unita |
vniccompartmentocid_label |
principal.resource.attribute.labels |
Unita |
vnicocid_label |
principal.resource.attribute.labels |
Unita |
vnicsubnetocid_label |
principal.resource.attribute.labels |
Unita |
data.flowid |
principal.resource.product_object_id |
Mappato direttamente |
credentials_label |
principal.user.attribute.labels |
Unita |
data.identity.principalName |
principal.user.user_display_name |
Mappato direttamente |
data.identity.principalId |
principal.user.userid |
Mappato direttamente |
action |
security_result.action |
Unita |
endTime_label |
security_result.detection_fields |
Unita |
startTime_label |
security_result.detection_fields |
Unita |
status_label |
security_result.detection_fields |
Unita |
version_label |
security_result.detection_fields |
Unita |
data.destinationAddress |
target.ip |
Unita |
data.destinationPort |
target.port |
Rinominate/mappate |
data.request.path |
target.url |
Mappato direttamente |
| N/D | metadata.event_type |
Costante: GENERIC_EVENT |
| N/D | metadata.product_name |
Costante: ORACLE CLOUD AUDIT |
| N/D | metadata.vendor_name |
Costante: ORACLE |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.