Transmite los resultados a BigQuery para su análisis

En esta página, se describe cómo transmitir resultados nuevos y actualizados a un conjunto de datos de BigQuery mediante la función de exportación de Security Command Center para BigQuery. Los resultados existentes no se envían a BigQuery, a menos que se actualicen.

BigQuery es el almacén de datos de análisis rentable, a escala de petabytes y completamente administrado de Google Cloud que te permite ejecutar análisis en grandes cantidades de datos casi en tiempo real. Puedes usar BigQuery para ejecutar consultas sobre resultados nuevos y actualizados, filtrar datos para encontrar lo que necesitas y generar informes personalizados. Para obtener más información sobre BigQuery, consulta la documentación de BigQuery.

Descripción general

Cuando habilitas esta función, los resultados nuevos que se escriben en Security Command Center se exportan a una tabla de BigQuery casi en tiempo real. Luego, puedes integrar los datos en los flujos de trabajo existentes y crear análisis personalizados. Puedes habilitar esta función a nivel de organización, carpeta y proyecto para exportar los resultados según tus requisitos.

Esta característica es la forma recomendada de exportar los resultados de Security Command Center a BigQuery, ya que está completamente administrada y no requiere realizar operaciones manuales o escribir código personalizado.

Estructura del conjunto de datos

Esta función agrega cada resultado nuevo y sus actualizaciones posteriores como filas nuevas en la tabla findings, que se agrupa en clústeres por source_id, finding_id y event_time.

Cuando se actualiza un resultado, esta función crea varios registros de resultados con los mismos valores de source_id y finding_id, pero con valores de event_time diferentes. Esta estructura de conjunto de datos te permite ver cómo cambia el estado de cada resultado con el tiempo.

Ten en cuenta que pueden existir entradas duplicadas en tu conjunto de datos. Para analizarlas, puedes usar la cláusula DISTINCT, como se muestra en la primera consulta de ejemplo.

Cada conjunto de datos contiene una tabla de findings, que tiene los siguientes campos:

Campo Descripción
source_id Un identificador único que Security Command Center asigna a la fuente de un resultado. Por ejemplo, todos los resultados de la fuente de detección de anomalías de Cloud tienen el mismo valor de source_id.

Ejemplo: 1234567890
finding_id Identificador único que representa el resultado. Es único dentro de una fuente para una organización. Es alfanumérico y tiene 32 caracteres o menos.
event_time La hora en que ocurrió el evento o la hora en que se produjo una actualización del resultado. Por ejemplo, si el resultado representa un firewall abierto, “event_time” captura la hora en que el detector cree que se abrió el firewall. Si el resultado se resuelve después, esta hora refleja cuándo se resolvió ese resultado.

Ejemplo: 2019-09-26 12:48:00.985000 UTC
Buscando Un registro de los datos de evaluación, como seguridad, riesgo, estado o privacidad, que se transfieren a Security Command Center para fines de presentación, notificación, análisis, pruebas de políticas y aplicación. Por ejemplo, una vulnerabilidad de secuencia de comandos entre sitios (XSS) en una aplicación de App Engine es un resultado.

Si quieres obtener más información sobre los campos anidados, consulta la referencia de la API para el objeto Finding.
recurso Información relacionada con el recurso de Google Cloud asociado a este resultado.

Si quieres obtener más información sobre los campos anidados, consulta la referencia de la API para el objeto Resource.

Costo

Se generarán cargos de BigQuery relacionados con esta función. Para obtener más información, consulte los Precios de BigQuery.

Antes de comenzar

Debes completar estos pasos antes de habilitar esta función.

Configura los permisos

Para completar esta guía, debes tener las siguientes funciones de Identity and Access Management (IAM):

Crea un conjunto de datos de BigQuery

Crear un conjunto de datos de BigQuery Para obtener más información, consulta Crea conjuntos de datos.

Planifica la residencia de los datos

Si la residencia de datos está habilitada para Security Command Center, las configuraciones que definen las exportaciones de transmisión a BigQuery (recursos BigQueryExport) están sujetas a un control de residencia de datos y se almacenan en una ubicación de Security Command Center que selecciones.

Para exportar los resultados de una ubicación de Security Command Center a BigQuery, debes configurar la exportación de BigQuery en la misma ubicación de Security Command Center que los resultados.

Debido a que los filtros que se usan en las exportaciones de BigQuery pueden contener datos sujetos a controles de residencia, asegúrate de especificar la ubicación correcta antes de crearlos. Security Command Center no restringe la ubicación en la que creas las exportaciones.

Las exportaciones de BigQuery se almacenan solo en la ubicación en la que se crearon y no se pueden ver ni editar en otras ubicaciones.

Después de crear una exportación a BigQuery, no puedes cambiar su ubicación. Para cambiar la ubicación, debes borrar la exportación de BigQuery y volver a crearla en la ubicación nueva.

Para recuperar una exportación de BigQuery mediante llamadas a la API, debes especificar la ubicación en el nombre completo del recurso de bigQueryExport. Por ejemplo:

GET https://securitycenter.googleapis.com/v2/{name=organizations/123/locations/eu/bigQueryExports/my-export-01}

Del mismo modo, para recuperar una exportación de BigQuery con gcloud CLI, debes especificar la ubicación en el nombre completo del recurso de la configuración o con la marca --locations. Por ejemplo:

gcloud scc scc bqexports get myBigQueryExport organizations/123 \
    --location=locations/us

Exporta resultados de Security Command Center a BigQuery

Para exportar los resultados, primero habilita la API de Security Command Center.

Habilita la API de Security Command Center

Para habilitar la API de Security Command Center, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Biblioteca de API.

    Ir a la Biblioteca de APIs

  2. Selecciona el proyecto para el que deseas habilitar la API de Security Command Center.

  3. En el cuadro Buscar, ingresa Security Command Center y, luego, haz clic en Security Command Center en los resultados de la búsqueda.

  4. En la página de la API que aparece, haz clic en Habilitar.

La API de Security Command Center ahora está habilitada para tu proyecto. Luego, usa la CLI de gcloud para crear una nueva configuración de exportación a BigQuery.

Otorga acceso al perímetro en los Controles del servicio de VPC

Si usas Controles del servicio de VPC y tu conjunto de datos de BigQuery es parte de un proyecto dentro de un perímetro de servicio, debes otorgar acceso a los proyectos para exportar los resultados.

Si quieres otorgar acceso a los proyectos, crea reglas de entrada y salida para las principales y los proyectos desde los que exportas los resultados. Las reglas permiten el acceso a los recursos protegidos y permiten que BigQuery verifique que los usuarios tengan el permiso setIamPolicy en el conjunto de datos de BigQuery.

Antes de configurar una exportación nueva a BigQuery

  1. Ve a la página Controles del servicio de VPC en la consola de Google Cloud.

    Ir a los Controles del servicio de VPC

  2. Si es necesario, selecciona tu organización.

  3. Haz clic en el nombre del perímetro de servicio que deseas cambiar.

    Para encontrar el perímetro de servicio que debes modificar, puedes verificar tus registros en busca de entradas que muestren incumplimientos de RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. En esas entradas, verifica el campo servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Haz clic en Editar perímetro.

  5. En el menú de navegación, haz clic en Política de entrada.

  6. Si quieres configurar reglas de entrada para usuarios o cuentas de servicio, usa los siguientes parámetros:

    • DESDE atributos del cliente de la API:
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • En el menú desplegable Fuente, selecciona Todas las fuentes.
      • Haz clic en Seleccionar y, luego, ingresa la principal que se usa para llamar a la API de Security Command Center.
    • HASTA atributos de los servicios o recursos de Google Cloud:
      • En el menú desplegable Proyecto, elige Proyectos seleccionados.
      • Haz clic en Seleccionar y, luego, ingresa el proyecto que contiene el conjunto de datos de BigQuery .
      • En el menú desplegable Servicios, elige Servicios seleccionados y, luego, selecciona API de BigQuery.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  7. Haz clic en Guardar.

  8. En el menú de navegación, haz clic en Política de salida.

  9. Haz clic en Agregar regla.

  10. Si deseas configurar reglas de salida para cuentas de usuario o de servicio, ingresa los siguientes parámetros:

    • DESDE atributos del cliente de la API:
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • Haz clic en Seleccionar y, luego, ingresa la principal que se usa para llamar a la API de Security Command Center.
    • HASTA atributos de los servicios o recursos de Google Cloud:
      • En el menú desplegable Proyecto, selecciona Todos los proyectos.
      • En el menú desplegable Servicios, elige Servicios seleccionados y, luego, selecciona API de BigQuery.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  11. Haz clic en Guardar.

Configura una exportación nueva a BigQuery

En este paso, crearás una configuración de exportación para exportar los resultados a una instancia de BigQuery. Puedes crear configuraciones de exportación a nivel de proyecto, organización o carpeta. Por ejemplo, si deseas exportar los resultados de un proyecto a un conjunto de datos de BigQuery, debes crear una configuración de exportación a nivel de proyecto para exportar solo los resultados relacionados con ese proyecto. De manera opcional, puedes especificar filtros para exportar solo ciertos resultados.

Asegúrate de crear tus configuraciones de exportación en el nivel adecuado. Por ejemplo, si creas una configuración de exportación en el Proyecto B para exportar los resultados del Proyecto A y defines filtros como resource.project_display_name: project-a-id, la configuración no exporta ningún resultado.

Puedes crear un máximo de 500 configuraciones de exportación a BigQuery para tu organización. Puedes usar el mismo conjunto de datos para varias configuraciones de exportación. Si usas el mismo conjunto de datos, todas las actualizaciones se realizarán en la misma tabla de resultados.

Cuando creas tu primera configuración de exportación, se crea una cuenta de servicio de forma automática para ti. Esta cuenta de servicio es necesaria para crear o actualizar la tabla de resultados dentro de un conjunto de datos y exportar los resultados a la tabla. Tiene el formato service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gservicaccount.com y se le otorga el rol BigQuery Data Editor (roles/bigquery.dataEditor) a nivel de conjunto de datos de BigQuery.

gcloud

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para crear una configuración de exportación nueva, ejecuta el siguiente comando:

    gcloud scc bqexports create BIG_QUERY_EXPORT \
      --dataset=DATASET_NAME \
      --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
      --location=LOCATION \
      [--description=DESCRIPTION] \
      [--filter=FILTER]
    

    Reemplaza lo siguiente:

    • BIG_QUERY_EXPORT por un nombre para esta configuración de exportación.

    • DATASET_NAME por el nombre del conjunto de datos de BigQuery, por ejemplo, projects/<PROJECT_ID>/datasets/<DATASET_ID>.

    • FOLDER_ID, ORGANIZATION_ID o PROJECT_ID por el nombre de tu carpeta, organización o proyecto Debes configurar una de estas opciones. Para las carpetas y organizaciones, el nombre es el ID de la carpeta o de la organización. Para los proyectos, el nombre es el número o ID del proyecto.

    • LOCATION: Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se crea la exportación de BigQuery. La configuración de exportación de BigQuery se almacena en esta ubicación. En la exportación, solo se incluyen los hallazgos de esta ubicación.

      Si la residencia de datos no está habilitada, especificar la marca --location crea la exportación de BigQuery con la API de Security Command Center v2 y el único valor válido para la marca es global.

    • DESCRIPTION con una descripción legible de la configuración de exportación Esta variable es opcional.

    • FILTER por una expresión que define qué resultados incluir en la exportación Por ejemplo, si deseas filtrar por la categoría XSS_SCRIPTING, escribe "category=\"XSS_SCRIPTING\". Esta variable es opcional.

Java

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


import com.google.cloud.securitycenter.v1.BigQueryExport;
import com.google.cloud.securitycenter.v1.CreateBigQueryExportRequest;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;
import java.util.UUID;

public class CreateBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.

    // parent: Use any one of the following resource paths:
    //              - organizations/{organization_id}
    //              - folders/{folder_id}
    //              - projects/{project_id}
    String parent = String.format("projects/%s", "your-google-cloud-project-id");

    // filter: Expression that defines the filter to apply across create/update events of findings.
    String filter =
        "severity=\"LOW\" OR severity=\"MEDIUM\" AND "
            + "category=\"Persistence: IAM Anomalous Grant\" AND "
            + "-resource.type:\"compute\"";

    // bigQueryDatasetId: The BigQuery dataset to write findings' updates to.
    String bigQueryDatasetId = "your-bigquery-dataset-id";

    // bigQueryExportId: Unique identifier provided by the client.
    // For more info, see:
    // https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    String bigQueryExportId = "default-" + UUID.randomUUID().toString().split("-")[0];

    createBigQueryExport(parent, filter, bigQueryDatasetId, bigQueryExportId);
  }

  // Create export configuration to export findings from a project to a BigQuery dataset.
  // Optionally specify filter to export certain findings only.
  public static void createBigQueryExport(
      String parent, String filter, String bigQueryDatasetId, String bigQueryExportId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      // Create the BigQuery export configuration.
      BigQueryExport bigQueryExport =
          BigQueryExport.newBuilder()
              .setDescription(
                  "Export low and medium findings if the compute resource "
                      + "has an IAM anomalous grant")
              .setFilter(filter)
              .setDataset(String.format("%s/datasets/%s", parent, bigQueryDatasetId))
              .build();

      CreateBigQueryExportRequest bigQueryExportRequest =
          CreateBigQueryExportRequest.newBuilder()
              .setParent(parent)
              .setBigQueryExport(bigQueryExport)
              .setBigQueryExportId(bigQueryExportId)
              .build();

      // Create the export request.
      BigQueryExport response = client.createBigQueryExport(bigQueryExportRequest);

      System.out.printf("BigQuery export request created successfully: %s\n", response.getName());
    }
  }
}

Python

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.



def create_bigquery_export(
    parent: str, export_filter: str, bigquery_dataset_id: str, bigquery_export_id: str
):
    from google.cloud import securitycenter

    """
    Create export configuration to export findings from a project to a BigQuery dataset.
    Optionally specify filter to export certain findings only.

    Args:
        parent: Use any one of the following resource paths:
             - organizations/{organization_id}
             - folders/{folder_id}
             - projects/{project_id}
        export_filter: Expression that defines the filter to apply across create/update events of findings.
        bigquery_dataset_id: The BigQuery dataset to write findings' updates to.
        bigquery_export_id: Unique identifier provided by the client.
             - example id: f"default-{str(uuid.uuid4()).split('-')[0]}"
        For more info, see:
        https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    """
    client = securitycenter.SecurityCenterClient()

    # Create the BigQuery export configuration.
    bigquery_export = securitycenter.BigQueryExport()
    bigquery_export.description = "Export low and medium findings if the compute resource has an IAM anomalous grant"
    bigquery_export.filter = export_filter
    bigquery_export.dataset = f"{parent}/datasets/{bigquery_dataset_id}"

    request = securitycenter.CreateBigQueryExportRequest()
    request.parent = parent
    request.big_query_export = bigquery_export
    request.big_query_export_id = bigquery_export_id

    # Create the export request.
    response = client.create_big_query_export(request)

    print(f"BigQuery export request created successfully: {response.name}\n")

Deberías ver los resultados en el conjunto de datos de BigQuery dentro de los 15 minutos posteriores a la creación de la configuración de exportación. Después de crear la tabla de BigQuery, todos los resultados nuevos y actualizados que coincidan con el filtro y el alcance aparecerán en la tabla casi en tiempo real.

Para revisar tus resultados, consulta Revisa los resultados.

Crea una regla de entrada para la nueva exportación a BigQuery

Si usas Controles del servicio de VPC y tu conjunto de datos de BigQuery es parte de un proyecto dentro de un perímetro de servicio, debes crear una regla de entrada para una exportación nueva a BigQuery.

  1. Vuelve a abrir el perímetro de servicio desde Configura una exportación nueva a BigQuery.

    Ir a los Controles del servicio de VPC

  2. Haz clic en Política de entrada.

  3. Haz clic en Agregar regla.

  4. Para configurar la regla de entrada para los parámetros de configuración de exportación, ingresa los siguientes parámetros:

    • DESDE atributos del cliente de la API:
      • En el menú desplegable Fuente, selecciona Todas las fuentes.
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • Haz clic en Seleccionar y, luego, ingresa el nombre de la cuenta de servicio de configuración de BigQuery Export: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • HACIA atributos de los servicios o recursos de GCP:
      • En el menú desplegable Proyecto, elige Proyectos seleccionados.
      • Haz clic en Seleccionar y, luego, selecciona el proyecto que contiene el conjunto de datos de BigQuery.
      • En el menú desplegable Servicios, elige Servicios seleccionados y, luego, selecciona API de BigQuery.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  5. En el menú de navegación, haz clic en Guardar.

Los proyectos, los usuarios y las cuentas de servicio seleccionados ahora pueden acceder a los recursos protegidos y exportar los resultados.

Si seguiste todos los pasos de esta guía y las exportaciones funcionan correctamente, ahora puedes borrar lo siguiente:

  • La regla de entrada para la principal
  • La regla de salida para la principal

Esas reglas solo eran necesarias para establecer la configuración de exportación. Sin embargo, para que los parámetros de configuración de exportación sigan funcionando, debes conservar la regla de entrada que creaste antes, lo que permite que Security Command Center exporte los resultados a tu conjunto de datos de BigQuery detrás del perímetro de servicio.

Visualiza los detalles de una configuración de exportación

gcloud

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para verificar los detalles de la configuración de exportación, ejecuta el siguiente comando:

    gcloud scc bqexports get BIG_QUERY_EXPORT \
      --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
      --location=LOCATION
    

    Reemplaza lo siguiente:

    • BIG_QUERY_EXPORT por el nombre para esta configuración de exportación.

    • FOLDER_ID, ORGANIZATION_ID o PROJECT_ID por el nombre de tu carpeta, organización o proyecto Debes configurar una de estas opciones. Para las carpetas y organizaciones, el nombre es el ID de la carpeta o de la organización. Para los proyectos, el nombre es el número o ID del proyecto.

    • LOCATION: Es obligatorio si la residencia de datos está habilitada o si el recurso BigQueryExport se creó con la API v2.

      Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se almacena la exportación.

      Si la residencia de datos no está habilitada, incluye /locations/LOCATION solo si el recurso BigQueryExport se creó con la API de Security Command Center v2, en cuyo caso, la única ubicación válida es global.

    Por ejemplo, para obtener una configuración de exportación llamada my-bq-export de una organización con un ID de organización configurado como 123, ejecuta lo siguiente:

    gcloud scc bqexports get my-bq-export --organization=123
    

Java

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


import com.google.cloud.securitycenter.v1.BigQueryExport;
import com.google.cloud.securitycenter.v1.GetBigQueryExportRequest;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class GetBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.

    // parent: Use any one of the following resource paths:
    //              - organizations/{organization_id}
    //              - folders/{folder_id}
    //              - projects/{project_id}
    String parent = String.format("projects/%s", "your-google-cloud-project-id");

    // bigQueryExportId: Unique identifier that is used to identify the export.
    String bigQueryExportId = "export-id";

    getBigQueryExport(parent, bigQueryExportId);
  }

  // Retrieve an existing BigQuery export.
  public static void getBigQueryExport(String parent, String bigQueryExportId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      GetBigQueryExportRequest bigQueryExportRequest =
          GetBigQueryExportRequest.newBuilder()
              .setName(String.format("%s/bigQueryExports/%s", parent, bigQueryExportId))
              .build();

      BigQueryExport response = client.getBigQueryExport(bigQueryExportRequest);
      System.out.printf("Retrieved the BigQuery export: %s", response.getName());
    }
  }
}

Python

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

def get_bigquery_export(parent: str, bigquery_export_id: str):
    from google.cloud import securitycenter

    """
    Retrieve an existing BigQuery export.
    Args:
        parent: Use any one of the following resource paths:
                 - organizations/{organization_id}
                 - folders/{folder_id}
                 - projects/{project_id}
        bigquery_export_id: Unique identifier that is used to identify the export.
    """

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.GetBigQueryExportRequest()
    request.name = f"{parent}/bigQueryExports/{bigquery_export_id}"

    response = client.get_big_query_export(request)
    print(f"Retrieved the BigQuery export: {response.name}")

Actualiza una configuración de exportación

Cuando sea necesario, puedes modificar el filtro, el conjunto de datos y la descripción de una configuración de exportación existente. No puedes cambiar el nombre de la configuración de exportación.

gcloud

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para actualizar una configuración de exportación, ejecuta el siguiente comando:

    gcloud scc bqexports update BIG_QUERY_EXPORT \
      --dataset=DATASET_NAME \
      --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
      --location=LOCATION \
      [--description=DESCRIPTION] \
      [--filter=FILTER]
    

    Reemplaza lo siguiente:

    • BIG_QUERY_EXPORT por el nombre de la configuración de exportación que deseas actualizar.

    • DATASET_NAME por el nombre del conjunto de datos de BigQuery, por ejemplo, projects/<PROJECT_ID>/datasets/<DATASET_ID>.

    • FOLDER_ID, ORGANIZATION_ID o PROJECT_ID por el nombre de tu carpeta, organización o proyecto Debes configurar una de estas opciones. Para las carpetas y organizaciones, el nombre es el ID de la carpeta o de la organización. Para los proyectos, el nombre es el número o ID del proyecto.

    • LOCATION: Es obligatorio si la residencia de datos está habilitada o si el recurso BigQueryExport se creó con la API v2.

      Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se almacena la exportación.

      Si la residencia de datos no está habilitada, incluye /locations/LOCATION en el nombre completo o especifica la marca --location solo si el recurso BigQueryExport se creó con la API de Security Command Center v2, en cuyo caso, la única ubicación válida es global.

    • DESCRIPTION con una descripción legible de la configuración de exportación Esta variable es opcional.

    • FILTER por una expresión que define qué resultados incluir en la exportación Por ejemplo, si deseas filtrar por la categoría XSS_SCRIPTING, escribe "category=\"XSS_SCRIPTING\". Esta variable es opcional.

Java

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


import com.google.cloud.securitycenter.v1.BigQueryExport;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.UpdateBigQueryExportRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class UpdateBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.

    // parent: Use any one of the following resource paths:
    //              - organizations/{organization_id}
    //              - folders/{folder_id}
    //              - projects/{project_id}
    String parent = String.format("projects/%s", "your-google-cloud-project-id");

    // filter: Expression that defines the filter to apply across create/update events of findings.
    String filter =
        "severity=\"LOW\" OR severity=\"MEDIUM\" AND "
            + "category=\"Persistence: IAM Anomalous Grant\" AND "
            + "-resource.type:\"compute\"";

    // bigQueryExportId: Unique identifier provided by the client.
    // For more info, see:
    // https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    String bigQueryExportId = "big-query-export-id";

    updateBigQueryExport(parent, filter, bigQueryExportId);
  }

  // Updates an existing BigQuery export.
  public static void updateBigQueryExport(String parent, String filter, String bigQueryExportId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      //  Set the new values for export configuration.
      BigQueryExport bigQueryExport =
          BigQueryExport.newBuilder()
              .setName(String.format("%s/bigQueryExports/%s", parent, bigQueryExportId))
              .setFilter(filter)
              .build();

      UpdateBigQueryExportRequest request =
          UpdateBigQueryExportRequest.newBuilder()
              .setBigQueryExport(bigQueryExport)
              // Set the update mask to specify which properties should be updated.
              // If empty, all mutable fields will be updated.
              // For more info on constructing field mask path, see the proto or:
              // https://cloud.google.com/java/docs/reference/protobuf/latest/com.google.protobuf.FieldMask
              .setUpdateMask(FieldMask.newBuilder().addPaths("filter").build())
              .build();

      BigQueryExport response = client.updateBigQueryExport(request);
      if (!response.getFilter().equalsIgnoreCase(filter)) {
        System.out.println("Failed to update BigQueryExport!");
        return;
      }
      System.out.println("BigQueryExport updated successfully!");
    }
  }
}

Python

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

def update_bigquery_export(parent: str, export_filter: str, bigquery_export_id: str):
    """
    Updates an existing BigQuery export.
    Args:
        parent: Use any one of the following resource paths:
                 - organizations/{organization_id}
                 - folders/{folder_id}
                 - projects/{project_id}
        export_filter: Expression that defines the filter to apply across create/update events of findings.
        bigquery_export_id: Unique identifier provided by the client.
        For more info, see:
        https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    """
    from google.cloud import securitycenter
    from google.protobuf import field_mask_pb2

    client = securitycenter.SecurityCenterClient()

    # Set the new values for export configuration.
    bigquery_export = securitycenter.BigQueryExport()
    bigquery_export.name = f"{parent}/bigQueryExports/{bigquery_export_id}"
    bigquery_export.filter = export_filter

    # Field mask to only update the export filter.
    # Set the update mask to specify which properties should be updated.
    # If empty, all mutable fields will be updated.
    # For more info on constructing field mask path, see the proto or:
    # https://googleapis.dev/python/protobuf/latest/google/protobuf/field_mask_pb2.html
    field_mask = field_mask_pb2.FieldMask(paths=["filter"])

    request = securitycenter.UpdateBigQueryExportRequest()
    request.big_query_export = bigquery_export
    request.update_mask = field_mask

    response = client.update_big_query_export(request)

    if response.filter != export_filter:
        print("Failed to update BigQueryExport!")
        return
    print("BigQueryExport updated successfully!")

Ve todas las configuraciones de exportación

Puedes ver todas las configuraciones de exportación dentro de tu organización, carpeta o proyecto.

gcloud

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para enumerar las configuraciones de exportación, ejecuta el siguiente comando:

    gcloud scc bqexports list \
      --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
      --location=LOCATION \
      [--limit=LIMIT] \
      [--page-size=PAGE_SIZE]
    

    Reemplaza lo siguiente:

    • FOLDER_ID, ORGANIZATION_ID o PROJECT_ID por el nombre de tu carpeta, organización o proyecto Debes configurar una de estas opciones. Para las carpetas y organizaciones, el nombre es el ID de la carpeta o de la organización. Para los proyectos, el nombre es el número o ID del proyecto.

      Si especificas un ID de organización, la lista incluye todas las configuraciones de exportación definidas en esa organización, incluidas las que se encuentran en los niveles de carpeta y proyecto. Si especificas un ID de carpeta, la lista incluye todas las configuraciones de exportación definidas a nivel de carpeta y en los proyectos dentro de esa carpeta. Si especificas un número o un ID del proyecto, la lista incluye todas las configuraciones de exportación para ese proyecto solamente.

    • LOCATION: Es obligatorio si la residencia de datos está habilitada o si los recursos BigQueryExport se crearon con la API v2.

      Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se almacenan las exportaciones.

      Si la residencia de datos no está habilitada, incluir la marca --location solo enumera los recursos BigQueryExport que se crearon con la API de Security Command Center v2 y la única ubicación válida es global.

    • LIMIT por la cantidad de opciones de configuración de exportación que deseas ver. Esta variable es opcional.

    • PAGE_SIZE por un valor de tamaño de página. Esta variable es opcional.

Java

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


import com.google.cloud.securitycenter.v1.BigQueryExport;
import com.google.cloud.securitycenter.v1.ListBigQueryExportsRequest;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.SecurityCenterClient.ListBigQueryExportsPagedResponse;
import java.io.IOException;

public class ListBigQueryExports {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.

    // parent: The parent, which owns the collection of BigQuery exports.
    //         Use any one of the following resource paths:
    //              - organizations/{organization_id}
    //              - folders/{folder_id}
    //              - projects/{project_id}
    String parent = String.format("projects/%s", "your-google-cloud-project-id");

    listBigQueryExports(parent);
  }

  // List BigQuery exports in the given parent.
  public static void listBigQueryExports(String parent) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      ListBigQueryExportsRequest request =
          ListBigQueryExportsRequest.newBuilder().setParent(parent).build();

      ListBigQueryExportsPagedResponse response = client.listBigQueryExports(request);

      System.out.println("Listing BigQuery exports:");
      for (BigQueryExport bigQueryExport : response.iterateAll()) {
        System.out.println(bigQueryExport.getName());
      }
    }
  }
}

Python

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

def list_bigquery_exports(parent: str):
    from google.cloud import securitycenter

    """
    List BigQuery exports in the given parent.
    Args:
         parent: The parent which owns the collection of BigQuery exports.
             Use any one of the following resource paths:
                 - organizations/{organization_id}
                 - folders/{folder_id}
                 - projects/{project_id}
    """

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.ListBigQueryExportsRequest()
    request.parent = parent

    response = client.list_big_query_exports(request)

    print("Listing BigQuery exports:")
    for bigquery_export in response:
        print(bigquery_export.name)

Borra una configuración de exportación

Si ya no necesitas una configuración de exportación, puedes borrarla.

gcloud

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para borrar una configuración de exportación, ejecuta el siguiente comando:

    gcloud scc bqexports delete BIG_QUERY_EXPORT \
      --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
      --location=LOCATION
    

    Reemplaza lo siguiente:

    • BIG_QUERY_EXPORT por el nombre de la configuración de exportación que deseas borrar.

    • FOLDER_ID, ORGANIZATION_ID o PROJECT_ID por el nombre de tu carpeta, organización o proyecto Debes configurar una de estas opciones. Para las carpetas y organizaciones, el nombre es el ID de la carpeta o de la organización. Para los proyectos, el nombre es el número o ID del proyecto.

    • LOCATION: Es obligatorio si la residencia de datos está habilitada o si el recurso BigQueryExport se creó con la API v2.

      Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se almacena la exportación.

      Si la residencia de datos no está habilitada, incluye /locations/LOCATION solo si el recurso BigQueryExport se creó con la API de Security Command Center v2, en cuyo caso, la única ubicación válida es global.

    Por ejemplo, para borrar una configuración de exportación llamada my-bq-export de una organización con un ID de organización configurado como 123, ejecuta lo siguiente:

    gcloud scc bqexports delete my-bq-export --organization=123
    

Java

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


import com.google.cloud.securitycenter.v1.DeleteBigQueryExportRequest;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class DeleteBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.

    // parent: Use any one of the following resource paths:
    //              - organizations/{organization_id}
    //              - folders/{folder_id}
    //              - projects/{project_id}
    String parent = String.format("projects/%s", "your-google-cloud-project-id");

    // bigQueryExportId: Unique identifier that is used to identify the export.
    String bigQueryExportId = "export-id";

    deleteBigQueryExport(parent, bigQueryExportId);
  }

  // Delete an existing BigQuery export.
  public static void deleteBigQueryExport(String parent, String bigQueryExportId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      DeleteBigQueryExportRequest bigQueryExportRequest =
          DeleteBigQueryExportRequest.newBuilder()
              .setName(String.format("%s/bigQueryExports/%s", parent, bigQueryExportId))
              .build();

      client.deleteBigQueryExport(bigQueryExportRequest);
      System.out.printf("BigQuery export request deleted successfully: %s", bigQueryExportId);
    }
  }
}

Python

Para autenticarte en Security Command Center, configura las credenciales predeterminadas de la aplicación. Si quieres obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

def delete_bigquery_export(parent: str, bigquery_export_id: str):
    """
    Delete an existing BigQuery export.
    Args:
        parent: Use any one of the following resource paths:
                 - organizations/{organization_id}
                 - folders/{folder_id}
                 - projects/{project_id}
        bigquery_export_id: Unique identifier that is used to identify the export.
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.DeleteBigQueryExportRequest()
    request.name = f"{parent}/bigQueryExports/{bigquery_export_id}"

    client.delete_big_query_export(request)
    print(f"BigQuery export request deleted successfully: {bigquery_export_id}")

Después de borrar la configuración de exportación, puedes quitar los datos de Looker Studio. Para obtener más información, consulta Quita, borra y restablece una fuente de datos.

Revisa los resultados en BigQuery

Después de crear una configuración de exportación, los resultados nuevos se exportan al conjunto de datos de BigQuery en el proyecto que especificaste.

Para revisar los resultados en BigQuery, haz lo siguiente:

  1. Ve al proyecto en BigQuery.

    Ir a BigQuery

  2. Si no estás en el proyecto correcto, sigue estos pasos:

    1. En la barra de herramientas, haz clic en el selector de proyectos de .
    2. Junto a Seleccionar desde, selecciona tu organización.
    3. Selecciona el proyecto en la lista de proyectos.
  3. En el panel Explorador, expande el nodo de tu proyecto.

  4. Expande tu conjunto de datos

  5. Haz clic en la tabla Resultados.

  6. En la pestaña que se abre, haz clic en Vista previa. Verás un conjunto de datos de muestra.

Consultas útiles

En esta sección, se proporcionan consultas de ejemplo para analizar datos de resultados. En los siguientes ejemplos, reemplaza DATASET por el nombre asignado a tu conjunto de datos y PROJECT_ID por el nombre del proyecto de tu conjunto de datos.

Para solucionar cualquier error que encuentres, consulta Mensajes de error.

La cantidad de resultados nuevos que se crean y actualizan todos los días

SELECT
    FORMAT_DATETIME("%Y-%m-%d", event_time) AS date,
    count(DISTINCT finding_id)
FROM `PROJECT_ID.DATASET.findings`
GROUP BY date
ORDER BY date DESC

El último registro de resultados de cada resultado

SELECT
    * EXCEPT(row)
FROM (
    SELECT *, ROW_NUMBER() OVER(
        PARTITION BY finding_id
        ORDER BY event_time DESC, finding.mute_update_time DESC
    ) AS row
    FROM `PROJECT_ID.DATASET.findings`
)
WHERE row = 1

Resultados actuales que están activos, ordenados de forma cronológica

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
ORDER BY event_time DESC

Resultados actuales que se encuentran en un proyecto

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
WHERE resource.project_display_name = 'PROJECT'

Reemplaza PROJECT por el nombre del proyecto.

Resultados actuales que se encuentran en una carpeta

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
CROSS JOIN UNNEST(resource.folders) AS folder
WHERE folder.resource_folder_display_name = 'FOLDER'

Reemplaza FOLDER por el nombre de la carpeta.

Resultados actuales del analizador Logging Scanner

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
CROSS JOIN UNNEST(finding.source_properties) AS source_property
WHERE source_property.key = "ScannerName"
  AND source_property.value = "LOGGING_SCANNER"

Resultados actuales activos del tipo Persistence: IAM Anomalous Grant

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
  AND finding.category = "Persistence: IAM Anomalous Grant"

Correlaciona los resultados activos de un tipo determinado con los Registros de auditoría de Cloud

Esta consulta de ejemplo ayuda a investigar los resultados de otorgamiento de IAM anómalos de Event Threat Detection mediante los registros de auditoría de Cloud con la secuencia de acciones de actividad del administrador del otorgador durante el período anterior y el éxito de la acción de otorgamiento de IAM anómala. La siguiente consulta correlaciona los registros de la actividad del administrador entre 1 hora antes y 1 hora después de la marca de tiempo del resultado.

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT
  finding_id,
  ANY_VALUE(event_time) as event_time,
  ANY_VALUE(finding.access.principal_email) as grantor,
  JSON_VALUE_ARRAY(ANY_VALUE(finding.source_properties_json), '$.properties.sensitiveRoleGrant.members') as grantees,
  ARRAY_AGG(
    STRUCT(
      timestamp,
      IF(timestamp < event_time, 'before', 'after') as timeline,
      protopayload_auditlog.methodName,
      protopayload_auditlog.resourceName,
      protopayload_auditlog.serviceName
    )
    ORDER BY timestamp ASC
  ) AS recent_activity
FROM (
  SELECT
    f.*,
    a.*,
  FROM latestFindings AS f
  LEFT JOIN `PROJECT_ID.DATASET.cloudaudit_googleapis_com_activity` AS a
  ON a.protopayload_auditlog.authenticationInfo.principalEmail = f.finding.access.principal_email
  WHERE f.finding.state = "ACTIVE"
    AND f.finding.category = "Persistence: IAM Anomalous Grant"
    AND a.timestamp >= TIMESTAMP_SUB(f.event_time, INTERVAL 1 HOUR)
    AND a.timestamp <= TIMESTAMP_ADD(f.event_time, INTERVAL 1 HOUR)
  )
GROUP BY
  finding_id
ORDER BY
  event_time DESC

El resultado es similar al siguiente:

Captura de pantalla de los resultados de la consulta que muestran los resultados con registros de auditoría correlacionados

Crea gráficos en Looker Studio

Looker Studio te permite crear informes y paneles interactivos.

En general, se generan costos de uso de BigQuery cuando accedes a BigQuery mediante Looker Studio. Para obtener más información, consulta Visualiza datos de BigQuery con Looker Studio.

Para crear un gráfico en el que se muestren los datos de resultados por gravedad y categoría, haz lo siguiente:

  1. Abre Looker Studio y accede.
  2. Si se te solicita, proporciona información adicional y configura otras preferencias. Lee las Condiciones del Servicio y, si estás satisfecho, continúa.
  3. Haga clic en Informe en blanco.
  4. En la pestaña Conectar a datos, haz clic en la tarjeta BigQuery.
  5. Si se te solicita, autoriza a Looker Studio para acceder a los proyectos de BigQuery.
  6. Conéctate a los datos de tus resultados:
    1. En Proyecto, selecciona el proyecto para tu conjunto de datos. O bien, en la pestaña Mis proyectos, ingresa el ID del proyecto para buscarlo.
    2. En Conjunto de datos, haz clic en el nombre de tu conjunto de datos.
    3. En Tabla, haz clic en Resultados.
    4. Haz clic en Agregar.
    5. En el cuadro de diálogo, haz clic en Agregar al informe.
  7. Después de agregar el informe, haz clic en Agregar un gráfico.
  8. Haz clic en Gráfico de columnas apiladas y, luego, en el área donde deseas colocarlo.

    Captura de pantalla de la selección del gráfico

  9. En el panel Gráfico > Barra, en la pestaña Datos, configura los siguientes campos:

    1. En el campo Dimensión, selecciona finding.severity.
    2. En el campo Dimensión de desglose, selecciona finding.category.
    Captura de pantalla de un gráfico de resultados clasificado por gravedad y subclasificado por categoría

El informe se actualiza para mostrar varias columnas con resultados divididos por gravedad y categoría.

¿Qué sigue?

Aprende a ejecutar una consulta en BigQuery.