Pub/Sub를 Google SecOps와 통합
이 문서에서는 Pub/Sub을 Google Security Operations와 통합하는 방법을 설명합니다.
사용 사례
Pub/Sub 통합은 다음 사용 사례를 지원합니다.
자동 알림 수집: Pub/Sub 주제에 게시된 보안 로그, 알림, 원격 분석을 지속적으로 검색하여 Google SecOps에 케이스로 수집합니다.
중앙 집중식 보안 조정: 클라우드 및 서드 파티 시스템에서 Pub/Sub를 통해 보안 이벤트 라우팅을 통합하여 자동화된 대응 플레이북을 트리거합니다.
시작하기 전에
Google SecOps에서 Pub/Sub 통합을 구성하기 전에 다음 필수 단계를 완료하세요.
서비스 계정에 필요한 Identity and Access Management 역할을 부여합니다.
다음 인증 방법 중 하나를 선택하고 구성합니다.
옵션 1: 워크로드 아이덴티티 (권장): 이 방법은 서비스 계정 가장을 사용하여 단기 토큰을 사용합니다.
옵션 2: 서비스 계정 JSON 키: 이 방법은 정적이고 수명이 긴 보안 비밀 키 파일을 사용합니다.
서비스 계정 만들기
Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
추가 서비스 계정 만들기를 클릭합니다.
이름과 설명을 입력하고 완료를 클릭합니다. 서비스 계정의 이메일 주소를 기록해 둡니다.
IAM 역할 부여
권한을 부여하면 통합에서 구독의 메시지를 보고 가져올 수 있습니다. 표준 역할을 할당하려면 다음 단계를 완료하세요.
Google Cloud 콘솔에서 IAM으로 이동합니다.
서비스 계정을 찾아 주 구성원 수정(수정)을 클릭합니다.
다른 역할 추가를 클릭하고 Pub/Sub 뷰어(
roles/pubsub.viewer)를 선택합니다.저장을 클릭합니다.
워크로드 아이덴티티 사용자 인증 정보 구성
워크로드 아이덴티티는 서비스 계정 가장을 사용하여 단기 액세스 토큰을 사용하므로 권장되는 접근 방식입니다.
고유 인스턴스 ID 식별
연결을 설정하려면 Google SecOps 인스턴스에 서비스 계정을 가장할 권한을 부여해야 합니다.
Google SecOps에서 콘텐츠 허브 > 응답 통합으로 이동합니다.
Pub/Sub 통합을 선택하고 워크로드 아이덴티티 이메일에 서비스 계정 이메일을 입력합니다.
저장 > 테스트를 클릭합니다. 테스트가 실패할 것으로 예상됩니다.
테스트 버튼 옆에 있는 close_small을 클릭하고
gke-init-python@...또는soar-python@...로 시작하는 ID 이메일을 찾습니다.이 고유 이메일 주소를 복사합니다.
Google Cloud에서 인스턴스 ID 승인
Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동합니다.
타겟 서비스 계정을 선택하고 권한 > 액세스 권한 부여로 이동합니다.
고유 이메일 주소를 새 주 구성원에 붙여넣고 서비스 계정 토큰 생성자 역할 (
roles/iam.serviceAccountTokenCreator)을 할당합니다.
할당량 프로젝트 액세스 권한 부여
워크로드 아이덴티티로 인증하려면 API 사용량과 결제를 추적하는 Quota Project ID가 필요합니다.
Google Cloud 콘솔에서 할당량 프로젝트로 사용되는 프로젝트의 IAM으로 이동합니다.
서비스 계정을 찾아 주 구성원 수정(수정)을 클릭합니다.
다른 역할 추가를 클릭하고 서비스 사용량 소비자(
roles/serviceusage.serviceUsageConsumer)를 선택합니다.저장을 클릭합니다.
JSON 키 구성
정적이고 수명이 긴 보안 비밀 키 파일은 수동으로 순환해야 합니다. 워크로드 아이덴티티 인증을 사용할 수 없는 경우에만 이 메서드를 사용하세요.
Google Cloud 콘솔에서 IAM 및 관리자 > 서비스 계정으로 이동하여 서비스 계정을 선택합니다.
키 탭으로 이동하여 키 추가 > 새 키 만들기를 클릭합니다.
JSON을 선택하고 만들기를 클릭합니다. 브라우저가 JSON 파일을 컴퓨터에 다운로드합니다.
통합 매개변수
Pub/Sub 통합에는 다음 매개변수가 필요합니다.
| 매개변수 | 설명 |
|---|---|
Workload Identity Email |
선택사항입니다. 서비스 계정의 클라이언트 이메일 주소입니다. 워크로드 아이덴티티를 사용하여 인증하는 경우에만 이 매개변수를 구성하세요. 구성된 경우 |
Service Account JSON File Content |
선택사항입니다. 서비스 계정 키 JSON 파일의 전체 콘텐츠입니다. 서비스 계정 키 인증을 위해 이 매개변수를 구성합니다. |
Quota Project ID |
선택사항입니다. API 사용 및 결제에 사용되는 프로젝트 ID입니다. 워크로드 아이덴티티 인증을 사용하는 경우 이 매개변수가 필요합니다. 값을 제공하지 않으면 통합에서 서비스 계정 사용자 인증 정보에서 ID를 가져옵니다. |
Project ID |
선택사항입니다. Pub/Sub에서 타겟팅할 프로젝트 ID입니다. 값을 제공하지 않으면 통합에서 서비스 계정 사용자 인증 정보에서 ID를 가져옵니다. |
Verify SSL |
필수 항목입니다. 서버 연결에 대한 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 Connector는 PubSub – Messages Connector라고 합니다.
Pub/Sub – 메시지 커넥터를 사용하여 Pub/Sub에서 메시지를 가져옵니다.
JSON 심각도 매핑
알림 심각도를 매핑하려면 Pub/Sub - 메시지 커넥터가 Severity Mapping JSON 매개변수의 심각도 값을 가져오는 데 사용하는 필드를 지정해야 합니다. 커넥터 응답에는 integer, float, string과 같은 값 유형이 포함될 수 있습니다.
Pub/Sub – 메시지 커넥터는 integer 및 float 값을 읽고 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 |
필수 제품 이름이 저장된 필드의 이름입니다. 기본값은 |
Event Field Name |
필수 이벤트 이름(하위 유형)을 결정하는 데 사용되는 필드 이름입니다. 기본값은 |
Environment Field Name |
선택사항
환경 이름이 저장된 필드의 이름입니다. 환경 필드를 찾을 수 없으면 환경이 기본 환경으로 설정됩니다. 기본값은 |
Environment Regex Pattern |
선택사항
기본값 정규 표현식 패턴이 null이거나 비어 있거나 환경 값이 null인 경우 최종 환경 결과는 기본 환경입니다. |
PythonProcessTimeout |
필수 현재 스크립트를 실행하는 Python 프로세스의 제한 시간 한도(초)입니다. 기본값은 |
Service Account JSON File Content |
선택사항 서비스 계정 키 JSON 파일의 콘텐츠입니다. 이 파라미터 또는 이 매개변수를 구성하려면 서비스 계정을 만들 때 다운로드한 서비스 계정 키 JSON 파일의 전체 콘텐츠를 제공하세요. Pub/Sub – 메시지 커넥터의 경우 서비스 계정 키 JSON 파일을 사용한 인증이 워크로드 아이덴티티 제휴보다 우선합니다. |
Workload Identity Email |
선택사항 서비스 계정의 클라이언트 이메일 주소입니다. 이 파라미터 또는 워크로드 아이덴티티 제휴를 사용하여 서비스 계정을 가장하려면 서비스 계정에 |
Project ID |
선택사항 커넥터에서 사용할 프로젝트 ID입니다. |
Quota Project ID |
선택사항 Google Cloud API 및 결제에 사용하는 Google Cloud 프로젝트 ID입니다. 이 매개변수를 사용하려면 서비스 계정에 통합은 이 파라미터 값을 모든 API 요청에 연결합니다. |
Subscription ID |
필수 Pub/Sub 구독 ID입니다. |
Case Name Template |
선택사항 맞춤 케이스 이름입니다. 이 매개변수를 구성하면 커넥터가 Google SecOps 이벤트에
예: 자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 이 매개변수를 구성하려면 접두사 없이 이벤트 필드를 지정하세요. |
Alert Name Template |
필수 맞춤 알림 이름입니다.
예: 자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 값을 제공하지 않거나 유효하지 않은 템플릿을 사용하는 경우 커넥터는 |
Rule Generator Template |
필수 맞춤 규칙 생성기
예: 자리표시자의 경우 커넥터는 첫 번째 Google SecOps 이벤트를 사용합니다. 커넥터는 문자열 값을 포함하는 키만 처리합니다. 값을 제공하지 않거나 유효하지 않은 템플릿을 사용하는 경우 커넥터는 |
Timestamp Field |
필수 Google SecOps 알림 타임스탬프를 정의할 필드의 이름입니다. 타임스탬프가 Unix 에포크 시간 형식을 사용하지 않는 경우 기본값은 |
Timestamp Format |
선택사항 메시지 타임스탬프 형식입니다. 커넥터는 메시지를 올바르게 처리하기 위해 타임스탬프가 필요합니다. 타임스탬프가 Unix 에포크 시간 형식을 사용하지 않고 타임스탬프 형식을 구성하지 않으면 커넥터가 실패합니다. 기본값은 |
Severity Mapping JSON |
필수 커넥터가 메시지에서 심각도 수준을 추출하는 방법을 정의하는 JSON 객체입니다. 기본값은 다음과 같습니다. { "Default": "60" } 심각도 매핑에 대한 자세한 내용은 JSON 심각도 매핑을 참고하세요. |
Unique ID Field |
선택사항 메시지가 고유한지 확인하는 필드의 이름입니다. 예약된 키워드 |
Max Messages To Fetch |
필수 커넥터 반복마다 처리할 최대 메시지 수입니다. 기본값은 |
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 전문가에게 문의하여 답변을 받으세요.