Firebase 실시간 데이터베이스 감사 로깅

이 페이지에서는 Cloud 감사 로그의 일부로 Firebase에서 생성한 감사 로그를 설명합니다.

개요

Firebase 서비스는 감사 로그를 작성하여 '누가, 언제, 어디서, 무엇을 했는지' 파악하는 데 도움을 제공합니다. 이러한 Cloud 감사 로그는 Firebase 프로젝트에 연결된 Google Cloud 프로젝트의 일부로 제공됩니다.

각 Firebase 프로젝트에는 해당 프로젝트 바로 안에 있는 리소스에 대한 감사 로그만 들어 있습니다.

Cloud 감사 로그의 전반적인 개요는 Cloud 감사 로그 개요를 참조하세요. 감사 로그 형식에 대한 자세한 내용은 감사 로그 이해를 참조하세요.

사용 가능한 감사 로그

Firebase 실시간 데이터베이스에는 다음과 같은 유형의 감사 로그를 사용할 수 있습니다.

  • 관리자 활동 감사 로그

    메타데이터 또는 구성 정보를 쓰는 '관리자 쓰기' 작업이 포함됩니다.

    관리자 활동 감사 로그는 사용 중지할 수 없습니다.

  • 데이터 액세스 감사 로그

    메타데이터 또는 구성 정보를 읽는 '관리자 읽기' 작업이 포함됩니다. 또한 사용자가 제공한 데이터를 읽거나 쓰는 '데이터 읽기' 및 '데이터 쓰기' 작업도 포함됩니다.

    데이터 액세스 감사 로그를 수신하려면 이를 명시적으로 사용 설정해야 합니다.

감사 로그 유형에 대한 자세한 내용은 감사 로그 유형을 참조하세요.

감사 대상 작업

다음은 Firebase 실시간 데이터베이스의 각 감사 로그 유형에 해당하는 API 작업을 요약한 것입니다.

감사 로그 카테고리 Firebase 실시간 데이터베이스 작업
관리자 활동 감사 로그(ADMIN_WRITE)
  • CreateDatabaseInstance
  • DeleteDatabaseInstance
  • DisableDatabaseInstance
  • ReenableDatabaseInstance
데이터 액세스 감사 로그(ADMIN_READ)
  • GetDatabaseInstance
  • ListDatabaseInstances
데이터 액세스 감사 로그(DATA_READ 또는 DATA_WRITE)
데이터 액세스 감사 로그(DATA_READ)
데이터 액세스 감사 로그(DATA_WRITE)
  • Write
  • Update. 관련된 WriteMetadata를 참조하세요.
  • OnDisconnectPut
  • OnDisconnectUpdate. 관련된 WriteMetadata를 참조하세요.
  • OnDisconnectCancel

인증 정보 감사

감사 로그 항목에는 로깅 작업을 수행한 ID에 대한 정보가 포함됩니다. 요청 호출자를 식별하려면 AuditLog 객체 내에서 다음 필드를 참조하세요.

  • 실시간 연결 설정. 실시간 데이터베이스 Connect 작업은 연결이 설정된 후 실시간 데이터베이스가 인증되기 때문에 인증 데이터를 로깅하지 않습니다. 따라서 Connect에 인증 정보가 포함되지 않습니다. AuthenticationInfo 객체에는 audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com의 자리표시자 principalEmail이 포함됩니다.

  • Google 인증. 표준 OAuth 토큰으로 인증된 Firebase Admin SDK 또는 REST 요청의 트래픽과 같은 표준 Google 인증을 사용하는 실시간 데이터베이스 작업에는 실제 사용자 인증 정보 이메일이 포함된 AuthenticationInfo 객체가 있습니다.

  • Firebase 인증. Firebase 인증을 사용하는 실시간 데이터베이스 작업에는 audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 값이 포함된 AuthenticationInfo 객체가 있습니다. 커스텀 JWT를 민팅하여 자체 인증 솔루션을 구현하는 경우에도 마찬가지입니다.

    • JSON 웹 토큰(JWT)이 서드 파티 인증에 사용된 경우 thirdPartyPrincipal 필드에는 토큰의 헤더와 페이로드가 포함됩니다. 예를 들어 Firebase 인증으로 인증된 요청의 감사 로그에는 해당 요청의 Firebase 인증 토큰이 포함됩니다.
  • 인증 없음. 인증을 사용하지 않는 실시간 데이터베이스 작업에는 audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 값이 포함된 AuthenticationInfo 객체가 있습니다. 개방형 보안 규칙이 있는 실시간 데이터베이스 인스턴스는 이러한 요청을 허용할 수 있습니다. 모든 사용자가 자신의 데이터베이스를 적절하게 보호하는 것이 좋습니다.

  • 기존 보안 비밀 토큰. 기존 토큰을 사용하는 실시간 데이터베이스 작업에는 audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 자리표시자가 포함된 AuthenticationInfo 객체가 있습니다. 보안 비밀로 서명된 JWT의 경우 thirdPartyPrincipal에 JWT 헤더 및 페이로드가 포함됩니다.

Firebase 보안 규칙 평가 감사

Cloud 감사 로그를 사용하여 규칙 변경의 영향을 받을 수 있는 요청을 식별할 수 있습니다.

AuthorizationInfo 객체에서 authorization.permission은 다음 중 하나일 수 있습니다.

  • firebasedatabase.data.get: resource에 지정된 경로에 부여된 읽기 액세스 권한입니다.
  • firebasedatabase.data.update: resource에 지정된 경로에 부여된 쓰기 액세스 권한입니다.
  • firebasedatabase.data.connect: ConnectDisconnect의 자리표시자입니다. 실시간 데이터베이스 인스턴스에 연결하는 데 승인이 필요하지 않습니다.
  • firebasedatabase.data.cancel: UnlistenOnDisconnectCancel에 사용됩니다. 이전에 승인된 작업을 취소할 때 추가 승인이 필요하지 않습니다.

Cloud 감사 로그와 실시간 데이터베이스 프로파일러 결과의 상관 관계 분석

실시간 데이터베이스 감사 로깅과 함께 실시간 데이터베이스 프로파일러를 사용하여 실시간 데이터베이스에서 심층 성능 분석을 수행할 수 있습니다. 각 도구마다 고유한 장점이 있습니다.

Cloud 감사 로깅 실시간 데이터베이스 프로파일러
  • 데이터베이스 액세스 감사
  • 지속적으로 모든 요청 캡처
  • 소급적 쿼리 허용
  • 자세한 인증 토큰 정보 포함
  • 사용 비용 발생
  • 성능 분석에 사용됨
  • 핫스팟 식별 및 성능 최적화에 유용한 도구 제공
  • 잠재적 데이터 볼륨으로 인해 감사 로그에 제공되지 않는 listener-broadcast 측정 가능
  • 가볍고 실시간이므로, 실시간 부하 테스트에 적합합니다. 감사 로그 항목이 표시되려면 몇 분 정도 걸릴 수 있습니다.

감사 로그 콘텐츠는 아래에 표시된 프로파일러 측정항목에 해당합니다.

감사 로깅 작업 이름 RealtimeDatabaseAuditMetadata
특수 값
프로파일러 작업 이름
Connect RequestTypeREALTIME입니다. concurrent-connect
Disconnect RequestTypeREALTIME입니다. concurrent-disconnect
Read RequestTypeREALTIME입니다. realtime-read
Read RequestTypeREST입니다. rest-read
Write RequestTypeREALTIME입니다. realtime-write
Write RequestTypeREST입니다. rest-write
Update RequestTypeREALTIME입니다.
PreconditionType을 확인하세요.
realtime-update
realtime-transaction
Update RequestTypeREST입니다.
PreconditionType을 확인하세요.
rest-update
rest-transaction
ListenerListen RequestTypeREALTIME입니다. listener-listen
ListenerUnlisten RequestTypeREALTIME입니다. listener-unlisten
OnDisconnectPut RequestTypeREALTIME입니다. on-disconnect-put
OnDisconnectUpdate RequestTypeREALTIME입니다. on-disconnect-update
OnDisconnectCancel RequestTypeREALTIME입니다. on-disconnect-cancel
RunOnDisconnect RequestTypeREALTIME입니다. run-on-disconnect

감사 로그 형식

감사 로그 항목에는 다음과 같은 객체가 포함됩니다.

  • LogEntry 유형의 객체인 로그 항목 자체입니다. 유용한 필드는 다음과 같습니다.

    • logName에는 리소스 ID와 감사 로그 유형이 있습니다.
    • resource에는 감사 작업 대상이 있습니다.
    • timestamp에는 감사 작업 시간이 있습니다.
    • protoPayload에는 감사 정보가 있습니다.
  • 로그 항목의 protoPayload 필드에 AuditLog 객체로 보관되는 감사 로깅 데이터입니다.

  • 선택적 서비스별 감사 정보로, 서비스별 객체입니다. 이전 통합에서 이 객체는 AuditLog 객체의 serviceData 필드에 보관되었으나, 최신 통합은 metadata 필드를 사용합니다.

이러한 객체의 다른 필드와 필드 해석 방법은 감사 로그 이해를 참조하세요.

DATA_READDATA_WRITE 작업의 protoPayload.metadata 필드에 대한 추가 정보는 참조 문서에서 확인할 수 있습니다.

로그 이름

Cloud 감사 로그 리소스 이름은 감사 로그를 소유한 Firebase 프로젝트나 기타 Google Cloud 항목을 나타내며 로그에 관리자 활동, 데이터 액세스, 정책 거부 또는 시스템 이벤트 감사 로깅 데이터가 포함되어 있는지 여부도 나타냅니다. 예를 들어 다음은 프로젝트 수준의 관리자 활동 감사 로그와 조직의 데이터 액세스 감사 로그 이름을 보여줍니다. 변수는 Firebase 프로젝트와 조직 식별자를 나타냅니다.

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

서비스 이름

Firebase 실시간 데이터베이스 감사 로그에서는 서비스 이름으로 firebasedatabase.googleapis.com을 사용합니다.

모든 Cloud Logging API 서비스 이름과 해당 모니터링 리소스 유형의 전체 목록은 리소스에 서비스 매핑을 참조하세요.

리소스 유형

Firebase 실시간 데이터베이스 감사 로그는 모든 감사 로그에 audited_resource 리소스 유형을 사용합니다.

모든 Cloud Logging 모니터링 리소스 유형과 설명 정보의 목록은 모니터링 리소스 유형을 참조하세요.

감사 로깅 사용 설정

관리자 활동 감사 로그는 항상 사용 설정되며 사용 중지할 수 없습니다.

데이터 액세스 감사 로그는 기본적으로 사용 중지되어 있으며 명시적으로 사용 설정하지 않으면 작성되지 않습니다. 단, 사용 중지할 수 없는 BigQuery의 데이터 액세스 감사 로그는 예외입니다.

실시간 데이터베이스에 대한 데이터 액세스 감사 로그는 GCP 콘솔에서 DATA_READ 또는 DATA_WRITE를 선택하여 전환됩니다. GCP 콘솔에서 로그가 사용 설정/사용 중지된 시간과 로그 전송이 시작/중지된 시간 사이에 최대 1시간까지 지연이 발생할 수 있습니다.

데이터 액세스 감사 로그의 일부 또는 전체를 사용 설정하는 방법은 데이터 액세스 로그 구성을 참조하세요.

권한 및 역할

Cloud IAM 권한과 역할에 따라 Google Cloud 리소스의 감사 로그 데이터에 액세스할 수 있는지 여부가 결정됩니다.

사용 사례에 적용할 Logging 관련 권한 및 역할을 결정할 때는 다음 사항을 고려하세요.

  • 로그 뷰어 역할(roles/logging.viewer)은 관리자 활동, 정책 거부, 시스템 이벤트 감사 로그에 대한 읽기 전용 액세스 권한을 부여합니다. 이 역할만 있으면 _Default 버킷에 있는 데이터 액세스 감사 로그를 볼 수 없습니다.

  • 비공개 로그 뷰어 역할(roles/logging.privateLogViewer)에는 roles/logging.viewer에 포함된 권한과 _Default 버킷의 데이터 액세스 감사 로그에 대한 읽기 권한도 포함되어 있습니다.

    비공개 로그가 사용자 정의된 버킷에 저장된 경우 이러한 버킷에서 로그 읽기 권한이 있는 모든 사용자가 비공개 로그를 읽을 수 있습니다. 로그 버킷에 대한 자세한 내용은 라우팅 및 스토리지 개요를 참조하세요.

감사 로그 데이터에 적용되는 Cloud IAM 권한과 역할에 대한 자세한 내용은 액세스 제어를 참조하세요.

로그 보기

감사 로그를 찾아서 보려면 감사 로깅 정보를 보려는 Firebase 프로젝트, 폴더, 조직의 식별자를 알아야 합니다. 색인 생성된 다른 LogEntry 필드(예: resource.type)를 더 구체적으로 지정할 수 있습니다. 자세한 내용은 로그 항목 빨리 찾기를 참조하세요.

다음은 Firebase 프로젝트, 폴더, 조직 식별자에 대한 변수가 포함된 감사 로그 이름입니다.

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

GCP 콘솔, gcloud 명령줄 도구 또는 Logging API를 사용하여 Cloud Logging에서 감사 로그를 볼 수 있습니다.

콘솔

GCP 콘솔의 로그 탐색기를 사용하여 Firebase 프로젝트, 폴더 또는 조직의 감사 로그 항목을 검색할 수 있습니다.

  1. GCP 콘솔에서 Logging > 로그 탐색기 페이지로 이동합니다.

    로그 탐색기 페이지로 이동

  2. 로그 탐색기 페이지에서 기존 Firebase 프로젝트, 폴더 또는 조직을 선택합니다.

  3. 쿼리 빌더 창에서 다음을 수행합니다.

    • 리소스 유형에서 감사 로그를 확인할 Google Cloud 리소스를 선택하세요.

    • 로그 이름에서 확인할 감사 로그 유형을 선택합니다.

      • 관리자 활동 감사 로그의 경우 activity를 선택합니다.
      • 데이터 액세스 감사 로그의 경우 data_access를 선택합니다.
      • 시스템 이벤트 감사 로그의 경우 system_event를 선택합니다.
      • 정책 거부 감사 로그의 경우 policy를 선택합니다.

    이러한 옵션 중 어느 것도 표시되지 않으면 Firebase 프로젝트, 폴더 조직에 해당 유형의 감사 로그가 없다는 의미입니다.

    로그 탐색기를 사용하여 쿼리하는 방법에 대한 자세한 내용은 로그 쿼리 작성을 참조하세요.

gcloud

gcloud 명령줄 도구는 Cloud Logging API에 명령줄 인터페이스를 제공합니다. 각 로그 이름에 유효한 PROJECT_ID, FOLDER_ID 또는 ORGANIZATION_ID를 입력합니다.

Firebase 프로젝트 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" --project=PROJECT_ID

폴더 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" --folder=FOLDER_ID

조직 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" --organization=ORGANIZATION_ID

gcloud 도구 사용에 대한 자세한 내용은 로그 항목 읽기를 참조하세요.

API

쿼리를 빌드할 때 변수를 유효한 값으로 바꾸고 감사 로그 이름에 나열된 적절한 프로젝트 수준, 폴더 수준 또는 조직 수준의 감사 로그 이름 또는 식별자를 대체합니다. 예를 들어 쿼리에 PROJECT_ID가 포함된 경우 제공한 프로젝트 식별자가 현재 선택된 Firebase 프로젝트를 참조해야 합니다.

Logging API를 사용하여 감사 로그 항목을 확인하려면 다음 안내를 따르세요.

  1. entries.list 메서드 문서의 API 사용해 보기 섹션으로 이동합니다.

  2. API 사용해 보기 양식의 요청 본문 부분에 다음을 입력합니다. 미리 채워진 양식을 클릭하면 요청 본문이 자동으로 입력되지만 각 로그 이름에 유효한 PROJECT_ID를 입력해야 합니다.

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 실행을 클릭합니다.

쿼리에 대한 자세한 내용은 Logging 쿼리 언어를 참조하세요.

감사 로그 항목의 예시와 이 항목에서 가장 중요한 정보를 찾는 방법은 샘플 감사 로그 항목을 참조하세요.

감사 로그 라우팅

다른 종류의 로그를 라우팅할 때와 같은 방식으로 지원되는 대상에 감사 로그를 라우팅할 수 있습니다. 다음과 같은 이유로 감사 로그를 라우팅해야 할 수 있습니다.

  • 감사 로그를 장기간 보관하거나 보다 강력한 검색 기능을 사용하려면 감사 로그 사본을 Google Cloud Storage, BigQuery 또는 Google Cloud Pub/Sub로 라우팅하면 됩니다. Cloud Pub/Sub를 사용하면 다른 애플리케이션, 다른 저장소, 서드 파티로 라우팅할 수 있습니다.

  • 조직 전체의 감사 로그를 관리하려면 조직의 Firebase 프로젝트 일부 또는 전체에서 로그를 라우팅할 수 있는 집계 싱크를 만들면 됩니다.

  • 사용 설정한 데이터 액세스 감사 로그로 인해 Firebase 프로젝트에서 로그 할당량을 초과하는 경우 Logging에서 데이터 액세스 감사 로그를 제외하는 싱크를 만들 수 있습니다.

로그 라우팅에 대한 안내는 싱크 구성을 참조하세요.

가격 책정

관리자 활동 감사 로그시스템 이벤트 감사 로그는 무료입니다.

데이터 액세스 감사 로그정책 거부 감사 로그는 요금이 부과됩니다.

Cloud Logging 가격 책정에 대한 자세한 내용은 Google Cloud 운영 제품군 가격 책정: Cloud Logging을 참조하세요.