Area 1 로그 수집

다음에서 지원:

이 문서에서는 AWS S3를 사용하여 Area 1 Email Security (Cloudflare 제공) 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 JSON 형식으로 로그를 처리합니다. 중첩된 JSON 구조에서 관련 필드를 추출하고, 이를 통합 데이터 모델 (UDM)에 매핑하고, 첨부파일 해시 및 처리와 같은 지리 정보와 보안 세부정보로 데이터를 보강합니다.

시작하기 전에

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

  • Google SecOps 인스턴스
  • Windows 2016 이상 또는 systemd가 설치된 Linux 호스트
  • 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
  • Area 1 Email Security (Cloudflare 제공)에 대한 액세스 권한 관리

AWS IAM 및 S3 버킷 구성

  1. 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
  2. AWS 콘솔에 로그인합니다.
  3. S3 > 버킷 만들기로 이동합니다.
  4. 버킷 이름을 입력합니다 (예: area1-security-logs).
  5. 다른 기본값은 그대로 두거나 필요한 경우 암호화 및 버전 관리를 구성합니다.
  6. 만들기를 클릭합니다.
  7. 나중에 참조할 수 있도록 버킷 이름리전을 저장합니다.
  8. 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
  9. 생성된 사용자를 선택합니다.
  10. 보안 사용자 인증 정보 탭을 선택합니다.
  11. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  12. 사용 사례서드 파티 서비스를 선택합니다.
  13. 다음을 클릭합니다.
  14. 선택사항: 설명 태그를 추가합니다.
  15. 액세스 키 만들기를 클릭합니다.
  16. CSV 파일 다운로드를 클릭하고 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  17. 완료를 클릭합니다.
  18. 권한 탭을 선택합니다.
  19. 권한 정책에서 권한 추가를 클릭합니다.
  20. 정책 직접 연결을 선택합니다.
  21. AmazonS3FullAccess 정책을 검색합니다.
  22. 정책을 선택합니다.
  23. 다음을 클릭합니다.
  24. 권한 추가를 클릭합니다.

Get Area 1 API Credentials(Area 1 API 사용자 인증 정보 가져오기)

  1. Area 1 Security (Cloudflare) 대시보드에 로그인합니다.
  2. 설정 > API 액세스로 이동합니다.
  3. API 키 (토큰)를 생성합니다.
  4. 토큰을 복사하여 안전한 장소에 저장합니다.

필수 Python 패키지 구성

  1. 로그 수집 호스트 (예: AWS VM)에 로그인하고 다음을 실행하여 AWS 사용자 인증 정보를 구성합니다.

    pip install boto3 requests
    aws configure
    

Area 1 Log Puller 스크립트 만들기

  1. sudo vi area1_to_s3.py를 입력하여 다음 파일을 만들고 다음 코드를 복사합니다.

    • 다음을 조정합니다.
    #!/usr/bin/env python3
    import os
    import requests
    import boto3
    import datetime
    import json
    
    # Configuration
    AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN")  # Load securely from env
    AWS_PROFILE = os.environ.get("AWS_PROFILE", None)    # Optional, for named profiles
    S3_BUCKET_NAME = "area1-security-logs"
    LOG_TYPE = "events"
    
    # Time range
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(days=1)
    
    def fetch_area1_logs():
        url = f"https://api.area1security.com/v1/{LOG_TYPE}"
        headers = {
            "Authorization": f"Bearer {AREA1_API_TOKEN}",
            "Accept": "application/json"
        }
        params = {
            "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"),
            "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        return response.json()
    
    def upload_to_s3(data):
        filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json"
    
        session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session()
        s3 = session.client("s3")
    
        s3.put_object(
            Bucket=S3_BUCKET_NAME,
            Key=f"logs/{filename}",
            Body=json.dumps(data).encode("utf-8"),
            ContentType="application/json"
        )
        print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/")
    
    if __name__ == "__main__":
        logs = fetch_area1_logs()
        upload_to_s3(logs)
    
  2. 저장하고 종료하기 vi: esc를 클릭한 다음 :wq를 입력합니다.

환경 변수 저장

  1. /etc/area1.env (또는 /home/user/.area1.env)에 환경 변수를 저장할 보안 파일 만들기

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. 파일이 안전한지 확인합니다.

    chmod 600 /etc/area1.env
    

스크립트 실행 및 테스트

  1. 다음 스크립트를 실행합니다.

    python3 area1_to_s3.py
    
  2. 다음과 같이 표시됩니다.

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

Cron으로 자동화

  1. sudo vi /usr/local/bin/run_area1.sh를 실행하여 Cron용 래퍼 스크립트를 만든 다음 다음 코드를 복사합니다.

    #!/usr/bin/env bash
    set -euo pipefail
    
    source /etc/area1.env
    /usr/bin/python3 /opt/scripts/area1_to_s3.py
    
  2. 파일을 실행 가능하게 만듭니다.

    chmod +x /usr/local/bin/run_area1.sh
    
  3. 매일 오전 1시(UTC)에 실행되도록 설정합니다.

    crontab -e
    0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
    

피드 설정

Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.

  • SIEM 설정 > 피드
  • 콘텐츠 허브 > 콘텐츠 팩

SIEM 설정 > 피드에서 피드 설정

피드를 구성하려면 다음 단계를 따르세요.

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 다음 페이지에서 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다 (예: Area1 Logs).
  5. 소스 유형으로 Amazon S3를 선택합니다.
  6. 로그 유형으로 Area1 Security를 선택합니다.
  7. 다음을 클릭합니다.
  8. 다음 입력 매개변수의 값을 지정합니다.

    • 리전: Amazon S3 버킷이 있는 리전입니다.
    • S3 URI: 버킷 URI (형식은 s3://<your-log-bucket-name>이어야 함). 다음을 대체합니다.
      • your-log-bucket-name: 버킷의 이름입니다.
    • URI is a: 하위 디렉터리가 포함된 디렉터리를 선택합니다.
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
    • 액세스 키 ID: s3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: s3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
  9. 다음을 클릭합니다.

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

콘텐츠 허브에서 피드 설정하기

다음 필드의 값을 지정합니다.

  • 리전: Amazon S3 버킷이 있는 리전입니다.

    • S3 URI: 버킷 URI (형식은 s3://<your-log-bucket-name>이어야 함). 다음을 대체합니다.
      • your-log-bucket-name: 버킷의 이름입니다.
    • URI is a: 하위 디렉터리가 포함된 디렉터리를 선택합니다.
    • 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
    • 액세스 키 ID: s3 버킷에 액세스할 수 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: s3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.§

고급 옵션

  • 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
  • 소스 유형: Google SecOps로 로그를 수집하는 데 사용되는 방법입니다.
  • 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
  • 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.

UDM 매핑 테이블

로그 필드 UDM 매핑 논리
alert_id security_result.rule_id 값은 alert_id 필드에서 가져옵니다.
alert_reasons security_result.description 값은 alert_reasons 필드에서 가져옵니다.
attachments.att_size security_result.about.file.size 값은 attachments.att_size 필드에서 가져와 부호 없는 정수로 변환됩니다.
attachments.disposition security_result.about.user.attribute.labels.value 값은 attachments.disposition 필드에서 가져옵니다.
attachments.extension security_result.about.file.mime_type 값은 attachments.extension 필드에서 가져옵니다.
attachments.md5 security_result.about.file.md5 값은 attachments.md5 필드에서 가져옵니다.
attachments.name security_result.about.file.full_path 값은 attachments.name 필드에서 가져옵니다.
attachments.sha1 security_result.about.file.sha1 값은 attachments.sha1 필드에서 가져옵니다.
attachments.sha256 security_result.about.file.sha256 값은 attachments.sha256 필드에서 가져옵니다.
attachments.ssdeep security_result.about.file.ssdeep 값은 attachments.ssdeep 필드에서 가져옵니다.
delivery_mode security_result.detection_fields.value 값은 delivery_mode 필드에서 가져옵니다.
envelope_from principal.user.email_addresses, network.email.from 값은 envelope_from 필드에서 가져옵니다.
envelope_to network.email.to, target.user.email_addresses 값은 envelope_to 필드에서 가져옵니다.
final_disposition security_result.category_details 값은 final_disposition 필드에서 가져옵니다.
message_id metadata.product_log_id 값은 '<' 및 '>' 문자를 삭제한 후 message_id 필드에서 가져옵니다.
replyto network.email.bounce_address 값은 replyto 필드에서 가져옵니다.
smtp_helo_server_ip principal.ip 값은 smtp_helo_server_ip 필드에서 가져옵니다.
smtp_helo_server_ip_as_name principal.location.name 값은 smtp_helo_server_ip_as_name 필드에서 가져옵니다.
smtp_helo_server_ip_as_number principal.asset_id 값은 smtp_helo_server_ip_as_number 필드에서 가져오고 asset_id:이 앞에 추가됩니다.
smtp_helo_server_ip_geo principal.location.country_or_region, principal.location.state, principal.location.city 값은 Grok 패턴을 사용하여 smtp_helo_server_ip_geo 필드에서 추출됩니다.
smtp_helo_server_name principal.administrative_domain 값은 smtp_helo_server_name 필드에서 가져옵니다.
source metadata.vendor_name 값은 source 필드에서 가져옵니다. 필드가 비어 있으면 값이 area1security로 설정됩니다.
subject network.email.subject 값은 subject 필드에서 가져옵니다.
시간 metadata.event_timestamp 값은 time 필드에서 가져와 타임스탬프로 변환됩니다.
metadata.event_type 값은 EMAIL_TRANSACTION로 설정됩니다.
metadata.product_name 값은 AREA1로 설정됩니다.
metadata.log_type 값은 AREA1로 설정됩니다.
security_result.about.user.attribute.labels.key 값은 disposition로 설정됩니다.
security_result.category 값은 SOFTWARE_MALICIOUS로 설정됩니다.
security_result.detection_fields.key 값은 delivery_mode로 설정됩니다.

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