Geração de registros de auditoria do Firebase Realtime Database

Este documento descreve o registro de auditoria do Firebase Realtime Database. Os serviços do Google Cloud geram registros de auditoria que registram atividades administrativas e de acesso nos recursos do Google Cloud. Para mais informações sobre os Registros de auditoria do Cloud, consulte:

Observações

Outras informações sobre os campos em protoPayload.metadata para operações DATA_READ e DATA_WRITE estão disponíveis na documentação de referência.

Nome do serviço

Os registros de auditoria do Firebase Realtime Database usam o nome de serviço firebasedatabase.googleapis.com. Filtrar por este serviço:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

Métodos por tipo de permissão

Cada permissão do IAM tem uma propriedade type, que tem o valor de um tipo enumerado que pode ser um dos quatro valores: ADMIN_READ, ADMIN_WRITE, DATA_READ ou DATA_WRITE. Quando você chama um método, o Firebase Realtime Database gera um registro de auditoria com categoria dependente da propriedade type da permissão necessária para executar o método. Métodos que exigem uma permissão do IAM com o valor da propriedade type de DATA_READ, DATA_WRITE ou ADMIN_READ geram registros de auditoria de acesso aos dados. Métodos que exigem uma permissão do IAM com o valor da propriedade type de ADMIN_WRITE geram registros de auditoria de Atividade do administrador.

Tipo de permissão Métodos
ADMIN_READ google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
ADMIN_WRITE google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
DATA_READ google.firebase.database.v1.RealtimeDatabase.Connect
google.firebase.database.v1.RealtimeDatabase.Disconnect
google.firebase.database.v1.RealtimeDatabase.Listen
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
google.firebase.database.v1.RealtimeDatabase.Read
google.firebase.database.v1.RealtimeDatabase.Unlisten
DATA_WRITE google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
google.firebase.database.v1.RealtimeDatabase.Update
google.firebase.database.v1.RealtimeDatabase.Write

Registros de auditoria da interface da API

Para saber como e quais permissões são avaliadas para cada método, consulte a documentação do Cloud Identity and Access Management para o Firebase Realtime Database.

google.firebase.database.v1.RealtimeDatabase

Os registros de auditoria a seguir estão associados a métodos que pertencem a google.firebase.database.v1.RealtimeDatabase.

Connect

  • Método: google.firebase.database.v1.RealtimeDatabase.Connect
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.connect - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Método: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.connect - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Método: google.firebase.database.v1.RealtimeDatabase.Listen
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.get - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.cancel - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.update - DATA_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Método: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.update - DATA_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Método: google.firebase.database.v1.RealtimeDatabase.Read
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.get - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Método: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.update - DATA_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Método: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.cancel - DATA_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Método: google.firebase.database.v1.RealtimeDatabase.Update
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Método: google.firebase.database.v1.RealtimeDatabase.Write
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.data.update - DATA_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

Os registros de auditoria a seguir estão associados a métodos que pertencem a google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Tipo de registro de auditoria: atividade do administrador
  • Permissões:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • Tipo de registro de auditoria: atividade do administrador
  • Permissões:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • Tipo de registro de auditoria: atividade do administrador
  • Permissões:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.instances.get - ADMIN_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Tipo de registro de auditoria: acesso a dados
  • Permissões:
    • firebasedatabase.instances.list - ADMIN_READ
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • Tipo de registro de auditoria: atividade do administrador
  • Permissões:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Método: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • Tipo de registro de auditoria: atividade do administrador
  • Permissões:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • O método é uma operação de streaming ou de longa duração: No
  • Filtrar para este método: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Informações de autenticação da auditoria

As entradas de registro de auditoria incluem informações sobre a identidade que executou a operação registrada. Para identificar um autor da chamada da solicitação, consulte os campos a seguir no objeto AuditLog:

  • Como estabelecer conexões em tempo real. As operações Connect do Realtime Database não registram dados de autenticação, já que o Realtime Database faz a autenticação depois que uma conexão é estabelecida. Assim, Connect não tem informações de autenticação. O objeto AuthenticationInfo contém um marcador de posição principalEmail de audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Autenticação do Google. As operações do Realtime Database que usam a autenticação padrão do Google, como o tráfego do Firebase Admin SDK ou solicitações REST autenticadas com um token OAuth padrão, têm um objeto AuthenticationInfo que contém o e-mail das credenciais.

  • Firebase Authentication. As operações do Realtime Database que usam o Firebase Authentication têm um objeto AuthenticationInfo que contém um valor principalEmail de audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. O mesmo acontece quando você cria JWTs personalizados para implementar sua própria solução de autenticação.

    • Se um JSON Web Token (JWT, na sigla em inglês) for usado para a autenticação de terceiros, o campo thirdPartyPrincipal vai conter o cabeçalho e o payload do token. Por exemplo, os registros de auditoria para solicitações autenticadas com o Firebase Authentication incluem o token da solicitação do Firebase Authentication.
  • Sem autenticação. As operações do Realtime Database sem autenticação têm um objeto AuthenticationInfo que contém um valor principalEmail de audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Uma instância do Realtime Database com regras de segurança abertas pode conceder essas solicitações. Recomendamos que todos os usuários protejam os bancos de dados corretamente.

  • Tokens de secrets legados. As operações do Realtime Database que usam tokens legados têm um objeto AuthenticationInfo que contém um marcador de posição principalEmail de audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Para o JWT assinado por secrets, thirdPartyPrincipal contém os cabeçalhos e o payload do JWT.

Avaliações das Firebase Security Rules de auditoria

Os registros de auditoria do Cloud podem ser usados para identificar solicitações possivelmente afetadas por alterações nas Rules.

No objeto AuthorizationInfo, authorization.permission pode ser uma das seguintes opções:

  • firebasedatabase.data.get: acesso de leitura concedido no caminho especificado em resource.
  • firebasedatabase.data.update: acesso de gravação concedido no caminho especificado em resource.
  • firebasedatabase.data.connect: marcador de posição para Connect e Disconnect. Não é necessária autorização para se conectar a uma instância do Realtime Database.
  • firebasedatabase.data.cancel: usado para Unlisten e OnDisconnectCancel. A revogação ou o cancelamento de uma operação autorizada anteriormente não exige outras autorizações.

Associar os registros de auditoria do Cloud aos resultados do criador de perfil do Realtime Database

É possível fazer análises detalhadas de desempenho no Realtime Database usando o criador de perfil do Realtime Database junto com a geração de registros de auditoria do Realtime Database. Cada ferramenta tem seus pontos positivos.

Cloud Audit Logging Criador de perfil Realtime Database
  • Audita o acesso aos bancos de dados
  • Captura de forma contínua todas as solicitações
  • Permite consultas retrospectivas
  • Contém informações detalhadas do token de autenticação
  • Gera um custo de uso
  • É usado para analisar o desempenho
  • Oferece ferramentas úteis para identificar pontos de acesso e otimizar o desempenho
  • Mede o listener-broadcast, indisponível nos registros de auditoria devido ao possível volume de dados
  • É um recurso leve, ideal para testes de carga em tempo real. As entradas de registro de auditoria podem levar alguns minutos para aparecer.

O conteúdo do registro de auditoria corresponde às métricas do criador de perfil, conforme mostrado abaixo.

Nome da operação do registro de auditoria Valores especiais em
RealtimeDatabaseAuditMetadata
Nome da operação do criador de perfil
Conectar RequestType é REALTIME concurrent-connect
Desconectar RequestType é REALTIME concurrent-disconnect
Ler RequestType é REALTIME realtime-read
Ler RequestType é REST rest-read
Gravação RequestType é REALTIME realtime-write
Gravação RequestType é REST rest-write
Atualizar RequestType é REALTIME.
Verificar PreconditionType.
realtime-update
realtime-transaction
Atualizar RequestType é REST.
Verificar PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType é REALTIME listener-listen
ListenerUnlisten RequestType é REALTIME listener-unlisten
OnDisconnectPut RequestType é REALTIME on-disconnect-put
OnDisconnectUpdate RequestType é REALTIME on-disconnect-update
OnDisconnectCancel RequestType é REALTIME on-disconnect-cancel
RunOnDisconnect RequestType é REALTIME run-on-disconnect