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:
- Tipos de registros de auditoria
- Estrutura da entrada de registro de auditoria
- Como armazenar e rotear registros de auditoria
- Resumo dos preços do Cloud Logging
- Ativar registros de auditoria de acesso a dados
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 objetoAuthenticationInfo
contém um marcador de posiçãoprincipalEmail
deaudit-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 valorprincipalEmail
deaudit-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.
- Se um JSON Web Token (JWT, na sigla em inglês) for usado para a autenticação de terceiros, o
campo
Sem autenticação. As operações do Realtime Database sem autenticação têm um objeto
AuthenticationInfo
que contém um valorprincipalEmail
deaudit-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çãoprincipalEmail
deaudit-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 emresource
.firebasedatabase.data.update
: acesso de gravação concedido no caminho especificado emresource
.firebasedatabase.data.connect
: marcador de posição paraConnect
eDisconnect
. Não é necessária autorização para se conectar a uma instância do Realtime Database.firebasedatabase.data.cancel
: usado paraUnlisten
eOnDisconnectCancel
. 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 |
---|---|
|
|
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 emRealtimeDatabaseAuditMetadata |
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 |