CloudM 로그 수집

파서 버전: 6.0

다음에서 지원:

이 문서에서는 Google Cloud 스토리지 V2를 사용하여 CloudM 로그를 Google Security Operations에 수집하는 방법을 설명합니다.

CloudM은 Google Workspace 및 Microsoft 365용 SaaS 플랫폼으로, 사용자 온보딩 및 오프보딩, 데이터 백업, 보관, 마이그레이션을 위한 워크플로 자동화를 제공합니다. CloudM Automate는 사용자 관리 이벤트, 온보딩 해제 워크플로 단계, 구성 변경사항, 보안 관련 작업을 비롯해 도메인에서 실행된 모든 작업의 전체 감사 로그를 생성합니다. 지난 1년간의 감사 로그 데이터는 보존됩니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Cloud Storage API가 사용 설정된 Google Cloud 프로젝트
  • Cloud Storage 버킷을 만들고 관리할 수 있는 권한
  • Cloud Storage 버킷의 Identity and Access Management (IAM) 정책을 관리할 수 있는 권한
  • Cloud Run 서비스, Pub/Sub 주제, Cloud Scheduler 작업을 만들 수 있는 권한
  • 전역 설정 수정 권한이 있는 CloudM Automate 인스턴스에 대한 관리자 액세스
  • CloudM Automate 인스턴스 URL (예: yourcompany.cloudm.io)
  • CloudM 도메인 ID

CloudM Automate 사용자 인증 정보 수집

API 로그 액세스를 위한 맞춤 역할 만들기

  1. CloudM Automate 인스턴스에 로그인합니다.
  2. 설정 > 역할로 이동합니다.
  3. 역할 추가를 클릭하여 새 역할을 만듭니다.
  4. 역할 이름 필드에 설명이 포함된 이름을 입력합니다 (예: Google SecOps Log Reader).
  5. 권한 목록에서 다음 권한을 사용 설정합니다.

    • 로그 보기: 모든 애플리케이션 로그를 볼 수 있는 권한을 부여합니다.
  6. 역할을 저장합니다.

서비스 계정 만들기 및 역할 할당

  1. CloudM Automate에서 설정 > 역할로 이동합니다.
  2. API 액세스에 사용할 서비스 계정을 만들거나 식별합니다.
  3. Google SecOps 로그 리더 역할을 서비스 계정에 할당합니다.
  4. 서비스 계정이 전체 도메인에서 로그에 액세스할 수 있도록 역할에 전역 범위가 할당되어 있는지 확인합니다.

서비스 계정 액세스 토큰 가져오기

  1. 서비스 계정에 대한 액세스 토큰을 생성합니다.
  2. 액세스 토큰은 CloudM Logs API에 API 요청을 할 때 Authorization 헤더에서 Bearer 토큰으로 사용됩니다.
  3. 다음 값을 기록해 둡니다.

    • Automate 인스턴스 URL: CloudM Automate 인스턴스 URL (예: yourcompany.cloudm.io)
    • 도메인 ID: CloudM 도메인 식별자
    • 서비스 계정 액세스 토큰: API 인증을 위한 Bearer 토큰

권한 확인

계정에 필요한 권한이 있는지 확인하려면 다음 단계를 따르세요.

  1. CloudM Automate에 로그인합니다.
  2. 설정 > 역할로 이동합니다.
  3. 서비스 계정에 전역 범위로 할당된 로그 보기 권한이 있는지 확인합니다.
  4. 이 옵션이 표시되지 않으면 관리자에게 문의하여 전역 설정 수정로그 보기 권한을 부여받으세요.

API 액세스 테스트

  • 통합을 진행하기 전에 사용자 인증 정보를 테스트하세요.

    # Replace with your actual credentials
    CLOUDM_INSTANCE="yourcompany.cloudm.io"
    DOMAIN_ID="your-domain-id"
    ACCESS_TOKEN="your-access-token"
    
    # Test API access
    curl -v -H "Authorization: Bearer ${ACCESS_TOKEN}" \
      "https://${CLOUDM_INSTANCE}/_ah/api/events/v1/${DOMAIN_ID}?from=$(date -u +%Y-%m-%d)&to=$(date -u +%Y-%m-%d)"
    

    성공적인 응답은 감사 로그 이벤트의 JSON 배열을 반환합니다.

필수 API 권한

  • 서비스 계정에는 다음 권한이 필요합니다.

    권한 액세스 수준 목적
    로그 보기 전역 CloudM Automate에서 모든 감사 로그 이벤트 가져오기

스토리지 버킷 만들기 Google Cloud

  1. Google Cloud 콘솔로 이동합니다.
  2. 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
  3. 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
  4. 버킷 만들기를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    설정
    버킷 이름 지정 전역적으로 고유한 이름 (예: cloudm-audit-logs)을 입력합니다.
    위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전)
    위치 위치를 선택합니다 (예: us-central1).
    스토리지 클래스 Standard (자주 액세스하는 로그에 권장)
    액세스 제어 균일 (권장)
    보호 도구 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정
  6. 만들기를 클릭합니다.

Cloud Run 함수의 서비스 계정 만들기

Cloud Run 함수에는 Cloud Storage 버킷에 쓸 수 있고 Pub/Sub에 의해 호출될 수 있는 권한이 있는 서비스 계정이 필요합니다.

서비스 계정 만들기

  1. Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
  2. 서비스 계정 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.
    • 서비스 계정 이름: cloudm-audit-collector-sa을 입력합니다.
    • 서비스 계정 설명: Service account for Cloud Run function to collect CloudM audit logs를 입력합니다.
  4. 만들고 계속하기를 클릭합니다.
  5. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 다음 역할을 추가합니다.

    1. 역할 선택을 클릭합니다.
    2. 스토리지 객체 관리자를 검색하여 선택합니다.
    3. + 다른 역할 추가를 클릭합니다.
    4. Cloud Run 호출자를 검색하여 선택합니다.
    5. + 다른 역할 추가를 클릭합니다.
    6. Cloud Functions 호출자를 검색하여 선택합니다.
  6. 계속을 클릭합니다.

  7. 완료를 클릭합니다.

    이러한 역할은 다음 작업에 필요합니다.

    • 스토리지 객체 관리자: Cloud Storage 버킷에 로그를 쓰고 상태 파일을 관리합니다.
    • Cloud Run 호출자: Pub/Sub가 함수를 호출하도록 허용
    • Cloud Functions 호출자: 함수 호출 허용

Cloud Storage 버킷에 대한 IAM 권한 부여

서비스 계정에 Cloud Storage 버킷에 대한 쓰기 권한을 부여합니다.

  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름 (cloudm-audit-logs)을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    • 주 구성원 추가: 서비스 계정 이메일 (cloudm-audit-collector-sa@PROJECT_ID.iam.gserviceaccount.com)을 입력합니다.
    • 역할 할당: 스토리지 객체 관리자 선택
  6. 저장을 클릭합니다.

Pub/Sub 주제 만들기

Cloud Scheduler가 게시하고 Cloud Run 함수가 구독할 Pub/Sub 주제를 만듭니다.

  1. Google Cloud 콘솔에서 Pub/Sub > 주제로 이동합니다.
  2. 주제 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    • 주제 ID: cloudm-audit-trigger를 입력합니다.
    • 다른 설정은 기본값으로 둡니다.
  4. 만들기를 클릭합니다.

로그를 수집하는 Cloud Run 함수 만들기

Cloud Run 함수는 Cloud Scheduler의 Pub/Sub 메시지에 의해 트리거되어 CloudM Automate Logs API에서 로그를 가져오고 Cloud Storage에 씁니다.

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
  2. 서비스 만들기를 클릭합니다.
  3. 함수를 선택합니다 (인라인 편집기를 사용하여 함수 만들기).
  4. 구성 섹션에서 다음 구성 세부정보를 입력합니다.

    설정
    서비스 이름 cloudm-audit-collector
    리전 Cloud Storage 버킷과 일치하는 리전을 선택합니다 (예: us-central1).
    런타임 Python 3.12 이상 선택
  5. 트리거 (선택사항) 섹션에서 다음을 수행합니다.

    1. + 트리거 추가를 클릭합니다.
    2. Cloud Pub/Sub를 선택합니다.
    3. Cloud Pub/Sub 주제 선택에서 cloudm-audit-trigger을 선택합니다.
    4. 저장을 클릭합니다.
  6. 인증 섹션에서 다음을 구성합니다.

    1. 인증 필요를 선택합니다.
    2. ID 및 액세스 관리 (IAM)를 확인합니다.
  7. 아래로 스크롤하고 컨테이너, 네트워킹, 보안을 펼칩니다.

  8. 보안 탭으로 이동합니다.

    • 서비스 계정: cloudm-audit-collector-sa를 선택합니다.
  9. 컨테이너 탭으로 이동합니다.

    1. 변수 및 보안 비밀을 클릭합니다.
    2. 각 환경 변수에 대해 + 변수 추가를 클릭합니다.

      변수 이름 예시 값 설명
      GCS_BUCKET cloudm-audit-logs Cloud Storage 버킷 이름
      GCS_PREFIX cloudm-audit 로그 파일의 접두사
      STATE_KEY cloudm-audit/state.json 상태 파일 경로
      CLOUDM_INSTANCE_URL yourcompany.cloudm.io CloudM Automate 인스턴스 URL
      CLOUDM_DOMAIN_ID your-domain-id CloudM 도메인 식별자
      CLOUDM_ACCESS_TOKEN your-access-token CloudM 서비스 계정 Bearer 토큰
      LOOKBACK_HOURS 24 초기 전환 확인 기간
  10. 변수 및 보안 비밀 섹션에서 요청까지 아래로 스크롤합니다.

    • 요청 제한 시간: 600초 (10분)를 입력합니다.
  11. 설정 탭으로 이동합니다.

    • 리소스 섹션에서 다음을 수행합니다.

      • 메모리: 512MiB 이상 선택
      • CPU: 1을 선택합니다.
  12. 버전 확장 섹션에서 다음을 수행합니다.

    • 최소 인스턴스 수: 0를 입력합니다.
    • 최대 인스턴스 수: 100를 입력합니다.
  13. 만들기를 클릭합니다.

  14. 서비스가 생성될 때까지 기다립니다 (1~2분).

  15. 서비스가 생성되면 인라인 코드 편집기가 자동으로 열립니다.

함수 코드 추가

  1. 진입점 필드에 main을 입력합니다.
  2. 인라인 코드 편집기에서 다음 두 파일을 만듭니다.

    • main.py:

      import functions_framework
      from google.cloud import storage
      import json
      import os
      import urllib3
      from datetime import datetime, timezone, timedelta
      
      http = urllib3.PoolManager(
        timeout=urllib3.Timeout(connect=10.0, read=60.0),
        retries=False,
      )
      
      storage_client = storage.Client()
      
      GCS_BUCKET = os.environ.get('GCS_BUCKET')
      GCS_PREFIX = os.environ.get('GCS_PREFIX', 'cloudm-audit')
      STATE_KEY = os.environ.get('STATE_KEY', 'cloudm-audit/state.json')
      CLOUDM_INSTANCE_URL = os.environ.get('CLOUDM_INSTANCE_URL', '').rstrip('/')
      CLOUDM_DOMAIN_ID = os.environ.get('CLOUDM_DOMAIN_ID')
      CLOUDM_ACCESS_TOKEN = os.environ.get('CLOUDM_ACCESS_TOKEN')
      LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
      
      @functions_framework.cloud_event
      def main(cloud_event):
        if not all([GCS_BUCKET, CLOUDM_INSTANCE_URL, CLOUDM_DOMAIN_ID, CLOUDM_ACCESS_TOKEN]):
          print('Error: Missing required environment variables')
          return
      
        try:
          bucket = storage_client.bucket(GCS_BUCKET)
          state = load_state(bucket)
          now = datetime.now(timezone.utc)
      
          if isinstance(state, dict) and state.get('last_event_date'):
            try:
              last_date = state['last_event_date']
              last_time = datetime.strptime(last_date, '%Y-%m-%d').replace(tzinfo=timezone.utc)
            except Exception as e:
              print(f"Warning: Could not parse last_event_date: {e}")
              last_time = now - timedelta(hours=LOOKBACK_HOURS)
          else:
            last_time = now - timedelta(hours=LOOKBACK_HOURS)
      
          from_date = last_time.strftime('%Y-%m-%d')
          to_date = now.strftime('%Y-%m-%d')
      
          print(f"Fetching logs from {from_date} to {to_date}")
      
          records = fetch_logs(from_date, to_date)
      
          if not records:
            print("No new log records found.")
            save_state(bucket, to_date)
            return
      
          timestamp = now.strftime('%Y%m%d_%H%M%S')
          object_key = f"{GCS_PREFIX}/cloudm_audit_{timestamp}.ndjson"
          blob = bucket.blob(object_key)
      
          ndjson = '\n'.join(
            [json.dumps(record, ensure_ascii=False, default=str) for record in records]
          ) + '\n'
          blob.upload_from_string(ndjson, content_type='application/x-ndjson')
      
          print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}")
      
          save_state(bucket, to_date)
      
          print(f"Successfully processed {len(records)} records")
      
        except Exception as e:
          print(f'Error processing logs: {str(e)}')
          raise
      
      def fetch_logs(from_date, to_date):
        instance = CLOUDM_INSTANCE_URL
        if not instance.startswith('https://'):
          instance = f"https://{instance}"
      
        endpoint = f"{instance}/_ah/api/events/v1/{CLOUDM_DOMAIN_ID}"
      
        headers = {
          'Authorization': f'Bearer {CLOUDM_ACCESS_TOKEN}',
          'Accept': 'application/json',
          'User-Agent': 'GoogleSecOps-CloudMCollector/1.0'
        }
      
        url = f"{endpoint}?from={from_date}&to={to_date}"
      
        try:
          response = http.request('GET', url, headers=headers)
      
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', '60'))
            print(f"Rate limited (429). Retry after {retry_after}s.")
            return []
      
          if response.status != 200:
            print(f"HTTP Error: {response.status}")
            response_text = response.data.decode('utf-8')
            print(f"Response body: {response_text}")
            return []
      
          data = json.loads(response.data.decode('utf-8'))
      
          if isinstance(data, list):
            records = data
          elif isinstance(data, dict):
            records = data.get('items', data.get('events', [data]))
          else:
            records = []
      
          print(f"Retrieved {len(records)} events")
          return records
      
        except Exception as e:
          print(f"Error fetching logs: {e}")
          return []
      
      def load_state(bucket):
        try:
          blob = bucket.blob(STATE_KEY)
          if blob.exists():
            return json.loads(blob.download_as_text())
        except Exception as e:
          print(f"Warning: Could not load state: {e}")
        return {}
      
      def save_state(bucket, last_event_date):
        try:
          state = {
            'last_event_date': last_event_date,
            'last_run': datetime.now(timezone.utc).isoformat()
          }
          blob = bucket.blob(STATE_KEY)
          blob.upload_from_string(
            json.dumps(state, indent=2),
            content_type='application/json'
          )
          print(f"Saved state: last_event_date={last_event_date}")
        except Exception as e:
          print(f"Warning: Could not save state: {e}")
      
    • requirements.txt:

      functions-framework==3.*
      google-cloud-storage==2.*
      urllib3>=2.0.0
      
  3. 배포를 클릭하여 함수를 저장하고 배포합니다.

  4. 배포가 완료될 때까지 기다립니다 (2~3분).

Cloud Scheduler 작업 만들기

Cloud Scheduler는 일정 간격으로 Pub/Sub 주제에 메시지를 게시하여 Cloud Run 함수를 트리거합니다.

  1. Google Cloud 콘솔에서 Cloud Scheduler로 이동합니다.
  2. 작업 만들기를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    설정
    이름 cloudm-audit-collector-hourly
    리전 Cloud Run 함수와 동일한 리전 선택
    주파수 0 * * * * (매시간 정각)
    시간대 시간대 선택 (UTC 권장)
    타겟 유형 Pub/Sub
    주제 cloudm-audit-trigger 선택
    메일 본문 {} (빈 JSON 객체)
  4. 만들기를 클릭합니다.

통합 테스트

  1. Cloud Scheduler 콘솔에서 작업을 찾습니다 (cloudm-audit-collector-hourly).
  2. 강제 실행을 클릭하여 작업을 수동으로 트리거합니다.
  3. 몇 초 동안 기다립니다.
  4. Cloud Run > 서비스로 이동합니다.
  5. cloudm-audit-collector를 클릭합니다.
  6. 로그 탭을 클릭합니다.
  7. 함수가 성공적으로 실행되었는지 확인합니다. 다음 항목을 찾습니다.

    Fetching logs from YYYY-MM-DD to YYYY-MM-DD
    Retrieved X events
    Wrote X records to gs://cloudm-audit-logs/cloudm-audit/cloudm_audit_YYYYMMDD_HHMMSS.ndjson
    Successfully processed X records
    
  8. Cloud Storage> 버킷으로 이동합니다.

  9. cloudm-audit-logs를 클릭합니다.

  10. cloudm-audit/ 폴더로 이동합니다.

  11. 현재 타임스탬프를 사용하여 새 .ndjson 파일이 생성되었는지 확인합니다.

로그에 오류가 표시되는 경우:

  • HTTP 401: CLOUDM_ACCESS_TOKEN 환경 변수가 올바른지 확인합니다.
  • HTTP 403: 서비스 계정에 전역 범위의 로그 보기 권한이 있는지 확인합니다.
  • HTTP 429: 비율 제한—함수가 중지되고 다음 예약된 실행 시 재개됩니다.
  • 환경 변수 누락: Cloud Run 함수 구성에 필요한 모든 변수가 설정되어 있는지 확인합니다.

Google SecOps 서비스 계정 가져오기

Google SecOps는 고유한 서비스 계정을 사용하여 Cloud Storage 버킷에서 데이터를 읽습니다. 이 서비스 계정에 버킷 액세스 권한을 부여해야 합니다.

서비스 계정 이메일 가져오기

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다(예: CloudM Audit Logs).
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 CloudM을 선택합니다.
  7. 서비스 계정 가져오기를 클릭합니다.

    고유한 서비스 계정 이메일이 표시됩니다(예:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 다음 단계에서 사용할 수 있도록 이 이메일 주소를 복사합니다.

  9. 다음을 클릭합니다.

  10. 다음 입력 매개변수의 값을 지정합니다.

    • 스토리지 버킷 URL: 다음 접두사 경로를 사용하여 Cloud Storage 버킷 URI를 입력합니다.

      gs://cloudm-audit-logs/cloudm-audit/
      
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.

      • 삭제 안함: 전송 후 파일을 삭제하지 않습니다 (테스트에 권장).
      • 전송된 파일 삭제: 전송이 완료되면 파일을 삭제합니다.
      • 전송된 파일 및 빈 디렉터리 삭제: 전송이 완료되면 파일과 빈 디렉터리를 삭제합니다.

    • 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다 (기본값은 180일).

    • 애셋 네임스페이스: 애셋 네임스페이스입니다.

    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.

  11. 다음을 클릭합니다.

  12. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

Google SecOps 서비스 계정에 IAM 권한 부여

Google SecOps 서비스 계정에는 Cloud Storage 버킷에 대한 스토리지 객체 뷰어 역할이 필요합니다.

  1. Cloud Storage> 버킷으로 이동합니다.
  2. cloudm-audit-logs를 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    • 주 구성원 추가: Google SecOps 서비스 계정 이메일 붙여넣기
    • 역할 할당: 스토리지 객체 뷰어를 선택합니다.
  6. 저장을 클릭합니다.

CloudM Logs API 매개변수

CloudM Logs API는 로그 이벤트를 필터링하기 위해 다음 쿼리 매개변수를 지원합니다.

매개변수 형식 설명
byUser 이메일 주소 작업을 수행한 사용자를 기준으로 이벤트를 필터링합니다 (CloudM UI의 사용자와 유사).
from yyyy-MM-dd 기간 필터의 시작일
~ yyyy-MM-dd 기간 필터의 종료일
contextType 문자열 컨텍스트 유형 (예: 프로필, 그룹, OU)별로 필터링
contextName 문자열 작업의 타겟 (예: 온보딩 해제되는 특정 사용자)별로 필터링
작업 문자열 작업 유형별로 필터링 (예: 별칭 할당, 사용자 정지)
country 국가 코드 위치정보 국가 코드로 필터링

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
정보 정보 값이 직접 복사됨
Context_Name about.labels about_Context_Name, about_Context_Type, labels0에서 키-값 쌍으로 병합됨
Context_Type about.labels
Login_Type about.labels
발급자 additional.fields additional_field0, additional_field1, additional_field2에서 병합됨
SAML_code additional.fields
SAML_ACS_Url additional.fields
작업 extensions.auth.type 작업이 SSORequest와 일치하는 경우 SSO로 설정하고 Context_Type이 LoginUser인 경우 AUTHTYPE_UNSPECIFIED로 설정합니다.
Context_Type extensions.auth.type
타임스탬프 metadata.event_timestamp 타임스탬프에서 날짜/시간과 시간대를 추출하고, 시간대를 오프셋으로 변환하고, 연결하고, 타임스탬프로 파싱했습니다.
작업 metadata.event_type 작업이 Update/Delete/SuspendUser/UnsuspendUser/Create와 일치하는 경우 USER_UNCATEGORIZED로 설정, 작업이 SSORequest/SSORequestFail과 일치하거나 Context_Type이 LoginUser인 경우 USER_LOGIN으로 설정, IP가 비어 있지 않은 경우 STATUS_UPDATE로 설정, 그 외의 경우 GENERIC_EVENT로 설정
Context_Type metadata.event_type
User_Agent network.http.user_agent 값이 직접 복사됨
principal principal Context_Type이 LoginUser가 아닌 경우 principal에서 이름을 바꿨고, 그렇지 않은 경우 target에서 이름을 바꿨습니다.
target principal
Organization_Unit principal.administrative_domain 값이 직접 복사됨
IP principal.ip 값이 직접 복사됨
principal.location.city 값이 직접 복사됨
국가 principal.location.country_or_region 값이 직접 복사됨
위치정보 principal.location.region_latitude grok을 사용하여 위치정보에서 추출된 위도
위치정보 principal.location.region_longitude grok을 사용하여 위치정보에서 추출한 경도
리전 principal.location.state 값이 직접 복사됨
작업 수행자 principal.user.attribute.roles 액터가 이메일이 아니고 비어 있지 않은 경우 role.name으로 설정한 후 병합됨
작업 수행자 principal.user.email_addresses 작성자가 이메일 정규식과 일치하는 경우 값이 직접 복사됨
메시지 principal.user.userid grok을 사용하여 메시지에서 추출한 사용자 이름
security_result security_result security_result 객체가 병합됨
SAML_code security_result.action SAML_code가 Success와 일치하면 ALLOW로 설정하고 RequestDenied와 일치하면 BLOCK으로 설정합니다.
메시지 security_result.description 값이 직접 복사됨
심각도 security_result.severity 오류/심각한 경우 대문자로 설정하고, 정보인 경우 INFORMATIONAL, 경고인 경우 MEDIUM, 그 외의 경우 UNKNOWN_SEVERITY로 설정합니다.
작업 security_result.summary 값이 직접 복사됨
target target Context_Type이 LoginUser가 아닌 경우 타겟에서 이름을 바꿨고, 그 밖의 경우 주 구성원에서 이름을 바꿨습니다.
principal target
metadata.product_name metadata.product_name 'CLOUDM'으로 설정
metadata.vendor_name metadata.vendor_name 'CLOUDM'으로 설정

변경 로그

이 파서의 변경 로그 보기

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.