Pub/Sub를 Google SecOps와 통합

이 문서에서는 Pub/Sub를 Google Security Operations (Google SecOps)와 통합하는 방법을 안내합니다.

통합 버전: 1.0

시작하기 전에

Pub/Sub 통합을 사용하려면 다음이 필요합니다.

  • Google Cloud 서비스 계정: 기존 서비스 계정을 사용하거나 새 계정을 만들 수 있습니다.

    서비스 계정 만들기에 관한 안내는 서비스 계정 만들기를 참고하세요.

    서비스 계정을 사용하여 Google Cloud에 인증하는 경우 JSON으로 서비스 계정 키를 만들고 통합 매개변수를 구성할 때 다운로드한 JSON 파일의 콘텐츠를 제공할 수 있습니다.

    참고: 보안상의 이유로 서비스 계정 키 대신 워크로드 아이덴티티 이메일 주소를 사용하는 것이 좋습니다. 워크로드 아이덴티티에 대한 자세한 내용은 워크로드의 아이덴티티를 참고하세요.

  • 주 구성원의 IAM 역할을 구성합니다.

    Pub/Sub는 액세스 제어에 Identity and Access Management (IAM)를 사용하며 주 구성원에게 Pub/Sub Viewer 역할을 부여해야 합니다.

통합 매개변수

Pub/Sub 통합에는 다음 매개변수가 필요합니다.

매개변수 설명
Workload Identity Email 선택사항

워크로드 아이덴티티 제휴의 클라이언트 이메일 주소입니다.

이 매개변수 또는 Service Account JSON File Content 매개변수를 구성할 수 있습니다.

워크로드 아이덴티티 제휴를 사용하여 서비스 계정을 가장하려면 서비스 계정에 Service Account Token Creator 역할을 부여합니다. 워크로드 아이덴티티 및 워크로드 아이덴티티 사용 방법에 관한 자세한 내용은 워크로드용 아이덴티티를 참고하세요.

Service Account JSON File Content 선택사항

서비스 계정 키 JSON 파일의 콘텐츠입니다.

이 매개변수 또는 Workload Identity Email 매개변수를 구성할 수 있습니다.

이 매개변수를 구성하려면 서비스 계정을 만들 때 다운로드한 서비스 계정 키 JSON 파일의 전체 콘텐츠를 제공하세요.

서비스 계정을 인증 방법으로 사용하는 방법에 대한 자세한 내용은 서비스 계정 개요를 참고하세요.

Quota Project ID 선택사항

Google Cloud API 및 결제에 사용하는 Google Cloud 프로젝트 ID입니다. 이 매개변수를 사용하려면 서비스 계정에 Service Usage Consumer 역할을 부여해야 합니다. IAM 역할에 대한 자세한 내용은 IAM으로 액세스 제어를 참고하세요.

통합은 이 매개변수 값을 모든 API 요청에 연결합니다.

이 매개변수의 값을 설정하지 않으면 통합에서 Google Cloud 서비스 계정에서 할당량 프로젝트 ID를 가져옵니다.

Project ID 선택사항

통합에서 사용할 프로젝트 ID입니다.

이 매개변수의 값을 설정하지 않으면 통합에서 Google Cloud 서비스 계정에서 프로젝트 ID를 가져옵니다.

Verify SSL 필수

선택하면 통합에서 Pub/Sub 연결에 사용되는 SSL 인증서가 유효한지 확인합니다.

기본적으로 선택되어 있습니다.

Google SecOps에서 통합을 구성하는 방법에 대한 안내는 통합 구성을 참고하세요.

필요한 경우 이후 단계에서 변경할 수 있습니다. 통합 인스턴스를 구성한 후 플레이북에서 사용할 수 있습니다. 여러 인스턴스 구성 및 지원에 대한 자세한 내용은 다중 인스턴스 지원을 참고하세요.

작업

작업에 관한 자세한 내용은 Workdesk에서 대기 중인 작업에 응답수동 작업 실행을 참고하세요.

핑 작업을 사용하여 Pub/Sub 연결을 테스트합니다.

이 작업은 Google SecOps 항목에서 실행되지 않습니다.

작업 입력

없음

작업 출력

Ping 작업은 다음 출력을 제공합니다.

작업 출력 유형 가용성
케이스 월 연결 사용할 수 없음
케이스 월 링크 사용할 수 없음
케이스 월 테이블 사용할 수 없음
보강 테이블 사용할 수 없음
JSON 결과 사용할 수 없음
출력 메시지 사용 가능
스크립트 결과 사용 가능
출력 메시지

Ping 작업은 다음 출력 메시지를 반환할 수 있습니다.

출력 메시지 메시지 설명
Successfully connected to the Pub/Sub server with the provided connection parameters! 작업이 완료되었습니다.
Failed to connect to the Pub/Sub server! Error is ERROR_REASON

작업이 실패했습니다.

서버, 입력 매개변수 또는 사용자 인증 정보에 대한 연결을 확인합니다.

스크립트 결과

다음 표에는 Ping 작업을 사용할 때 스크립트 결과 출력 값이 나와 있습니다.

스크립트 결과 이름
is_success True 또는 False

커넥터

Google SecOps에서 커넥터를 구성하는 방법에 대한 자세한 내용은 데이터 수집(커넥터)을 참고하세요.

Pub/Sub – 메시지 커넥터

Google SecOps 플랫폼에서 Pub/Sub – Messages ConnectorPubSub – Messages Connector라고 합니다.

Pub/Sub – 메시지 커넥터를 사용하여 Pub/Sub에서 메시지를 가져옵니다.

JSON 심각도 매핑

알림 심각도를 매핑하려면 Pub/Sub - 메시지 커넥터Severity Mapping JSON 매개변수의 심각도 값을 가져오는 데 사용하는 필드를 지정해야 합니다. 커넥터 응답에는 integer, float, string과 같은 값 유형이 포함될 수 있습니다.

Pub/Sub – 메시지 커넥터integerfloat 값을 읽고 Google SecOps 설정에 따라 매핑합니다. 다음 표는 Google SecOps의 심각도에 대한 integer 값의 매핑을 보여줍니다.

정수 값 매핑된 심각도
100 Critical
80부터 100까지 High
60부터 80까지 Medium
40부터 60까지 Low
40 미만 Informational

대답에 string 값이 포함된 경우 Pub/Sub – Messages Connector에 추가 구성이 필요합니다.

처음에는 기본값이 다음과 같이 표시됩니다.

{
    "Default": 60
}

매핑에 필요한 값이 event_severity JSON 키에 있는 경우 값은 다음과 같을 수 있습니다.

  • "Malicious"
  • "Benign"
  • "Unknown"

event_severity JSON 키 값을 파싱하고 JSON 객체의 형식이 올바른지 확인하려면 Severity Mapping JSON 매개변수를 다음과 같이 구성하세요.

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

"Default" 값은 필수 항목입니다.

동일한 JSON 객체에 여러 일치 항목이 있는 경우 Pub/Sub – 메시지 커넥터는 첫 번째 JSON 객체 키에 우선순위를 부여합니다.

integer 또는 float 값이 포함된 필드를 사용하려면 Severity Mapping JSON 매개변수에서 키와 빈 문자열을 구성합니다.

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

커넥터 입력

Pub/Sub – 메시지 커넥터에는 다음 매개변수가 필요합니다.

매개변수 설명
Product Field Name 필수

제품 이름이 저장된 필드의 이름입니다.

기본값은 Product Name입니다.

Event Field Name 필수

이벤트 이름(하위 유형)을 결정하는 데 사용되는 필드 이름입니다.

기본값은 event_type입니다.

Environment Field Name 선택사항

환경 이름이 저장된 필드의 이름입니다.

환경 필드를 찾을 수 없으면 환경이 기본 환경으로 설정됩니다.

기본값은 ""입니다.

Environment Regex Pattern 선택사항

Environment Field Name 필드에 있는 값에서 실행할 정규 표현식 패턴입니다. 이 매개변수를 사용하면 정규 표현식 로직을 사용하여 환경 필드를 조작할 수 있습니다.

기본값 .*를 사용하여 필요한 원시 Environment Field Name 값을 가져옵니다.

정규 표현식 패턴이 null이거나 비어 있거나 환경 값이 null인 경우 최종 환경 결과는 기본 환경입니다.

Script Timeout (Seconds) 필수

현재 스크립트를 실행하는 Python 프로세스의 제한 시간 한도(초)입니다.

기본값은 300 seconds입니다.

Service Account JSON File Content 선택사항

서비스 계정 키 JSON 파일의 콘텐츠입니다.

이 매개변수 또는 Workload Identity Email 매개변수를 구성할 수 있습니다.

이 매개변수를 구성하려면 서비스 계정을 만들 때 다운로드한 서비스 계정 키 JSON 파일의 전체 콘텐츠를 제공하세요.

Pub/Sub – 메시지 커넥터의 경우 서비스 계정 키 JSON 파일을 사용한 인증이 워크로드 아이덴티티 제휴보다 우선합니다.

Workload Identity Email 선택사항

서비스 계정의 클라이언트 이메일 주소입니다.

이 매개변수 또는 Service Account JSON File Content 매개변수를 구성할 수 있습니다.

워크로드 아이덴티티 제휴를 사용하여 서비스 계정을 가장하려면 서비스 계정에 Service Account Token Creator 역할을 부여합니다.

Project ID 선택사항

커넥터에서 사용할 프로젝트 ID입니다.

Quota Project ID 선택사항

Google Cloud API 및 결제에 사용하는 Google Cloud 프로젝트 ID입니다. 이 매개변수를 사용하려면 서비스 계정에 Service Usage Consumer 역할을 부여해야 합니다. IAM 역할에 대한 자세한 내용은 IAM으로 액세스 제어를 참고하세요.

통합은 이 매개변수 값을 모든 API 요청에 연결합니다.

Subscription ID 필수

Pub/Sub 구독 ID입니다.

Case Name Template 선택사항

맞춤 케이스 이름입니다.

이 매개변수를 구성하면 커넥터가 Google SecOps 이벤트에 custom_case_name라는 새 키를 추가합니다.

[name of the field] 형식으로 자리표시자를 제공할 수 있습니다.

예: Phishing - [event_mailbox]

자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 이 매개변수를 구성하려면 접두사 없이 이벤트 필드를 지정하세요.

Alert Name Template 필수

맞춤 알림 이름입니다.

[name of the field] 형식으로 자리표시자를 제공할 수 있습니다.

예: Phishing - [event_mailbox]

자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 값을 제공하지 않거나 유효하지 않은 템플릿을 사용하는 경우 커넥터는 CONNECTOR_NAME - Alert 형식의 대체 값을 사용합니다. 이 매개변수를 구성하려면 접두사 없이 이벤트 필드를 지정하세요.

Rule Generator Template 필수

맞춤 규칙 생성기

[name of the field] 형식으로 자리표시자를 제공할 수 있습니다.

예: Phishing - [event_mailbox]

자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 값을 제공하지 않거나 유효하지 않은 템플릿을 사용하는 경우 커넥터는 CONNECTOR_NAME - Rule Generator 형식의 대체 값을 사용합니다. 이 매개변수를 구성하려면 접두사 없이 이벤트 필드를 지정하세요.

Timestamp Field 필수

Google SecOps 알림 타임스탬프를 정의하는 필드의 이름입니다.

타임스탬프가 Unix 에포크 시간 형식을 사용하지 않는 경우 Timestamp Format 매개변수에서 타임스탬프 형식을 정의합니다.

기본값은 message_publishTime입니다.

Timestamp Format 선택사항

메시지 타임스탬프 형식입니다.

커넥터는 메시지를 올바르게 처리하기 위해 타임스탬프가 필요합니다. 타임스탬프가 Unix 에포크 시간 형식을 사용하지 않고 타임스탬프 형식을 구성하지 않으면 커넥터가 실패합니다.

기본값은 %Y-%m-%dT%H:%M:%S.%fZ입니다.

Severity Mapping JSON 필수

커넥터가 메시지에서 심각도 수준을 추출하는 방법을 정의하는 JSON 객체입니다.

기본값은 다음과 같습니다.

    {
      "Default": "60"
    }
    

심각도 매핑에 관한 자세한 내용은 JSON 심각도 매핑을 참고하세요.

Unique ID Field 선택사항

메시지가 고유한지 확인하는 필드의 이름입니다.

값을 설정하지 않으면 커넥터가 SHA-256 해시를 생성하고 이를 메시지의 식별자로 사용합니다.

Max Messages To Fetch 선택사항

커넥터 반복마다 처리할 최대 메시지 수입니다.

최대 개수는 100개입니다.

Disable Overflow 선택사항

선택하면 커넥터가 알림 생성 중에 Google SecOps 오버플로 메커니즘을 무시합니다.

기본적으로 선택되어 있습니다.

Verify SSL 필수

선택하면 통합에서 Pub/Sub 연결에 사용되는 SSL 인증서가 유효한지 확인합니다.

기본적으로 선택됩니다.

Proxy Server Address 선택사항

사용할 프록시 서버의 주소입니다.

Proxy Username 선택사항

인증할 프록시 사용자 이름입니다.

Proxy Password 선택사항

인증할 프록시 비밀번호입니다.

커넥터 규칙

Pub/Sub – 메시지 커넥터는 프록시를 지원합니다.

커넥터 이벤트

다음은 Pub/Sub – 메시지 커넥터가 생성하는 Google SecOps 이벤트의 JSON 출력을 보여줍니다.

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

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