Fazer streaming das descobertas no BigQuery para análise

Nesta página, descrevemos como fazer streaming de descobertas novas e atualizadas para um conjunto de dados do BigQuery usando a função de exportação do Security Command Center para o BigQuery. As descobertas atuais não são enviadas ao BigQuery, a menos que sejam atualizadas.

O BigQuery é o data warehouse para análise totalmente gerenciado, em escala de petabyte e econômico do Google Cloud que permite executar análises em vastos volumes de dados quase em tempo real. É possível usar o BigQuery para executar consultas em descobertas novas e atualizadas, filtrar dados para encontrar o que você precisa e gerar relatórios personalizados. Para saber mais sobre o BigQuery, leia a documentação do BigQuery.

Visão geral

Quando você ativa esse recurso, novas descobertas gravadas no Security Command Center são exportadas para uma tabela do BigQuery quase em tempo real. Assim, você pode integrar os dados a fluxos de trabalho existentes e criar análises personalizadas. É possível ativar esse recurso nos níveis de organização, pasta e projeto para exportar descobertas com base nos seus requisitos.

Esse recurso é a forma recomendada de exportar as descobertas do Security Command Center para o BigQuery, porque ele é totalmente gerenciado e não requer a execução de operações manuais ou a escrita de um código personalizado.

Estrutura do conjunto de dados

Esse recurso adiciona cada nova descoberta e as atualizações seguintes como novas linhas na tabela findings, que é agrupada por source_id, finding_id e event_time

Quando uma descoberta é atualizada, esse recurso cria vários registros com os mesmos valores source_id e finding_id, mas com valores event_time diferentes. Essa estrutura de conjunto de dados permite ver como o estado de cada descoberta muda ao longo do tempo.

Pode haver entradas duplicadas no conjunto de dados. Para analisá-las, use a cláusula DISTINCT, conforme mostrado no primeiro exemplo de consulta.

Cada conjunto de dados contém uma tabela findings com os seguintes campos:

Campo Descrição
source_id Um identificador exclusivo que o Security Command Center atribui à origem de uma descoberta. Por exemplo, todas as descobertas da origem da Detecção de anomalias do Cloud têm o mesmo valor source_id.

Exemplo: 1234567890
finding_id Identificador exclusivo que representa a descoberta. É único dentro de uma fonte para uma organização. É alfanumérico e tem no máximo 32 caracteres.
event_time A hora em que o evento ocorreu ou a hora em que uma atualização da descoberta ocorreu. Por exemplo, se a descoberta representar um firewall aberto, o `event_time` vai capturar o horário em que o detector acredita que o firewall foi aberto. Se a descoberta for resolvida depois, esse horário refletirá quando ela foi resolvida.

Exemplo: 2019-09-26 12:48:00.985000 UTC
finding Um registro de dados de avaliação, como segurança, risco, saúde ou privacidade, que é ingerido no Security Command Center para apresentação, notificação, análise, teste de políticas e aplicação. Por exemplo, uma vulnerabilidade de scripting em vários locais (XSS) em um aplicativo do App Engine é uma descoberta.

Saiba mais sobre campos aninhados na referência da API do objeto Finding.
recurso Informações relacionadas ao recurso do Google Cloud associado a essa descoberta.

Saiba mais sobre campos aninhados na referência da API do objeto Resource.

Custo

Você receberá cobranças do BigQuery relacionadas a esse recurso. Para mais informações, consulte Preços do BigQuery.

Antes de começar

Conclua as etapas abaixo antes de ativar esse recurso.

Configurar permissões

Para concluir este guia, você precisa ter os seguintes papéis de gerenciamento de identidade e acesso (IAM):

Criar um conjunto de dados do BigQuery

Criar um conjunto de dados do BigQuery Para mais informações, consulte Como criar conjuntos de dados.

Planejar a residência dos dados

Se a residência de dados estiver ativada para o Security Command Center, as configurações que definem exportações de streaming para o BigQuery (recursos BigQueryExport) estarão sujeitas ao controle de residência de dados e serão armazenadas em um local do Security Command Center selecionado.

Para exportar descobertas em um local do Security Command Center para o BigQuery, configure a exportação do BigQuery no mesmo local do Security Command Center que as descobertas.

Como os filtros usados nas exportações do BigQuery podem conter dados sujeitos aos controles de residência, especifique o local correto antes de criá-los. O Security Command Center não restringe o local em que você cria exportações.

As exportações do BigQuery são armazenadas apenas no local em que foram criadas e não podem ser visualizadas ou editadas em outros locais.

Depois de criar uma exportação do BigQuery, não é possível alterar o local dela. Para alterar o local, você precisa excluir o BigQuery Export e recriá-lo no novo local.

Para recuperar uma exportação do BigQuery usando chamadas de API, especifique o local no nome completo do recurso de bigQueryExport. Exemplo:

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

Da mesma forma, para recuperar uma exportação do BigQuery usando a CLI gcloud, você precisa especificar o local no nome completo do recurso da configuração ou usando a sinalização --locations. Exemplo:

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

Exportar descobertas do Security Command Center para o BigQuery

Para exportar descobertas, primeiro ative a API Security Command Center.

Como ativar a API Security Command Center

Para ativar a API Security Command Center, faça o seguinte:

  1. Acesse a página "Biblioteca de APIs" no Console do Google Cloud.

    Acessar a Biblioteca de APIs

  2. Selecione o projeto em que você quer ativar a API Security Command Center.

  3. Na caixa Pesquisa, digite Security Command Center e clique no Security Command Center nos resultados da pesquisa.

  4. Na página da API exibida, clique em Ativar.

A API Security Command Center está ativada no seu projeto. Em seguida, use a CLI gcloud para criar uma nova configuração de exportação para o BigQuery.

Como conceder acesso de perímetro no VPC Service Controls

Se você usar o VPC Service Controls e o conjunto de dados do BigQuery fizer parte de um projeto dentro de um perímetro de serviço, será necessário conceder acesso a projetos para exportar descobertas.

Para conceder acesso a projetos, crie regras de entrada e saída para os principais e os projetos de onde você está exportando descobertas. As regras permitem acesso a recursos protegidos e deixam o BigQuery verificar se os usuários têm a permissão setIamPolicy no conjunto de dados do BigQuery.

Antes de configurar uma nova exportação para o BigQuery

  1. Acesse a página VPC Service Controls no console do Cloud.

    Acessar o VPC Service Controls

  2. Se necessário, selecione a organização.

  3. Clique no nome do perímetro de serviço que você quer alterar.

    Para encontrar o perímetro de serviço que você precisa modificar, procure nos seus registros entradas que mostrem violações de RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Nessas entradas, verifique o campo servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Clique em Editar perímetro.

  5. No menu de navegação, clique em Política de entrada.

  6. Para configurar regras de entrada para usuários ou contas de serviço, use os seguintes parâmetros:

    • Atributos FROM do cliente da API:
      • No menu suspenso Identities, escolha Selected identities.
      • No menu suspenso Origem, selecione Todas as origens.
      • Clique em Selecionar e insira o principal usado para chamar a API Security Command Center.
    • Atributos "Para" dos serviços/recursos do Google Cloud:
      • No menu suspenso Projeto, escolha Projetos selecionados.
      • Clique em Selecionar e insira o projeto que contém o conjunto de dados do BigQuery .
      • No menu suspenso Serviços, escolha Serviços selecionados e, em seguida, API BigQuery.
      • No menu suspenso Métodos, escolha Todas as ações.
  7. Clique em Salvar.

  8. No menu de navegação, clique em Política de saída.

  9. Clique em Add Rule.

  10. Para configurar regras de saída para contas de usuário ou serviço, insira os seguintes parâmetros:

    • Atributos FROM do cliente da API:
      • No menu suspenso Identidades, escolha Identidades selecionadas.
      • Clique em Selecionar e insira o principal usado para chamar a API Security Command Center.
    • Atributos "Para" dos serviços/recursos do Google Cloud:
      • No menu suspenso Projeto, escolha Todos os projetos.
      • No menu suspenso Serviços, escolha Serviços selecionados e, em seguida, API BigQuery.
      • No menu suspenso Métodos, escolha Todas as ações.
  11. Clique em Salvar.

Configurar uma nova exportação para o BigQuery

Nesta etapa, você criará uma configuração de exportação para exportar as descobertas para uma instância do BigQuery. Você pode criar configurações de exportação no nível do projeto, da pasta ou da organização. Por exemplo, se você quiser exportar as descobertas de um projeto para um conjunto de dados do BigQuery, crie uma configuração de exportação para exportar somente as descobertas relacionadas a esse projeto. Também é possível especificar filtros para exportar somente determinadas descobertas.

Certifique-se de criar as configurações de exportação no nível apropriado. Por exemplo, se você criar uma configuração de exportação no Projeto B para exportar descobertas do Projeto A e definir filtros como resource.project_display_name: project-a-id, a configuração não exportará nenhuma descoberta.

É possível criar no máximo 500 configurações de exportação para o BigQuery na organização. Você pode usar o mesmo conjunto de dados para várias configurações de exportação. Se você usar o mesmo conjunto de dados, todas as atualizações serão feitas na mesma tabela de descobertas.

Quando você cria a primeira configuração de exportação, uma conta de serviço é criada automaticamente. Essa conta de serviço é necessária para criar ou atualizar a tabela de descobertas em um conjunto de dados e exportar as descobertas para a tabela. Ela tem o formato service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gservicaccount.com e recebe o papel de editor de dados do BigQuery (roles/bigquery.dataEditor) no nível do conjunto de dados do BigQuery.

gcloud

  1. Acesse o console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto para o qual você ativou a API Security Command Center.

  3. Clique em Ativar o Cloud Shell.

  4. Para criar uma nova configuração de exportação, execute este 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]
    

    Substitua:

    • BIG_QUERY_EXPORT por um nome para esta configuração de exportação.

    • DATASET_NAME pelo nome do conjunto de dados do BigQuery, por exemplo, projects/<PROJECT_ID>/datasets/<DATASET_ID>.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID pelo nome da pasta, organização ou projeto. Defina uma dessas opções. Para pastas e organizações, o nome é o ID da pasta ou o ID da organização. Para projetos, o nome é o número do projeto ou o ID do projeto.

    • LOCATION: se a residência de dados estiver ativada, especifique o local do Security Command Center em que a exportação do BigQuery será criada. A configuração de exportação do BigQuery é armazenada nesse local. Apenas as descobertas deste local são incluídas na exportação.

      Se a residência de dados não estiver ativada, especificar a sinalização --location criará a exportação do BigQuery usando a API Security Command Center v2 e o único valor válido para a sinalização será global.

    • DESCRIPTION por uma descrição legível da configuração de exportação. Essa variável é opcional.

    • FILTER por uma expressão que defina quais descobertas serão incluídas na exportação. Por exemplo, se você quiser filtrar a categoria XSS_SCRIPTING, digite "category=\"XSS_SCRIPTING\". Essa variável é opcional.

Java

Para autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.


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 autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.



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

Você verá as descobertas no seu conjunto de dados do BigQuery cerca de 15 minutos depois de criar a configuração de exportação. Após a criação da tabela do BigQuery, todas as descobertas novas e atualizadas que corresponderem ao filtro e escopo aparecerão quase em tempo real na tabela.

Para conferi-las, consulte Conferir descobertas.

Crie uma regra de entrada para a nova exportação para o BigQuery

Se você usar o VPC Service Controls e o conjunto de dados do BigQuery fizer parte de um projeto dentro de um perímetro de serviço, crie uma regra de entrada para uma nova exportação para o BigQuery.

  1. Abra novamente o perímetro de serviço em Configurar uma nova exportação para o BigQuery.

    Acessar o VPC Service Controls

  2. Clique em Política de entrada.

  3. Clique em Add Rule.

  4. Para definir a regra de entrada para as configurações de exportação, insira os seguintes parâmetros:

    • Atributos FROM do cliente da API:
      • No menu suspenso Origem, selecione Todas as origens.
      • No menu suspenso Identidades, escolha Identidades selecionadas.
      • Clique em Selecionar e insira o nome da conta de serviço de configuração do BigQuery Export: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • Atributos TO de serviços/recursos do GCP:
      • No menu suspenso Projeto, escolha Projetos selecionados.
      • Clique em Selecionar e escolha o projeto que contém o conjunto de dados do BigQuery.
      • No menu suspenso Serviços, escolha Serviços selecionados e, em seguida, API BigQuery.
      • No menu suspenso Métodos, escolha Todas as ações.
  5. No menu de navegação, clique em Salvar.

Os projetos, usuários e contas de serviço selecionados agora podem acessar os recursos protegidos e as descobertas de exportação.

Se você seguiu todas as etapas deste guia e as exportações estão funcionando corretamente, agora é possível excluir estes itens:

  • A regra de entrada do principal
  • A regra de saída para a principal

Essas regras só eram necessárias para definir a configuração de exportação. No entanto, para que as configurações de exportação continuem funcionando, é necessário manter a regra de entrada criada acima, que permite que o Security Command Center exporte descobertas para o conjunto de dados do BigQuery atrás do perímetro de serviço.

Ver os detalhes de uma configuração de exportação

gcloud

  1. Acesse o console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto para o qual você ativou a API Security Command Center.

  3. Clique em Ativar o Cloud Shell.

  4. Para verificar os detalhes da configuração de exportação, execute este comando:

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

    Substitua:

    • BIG_QUERY_EXPORT pelo nome desta configuração de exportação.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID pelo nome da pasta, organização ou projeto. Defina uma dessas opções. Para pastas e organizações, o nome é o ID da pasta ou o ID da organização. Para projetos, o nome é o número do projeto ou o ID do projeto.

    • LOCATION: obrigatório se a residência de dados estiver ativada ou se o recurso BigQueryExport tiver sido criado usando a API v2.

      Se a residência de dados estiver ativada, especifique o local do Security Command Center em que a exportação será armazenada.

      Se a residência de dados não estiver ativada, inclua /locations/LOCATION somente se o recurso BigQueryExport tiver sido criado usando a API Security Command Center v2. Nesse caso, o único local válido é global.

    Por exemplo, para receber uma configuração de exportação chamada my-bq-export de uma organização com um ID da organização definido como 123, execute:

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

Java

Para autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.


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 autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.

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

Atualizar uma configuração de exportação

Quando necessário, é possível modificar o filtro, o conjunto de dados e a descrição de uma configuração de exportação existente. Não é possível alterar o nome da configuração de exportação.

gcloud

  1. Acesse o console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto para o qual você ativou a API Security Command Center.

  3. Clique em Ativar o Cloud Shell.

  4. Para atualizar uma configuração de exportação, execute este 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]
    

    Substitua:

    • BIG_QUERY_EXPORT pelo nome da configuração de exportação que você quer atualizar.

    • DATASET_NAME pelo nome do conjunto de dados do BigQuery, por exemplo, projects/<PROJECT_ID>/datasets/<DATASET_ID>.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID pelo nome da pasta, organização ou projeto. Defina uma dessas opções. Para pastas e organizações, o nome é o ID da pasta ou o ID da organização. Para projetos, o nome é o número do projeto ou o ID do projeto.

    • LOCATION: obrigatório se a residência de dados estiver ativada ou se o recurso BigQueryExport tiver sido criado usando a API v2.

      Se a residência de dados estiver ativada, especifique o local do Security Command Center em que a exportação será armazenada.

      Se a residência de dados não estiver ativada, inclua /locations/LOCATION no nome completo ou especifique a sinalização --location somente se o recurso BigQueryExport tiver sido criado usando a API Security Command Center v2. Nesse caso, o único local válido é global.

    • DESCRIPTION por uma descrição legível da configuração de exportação. Essa variável é opcional.

    • FILTER por uma expressão que defina quais descobertas serão incluídas na exportação. Por exemplo, se você quiser filtrar a categoria XSS_SCRIPTING, digite "category=\"XSS_SCRIPTING\". Essa variável é opcional.

Java

Para autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.


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 autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.

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

Ver todas as configurações de exportação

Você pode ver todas as configurações de exportação na organização, na pasta ou no projeto.

gcloud

  1. Acesse o console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto para o qual você ativou a API Security Command Center.

  3. Clique em Ativar o Cloud Shell.

  4. Para listar as configurações de exportação, execute este comando:

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

    Substitua:

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID pelo nome da pasta, organização ou projeto. Defina uma dessas opções. Para pastas e organizações, o nome é o ID da pasta ou o ID da organização. Para projetos, o nome é o número do projeto ou o ID do projeto.

      Se você especificar um ID da organização, a lista incluirá todas as configurações de exportação definidas nessa organização, inclusive as de níveis da pasta e do projeto. Se você especificar um ID de pasta, a lista incluirá todas as configurações de exportação definidas no nível da pasta e nos projetos dentro dessa pasta. Se você especificar um número ou ID de projeto, a lista incluirá todas as configurações de exportação apenas para esse projeto.

    • LOCATION: obrigatório se a residência de dados estiver ativada ou se os recursos BigQueryExport tiverem sido criados usando a API v2.

      Se a residência de dados estiver ativada, especifique o local do Security Command Center em que as exportações são armazenadas.

      Se a residência de dados não estiver ativada, incluir a sinalização --location listará apenas os recursos BigQueryExport que foram criados usando a API Security Command Center v2 e o único local válido será global.

    • LIMIT pelo número de configurações de exportação que você quer ver. Essa variável é opcional.

    • PAGE_SIZE por um valor de tamanho de página. Essa variável é opcional.

Java

Para autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.


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 autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.

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)

Excluir uma configuração de exportação

Se você não precisar mais de uma configuração de exportação, será possível excluí-la.

gcloud

  1. Acesse o console do Google Cloud.

    Acesse o console do Google Cloud

  2. Selecione o projeto para o qual você ativou a API Security Command Center.

  3. Clique em Ativar o Cloud Shell.

  4. Para excluir uma configuração de exportação, execute este comando:

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

    Substitua:

    • BIG_QUERY_EXPORT pelo nome da configuração de exportação que você quer excluir.

    • FOLDER_ID, ORGANIZATION_ID ou PROJECT_ID pelo nome da pasta, organização ou projeto. Defina uma dessas opções. Para pastas e organizações, o nome é o ID da pasta ou o ID da organização. Para projetos, o nome é o número do projeto ou o ID do projeto.

    • LOCATION: obrigatório se a residência de dados estiver ativada ou se o recurso BigQueryExport tiver sido criado usando a API v2.

      Se a residência de dados estiver ativada, especifique o local do Security Command Center em que a exportação será armazenada.

      Se a residência de dados não estiver ativada, inclua /locations/LOCATION somente se o recurso BigQueryExport tiver sido criado usando a API Security Command Center v2. Nesse caso, o único local válido é global.

    Por exemplo, para excluir uma configuração de exportação chamada my-bq-export de uma organização com um ID da organização definido como 123, execute:

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

Java

Para autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.


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 autenticar o Security Command Center, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para um ambiente de desenvolvimento local.

O exemplo a seguir usa a API v1. Para modificar o exemplo para v2, substitua v1 por v2 e adicione /locations/LOCATION ao nome do recurso.

Para a maioria dos recursos, adicione /locations/LOCATION ao nome do recurso após /PARENT/PARENT_ID, em que PARENT é organizations, folders ou projects.

Para descobertas, adicione /locations/LOCATION ao nome do recurso depois de /sources/SOURCE_ID, em que SOURCE_ID é o ID do serviço do Security Command Center que emitiu a descoberta.

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

Após excluir a configuração de exportação, é possível remover os dados pelo Looker Studio. Para ver mais informações, consulte Remover, excluir e restaurar uma fonte de dados.

Analisar descobertas no BigQuery

Depois que você cria uma configuração de exportação, as novas descobertas são exportadas para o conjunto de dados do BigQuery no projeto especificado.

Para analisar as descobertas no BigQuery, faça o seguinte:

  1. Acesse o projeto no BigQuery.

    Ir para o BigQuery

  2. Se não estiver no projeto correto, siga estas etapas:

    1. Na barra de ferramentas, clique no seletor de projetos .
    2. Ao lado de Selecionar de, escolha a organização.
    3. Selecione um projeto na lista.
  3. No painel Explorer, expanda o nó do projeto.

  4. Expanda seu conjunto de dados.

  5. Clique na tabela findings.

  6. Na guia aberta, clique em Visualizar. Um conjunto de dados de amostra é exibido.

Consultas úteis

Nesta seção, você vai ver exemplos de consultas para analisar os dados das descobertas. Nos exemplos a seguir, substitua DATASET pelo nome atribuído ao conjunto de dados e PROJECT_ID pelo nome do projeto do conjunto de dados.

Para resolver qualquer erro, consulte Mensagens de erro.

O número de novas descobertas criadas e atualizadas diariamente

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

O registro mais recente de cada descoberta

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

Descobertas atuais que estão ativas, ordenadas por tempo

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

Descobertas atuais em um projeto

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'

Substitua PROJECT pelo nome do projeto.

Descobertas atuais em uma pasta

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'

Substitua FOLDER pelo nome da pasta.

Descobertas atuais do scanner 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"

Descobertas ativas atuais do 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"

Correlacionar descobertas ativas de um determinado tipo com os Registros de auditoria do Cloud

Este exemplo de consulta ajuda a investigar descobertas de concessão de IAM anômalas da detecção de ameaças de eventos usando os registros de auditoria do Cloud exibindo a sequência de ações de atividade do administrador no período durante a janela que precede e sucede a ação de concessão de IAM anômala. A consulta a seguir correlaciona os registros de atividade do administrador entre 1 hora antes e 1 hora depois do carimbo de data/hora da descoberta.

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

O resultado será assim:

Captura de tela dos resultados da consulta mostrando descobertas com registros de auditoria correlacionados

Criar gráficos no Looker Studio

O Looker Studio permite criar relatórios e painéis interativos.

Em geral, são cobrados os custos de uso do BigQuery ao acessar o BigQuery pelo Looker Studio. Saiba mais em Como visualizar dados do BigQuery com o Looker Studio.

Para criar um gráfico que visualize os dados de descobertas por gravidade e categoria, faça o seguinte:

  1. Abra o Looker Studio e faça login.
  2. Se solicitado, forneça informações adicionais e configure outras preferências. Leia os Termos de Serviço e, se você concordar, prossiga.
  3. Clique em Relatório em branco.
  4. Na guia Conectar aos dados, clique no cartão do BigQuery.
  5. Se necessário, autorize o Looker Studio a acessar os projetos do BigQuery.
  6. Conecte-se aos dados de descoberta:
    1. Em Projeto, selecione o projeto para o conjunto de dados. Ou, na guia Meus projetos, insira o ID do projeto para pesquisá-lo.
    2. Em Conjunto de dados, clique no nome do conjunto de dados.
    3. Em Tabela, clique em findings.
    4. Clique em Adicionar.
    5. Na caixa de diálogo, clique em Adicionar ao relatório.
  7. Após adicionar o relatório, clique em Adicionar um gráfico.
  8. Clique em Gráfico de colunas empilhadas e depois na área em que você quer colocar o gráfico.

    Captura de tela da seleção do gráfico

  9. No painel Gráfico > Barra, na guia Dados, defina os seguintes campos:

    1. No campo Dimensão, selecione finding.severity.
    2. No campo Dimensão de detalhamento, selecione finding.category.
    Captura de tela de um gráfico de descobertas categorizadas por gravidade e
          subcategorizadas por categoria

O relatório é atualizado para mostrar várias colunas com descobertas divididas por gravidade e categoria.

A seguir

Saiba como executar uma consulta no BigQuery.