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

Neste cenário, mostramos como exportar registros do Cloud Logging para o BigQuery para atender aos requisitos de segurança e análise do ambiente de infraestrutura em nuvem da sua organização. As ferramentas analíticas são usadas pelas organizações para facilitar a identificação de alterações não autorizadas em configurações e o acesso inadequado a dados. Para ajudar você a atender a esses requisitos de segurança e análise, o Cloud Logging pode capturar dois tipos de registros de auditoria: os de atividades do administrador e os de acesso a dados.

Nesse cenário, os registros exportados são entregues a um conjunto de dados no BigQuery que você configura como parte da exportação. 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, é possível manter dados de geração 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.

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.
  • 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 de 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 do 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" },
        ]
    },
]

Configurar a exportação de registros

Depois de configurar as exportações agregadas ou a exportação de registros, você precisa refinar os filtros de geração de registros para exportar os registros de auditoria. O filtro de geração de registros a seguir inclui os registros de auditoria de Atividade do administrador e Acesso a dados, além dos registros de tipos de recurso específicos.

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=cloudsql_database OR
resource.type=bigquery_resource

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_gcs para a organização. Esse coletor inclui todos os projetos filhos e especifica a filtragem para selecionar registros de auditoria individuais.

gcloud logging sinks create gcp_logging_sink_bq22 \
     bigquery.googleapis.com/projects/compliance-logging-export/datasets/gcp_logging_export \
     --log-filter='logName:"/logs/cloudaudit.googleapis.com"' \
     --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

Para saber mais informações, consulte Consultas personalizadas do Data Studio.

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