BigQuery의 감사 로그 소개

로그는 특정 이벤트 또는 작업에 대한 응답으로 생성된 텍스트 레코드입니다. 예를 들어 BigQuery는 테이블 만들기 또는 삭제, 슬롯 구매, 로드 작업 실행과 같은 작업 로그 항목을 만듭니다.

또한 Google Cloud는 Google Cloud 서비스 사용과 관련된 운영 문제에 대한 유용한 정보를 제공하는 감사 로그를 포함한 로그를 작성합니다. Google Cloud에서 로깅을 처리하는 방법에 대한 자세한 내용은 Cloud Logging 문서 및 Cloud 감사 로그 개요를 참조하세요.

감사 로그와 INFORMATION_SCHEMA 뷰 비교

Google Cloud 프로젝트에는 Google Cloud 프로젝트 내에 있는 리소스의 감사 로그만 있습니다. 폴더, 조직, 결제 계정과 같은 다른 Google Cloud 리소스에는 자체 감사 로그가 있습니다.

감사 로그를 사용하면 Google Cloud 리소스 내에서 '누가, 언제, 어디서, 무엇을 했는지' 파악할 수 있습니다. 감사 로그는 사용자 및 액세스 패턴별 시스템 활동에 대한 정보의 최종 소스이며 감사 또는 보안 질문의 기본 소스여야 합니다.

BigQuery의 INFORMATION_SCHEMA 뷰는 측정항목 및 로그와 함께 사용할 수 있는 또 다른 유용한 정보입니다. 이러한 뷰에는 작업, 데이터 세트, 테이블, 기타 BigQuery 항목의 메타데이터가 포함됩니다. 예를 들어 지정된 시간 동안 실행된 BigQuery 작업에 대한 실시간 메타데이터를 가져올 수 있습니다. 그런 다음 프로젝트, 사용자, 참조한 테이블, 기타 측정기준별로 결과를 그룹화하거나 필터링할 수 있습니다.

INFORMATION_SCHEMA 뷰는 다음과 같이 BigQuery 워크로드에 대한 자세한 분석을 수행하기 위한 정보를 제공합니다.

  • 특정 프로젝트에 지난 7일 동안 모든 쿼리의 평균 슬롯 사용량은 얼마인가요?
  • 지난 30분 동안 오류 코드를 기준으로 그룹화되어 발생한 스트리밍 오류는 무엇인가요?

BigQuery 감사 로그에는 API 호출의 로그 항목이 포함되지만 API 호출의 영향은 설명하지 않습니다. API 호출의 하위 집합은 INFORMATION_SCHEMA 뷰에서 정보를 캡처하는 작업(예: 쿼리 및 로드)을 만듭니다. 예를 들어 INFORMATION_SCHEMA 뷰에서는 특정 쿼리가 사용하는 시간과 슬롯에 대한 정보를 찾을 수 있지만 감사 로그에서는 찾을 수 없습니다.

특히 BigQuery 워크로드의 성능에 대한 통계를 확인하려면 작업 메타데이터, 스트리밍 메타데이터, 예약 메타데이터를 참조하세요.

Google Cloud 서비스가 작성하는 감사 로그 유형에 대한 자세한 내용은 감사 로그 유형을 참조하세요.

감사 로그 형식

Google Cloud 서비스는 구조화된 JSON 형식으로 감사 로그를 작성합니다. Google Cloud 로그 항목의 기본 데이터 유형은 LogEntry 구조입니다. 이 구조에는 로그 이름, 로그 항목을 생성한 리소스, 타임스탬프(UTC), 기타 기본 정보가 포함됩니다.

로그는 페이로드 필드라고 부르는 하위 필드에 로깅된 이벤트의 세부정보를 포함합니다. 감사 로그의 경우 페이로드 필드 이름은 protoPayload입니다. 이 필드의 유형 (protoPayload.@type)은 type.googleapis.com/google.cloud.audit.AuditLog로 설정되어 필드가 AuditLog 로그 구조를 사용함을 나타냅니다.

데이터 세트, 테이블, 작업에 대한 작업의 경우 BigQuery는 두 가지 형식으로 감사 로그를 쓰는데 두 형식 모두 AuditLog 기본 유형을 공유합니다.

이전 형식에는 다음 필드와 값이 포함됩니다.

  • resource.type 필드의 값은 bigquery_resource입니다.
  • BigQuery는 protoPayload.serviceData 필드에 작업에 대한 세부정보를 작성합니다. 이 필드 값은 AuditData 로그 구조를 사용합니다.

최신 형식에는 다음 필드 및 값이 포함됩니다.

  • resource.type 필드의 값은 bigquery_project 또는 bigquery_dataset입니다. bigquery_project 리소스에는 작업에 대한 로그 항목이 있는 반면 bigquery_dataset 리소스에는 스토리지에 대한 로그 항목이 있습니다.
  • BigQuery는 protoPayload.metadata 필드에 작업에 대한 세부정보를 작성합니다. 이 필드 값은 BigQueryAuditMetadata 구조를 사용합니다.

최신 형식의 로그를 사용하는 것이 좋습니다. 자세한 내용은 감사 로그 이전 가이드를 참조하세요.

다음은 실패한 작업을 보여주는 로그 항목의 축약형 예시입니다.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset myproject:mydataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/myproject/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

BigQuery 예약 작업의 경우 protoPayload 필드에 AuditLog 구조가 사용되고 protoPayload.requestprotoPayload.response 필드에 추가 정보가 포함됩니다. 필드 정의는 BigQuery Reservation API에서 확인할 수 있습니다. 자세한 내용은 BigQuery 예약 모니터링을 참조하세요.

감사 로그 형식에 대한 자세한 내용은 감사 로그 이해를 참조하세요.

제한사항

로그 메시지의 크기는 100,000바이트로 제한됩니다. 자세한 내용은 잘린 로그 항목을 참조하세요.

공개 상태 및 액세스 제어

BigQuery 감사 로그에는 SQL 텍스트, 스키마 정의, 테이블 및 데이터 세트와 같은 리소스의 식별자 등 사용자가 민감할 수 있는 정보가 포함될 수 있습니다. 이 정보의 액세스 관리에 대한 자세한 내용은 Cloud Logging 액세스 제어 문서를 참조하세요.

다음 단계

  • Cloud Logging을 사용해서 정책 태그와 관련된 활동을 감사하는 방법은 감사 정책 태그를 참조하세요.
  • BigQuery를 사용하여 로깅된 활동을 분석하는 방법을 알아보려면 BigQuery 감사 로그 개요를 참조하세요.