Cenários de exportação de dados de registro: análise de segurança e acesso

Neste documento, mostramos como exportar registros do Cloud Logging para destinos como o BigQuery, o Chronicle ou um SIEM de terceiros para atender à segurança. e requisitos de análise do ambiente de infraestrutura em nuvem da sua organização. As ferramentas de análise de segurança geralmente são usadas pelas organizações para evitar, detectar e responder a ameaças como malware, phishing, ransomware e possíveis configurações incorretas de recursos. Para ajudar você a atender a esses requisitos de segurança e análise, este documento primeiro apresenta a variedade de registros relevantes para a segurança no seu ambiente do Google Cloud, desde os registros do aplicativo até os registros da plataforma, além dos registros de auditoria, como registros de atividades do administrador e Registros de acesso a dados.

Usando a ferramenta de escopo de registros, primeiro você pode avaliar esses tipos de registro relevantes para a segurança em termos de visibilidade e cobertura de detecção de ameaças que eles fornecem. A ferramenta ajuda você a mapear táticas e técnicas de ameaça do conhecido modelo de ameaça MITRE ATT&CK® para os tipos de registro específicos do Google Cloud que ajudariam você a investigar essas situações ameaças. Da mesma forma, ele mapeia os módulos de Detecção de ameaças ao evento do Security Command Center para as fontes de registro do Google Cloud correspondentes em que dependem.

Nesse cenário, os registros exportados são entregues a um conjunto de dados no BigQueryBigQuery que você configura como parte da exportação, além do filtro de registro definido pelo usuário. Conceda permissões para limitar o acesso aos registros conforme apropriado. Simplifique o gerenciamento e a consulta dos dados organizando os dados exportados em tabelas particionadas por data. Essa abordagem pode ajudar a reduzir os custos das consultas, reduzindo a quantidade de dados que são verificados como parte delas. Um benefício do particionamento é poder definir uma data de expiração para as partições para manter os dados de registros apenas enquanto forem úteis. Por exemplo, você pode manter dados de registros de auditoria por três anos e depois excluí-los.

Esse cenário faz parte da série Padrões de design para exportar o Cloud Logging.

Avaliar quais registros exportar

Ferramenta de escopo de registros

A seguinte ferramenta interativa de escopo de registro lista registros valiosos relevantes à segurança no Google Cloud, incluindo registros de auditoria do Cloud, registros de transparência no acesso e vários registros de plataforma. Para ajudar a avaliar quais registros serão exportados e analisados para atender às suas próprias necessidades de segurança e conformidade, essa ferramenta mapeia cada tipo de registro conforme correspondente:

Selecione os tipos de registro desejados para gerar automaticamente um filtro de registro adequado para ser usado na seção Configurar a exportação de registros.

Grave o filtro de registros

No Cloud Shell, crie uma variável para salvar o filtro de registros gerado automaticamente. Você também pode refiná-la ainda mais, dependendo das suas necessidades. Por exemplo, é possível filtrar (ou excluir) recursos somente em um ou mais projetos específicos.

export LOG_FILTER='log-filter'

Configurar a exportação de registros

No diagrama a seguir, veja as etapas para ativar a exportação de registros para o BigQuery.

  • Configure o conjunto de dados de exportação de registros no BigQuery.
  • Ative a geração de registros de auditoria para todos os serviços do Google Cloud.
  • Ative os registros da plataforma para serviços específicos do Google Cloud.
  • Configure a exportação de registros
  • Defina permissões de política de IAM para o conjunto de dados do BigQuery

Como ativar a exportação de registros para o BigQuery

Configurar o conjunto de dados no BigQuery

Siga as instruções para configurar um conjunto de dados que hospedará os registros exportados. Se você estiver usando registros agregados, o conjunto de dados do BigQuery deverá estar localizado em um dos projetos do Google Cloud da sua organização. Quando você usa exportações de registros para um único projeto, o conjunto de dados do BigQuery precisa estar no mesmo projeto.

Prática recomendada: ao criar a tabela, defina uma validade de partição para limitar o tamanho do armazenamento da exportação da geração de registros e os custos acumulados de armazenamento ao longo do tempo.

Ativar a geração de registros de auditoria para todos os serviços

Os registros de auditoria do acesso a dados (exceto BigQuery) são desativados por padrão. Para ativar todos os registros de auditoria, siga as instruções para atualizar a política de IAM com a configuração listada na documentação da política de auditoria. Estas são as etapas:

  • Download da política de IAM atual como um arquivo
  • inclusão do objeto JSON ou YAML da política de registros de auditoria no arquivo de política atual
  • atualização do projeto com o arquivo de política atualizado

A seguir, veja um exemplo de objeto JSON usado para ativar todos os registros de auditoria de todos os serviços.

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" },
        ]
    },
]

Ativar registros de plataforma específicos do serviço

Os registros de plataforma precisam ser ativados serviço a serviço, geralmente no nível do recurso. Por exemplo, os registros do Cloud DNS são ativados no nível da rede VPC, os registros de fluxo da VPC são ativados no nível da sub-rede para todas as VMs na sub-rede e os registros das regras de firewall são ativados no nível da regra de firewall individual. Para ver detalhes sobre como ativar um tipo de registro específico, consulte Ferramenta de escopo de registro e clique no link Ativar em cada linha.

Configurar a exportação de registros

Na ferramenta de linha de comando gcloud, use o comando gcloud logging sinks create ou a chamada de API organizations.sinks.create para criar um coletor com os filtros apropriados. O exemplo de comando gcloud a seguir cria um coletor denominado gcp_logging_sink_bq22 para a organização. O coletor inclui todos os projetos filhos e especifica o filtro de registro salvo na variável $LOG_FILTER criada acima.

gcloud logging sinks create gcp_logging_sink_bq22 \
     bigquery.googleapis.com/projects/compliance-logging-export/datasets/gcp_logging_export \
     --log-filter='$LOG_FILTER' \
     --include-children \
     --organization=324989855333

A resposta ao comando será semelhante à seguinte:

Created [https://logging.googleapis.com/v2/organizations/324989855333/sinks/gcp_logging_sink_bq].
Please remember to grant `serviceAccount:gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com` the WRITER role on the dataset..
More information about sinks can be found at /logging/docs/export/configure_export

Na entrada serviceAccount retornada da chamada de API, a identidade gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com é incluída na resposta. Essa identidade representa uma conta de serviço do Google Cloud criada para a exportação. Até que você conceda a essa identidade o acesso de gravação ao destino, as exportações de entradas de registro desse coletor falharão. Para mais informações, consulte a próxima seção ou as permissões necessárias para um conjunto de dados do BigQuery.

Definir permissões de política de IAM para o conjunto de dados do BigQuery

Ao adicionar a conta de serviço gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com ao conjunto de dados gcp_logging_export com as permissões de editor, você concede à conta de serviço permissão para gravar no destino. Até você adicionar essas permissões, a exportação do coletor falhará.

Para adicionar as permissões à conta de serviço, siga estas etapas:

  1. No Console do Cloud, acesse o BigQuery:

    Acessar o BigQuery

  2. Ao lado do conjunto de dados gcp_logging_export, clique em e em Compartilhar conjunto de dados.

  3. No campo Adicionar pessoas, digite a conta de serviço.

    Permissões da política de IAM: editor

Depois de criar a exportação de registros usando esse filtro, os arquivos de registro começam a ocupar o conjunto de dados do BigQuery no projeto configurado.

Prática recomendada: implemente uma política com o mínimo de permissões necessárias. Você configura as permissões do conjunto de dados com base em contas de usuário, Grupos do Google ou contas de serviço específicas do Google Cloud. Use as permissões de IAM para conceder acesso ao conjunto de dados do BigQuery.

Para um conjunto de permissões de exemplo, execute as instruções a seguir:

  • Remova todos os usuários não essenciais das permissões do conjunto de dados do BigQuery.
  • Inclua controle total ao administrador do BigQuery.
  • Conceda ao usuário de exportação as permissões para gravar os registros de exportação.
  • Conceda a outros usuários individuais acesso para ver as exportações de registros do Google Cloud.

É possível atualizar as permissões de IAM para o conjunto de dados diretamente no Console do Cloud, por meio do utilitário de linha de comando gsutil ou por meio da API IAM.

Como usar os registros exportados

Quando você exporta registros para um conjunto de dados do BigQuery, o Cloud Logging cria tabelas datadas para manter as entradas. As entradas de registros são colocadas em tabelas com nomes baseados nos nomes de registros das entradas.

Tabelas datadas.

A lista de tabelas é exibida com o sufixo YYYYMMDD, como exibido no exemplo a seguir.

Lista de tabelas.

Como os registros exportados são de auditoria, os registros "Atividade do administrador" e "Acesso a dados" são carregados no BigQuery usando o formato protoPayload.

Como conceder acesso externo

Talvez seja conveniente conceder acesso a registros exportados, a usuários específicos, por exemplo, analistas de segurança, equipe de DevOps e auditores. No BigQuery, há várias opções para conceder acesso seguro aos registros.

Estratégias de local de registros

Há várias opções para selecionar quais registros devem estar disponíveis aos usuários no BigQuery.

  • Criar cópias dos registros a compartilhar.

    Use um método manual ou programático, crie uma cópia de uma tabela de registros individual ou um conjunto de tabelas de registros e coloque as cópias em um conjunto de dados distinto do BigQuery. Em seguida, use as permissões apropriadas do conjunto de dados do BigQuery para compartilhar registros com usuários específicos, conforme apropriado.

    Vantagens: é possível limitar a quantidade de dados expostos apenas aos dados copiados.

    Desvantagens: é preciso criar, compartilhar e gerenciar conjuntos de dados e permissões separados, o que pode aumentar os custos.

  • Conceder acesso somente de leitura a todos os registros.

    Use um método manual ou programático, defina permissões de leitor às tabelas de exportação de registros do BigQuery. Com isso, é concedido acesso a todas as exportações de registros.

    Vantagens: é fácil conceder o acesso.

    Desvantagens: conceda acesso a todos os registros em vez de arquivos de registro específicos.

Estratégias de controle de acesso de usuário

Há várias opções para conceder acesso aos registros no BigQuery.

  • Usar um Grupo do Google.

    Crie um Grupo do Google, como auditors@example.com, com acesso somente leitura ao conjunto de dados do BigQuery de exportação de registros. Em seguida, gerencie a lista de Contas do Google incluindo ou removendo auditores no Grupo do Google.

    Vantagens: é fácil gerenciar o acesso por meio de um grupo, porque há um objetivo claro de acesso de usuário.

    Desvantagens: não é possível dizer quem tem acesso sem olhar para a associação do grupo.

  • Usar contas do Google individuais.

    Conceda acesso de Conta do Google individual ao conjunto de dados do BigQuery de exportação de registros para cada usuário que precisar.

    Vantagens: é fácil adicionar cada usuário de modo manual ou programático.

    Desvantagens: não é possível discernir usuários de auditoria de outros visualizadores.

Exemplos de perguntas e consultas

É possível executar várias consultas nos registros de auditoria. Essas consultas realizam análises para entender quem está acessando dados no Google Cloud ou como os escalonadores automáticos operam ao longo do tempo.

Quais usuários acessaram os dados com mais frequência na última semana?

A consulta a seguir usa os registros de auditoria do Cloud "Acesso a dados" para localizar a conta de usuário que aparece com mais frequência nesses registros.

SELECT
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNT(*) AS COUNTER
FROM
(TABLE_DATE_RANGE(
Logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  protopayload_auditlog.methodName = "jobservice.query"
GROUP BY
   protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNTER desc
LIMIT
  1000

Quais usuários acessaram os dados na tabela "accounts" no mês passado?

A consulta a seguir usa os registros de auditoria do Cloud "Acesso a dados" para localizar a conta de usuário que consultou com mais frequência a tabela "accounts". Substitua your-project-id pelo ID do projeto.

SELECT
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNT(*) AS COUNTER
FROM
(TABLE_DATE_RANGE(logging_export.cloudaudit_googleapis_com_data_access_,DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),CURRENT_TIMESTAMP()))
WHERE
  protopayload_auditlog.methodName = "jobservice.query" AND
  protopayload_auditlog.authorizationInfo.permission = "bigquery.tables.getData"
AND
  protopayload_auditlog.authorizationInfo.resource = "projects/your-project-id/datasets/bqtesting/tables/accounts"
GROUP BY
   protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
   protopayload_auditlog.authenticationInfo.principalEmail,
   COUNTER desc
LIMIT
  1000

Quais usuários excluíram máquinas virtuais na última semana?

A consulta a seguir usa os registros de auditoria "Atividade do administrador" do Cloud para localizar as contas de usuário que excluíram máquinas virtuais na última semana.

SELECT
  timestamp,
  resource.labels.instance_id,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.resourceName,
  protopayload_auditlog.methodName
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance"
  AND operation.first IS TRUE
  AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
ORDER BY
  timestamp,
  resource.labels.instance_id
LIMIT
  1000

A consulta a seguir é de acompanhamento e resume a conta por contagem simples.

SELECT
  protopayload_auditlog.authenticationInfo.principalEmail,
  count(*) as counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance"
  AND operation.first IS TRUE
  AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
GROUP BY
  protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
  protopayload_auditlog.authenticationInfo.principalEmail,
  counter
LIMIT
  1000

A consulta a seguir usa os registros de auditoria "Atividade do administrador" do Cloud para descobrir com que frequência o escalonamento automático foi empregado no último mês.

SELECT
  protopayload_auditlog.methodName,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance_group_manager"
GROUP BY
  protopayload_auditlog.methodName,
ORDER BY
  protopayload_auditlog.methodName
LIMIT
  1000

Usando a consulta a seguir, visualize a tendência das operações do gerenciador de instâncias do Compute Engine ao longo do tempo.

SELECT
  timestamp,
  protopayload_auditlog.methodName AS methodName,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_activity_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  resource.type = "gce_instance_group_manager"
GROUP BY
  timestamp,
  methodName
ORDER BY
  timestamp,
  methodName

Use a consulta anterior como uma consulta personalizada de fonte de dados no Google Data Studio para ver a tendência ao longo do tempo, como é exibido no gráfico a seguir.

Visualização do Data Studio

Consulte consultas personalizadas do Data Studio para mais informações.

Quais conjuntos de dados são acessados com mais frequência e por quem?

A consulta a seguir usa os registros de auditoria "Acesso a dados" do Cloud para encontrar os conjuntos de dados do BigQuery que são acessados com mais frequência e exibe a conta de usuário associada junto com a contagem.

SELECT
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
WHERE
  protopayload_auditlog.authorizationInfo.permission = "bigquery.tables.getData"
GROUP BY
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail
ORDER BY
  protopayload_auditlog.authorizationInfo.resource,
  protopayload_auditlog.authenticationInfo.principalEmail,
  counter DESC
LIMIT
  1000

Quais foram as 10 principais consultas do BigQuery na semana passada?

A consulta a seguir usa os registros de auditoria "Acesso a dados" do Cloud para localizar as consultas mais comuns.

SELECT
  protopayload_auditlog.servicedata_v1_bigquery.jobQueryRequest.query,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
Logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-7,'DAY'),
CURRENT_TIMESTAMP()))
WHERE
  protopayload_auditlog.methodName = "jobservice.query"
GROUP BY
  protopayload_auditlog.servicedata_v1_bigquery.jobQueryRequest.query
ORDER BY
  counter DESC
LIMIT
  1000

Quais são as ações mais comuns gravadas no registro de acesso a dados nos últimos 30 dias?

A consulta a seguir usa os registros de auditoria "Acesso a dados" do Cloud para encontrar as ações mais comuns gravadas nos últimos 30 dias.

SELECT
  protopayload_auditlog.methodName,
  resource.type,
  COUNT(*) AS counter
FROM
(TABLE_DATE_RANGE(
logging_export.cloudaudit_googleapis_com_data_access_,
DATE_ADD(CURRENT_TIMESTAMP(),-30,'DAY'),
CURRENT_TIMESTAMP())
)
GROUP BY
  protopayload_auditlog.methodName,
  resource.type
ORDER BY
  COUNTER DESC
LIMIT
  1000

A seguir