Transférer les résultats par flux vers BigQuery à des fins d'analyse

Cette page explique comment diffuser les résultats nouveaux et mis à jour vers un ensemble de données BigQuery à l'aide de la fonction d'exportation Security Command Center pour BigQuery. Les résultats existants ne sont envoyés à BigQuery que s'ils sont mis à jour.

Google BigQuery est l'entrepôt de données d'analyse de Google Cloud, entièrement géré à l'échelle du pétaoctet et à faible coût, qui vous permet d'exécuter des analyses sur de grandes quantités de données en quasi-temps réel. Vous pouvez utiliser BigQuery pour exécuter des requêtes sur des résultats nouveaux et mis à jour, filtrer les données pour trouver ce dont vous avez besoin et générer des rapports personnalisés. Pour en savoir plus sur BigQuery, consultez la documentation BigQuery.

Présentation

Lorsque vous activez cette fonctionnalité, les nouveaux résultats écrits dans Security Command Center sont exportés vers une table BigQuery quasiment en temps réel. Vous pouvez ensuite intégrer les données dans des workflows existants et créer des analyses personnalisées. Vous pouvez activer cette fonctionnalité au niveau de l'organisation, du dossier et du projet pour exporter les résultats en fonction de vos besoins.

Cette fonctionnalité est recommandée pour exporter les résultats de Security Command Center vers BigQuery, car elle est entièrement gérée et ne nécessite pas d'effectuer des opérations manuelles ni d'écrire du code personnalisé.

Structure de l'ensemble de données

Cette fonctionnalité ajoute chaque nouveau résultat et ses mises à jour ultérieures sous forme de nouvelles lignes dans la table findings, qui est mise en cluster par source_id, finding_id et event_time.

Lorsqu'un résultat est mis à jour, cette fonctionnalité crée plusieurs enregistrements de résultats avec les mêmes valeurs source_id et finding_id, mais avec des valeurs event_time différentes. Cette structure d'ensemble de données vous permet de voir l'évolution de l'état de chaque résultat au fil du temps.

Notez que votre ensemble de données peut contenir des entrées en double. Pour les analyser, vous pouvez utiliser la clause DISTINCT, comme indiqué dans le premier exemple de requête.

Chaque ensemble de données contient une table findings, qui contient les champs suivants :

Champ Description
source_id Identifiant unique que Security Command Center attribue à la source d'un résultat. Par exemple, tous les résultats de la source Cloud Anomaly Detection ont la même valeur source_id.

Exemple : 1234567890
finding_id Identifiant unique qui représente le résultat. Il est unique dans une source pour une organisation. Il s'agit d'un code alphanumérique comportant moins de 32 caractères.
event_time Heure à laquelle l'événement s'est produit ou heure de la mise à jour du résultat. Par exemple, si le résultat représente un pare-feu ouvert, "event_time" capture l'heure à laquelle le détecteur estime que le pare-feu a été ouvert. Si le résultat est résolu par la suite, cette valeur indique l'heure de résolution du résultat.

Exemple : 2019-09-26 12:48:00.985000 UTC
finding Enregistrement d'informations d'évaluation, telles que la sécurité, les risques, l'état ou la confidentialité, qui sont ingérées dans Security Command Center pour la présentation, la notification, l'analyse, les tests de règles et l'application. Par exemple, une faille de script intersites (XSS) dans une application App Engine est un résultat.

Pour en savoir plus sur les champs imbriqués, consultez la documentation de référence de l'API pour l'objet Finding.
Ressource Informations concernant la ressource Google Cloud associée à ce résultat.

Pour en savoir plus sur les champs imbriqués, consultez la documentation de référence de l'API pour l'objet Resource.

Coût

Des frais BigQuery liés à cette fonctionnalité vous seront facturés. Pour en savoir plus, consultez la page relative aux tarifs de BigQuery.

Avant de commencer

Vous devez suivre cette procédure avant d'activer cette fonctionnalité.

Configurer les autorisations

Pour suivre ce guide, vous devez disposer des rôles Identity and Access Management (IAM) suivants :

Créer un ensemble de données BigQuery

créer un ensemble de données BigQuery ; Pour en savoir plus, consultez la page Créer des ensembles de données.

Planifier la résidence des données

Si la résidence des données est activée pour Security Command Center, les configurations qui définissent les exportations en flux continu vers BigQuery (ressources BigQueryExport) sont soumises au contrôle de la résidence des données et sont stockées dans un emplacement Security Command Center que vous sélectionnez.

Pour exporter des résultats depuis un emplacement Security Command Center vers BigQuery, vous devez configurer l'exportation BigQuery dans le même emplacement que Security Command Center.

Étant donné que les filtres utilisés dans les exportations BigQuery peuvent contenir des données soumises à des contrôles de résidence, veillez à spécifier l'emplacement approprié avant de les créer. Security Command Center ne limite pas l'emplacement dans lequel vous créez des exportations.

Les exportations BigQuery ne sont stockées que dans l'emplacement de création et ne peuvent pas être affichées ni modifiées dans d'autres emplacements.

Une fois que vous avez créé une exportation BigQuery, vous ne pouvez plus modifier son emplacement. Pour modifier l'emplacement, vous devez supprimer l'exportation BigQuery et la recréer dans le nouvel emplacement.

Pour récupérer une exportation BigQuery à l'aide d'appels d'API, vous devez spécifier l'emplacement dans le nom de ressource complet de bigQueryExport. Exemple :

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

De même, pour récupérer une exportation BigQuery à l'aide de la gcloud CLI, vous devez spécifier l'emplacement dans le nom complet de la ressource de la configuration ou à l'aide de l'option --locations. Exemple :

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

Exporter les résultats de Security Command Center vers BigQuery

Pour exporter les résultats, commencez par activer l'API Security Command Center.

Activer l'API Security Command Center

Pour activer l'API Security Command Center, procédez comme suit :

  1. Accédez à la page "Bibliothèque d'API" de la console Google Cloud.

    Accéder à la bibliothèque d'API

  2. Sélectionnez le projet pour lequel vous souhaitez activer l'API Security Command Center.

  3. Dans le champ de recherche, saisissez Security Command Center, puis cliquez sur Security Command Center dans les résultats de recherche.

  4. Dans la page de l'API qui s'affiche, cliquez sur Activer.

L'API Security Command Center est désormais activée pour votre projet. Ensuite, vous allez utiliser gcloud CLI pour créer une configuration d'exportation vers BigQuery.

Accorder l'accès à un périmètre dans VPC Service Controls

Si vous utilisez VPC Service Controls et que votre ensemble de données BigQuery fait partie d'un projet situé dans un périmètre de service, vous devez accorder l'accès aux projets pour pouvoir exporter les résultats.

Pour accorder l'accès aux projets, créez des règles d'entrée et de sortie pour les comptes principaux et les projets à partir desquels vous exportez les résultats. Ces règles autorisent l'accès aux ressources protégées et permettent à BigQuery de vérifier que les utilisateurs disposent de l'autorisation setIamPolicy sur l'ensemble de données BigQuery.

Avant de configurer une nouvelle exportation vers BigQuery

  1. Accédez à la page "VPC Service Controls" dans Google Cloud Console.

    Accéder à VPC Service Controls

  2. Si nécessaire, sélectionnez votre organisation.

  3. Cliquez sur le nom du périmètre de service que vous souhaitez modifier.

    Pour identifier le périmètre de service que vous devez modifier, vous pouvez rechercher dans vos journaux les entrées qui indiquent des cas de non-respect des règles RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dans ces entrées, vérifiez le champ servicePerimeterName : accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Cliquez sur Modifier le périmètre.

  5. Dans le menu de navigation, cliquez sur Règle d'entrée.

  6. Pour configurer des règles d'entrée pour les utilisateurs ou les comptes de service, utilisez les paramètres suivants:

    • Attributs "FROM" du client API :
      • Dans le menu déroulant Identités, choisissez Identités sélectionnées.
      • Dans le menu déroulant Source, sélectionnez Toutes les sources.
      • Cliquez sur Sélectionner, puis saisissez le compte principal utilisé pour appeler l'API Security Command Center.
    • Attributs "TO" des services/ressources Google Cloud :
      • Dans le menu déroulant Projet, choisissez Projets sélectionnés.
      • Cliquez sur Sélectionner, puis indiquez le projet qui contient l'ensemble de données BigQuery .
      • Dans le menu déroulant Services, choisissez Services sélectionnés, puis sélectionnez API BigQuery.
      • Dans le menu déroulant Méthodes, choisissez Toutes les actions.
  7. Cliquez sur Enregistrer.

  8. Dans le menu de navigation, cliquez sur Règle de sortie.

  9. Cliquez sur Add Rule (Ajouter une règle).

  10. Pour configurer des règles de sortie pour les comptes utilisateur ou de service, saisissez les paramètres suivants:

    • Attributs "FROM" du client API :
      • Dans le menu déroulant Identités, choisissez Identités sélectionnées.
      • Cliquez sur Sélectionner, puis saisissez le compte principal utilisé pour appeler l'API Security Command Center.
    • Attributs "TO" des services/ressources Google Cloud :
      • Dans le menu déroulant Projet, choisissez Tous les projets.
      • Dans le menu déroulant Services, choisissez Services sélectionnés, puis sélectionnez API BigQuery.
      • Dans le menu déroulant Méthodes, choisissez Toutes les actions.
  11. Cliquez sur Enregistrer.

Configurer une nouvelle exportation vers BigQuery

Au cours de cette étape, vous allez créer une configuration d'exportation pour exporter les résultats vers une instance BigQuery. Vous pouvez créer des configurations d'exportation au niveau du projet, du dossier ou de l'organisation. Par exemple, si vous souhaitez exporter les résultats d'un projet vers un ensemble de données BigQuery, vous devez créer une configuration d'exportation au niveau du projet pour n'exporter que les résultats associés à ce projet. Vous pouvez éventuellement spécifier des filtres pour n'exporter que certains résultats.

Veillez à créer vos configurations d'exportation au niveau approprié. Par exemple, si vous créez une configuration d'exportation dans le projet B pour exporter les résultats du projet A et que vous définissez des filtres tels que resource.project_display_name: project-a-id, la configuration n'exporte aucun résultat.

Vous pouvez créer jusqu'à 500 configurations d'exportation vers BigQuery pour votre organisation. Vous pouvez utiliser le même ensemble de données pour plusieurs configurations d'exportation. Si vous utilisez le même ensemble de données, toutes les mises à jour seront appliquées à la même table de résultats.

Lorsque vous créez votre première configuration d'exportation, un compte de service est créé automatiquement. Ce compte de service est nécessaire pour créer ou mettre à jour la table de résultats dans un ensemble de données, et pour exporter des résultats dans la table. Elle est au format service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gservicaccount.com et dispose du rôle "Éditeur de données BigQuery" (roles/bigquery.dataEditor) au niveau de l'ensemble de données BigQuery.

gcloud

  1. Accédez à Google Cloud Console.

    Accédez à la console Google Cloud.

  2. Sélectionnez le projet pour lequel vous avez activé l'API Security Command Center.

  3. Cliquez sur Activer Cloud Shell.

  4. Pour créer une configuration d'exportation, exécutez la commande suivante :

    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]
    

    Remplacez les éléments suivants :

    • BIG_QUERY_EXPORT par le nom que vous souhaitez donner à cette configuration d'exportation.

    • DATASET_NAME par le nom de l'ensemble de données BigQuery (par exemple, projects/<PROJECT_ID>/datasets/<DATASET_ID>).

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID par le nom de votre dossier, organisation ou projet. Vous devez définir l'une de ces options. Pour les dossiers et les organisations, le nom est l'ID du dossier ou l'ID de l'organisation. Pour les projets, le nom est le numéro ou l'ID du projet.

    • LOCATION: si la résidence des données est activée, spécifiez l'emplacement Security Command Center dans lequel créer l'exportation BigQuery. La configuration BigQuery Export est stockée à cet emplacement. Seuls les résultats de cet emplacement sont inclus dans l'exportation.

      Si la résidence des données n'est pas activée, spécifier l'option --location crée l'exportation BigQuery à l'aide de la version 2 de l'API Security Command Center. La seule valeur valide pour cette option est global.

    • DESCRIPTION par une description lisible de la configuration de l'exportation. Cette variable est facultative.

    • FILTER par une expression qui définit les résultats à inclure dans l'exportation. Par exemple, si vous souhaitez filtrer sur la catégorie XSS_SCRIPTING, saisissez "category=\"XSS_SCRIPTING\". Cette variable est facultative.

Java

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.


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

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.



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")

Les résultats devraient s'afficher dans votre ensemble de données BigQuery dans les 15 minutes qui suivent la création de la configuration d'exportation. Une fois la table BigQuery créée, tous les résultats nouveaux et mis à jour correspondant à votre filtre et à votre champ d'application apparaissent quasiment en temps réel dans la table.

Pour examiner vos résultats, consultez la section Examiner les résultats.

Créer une règle d'entrée pour la nouvelle exportation vers BigQuery

Si vous utilisez VPC Service Controls et que votre ensemble de données BigQuery fait partie d'un projet situé dans un périmètre de service, vous devez créer une règle d'entrée pour une nouvelle exportation vers BigQuery.

  1. Rouvrez le périmètre de service Configurer une nouvelle exportation vers BigQuery.

    Accéder à VPC Service Controls

  2. Cliquez sur Règle d'entrée.

  3. Cliquez sur Add Rule (Ajouter une règle).

  4. Pour configurer la règle d'entrée pour les configurations d'exportation, saisissez les paramètres suivants:

    • Attributs "FROM" du client API :
      • Dans le menu déroulant Source, sélectionnez Toutes les sources.
      • Dans le menu déroulant Identités, choisissez Identités sélectionnées.
      • Cliquez sur Sélectionner, puis saisissez le nom du compte de service de configuration de BigQuery Export: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • Attributs "TO" des services/ressources GCP :
      • Dans le menu déroulant Projet, choisissez Projets sélectionnés.
      • Cliquez sur Sélectionner, puis sélectionnez le projet contenant l'ensemble de données BigQuery.
      • Dans le menu déroulant Services, choisissez Services sélectionnés, puis sélectionnez API BigQuery.
      • Dans le menu déroulant Méthodes, choisissez Toutes les actions.
  5. Dans le menu de navigation, cliquez sur Enregistrer.

Les projets, utilisateurs et comptes de service sélectionnés peuvent désormais accéder aux ressources protégées et exporter les résultats.

Si vous avez suivi toutes les étapes de ce guide et que les exportations fonctionnent correctement, vous pouvez maintenant supprimer les éléments suivants:

  • Règle d'entrée du compte principal
  • Règle de sortie du compte principal

Ces règles n'étaient nécessaires que pour configurer la configuration de l'exportation. Toutefois, pour que les configurations d'exportation continuent de fonctionner, vous devez conserver la règle d'entrée que vous avez créée ci-dessus, ce qui permet à Security Command Center d'exporter les résultats vers votre ensemble de données BigQuery situé derrière le périmètre de service.

Afficher les détails d'une configuration d'exportation

gcloud

  1. Accédez à Google Cloud Console.

    Accédez à la console Google Cloud.

  2. Sélectionnez le projet pour lequel vous avez activé l'API Security Command Center.

  3. Cliquez sur Activer Cloud Shell.

  4. Pour vérifier les détails de la configuration d'exportation, exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • BIG_QUERY_EXPORT par le nom de cette configuration d'exportation.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID par le nom de votre dossier, organisation ou projet. Vous devez définir l'une de ces options. Pour les dossiers et les organisations, le nom est l'ID du dossier ou l'ID de l'organisation. Pour les projets, le nom est le numéro ou l'ID du projet.

    • LOCATION: obligatoire si la résidence des données est activée ou si la ressource BigQueryExport a été créée à l'aide de l'API v2.

      Si la résidence des données est activée, spécifiez l'emplacement Security Command Center dans lequel l'exportation est stockée.

      Si la résidence des données n'est pas activée, n'incluez /locations/LOCATION que si la ressource BigQueryExport a été créée à l'aide de l'API Security Command Center v2. Dans ce cas, le seul emplacement valide est global.

    Par exemple, pour obtenir une configuration d'exportation nommée my-bq-export d'une organisation avec un ID d'organisation défini sur 123, exécutez :

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

Java

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.


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

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.

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}")

Mettre à jour une configuration d'exportation

Si nécessaire, vous pouvez modifier le filtre, l'ensemble de données et la description d'une configuration d'exportation existante. Vous ne pouvez pas modifier le nom de la configuration d'exportation.

gcloud

  1. Accédez à Google Cloud Console.

    Accédez à la console Google Cloud.

  2. Sélectionnez le projet pour lequel vous avez activé l'API Security Command Center.

  3. Cliquez sur Activer Cloud Shell.

  4. Pour mettre à jour une configuration d'exportation, exécutez la commande suivante :

    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]
    

    Remplacez les éléments suivants :

    • BIG_QUERY_EXPORT par le nom de la configuration d'exportation que vous souhaitez mettre à jour.

    • DATASET_NAME par le nom de l'ensemble de données BigQuery (par exemple, projects/<PROJECT_ID>/datasets/<DATASET_ID>).

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID par le nom de votre dossier, organisation ou projet. Vous devez définir l'une de ces options. Pour les dossiers et les organisations, le nom est l'ID du dossier ou l'ID de l'organisation. Pour les projets, le nom est le numéro ou l'ID du projet.

    • LOCATION: obligatoire si la résidence des données est activée ou si la ressource BigQueryExport a été créée à l'aide de l'API v2.

      Si la résidence des données est activée, spécifiez l'emplacement Security Command Center dans lequel l'exportation est stockée.

      Si la résidence des données n'est pas activée, incluez /locations/LOCATION dans le nom complet ou ne spécifiez l'option --location que si la ressource BigQueryExport a été créée à l'aide de l'API Security Command Center v2. Dans ce cas, le seul emplacement valide est global.

    • DESCRIPTION par une description lisible de la configuration de l'exportation. Cette variable est facultative.

    • FILTER par une expression qui définit les résultats à inclure dans l'exportation. Par exemple, si vous souhaitez filtrer sur la catégorie XSS_SCRIPTING, saisissez "category=\"XSS_SCRIPTING\". Cette variable est facultative.

Java

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.


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

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.

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!")

Afficher toutes les configurations d'exportation

Vous pouvez afficher toutes les configurations d'exportation de votre organisation, de votre dossier ou de votre projet.

gcloud

  1. Accédez à Google Cloud Console.

    Accédez à la console Google Cloud.

  2. Sélectionnez le projet pour lequel vous avez activé l'API Security Command Center.

  3. Cliquez sur Activer Cloud Shell.

  4. Pour répertorier les configurations d'exportation, exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID par le nom de votre dossier, organisation ou projet. Vous devez définir l'une de ces options. Pour les dossiers et les organisations, le nom est l'ID du dossier ou l'ID de l'organisation. Pour les projets, le nom est le numéro ou l'ID du projet.

      Si vous spécifiez un ID d'organisation, la liste inclut toutes les configurations d'exportation définies dans cette organisation, y compris celles au niveau du dossier et du projet. Si vous spécifiez un ID de dossier, la liste comprend toutes les configurations d'exportation définies au niveau du dossier et dans les projets de ce dossier. Si vous spécifiez un numéro ou un ID de projet, la liste n'inclut que les configurations d'exportation de ce projet.

    • LOCATION: obligatoire si la résidence des données est activée ou si les ressources BigQueryExport ont été créées à l'aide de l'API v2.

      Si la résidence des données est activée, spécifiez l'emplacement Security Command Center dans lequel les exportations sont stockées.

      Si la résidence des données n'est pas activée, l'option --location ne répertorie que les ressources BigQueryExport créées à l'aide de la version 2 de l'API Security Command Center et le seul emplacement valide est global.

    • LIMIT par le nombre de configurations d'exportation que vous souhaitez afficher. Cette variable est facultative.

    • PAGE_SIZE par une valeur de taille de page. Cette variable est facultative.

Java

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.


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

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.

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)

Supprimer une configuration d'exportation

Si vous n'avez plus besoin d'une configuration d'exportation, vous pouvez la supprimer.

gcloud

  1. Accédez à Google Cloud Console.

    Accédez à la console Google Cloud.

  2. Sélectionnez le projet pour lequel vous avez activé l'API Security Command Center.

  3. Cliquez sur Activer Cloud Shell.

  4. Pour supprimer une configuration d'exportation, exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • BIG_QUERY_EXPORT par le nom de la configuration d'exportation que vous souhaitez supprimer.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID par le nom de votre dossier, organisation ou projet. Vous devez définir l'une de ces options. Pour les dossiers et les organisations, le nom est l'ID du dossier ou l'ID de l'organisation. Pour les projets, le nom est le numéro ou l'ID du projet.

    • LOCATION: obligatoire si la résidence des données est activée ou si la ressource BigQueryExport a été créée à l'aide de l'API v2.

      Si la résidence des données est activée, spécifiez l'emplacement Security Command Center dans lequel l'exportation est stockée.

      Si la résidence des données n'est pas activée, n'incluez /locations/LOCATION que si la ressource BigQueryExport a été créée à l'aide de l'API Security Command Center v2. Dans ce cas, le seul emplacement valide est global.

    Par exemple, pour supprimer une configuration d'exportation nommée my-bq-export d'une organisation avec un ID d'organisation défini sur 123, exécutez la commande suivante :

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

Java

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.


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

Pour vous authentifier auprès de Security Command Center, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour un environnement de développement local.

L'exemple suivant utilise l'API v1. Pour modifier l'exemple pour la v2, remplacez v1 par v2 et ajoutez /locations/LOCATION au nom de la ressource.

Pour la plupart des ressources, ajoutez /locations/LOCATION au nom de la ressource après /PARENT/PARENT_ID, où PARENT est organizations, folders ou projects.

Pour les résultats, ajoutez /locations/LOCATION au nom de la ressource après /sources/SOURCE_ID, où SOURCE_ID est l'ID du service Security Command Center qui a émis le résultat.

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}")

Après avoir supprimé la configuration de l'exportation, vous pouvez supprimer les données de Looker Studio. Pour plus d'informations, consultez la page Retirer, supprimer et restaurer une source de données.

Examiner les résultats dans BigQuery

Après avoir créé une configuration d'exportation, les nouveaux résultats sont exportés vers l'ensemble de données BigQuery dans le projet que vous avez spécifié.

Pour examiner les résultats dans BigQuery, procédez comme suit :

  1. Accédez au projet dans BigQuery.

    Accéder à BigQuery

  2. Si vous n'êtes pas dans le bon projet, procédez comme suit :

    1. Dans la barre d'outils, cliquez sur le sélecteur de projet .
    2. À côté de Select from, sélectionnez votre organisation.
    3. Dans la liste des projets, sélectionnez un projet.
  3. Dans le volet Explorateur, développez le nœud de votre projet.

  4. Développez votre ensemble de données.

  5. Cliquez sur la table des résultats.

  6. Dans l'onglet qui s'affiche, cliquez sur Aperçu. Un échantillon de données s'affiche.

Requêtes utiles

Cette section fournit des exemples de requêtes d'analyse des données de résultats. Dans les exemples suivants, remplacez DATASET par le nom attribué à votre ensemble de données et PROJECT_ID par le nom de projet de votre ensemble de données.

Pour résoudre les erreurs que vous rencontrez, consultez la page Messages d'erreur.

Le nombre de résultats créés et mis à jour quotidiennement

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

Dernier enregistrement de résultat pour chaque résultat

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

Résultats actuels actifs, triés par ordre chronologique

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

Résultats actuels dans un projet

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'

Remplacez PROJECT par le nom du projet.

Résultats actuels situés dans un dossier

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'

Remplacez FOLDER par le nom du dossier.

Résultats actuels de l'outil d'analyse 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"

Résultats actifs de type 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"

Corréler les résultats actifs d'un type donné avec Cloud Audit Logs

Cet exemple de requête permet d'examiner les résultats d'octroi IAM anormaux du service Event Threat Detection à l'aide de Cloud Audit Logs en affichant la séquence d'actions d'administration de l'approbateur au cours de la période précédente et en effectuant l'action d'octroi IAM anormale. Cette requête correspond aux journaux d'activité d'administration entre une heure avant et une heure après l'horodatage du résultat.

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

Le résultat ressemble à ce qui suit :

Capture d'écran des résultats de requête indiquant les résultats avec des journaux d'audit corrélés

Créer des graphiques dans Looker Studio

Looker Studio vous permet de créer des rapports et des tableaux de bord interactifs.

En général, des coûts d'utilisation de BigQuery vous sont facturés lorsque vous y accédez via Looker Studio. Pour en savoir plus, consultez Visualiser des données BigQuery à l'aide de Looker Studio.

Pour créer un graphique qui représente les données de résultats par gravité et par catégorie, procédez comme suit :

  1. Ouvrez Looker Studio et connectez-vous.
  2. Si vous y êtes invité, indiquez des informations supplémentaires et configurez d'autres préférences. Lisez les conditions d'utilisation et, si vous êtes satisfait, continuez.
  3. Cliquez sur Blank Report (Rapport vierge).
  4. Dans l'onglet Se connecter aux données, cliquez sur la fiche BigQuery.
  5. Si vous y êtes invité, autorisez Looker Studio à accéder aux projets BigQuery.
  6. Connectez-le à vos données de résultats :
    1. Pour Projet, sélectionnez ce projet pour votre ensemble de données. Vous pouvez également saisir votre ID de projet dans l'onglet Mes projets pour le rechercher.
    2. Dans le champ Ensemble de données, cliquez sur le nom de l'ensemble de données.
    3. Dans le champ Table, cliquez sur résultats.
    4. Cliquez sur Ajouter.
    5. Dans la boîte de dialogue, cliquez sur Ajouter au rapport.
  7. Une fois le rapport ajouté, cliquez sur Ajouter un graphique.
  8. Cliquez sur Histogramme empilé, puis sur la zone dans laquelle vous souhaitez le placer.

    Capture d'écran de la sélection de graphique

  9. Dans le volet Graphique > Barre, accédez à l'onglet Données, puis définissez les champs suivants :

    1. Dans le champ Dimension, sélectionnez finding.severity.
    2. Dans le champ Dimension de répartition, sélectionnez finding.category.
    Capture d'écran d'un graphique des résultats classés par niveau de gravité et sous-classés par catégorie

Le rapport est mis à jour pour afficher plusieurs colonnes avec des résultats répartis par niveau de gravité et par catégorie.

Étapes suivantes

Découvrez comment exécuter une requête dans BigQuery.