Cloud 감사 로그의 이벤트 필터 확인

Eventarc 트리거는 특정 이벤트나 이벤트 집합에 관심이 있음을 선언하므로 특정 이벤트를 캡처하고 여기에서 조치를 취할 수 있습니다. type=google.cloud.audit.log.v1.written이 포함된 Eventarc 트리거는 트리거 필터 기준과 일치하는 감사 로그가 생성되면 요청을 대상에 보냅니다. 감사 로그 항목의 다음 값이 일치합니다.

  • serviceName: 감사 로그를 작성한 서비스입니다.
  • methodName: 감사되는 작업입니다.
  • resourceName: 감사되는 리소스입니다.

감사 로그를 제공하는 Google Cloud 서비스 목록은 감사 로그를 생성하는 Google Cloud 서비스를 참조하세요. google.cloud.audit.log.v1.written 이벤트 유형에 적용되는 이벤트 필터 값을 검색할 수도 있습니다.

이벤트 필터 식별

트리거를 만드는 데 필요한 정확한 이벤트 필터를 파악하려면 캡처할 이벤트를 생성한 후 해당하는 Cloud 감사 로그 항목을 확인합니다. 로그 항목의 데이터는 여러 항목에 걸쳐 분할 및 분산될 수 있습니다.

  1. 서비스에 대한 데이터 액세스 감사 로그 유형을 사용 설정했는지 확인합니다.

    감사 로그로 이동

    감사가 기본적으로 사용 설정된 서비스는 나열되어 있지 않습니다.

    1. 감사 로그 페이지의 기본 표에서 Google Cloud 서비스를 선택합니다.

    2. 로그 유형 탭에서 관리자 읽기, 데이터 읽기, 데이터 쓰기 체크박스를 선택한 다음 저장을 클릭합니다.

  2. 이벤트 필터를 만들 작업을 수행하고 감사 로그 항목을 생성합니다. 예를 들어 Cloud Storage 버킷에 파일을 저장합니다.

  3. Google Cloud 콘솔에서 로그 탐색기로 이동합니다.

    로그 탐색기로 이동

  4. 쿼리 빌더 창에서 쿼리를 빌드 및 실행하여 로그 항목을 필터링하고 결과를 가져옵니다. 예를 들면 다음과 같습니다.

    resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"
    

    로그를 검색해 미세 조정하는 쿼리를 빌드하는 방법에 대한 자세한 내용은 Logging 쿼리 언어를 사용하여 쿼리 빌드를 참조하세요.

  5. 하나의 로그 항목에 대한 전체 세부정보를 보려면 항목 시작 부분에 있는 펼치기 화살표(▸)를 클릭하세요.

    감사 로그 항목과 다른 로그 항목의 차이점은 protoPayload 필드입니다. 다음 예시에서는 로그 항목의 일부분이 생략되었고 일부 필드는 강조표시되어 있습니다.

    {
       protoPayload:{
          @type:"type.googleapis.com/google.cloud.audit.AuditLog",
          status:{},
          authenticationInfo:{},
          requestMetadata:{},
          serviceName:"storage.googleapis.com",
          methodName:"storage.objects.create",
          authorizationInfo:[],
          resourceName:"projects/_/buckets/eventarc-bucket/objects/random.txt",
          resourceLocation:{}
       },
       insertId:"il9evleafpdk",
       resource:{
          type:"gcs_bucket",
          labels:{
             project_id:"cloud-run-test",
             location:"us-central1",
             bucket_name:"eventarc-bucket"
          }
       },
       timestamp:"2021-03-05T15:55:20.754688805Z",
       severity:"INFO",
       logName:"projects/cloud-run-test/logs/cloudaudit.googleapis.com%2Fdata_access",
       receiveTimestamp:"2021-03-05T15:55:20.884984611Z"
    }

    • 다음 정보를 사용하여 이 감사 로그 항목의 콘텐츠를 확인할 수 있습니다.

      • protoPayload.@type 필드는 type.googleapis.com/google.cloud.audit.AuditLog입니다.

      • logName 필드는 cloudaudit.googleapis.com 도메인을 포함합니다.

    • protoPayload.serviceName 필드는 감사 로그를 작성한 서비스입니다.

    • protoPayload.methodName 필드는 감사되는 작업입니다.

    • protoPayload.resourceName 필드는 감사되는 리소스입니다.

    감사 로그 항목에서 정보를 찾는 방법에 대한 자세한 내용은 감사 로그 이해를 참조하세요.

이벤트 필터 값 검색

gcloud eventarc audit-logs-provider 명령어를 사용하여 google.cloud.audit.log.v1.written 이벤트 유형의 제공업체 serviceNamemethodName 값을 살펴보고 나열할 수 있습니다.

서비스 이름을 나열하려면 다음 명령어를 실행합니다.

gcloud eventarc audit-logs-provider service-names list

그러면 google.cloud.audit.log.v1.written 이벤트 유형의 모든 serviceName 속성 값이 반환됩니다.

특정 서비스의 메서드 이름을 나열하려면 다음 명령어를 실행합니다.

gcloud eventarc audit-logs-provider method-names list \
     --service-name=SERVICE_NAME

SERVICE_NAMEserviceName 값(예: bigquery.googleapis.com)으로 바꿉니다.

Eventarc 트리거 예시

다음 예시에서는 Workflows 대상에 cal-workflows-trigger라는 트리거를 만듭니다. 트리거는 bigquery.googleapis.com에서 작성한 감사 로그와 google.cloud.bigquery.v2.JobService.InsertJob로 식별된 작업을 필터링합니다.

gcloud eventarc triggers create cal-workflows-trigger \
   --location=us-central1 \
   --destination-workflow=my-workflow \
   --destination-workflow-location=europe-west4 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=bigquery.googleapis.com" \
   --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
   --service-account=${TRIGGER_SA}@${PROJECT_ID}.iam.gserviceaccount.com

다음 예시에서는 Cloud Run 대상에 cal-run-trigger라는 트리거를 만듭니다. 트리거는 workflows.googleapis.com에서 작성한 감사 로그와 google.cloud.workflows.v1.Workflows.GetWorkflow로 식별된 작업을 필터링합니다.

gcloud eventarc triggers create cal-run-trigger \
   --location=us-central1 \
   --destination-run-service=helloworld-events \
   --destination-run-region=us-central1 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=workflows.googleapis.com" \
   --event-filters="methodName=google.cloud.workflows.v1.Workflows.GetWorkflow" \
   --event-filters="resourceName=projects/_/locations/us-central1/workflows/test-workflow" \
   --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

과도하게 큰 감사 로그 항목

Cloud Logging은 사용량 한도보다 큰 감사 로그 항목을 분할하고 원래 감사 로그 항목에 포함된 데이터를 여러 분할 항목에 배포합니다. 로그 항목에 split 필드가 포함된 경우 더 큰 원본 로그 항목을 분할한 결과입니다. split 필드는 관련 분할 항목을 식별하는 데 필요한 정보가 포함된 LogSplit 객체입니다.

각 분할 항목에는 Cloud 감사 로그 이벤트를 필터링하는 데 도움이 되는 동일한 serviceName, methodName, resourceName 값이 포함된 protoPayload가 있습니다. Eventarc 트리거는 각 분할 항목의 이벤트를 전달합니다.

여러 로그 항목으로 분할된 감사 로그 항목이 있으면 LogEntry의 모든 필드를 필터링할 수 있습니다. 예를 들어 일련의 분할 로그 항목에 첫 번째 항목이 필요하면 split.index=0을 사용하여 첫 번째 항목의 위치를 표시해서 다음 gcloud CLI 명령어를 실행하면 됩니다.

gcloud logging read "split.index=0"

항목과 샘플 쿼리 인식 방법을 포함한 자세한 내용은 감사 로그 항목 분할을 참조하세요.

다음 단계