BigQuery를 이용한 감사 로그 분석

Cloud 감사 로그는 Google Cloud Platform이 제공하는 로그 모음으로, 이를 이용하면 Google Cloud 프로젝트의 사용 내역을 확인할 수 있습니다. BigQuery의 감사 로그는 관리 활동과 데이터 액세스라는 두 가지 로그로 구성되며, 모두 자동으로 활성화됩니다.

감사 로그는 Google Cloud Logging을 통해 사용할 수 있으며, 필터를 적용해 특정 작업이나 쿼리의 정보를 얻거나 Google Cloud Pub/Sub, Google Cloud Storage, BigQuery로 로그를 내보낼 수 있습니다.

BigQuery 감사 로그에는 자세한 작업 통계가 포함됩니다. 이러한 통계는 작업이 완료된 후 청구되는 프로젝트에 기록됩니다. 청구되는 프로젝트는 작업이 실행되는 프로젝트입니다.

Cloud Logging을 이용해 BigQuery에서 대규모 쿼리 찾기

Cloud Logging으로 감사 로그에 필터를 적용해 기준에 맞는 특정 작업을 찾을 수 있습니다. 비용이 많이 드는 쿼리, 특정 오류 모드, 의도하지 않은 액세스 패턴도 검색 가능합니다.

다음 예시를 통해 크고 복잡한 쿼리를 필터링하는 방법을 확인할 수 있습니다.

  1. GCP 콘솔에서 로그 뷰어로 이동합니다.

  2. Stackdriver Logging 페이지의 리소스 선택에서 선택을 클릭하고 작업이 실행되는 프로젝트를 선택합니다.

  3. 필요하다면 필터링할 리소스 목록에서 BigQuery를 선택합니다.

    로그 뷰어 스크린샷 - BigQuery 선택

  4. 필터 상자의 드롭다운 화살표를 클릭하고 고급 필터로 전환을 선택해 고급 필터링으로 전환합니다. 로그 뷰어 스크린샷 - 고급 필터 선택

  5. 특정 사용 패턴을 찾으려면 필터 구문을 입력합니다.

    1. 예시 1: 5GB를 초과하는 쿼리를 실행한 사용자의 이벤트를 표시합니다.

      필터링 기준 상자에 다음 필터 구문을 입력하고 필터 제출을 클릭합니다.

      resource.type="bigquery_resource"
      protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes > 5000000000
      

      로그 뷰어 스크린샷 - 필터 구문 예시

    2. 예시 2: (높은 결제 등급을 요구하는) 복잡한 쿼리와 관련된 이벤트를 표시합니다.

      필터링 기준 상자에 다음 필터 구문을 입력하고 필터 제출을 클릭합니다.

      resource.type="bigquery_resource"
      protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.billingTier > 1
      

BigQuery를 이용한 감사 로그 쿼리

집계된 사용 데이터를 SQL로 분석하려면 감사 로그를 BigQuery로 스트리밍합니다. Cloud Logging에서 내보내기를 설정하는 방법에 대한 자세한 내용은 Cloud Logging 문서의 로그 내보내기 개요를 참고하세요.

BigQuery로 보내는 감사 로그의 스트리밍 설정

  1. GCP 콘솔에서 로그 뷰어로 이동합니다.

  2. 내보내기 만들기를 클릭합니다.

  3. 내보내기 수정 창에서 다음 작업을 수행합니다.

    1. 싱크 이름bigquery_audit_logs 등의 값을 입력합니다.
    2. 싱크 서비스BigQuery를 선택합니다.
    3. 싱크 대상 위치는 감사 로그를 저장할 데이터세트를 선택합니다. 새 BigQuery 데이터세트 만들기를 선택해 감사 로그를 저장할 데이터세트를 만들어도 됩니다.
    4. 싱크 만들기를 클릭합니다.

      싱크 페이지 만들기

  4. 확인 대화상자가 나타나면 닫기를 클릭해 상자를 닫습니다.

  5. BigQuery 웹 UI의 데이터세트로 이동해 감사 로그에 대한 쿼리를 실행합니다. BigQuery에서의 모든 후속 활동은 사용자가 선택한 데이터세트의 테이블에 감사 로깅 테이블을 생성합니다. 테이블의 이름은 다음과 같습니다.

    • cloudaudit_googleapis_com_activity_[DATE]
    • cloudaudit_googleapis_com_data_access_[DATE]

    각 항목의 의미는 다음과 같습니다.

    • [DATE]는 활동이 발생한 날짜를 의미합니다.

    감사 로그 테이블

BigQuery의 감사 쿼리 샘플

다음 샘플 쿼리는 데이터 액세스 사용량을 검색하고 비용 데이터를 쿼리하는 방법을 보여줍니다.

예시 1: 쿼리 비용의 시간별 분석

#standardSQL
SELECT
  TIMESTAMP_TRUNC(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.endTime, HOUR) as time_window,
  FORMAT('%9.2f',5.0 * (SUM(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalBilledBytes)/POWER(2, 40))) as Estimated_USD_Cost
FROM
  `AuditLogsDataSet.cloudaudit_googleapis_com_data_access_YYYYMMDD`
WHERE
  protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY time_window
ORDER BY time_window DESC

다음은 쿼리 결과의 예시입니다.

BigQuery 웹 UI 스크린샷 - 시간별 쿼리 결과 예시

예시 2: 사용자별 비용 분석

#standardSQL
WITH data as
(
  SELECT
    protopayload_auditlog.authenticationInfo.principalEmail as principalEmail,
    protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent as jobCompletedEvent
  FROM
    `AuditLogsDataSet.cloudaudit_googleapis_com_data_access_YYYYMMDD`
)
SELECT
  principalEmail,
  FORMAT('%9.2f',5.0 * (SUM(jobCompletedEvent.job.jobStatistics.totalBilledBytes)/POWER(2, 40))) as Estimated_USD_Cost
FROM
  data
WHERE
  jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY principalEmail
ORDER BY Estimated_USD_Cost DESC

감사 로그에서 쿼리할 수 있는 요소에 대한 자세한 내용은 Cloud Logging 문서의 AuditData를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.