이 문서에서는 Firebase 실시간 데이터베이스의 감사 로깅을 설명합니다. Google Cloud 서비스는 Google Cloud 리소스 내의 관리 및 액세스 활동을 기록하는 감사 로그를 생성합니다. Cloud 감사 로그에 대한 자세한 내용은 다음을 참조하세요.
참고
DATA_READ
및 DATA_WRITE
작업의 protoPayload.metadata
필드에 대한 추가 정보는 참고 문서에서 확인할 수 있습니다.
서비스 이름
Firebase 실시간 데이터베이스 감사 로그에서는 서비스 이름으로 firebasedatabase.googleapis.com
을 사용합니다.
이 서비스에 대한 필터:
protoPayload.serviceName="firebasedatabase.googleapis.com"
권한 유형별 메서드
각 IAM 권한에는 type
속성이 포함되며 그 값은 네 가지 값(ADMIN_READ
, ADMIN_WRITE
, DATA_READ
, DATA_WRITE
) 중 하나일 수 있는 열거형입니다. 메서드를 호출하면 Firebase 실시간 데이터베이스에서 메서드를 실행하는 데 필요한 권한의 type
속성에 따라 범주가 달라지는 감사 로그를 생성합니다.
DATA_READ
, DATA_WRITE
, ADMIN_READ
의 type
속성 값을 가진 IAM 권한이 필요한 메서드는 데이터 액세스 감사 로그를 생성합니다.
type
속성 값이 ADMIN_WRITE
인 IAM 권한이 필요한 메서드는 관리자 활동 감사 로그를 생성합니다.
권한 유형 | 메서드 |
---|---|
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 |
API 인터페이스 감사 로그
메서드별 평가 방법과 평가 대상 권한에 대한 자세한 내용은 Firebase 실시간 데이터베이스의 Cloud Identity and Access Management 문서를 참고하세요.
google.firebase.database.v1.RealtimeDatabase
다음 감사 로그는 google.firebase.database.v1.RealtimeDatabase
에 속하는 메서드와 연결되어 있습니다.
Connect
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Connect
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.connect - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Disconnect
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.connect - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Listen
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.get - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- 메서드:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.cancel - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- 메서드:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.update - DATA_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- 메서드:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.update - DATA_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Read
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.get - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- 메서드:
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.update - DATA_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Unlisten
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.cancel - DATA_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"
Update
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Update
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.get - DATA_WRITE
firebasedatabase.data.update - DATA_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- 메서드:
google.firebase.database.v1.RealtimeDatabase.Write
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.data.update - DATA_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
다음 감사 로그는 google.firebase.database.v1beta.RealtimeDatabaseService
에 속하는 메서드와 연결되어 있습니다.
CreateDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
- 감사 로그 유형: 관리자 활동
- 권한:
firebasedatabase.instances.create - ADMIN_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
- 감사 로그 유형: 관리자 활동
- 권한:
firebasedatabase.instances.delete - ADMIN_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
- 감사 로그 유형: 관리자 활동
- 권한:
firebasedatabase.instances.disable - ADMIN_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.instances.get - ADMIN_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
- 감사 로그 유형: 데이터 액세스
- 권한:
firebasedatabase.instances.list - ADMIN_READ
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
- 감사 로그 유형: 관리자 활동
- 권한:
firebasedatabase.instances.reenable - ADMIN_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- 메서드:
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
- 감사 로그 유형: 관리자 활동
- 권한:
firebasedatabase.instances.undelete - ADMIN_WRITE
- 메서드가 장기 실행 또는 스트리밍 작업인지 여부: 아니요.
- 이 메서드에 대한 필터::
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
인증 정보 감사
감사 로그 항목에는 로깅 작업을 수행한 ID에 대한 정보가 포함됩니다. 요청 호출자를 식별하려면 AuditLog 객체 내에서 다음 필드를 참조하세요.
실시간 연결 설정. Realtime Database
Connect
작업은 연결이 설정된 후 Realtime Database가 인증되기 때문에 인증 데이터를 로깅하지 않습니다. 따라서Connect
에 인증 정보가 포함되지 않습니다.AuthenticationInfo
객체에는audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
의 자리표시자principalEmail
이 포함됩니다.Google 인증. Firebase Admin SDK의 트래픽 또는 표준 OAuth 토큰으로 인증된 REST 요청의 트래픽과 같은 표준 Google 인증을 사용하는 Realtime Database 작업에는 실제 사용자 인증 정보 이메일이 포함된
AuthenticationInfo
객체가 있습니다.Firebase Authentication. Firebase Authentication을 사용하는 Realtime Database 작업에는
audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
의principalEmail
값이 포함된AuthenticationInfo
객체가 있습니다. 커스텀 JWT를 민팅하여 자체 인증 솔루션을 구현하는 경우에도 마찬가지입니다.- JSON 웹 토큰(JWT)이 서드 파티 인증에 사용된 경우
thirdPartyPrincipal
필드에는 토큰의 헤더와 페이로드가 포함됩니다. 예를 들어 Firebase Authentication으로 인증된 요청의 감사 로그에는 해당 요청의 Firebase Authentication 토큰이 포함됩니다.
- JSON 웹 토큰(JWT)이 서드 파티 인증에 사용된 경우
인증 없음. 인증을 사용하지 않는 Realtime Database 작업에는
audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
의principalEmail
값이 포함된AuthenticationInfo
객체가 있습니다. 개방형 보안 규칙이 있는 Realtime Database 인스턴스는 이러한 요청을 허용할 수 있습니다. 모든 사용자가 자신의 데이터베이스를 적절하게 보호하는 것이 좋습니다.기존 보안 비밀 토큰. 기존 토큰을 사용하는 Realtime Database 작업에는
audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
의principalEmail
자리표시자가 포함된AuthenticationInfo
객체가 있습니다. 보안 비밀로 서명된 JWT의 경우thirdPartyPrincipal
에 JWT 헤더 및 페이로드가 포함됩니다.
Firebase Security Rules 평가 감사
Cloud 감사 로그를 사용하여 Rules 변경의 영향을 받을 수 있는 요청을 식별할 수 있습니다.
AuthorizationInfo 객체에서 authorization.permission
은 다음 중 하나일 수 있습니다.
firebasedatabase.data.get
:resource
에 지정된 경로에 부여된 읽기 액세스 권한입니다.firebasedatabase.data.update
:resource
에 지정된 경로에 부여된 쓰기 액세스 권한입니다.firebasedatabase.data.connect
:Connect
및Disconnect
의 자리표시자입니다. Realtime Database 인스턴스에 연결하는 데 승인이 필요하지 않습니다.firebasedatabase.data.cancel
:Unlisten
및OnDisconnectCancel
에 사용됩니다. 이전에 승인된 작업을 취소할 때 추가 승인이 필요하지 않습니다.
Cloud 감사 로그와 Realtime Database 프로파일러 결과의 상관 관계 분석
Realtime Database 감사 로깅과 함께 Realtime Database 프로파일러를 사용하여 Realtime Database에서 심층 성능 분석을 수행할 수 있습니다. 각 도구마다 고유한 장점이 있습니다.
Cloud 감사 로깅 | Realtime Database 프로파일러 |
---|---|
|
|
감사 로그 콘텐츠는 아래에 표시된 프로파일러 측정항목에 해당합니다.
감사 로깅 작업 이름 | RealtimeDatabaseAuditMetadata 의 특수 값 |
프로파일러 작업 이름 |
---|---|---|
Connect | RequestType 은 REALTIME 입니다. |
concurrent-connect |
연결 해제 | RequestType 은 REALTIME 입니다. |
concurrent-disconnect |
읽기 | RequestType 은 REALTIME 입니다. |
realtime-read |
읽기 | RequestType 은 REST 입니다. |
rest-read |
쓰기 | RequestType 은 REALTIME 입니다. |
realtime-write |
쓰기 | RequestType 은 REST 입니다. |
rest-write |
업데이트 | RequestType 은 REALTIME 입니다.
PreconditionType 을 확인하세요. |
realtime-update realtime-transaction |
업데이트 | RequestType 은 REST 입니다.
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 |