Query SQL per insight sulla sicurezza

Questo documento descrive come analizzare gli audit log di Cloud Logging utilizzando query SQL standard di BigQuery nella pagina Analisi dei log. Le query SQL consentono di aggregare e analizzare gli audit log, che forniscono informazioni sulle attività amministrative e sugli accessi alle risorse Google Cloud.

Informazioni sugli audit log

Esistono quattro tipi di audit log che possono essere scritti dai servizi Google Cloud:

  • Audit log delle attività di amministrazione: gli audit log delle attività di amministrazione registrano le chiamate API o altre azioni che modificano la configurazione o i metadati delle risorse. Questi log vengono sempre scritti. Non è possibile configurarli, escluderli o disabilitarli.

  • Audit log degli accessi ai dati: registrano le chiamate API che leggono la configurazione o i metadati delle risorse, nonché le chiamate API basate sugli utenti che creano, modificano o leggono i dati delle risorse forniti dagli utenti. Poiché l'accesso ai dati è un'operazione API frequente, questi log sono disabilitati per impostazione predefinita (ad eccezione di BigQuery).

  • Audit log degli eventi di sistema: gli audit log degli eventi di sistema contengono voci di log per le azioni di Google Cloud che modificano la configurazione delle risorse. Questi log sono generati dai sistemi di Google; non sono generati dalle azioni degli utenti. Non puoi configurare, escludere o disabilitare gli audit log degli eventi di sistema.

  • Audit log relativi ai criteri negati: gli audit log relativi ai criteri negati vengono registrati quando un servizio Google Cloud nega l'accesso a un utente o a un account di servizio a causa di una violazione dei criteri di sicurezza. Questi log non possono essere disabilitati, ma puoi utilizzare i filtri di esclusione per impedirne l'archiviazione in Logging.

Per saperne di più sugli audit log, consulta Panoramica dei log di controllo. Per un elenco dei servizi integrati con gli audit log, vedi Servizi Google Cloud con audit log.

Utilizzare i log di controllo per identificare violazioni delle norme o attività sospette

Puoi utilizzare i log di controllo per identificare violazioni delle norme o attività sospette:

  • Per identificare la potenziale escalation dei privilegi utilizzando Identity and Access Management (IAM) o l'evasione della difesa disattivando il logging, utilizza gli audit log dell'attività di amministrazione. Per una query di esempio che identifica questo scenario, consulta Modifiche apportate alle impostazioni di Logging.

  • Per identificare il potenziale uso improprio delle API o i dati ospitati in servizi come Cloud Storage o BigQuery, utilizza gli audit log di accesso ai dati. Per una query di esempio che identifica questo scenario, consulta Identificare l'utilizzo elevato dell'API da parte di un'entità.

  • Per identificare la frequenza di accesso ai dati e da quali utenti, esegui query per tutti gli audit log. Per un esempio di query che identifica questo scenario, consulta Determinare le azioni più comuni eseguite nell'ultimo mese.

Prima di iniziare

  • Assicurati di avere un progetto, una cartella o un'organizzazione Google Cloud che genera audit log.

  • Assicurati di avere accesso a una vista del bucket di log a cui sono instradati gli audit log. È necessario eseguire l'upgrade del bucket di log per utilizzare Analisi dei log. Per informazioni su come creare un bucket di log di cui viene eseguito l'upgrade per l'utilizzo dell'analisi dei log, consulta Configurare i bucket di log.

  • Per ottenere le autorizzazioni necessarie per creare i sink e visualizzare i log, chiedi all'amministratore di concederti i seguenti ruoli IAM:

    Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

    Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

    A seconda degli audit log che vuoi visualizzare, potresti aver bisogno di autorizzazioni o ruoli separati. Per informazioni sull'impostazione dei ruoli IAM, consulta la documentazione sul controllo dell'accesso con IAM di Logging.

  • Per utilizzare le query in questo documento nella pagina Analisi dei log, segui questi passaggi:

    1. Nella console Google Cloud, vai alla pagina Analisi dei log:

      Vai ad Analisi dei log

      Se usi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

    2. Identifica il nome della tabella per una vista log eseguendo la query predefinita:

      Nell'elenco Visualizzazioni log, individua la vista log e seleziona Query. Il riquadro Query viene compilato con una query predefinita, che include il nome della tabella su cui viene eseguita la query. Il formato del nome della tabella è project_ID.region.bucket_ID.view_ID.

      Per ulteriori informazioni su come accedere alla query predefinita, consulta Eseguire query su una visualizzazione log.

    3. Sostituisci TABLE con il nome della tabella corrispondente alla vista su cui vuoi eseguire la query, poi copiala.

    4. Incolla la query nel riquadro Query, quindi fai clic su Esegui query.

Query di esempio

Questa sezione fornisce query SQL di esempio per l'esecuzione di query sugli audit log.

Modifiche apportate alle impostazioni di logging

Per identificare quando gli audit log sono disabilitati o quando vengono apportate modifiche alle impostazioni predefinite di Logging, esegui una query sugli audit log dell'attività di amministrazione:

SELECT
  receive_timestamp, timestamp AS eventTimestamp,
  proto_payload.audit_log.request_metadata.caller_ip,
  proto_payload.audit_log.authentication_info.principal_email,
  proto_payload.audit_log.resource_name,
  proto_payload.audit_log.method_name
FROM
  `TABLE`
WHERE
  proto_payload.audit_log.service_name = "logging.googleapis.com"
  AND log_id = "cloudaudit.googleapis.com/activity"

Determinare le azioni più comuni eseguite nell'ultimo mese

Per identificare le azioni più comunemente eseguite negli ultimi 30 giorni, esegui una query su tutti gli audit log:

SELECT
  proto_payload.audit_log.method_name,
  proto_payload.audit_log.service_name,
  resource.type,
  COUNT(*) AS counter
FROM
  `TABLE`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND log_id="cloudaudit.googleapis.com/data_access"
GROUP BY
  proto_payload.audit_log.method_name,
  proto_payload.audit_log.service_name,
  resource.type
ORDER BY
  counter DESC
LIMIT 100

La query precedente cerca in tutti gli audit log degli ultimi 30 giorni e restituisce le 100 azioni più eseguite con informazioni su method_name, service_name, tipo di risorsa e un contatore delle azioni eseguite.

Rileva i ruoli concessi a un account di servizio

Per identificare la rappresentazione degli account di servizio o i ruoli concessi agli account di servizio, esegui una query sugli audit log dell'attività di amministrazione:

SELECT
  timestamp,
  proto_payload.audit_log.authentication_info.principal_email as grantor,
  JSON_VALUE(bindingDelta.member) as grantee,
  JSON_VALUE(bindingDelta.role) as role,
  proto_payload.audit_log.resource_name,
  proto_payload.audit_log.method_name
FROM
  `TABLE`,
  UNNEST(JSON_QUERY_ARRAY(proto_payload.audit_log.service_data.policyDelta.bindingDeltas)) AS bindingDelta
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND log_id = "cloudaudit.googleapis.com/activity"
  AND (
    (resource.type = "service_account"
    AND proto_payload.audit_log.method_name LIKE "google.iam.admin.%.SetIAMPolicy")
    OR
    (resource.type IN ("project", "folder", "organization")
    AND proto_payload.audit_log.method_name = "SetIamPolicy"
    AND JSON_VALUE(bindingDelta.role) LIKE "roles/iam.serviceAccount%")
  )
  AND JSON_VALUE(bindingDelta.action) = "ADD"
  -- Principal (grantee) exclusions
  AND JSON_VALUE(bindingDelta.member) NOT LIKE "%@example.com"
ORDER BY
  timestamp DESC

La query precedente cerca gli audit log che acquisiscono i ruoli concessi a un'entità su un account di servizio. Il ruolo Creatore token account di servizio consente all'entità di impersonare l'account di servizio. La query specifica anche un intervallo di tempo degli ultimi sette giorni ed esclude i beneficiari approvati (%@example.com).

Identifica l'utilizzo elevato di API da parte di un'entità

Per identificare l'utilizzo insolitamente elevato dell'API da parte di un'entità, esegui una query su tutti gli audit log:

SELECT
  *
FROM (
  SELECT
    *,
    AVG(counter) OVER (
      PARTITION BY principal_email
      ORDER BY day
      ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS avg,
    STDDEV(counter) OVER (
      PARTITION BY principal_email
      ORDER BY day
      ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS stddev,
    COUNT(*) OVER (
      PARTITION BY principal_email
      RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS numSamples
  FROM (
    SELECT
      proto_payload.audit_log.authentication_info.principal_email,
      EXTRACT(DATE FROM timestamp) AS day,
      ARRAY_AGG(DISTINCT proto_payload.audit_log.method_name IGNORE NULLS) AS actions,
      COUNT(*) AS counter
    FROM `TABLE`
    WHERE
      timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
      AND proto_payload.audit_log.authentication_info.principal_email IS NOT NULL
      AND proto_payload.audit_log.method_name NOT LIKE "storage.%.get"
      AND proto_payload.audit_log.method_name NOT LIKE "v1.compute.%.list"
      AND proto_payload.audit_log.method_name NOT LIKE "beta.compute.%.list"
    GROUP BY
      proto_payload.audit_log.authentication_info.principal_email,
      day
  )
)
WHERE
  counter > avg + 3 * stddev
  AND day >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
ORDER BY
  counter DESC

Per l'entità specificata, principal_email, la query calcola il numero medio di chiamate API al giorno, nonché la deviazione standard di queste chiamate API. Quando il numero medio di chiamate API è superiore alla media corrente più il triplo della deviazione standard, la query mostra le seguenti informazioni:

  • Un contatore delle azioni eseguite.
  • La media calcolata delle azioni eseguite al giorno.
  • Le azioni specifiche eseguite.

Passaggi successivi