Integrare Apigee con Google SecOps

Questa pagina si applica ad Apigee e Apigee hybrid.

Questo documento spiega come integrare Apigee con Google Security Operations (Google SecOps). Se utilizzi Google SecOps come soluzione SIEM, segui i passaggi descritti in questo documento per configurare Apigee in modo che invii i dati dei log a SecOps.

Per semplificare questa integrazione, Google SecOps supporta un parser Apigee per l'importazione dei dati dei log di Apigee. Consulta anche Importare i dati di Google Cloud in Google Security Operations. Dopo aver completato i passaggi di configurazione descritti in questo documento, i dati dei log di Apigee verranno inviati a Google SecOps.

Per informazioni su come integrare SecOps con altre soluzioni SIEM, consulta Integrare Apigee con la soluzione SIEM.

Pubblico

Il pubblico di questo documento include:

  • Amministratori API responsabili di garantire la sicurezza delle API, gestire le configurazioni della piattaforma, supportare l'efficienza operativa e rispettare i requisiti di conformità alla sicurezza.
  • Gli analisti della sicurezza si sono concentrati sul rilevamento e sull'indagine proattiva degli incidenti di sicurezza relativi alle API per ridurre al minimo i rischi e salvaguardare i dati sensibili.

Panoramica configurazione

La configurazione descritta in questo documento utilizza il criterio di registrazione dei messaggi di Apigee per inviare a SecOps un'ampia gamma di dati dei log di Apigee, incluse variabili di flusso specifiche.

Google SecOps fornisce un filtro speciale di Cloud Logging che può inviare tipi di log specifici, inclusi i log di Apigee, a Google SecOps in tempo reale. Google SecOps supporta un parser Apigee per l'importazione dei dati dei log di Apigee in Google SecOps. Consulta anche Importare i dati di Google Cloud in Google Security Operations.

Prerequisiti

Una volta soddisfatti questi prerequisiti, segui le istruzioni riportate in questo documento per integrare Apigee con la tua istanza SecOps. Prima di iniziare l'integrazione, assicurati di disporre di quanto segue:

  • Un account Apigee o Apigee hybrid con privilegi amministrativi per sviluppare ed eseguire il deployment di proxy API
  • Un account Google SecOps
  • Cloud Logging abilitato e hai esperienza nella configurazione e nell'utilizzo di Cloud Logging
  • Conoscenza delle variabili di flusso di Apigee
  • Conoscenza del criterio di registrazione dei messaggi di Apigee e dell'utilizzo e della configurazione dei criteri in generale
  • (Facoltativo) Conoscenza del modo in cui i parser di Google SecOps vengono utilizzati per interpretare i log importati. Per impostazione predefinita, i parser di SecOps sono integrati per analizzare e comprendere i log di Apigee importati dal criterio MessageLogging.
  • Autorizzazioni Cloud IAM di Google per utilizzare l'API Cloud Logging e concedere ruoli IAM all'account di servizio SecOps

Integrazione di Apigee con SecOps

Se utilizzi Google SecOps come soluzione SIEM, segui questi passaggi per inviare i dati dei log di Apigee a SecOps. Esistono due passaggi di base:

  • Configura una regola di logging dei messaggi per inviare i dati dei log di Apigee a Cloud Logging
  • Collega il criterio MessageLogging a un proxy Apigee

Al termine della configurazione del criterio di logging dei messaggi descritta in questa sezione, i dati dei log di Apigee inviati a Cloud Logging verranno analizzati da SecOps. Per informazioni dettagliate sul parser e su come i dati delle variabili del flusso Apigee vengono mappati ai campi di dati di SecOps, consulta Integrare Apigee con Google SecOps SIEM. Vedi anche Raccogliere i log di Apigee.

Per integrare Apigee con SecOps utilizzando il criterio di registrazione dei messaggi:

  1. Configura un nuovo criterio di registrazione dei messaggi. Consulta Collegare e configurare i criteri nell'interfaccia utente.

    Di seguito è riportato un esempio di criterio di logging dei messaggi che invia dati a Cloud Logging. Il criterio specifica un numero elevato di variabili di flusso da inviare a Cloud Logging. Puoi aggiungere o rimuovere le variabili di flusso come preferisci, a seconda dei campi che ritieni importanti per l'analisi SecOps. Per informazioni su come i dati delle variabili del flusso Apigee vengono mappati ai campi di dati di SecOps, consulta Integrare Apigee con Google SecOps SIEM.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <MessageLogging continueOnError="false" enabled="true" name="ML-CloudLoggingSecOps">
       <DisplayName>ML-CloudLoggingSecOps</DisplayName>
       <CloudLogging>
         <LogName>projects/{organization.name}/logs/Apigee-SecOps-Integration-{environment.name}</LogName>
         <Message contentType="application/json">{
       "apiproduct.name": "{apiproduct.name}",
       "app.name": "{developer.app.name}",
       "cachehit":"{cachehit}",
       "client.country": "{client.country}",
       "client.cn": "{client.cn}",
       "client.ip": "{proxy.client.ip}",
       "client.locality": "{client.locality}",
       "client.port": "{client.port}",
       "client.scheme": "{client.scheme}",
       "client.state": "{client.state}",
       "developer.email": "{developer.email}",
       "environment.name": "{environment.name}",
       "error":"{is.error}",
       "error.state":"{error.state}",
       "error.message":"{escapeJSON(error.message)}",
       "fault.name":"{fault.name}",
       "messageid":"{messageid}",
       "organization.name": "{organization.name}",
       "proxy.name": "{apiproxy.name}",
       "proxy.basepath": "{proxy.basepath}",
       "proxy.pathsuffix": "{proxy.pathsuffix}",
       "proxy.proxyendpoint.name": "{proxy.name}",
       "proxy.revision":"{apiproxy.revision}",
       "request.content-length":"{request_msg.header.content-length}",
       "request.content-type":"{request_msg.header.content-type}",
       "request.host":"{request_msg.header.host}",
       "request.httpversion": "{request.version}",
       "request.url": "{client.scheme}://{request_msg.header.host}{request_msg.uri}",
       "request.user-agent":"{request.header.user-agent}",
       "request.verb": "{request.verb}",
       "request.x-b3-traceid": "{request.header.x-b3-traceid}",
       "request.x-cloud-trace-context": "{request.header.x-cloud-trace-context}",
       "response.content-length":"{response.header.content-length}",
       "response.content-type":"{response.header.content-type}",
       "response.status.code": "{message.status.code}",
       "system.region.name": "{system.region.name}",
       "system.timestamp": "{system.timestamp}",
       "system.uuid": "{system.uuid}",
       "target.cn": "{target.cn}",
       "target.country": "{target.country}",
       "target.host": "{target.host}",
       "target.ip": "{target.ip}",
       "target.locality": "{target.locality}",
       "target.organization": "{target.organization}",
       "target.port": "{target.port}",
       "target.scheme": "{target.scheme}",
       "target.state": "{target.state}",
       "target.url": "{request.url}"
      }
         </Message>
         <ResourceType>api</ResourceType>
       </CloudLogging>
      </MessageLogging>
  2. Allega il criterio come passaggio condizionale in un proxy API. Un'opzione è associare il criterio a una regola di errore nel post-flusso, dove in genere vengono generati errori correlati alla sicurezza. Ad esempio:

    <PostFlow name="PostFlow">
      <Request>
        <Step>
          <Condition>flow.isError == true)</Condition>
          <Name>ML-CloudLoggingSecOps</Name>
        </Step>
      </Request>
    </PostFlow>

    Ora, quando viene eseguito il proxy API che utilizza questo criterio, i dati dei log di Apigee vengono inviati a Google SecOps.

    Un'altra pratica comune consiste nel posizionare il criterio MessageLogging nel PostClientFlow della risposta ProxyEndpoint.

    Tieni presente i seguenti consigli quando colleghi il criterio MessageLogging al proxy API:

    • Inserisci il criterio in un FaultRule. FaultRule è la posizione consigliata per registrare le eccezioni di sicurezza e le violazioni dei criteri.
    • Inserisci il criterio in PostFlow. PostFlow è un altro punto adatto per registrare i problemi di sicurezza.
    • Evita di registrare le richieste riuscite. Per il monitoraggio della sicurezza incentrato sulle minacce, in genere registri i dettagli quando si verifica un problema (viene generato un errore). Il logging di ogni richiesta andata a buon fine con i contenuti completi del messaggio può generare log eccessivi e aumentare i costi.
    • Valuta la possibilità di utilizzare variabili personalizzate per determinati casi d'uso. Ad esempio, se devi acquisire l'URI della richiesta originale in un flusso di errori, puoi utilizzare il criterio AssignMessage nel PreFlow della richiesta per copiarlo in una variabile personalizzata (ad esempio original.request.uri) e poi registrare la variabile nel criterio di registrazione dei messaggi.

Best practice

Tieni presente queste best practice quando configuri Apigee con Google SecOps:

  • Concentrati sul contesto di sicurezza:registra solo le variabili di flusso che forniscono un contesto utile per il monitoraggio della sicurezza e il rilevamento delle minacce. Evita di eseguire un logging eccessivo di dati non correlati alla sicurezza.
  • Utilizza un formato di logging coerente: mantieni un formato di logging coerente tra i proxy API che utilizzano SecOps.
  • Utilizza account di servizio sicuri:rispetta le best practice di sicurezza per la gestione e la protezione dell'account di servizio Google Cloud utilizzato per l'importazione di SecOps. Se possibile, limita l'autorizzazione a Visualizzatore log.
  • Monitora il feed SecOps: monitora regolarmente l'integrità e lo stato del feed SecOps per assicurarti che i log vengano importati correttamente e senza errori.
  • Utilizza le regole e le dashboard di SecOps: una volta che i log pertinenti alla sicurezza sono in SecOps, sviluppa regole e dashboard specifiche per rilevare e visualizzare le minacce alla sicurezza in base alle informazioni dettagliate che registri.

Risoluzione dei problemi

Questa sezione descrive diversi possibili problemi che potresti riscontrare durante la configurazione di Apigee con SecOps e gli aspetti da verificare.

Problema: i log eventi di sicurezza non vengono visualizzati in Cloud Logging

Aspetti da controllare:

  • Verifica che il criterio di logging dei messaggi sia configurato correttamente con il valore Condition per attivarsi quando si verifica un evento di sicurezza.
  • Assicurati che il criterio di registrazione dei messaggi sia associato al contesto del flusso appropriato, ad esempio un FaultRule o PostFlow.
  • Verifica che la funzionalità di logging Cloud sia attivata nel tuo progetto Google Cloud.
  • Controlla gli eventuali messaggi di errore nei log del proxy Apigee relativi al criterio di registrazione dei messaggi.

Problema: i log degli eventi di sicurezza non vengono visualizzati in SecOps

  • Verifica che il feed SecOps sia configurato correttamente con l'ID progetto, il filtro dei log correto (assicurati che acquisisca i log dal criterio di logging della sicurezza) e le credenziali dell'account di servizio.
  • Controlla lo stato del feed SecOps nell'interfaccia utente di SecOps per verificare la presenza di messaggi di errore o problemi di importazione.
  • Assicurati che l'account di servizio utilizzato da SecOps abbia il ruolo Visualizzatore log nel tuo progetto Google Cloud.
  • Esamina la struttura JSON dei log in Cloud Logging per assicurarti che siano ben formattati e contengono i nomi dei campi previsti.
  • Verifica che l'analizzatore Google Cloud appropriato sia abilitato.
  • Se sospetti un problema di analisi, esamina una voce di log di esempio nei dati non elaborati di SecOps per vedere come è stata importata prima dell'analisi. Se campi specifici non vengono estratti come previsto, potresti dover esaminare la documentazione del parser SecOps o valutare se è necessario un parser personalizzato.

Eseguire l'integrazione di Apigee con il SIEM Google SecOps

La tabella seguente mappa i nomi delle variabili del flusso Apigee ai nomi dei campi SIEM di Google SecOps equivalenti. Ad esempio, quando visualizzi i dati dei log di Apigee in Cloud Logging, la variabile di flusso client.id viene mappata al campo SIEM di SecOps denominato principle_ip. Vedi anche Raccogliere i log di Apigee.

Variabile di flusso Apigee Nome del campo SIEM SecOps Descrizione
client.country principal.hostname L'indirizzo IP dell'host HTTP associato alla richiesta ricevuta da ProxyEndpoint.
client.host principal.location.country_or_region Il paese nel certificato TLS/SSL presentato dall'app client. Richiesta proxy principal.location.country_or_region.
client.ip principle.ip L'indirizzo IP del client o del sistema che invia il messaggio al bilanciatore del carico. Ad esempio, potrebbe essere l'IP del client originale o l'IP di un bilanciatore del carico.
client.locality principal.location.city La località (città) nel certificato TLS/SSL presentato dal client.
client.port principal.port La porta HTTP associata alla richiesta del client di origine a ProxyEndpoint.
client.state principal.location.state Lo stato nel certificato TLS/SSL presentato dal client.
organization.name intermediary.cloud.project.name Nome dell'organizzazione Apigee.
proxy.client.ip src.ip L'indirizzo X-Forwarded-For della chiamata in arrivo, ovvero l'indirizzo IP ricevuto da Apigee dall'ultimo handshake TCP esterno. Potrebbe trattarsi del client chiamante o di un bilanciatore del carico.
proxy.name intermediary.resource.name L'attributo name configurato per ProxyEndpoint.
proxy.pathsuffix intermediary.resource.attribute.labels[pathsuffix] "Il valore del suffisso del percorso nell'URL inviato dal client e ricevuto in ProxyEndpoint. Il percorso base è il componente del percorso più a sinistra che identifica in modo univoco un proxy API all'interno di un gruppo di ambienti. Supponiamo che tu abbia un endpoint proxy API configurato con un percorso di base di /v2/weatherapi. In questo caso, una richiesta inviata a https://myhost.example.net/v2/weatherapi/forecastrss?w=12797282, la variabile proxy.pathsuffix conterrà la stringa /forecastrss."
proxy.url intermediary.url "Restituisce l'URL completo associato alla richiesta di proxy ricevuta da ProxyEndpoint, inclusi eventuali parametri di ricerca presenti. Per un esempio che crea un URL richiesta utilizzando l'host della richiesta originale (anziché l'host del router utilizzato in proxy.url), consulta Messaggi di richiesta di accesso."
request.uri target.resource.name Il nome di dominio del servizio di destinazione che restituisce la risposta al proxy API.
request.verb network.http.method Il verbo HTTP utilizzato per la richiesta. Ad esempio, GET, PUT ed DELETE.
response.content security_result.description Contenuti del payload del messaggio di risposta restituito dalla destinazione.
response.status.code network.http.response_code Il codice di risposta restituito per una richiesta. Puoi utilizzare questa variabile per eseguire l'override del codice stato risposta, memorizzato in message.status.code. Per saperne di più, leggi il messaggio.
system.region.name intermediary.location.name Il nome della regione del data center in cui è in esecuzione il proxy.
system.timestamp additional.fields[jsonPayload_system_timestamp] L'intero a 64 bit (long) che rappresenta il momento in cui questa variabile è stata letta. Il valore è il numero di millisecondi trascorsi dalla mezzanotte del 1° gennaio 1970 UTC. Ad esempio, 1534783015000.
system.uuid intermediary.process.pid o intermediary.process.product_specific_process_id L'UUID del processore di messaggi che gestisce il proxy.
target.country target.location.country_or_region Paese del certificato TLS/SSL presentato dal server di destinazione
target.host target.hostname Il nome di dominio del servizio di destinazione che restituisce la risposta al proxy API.
target.ip target.ip L'indirizzo IP del servizio di destinazione che restituisce la risposta al proxy API.
target.locality target.location.city Località (città) del certificato TLS/SSL presentato dal server di destinazione
target.organization target.resource_ancestors.name Organizzazione del certificato TLS/SSL presentato dal server di destinazione.
target.port target.port Il numero di porta del servizio target che restituisce la risposta al proxy API.
target.scheme target.network.application_protocol Restituisce HTTP o HTTPS a seconda del messaggio di richiesta.
target.state target.location.state Stato del certificato TLS/SSL presentato dal server di destinazione.
target.url target.url L'URL configurato nel file XML TargetEndpoint o l'URL di destinazione dinamico (se target.url è impostato durante il flusso di messaggi). La variabile non include elementi di percorso o parametri di ricerca aggiuntivi. Restituisce null se viene chiamato fuori dall'ambito o se non è impostato.

Nota: utilizza una regola JavaScript associata a TargetEndpoint per impostare questa variabile.