Rubrik Security Cloud 로그 수집
이 문서에서는 웹훅을 사용하여 Rubrik Security Cloud 로그를 Google Security Operations에 수집하는 방법을 설명합니다. Rubrik Security Cloud (RSC)는 클라우드 및 온프레미스 환경 전반에서 백업, 복구, 비정상 감지, 데이터 거버넌스 기능을 제공하는 SaaS 기반 데이터 보안 플랫폼입니다. RSC는 중앙 집중식 모니터링 및 분석을 위해 Google SecOps로 푸시할 수 있는 PagerDuty Common Event Format (PD-CEF) JSON으로 보안 이벤트, 감사 로그, 운영 활동 로그를 생성합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- 웹훅을 관리할 수 있는 권한이 있는 Rubrik Security Cloud 콘솔에 대한 권한 있는 액세스
- Rubrik Security Cloud에서 Google SecOps 웹훅 엔드포인트로의 네트워크 연결
- API 키 생성을 위한 Google Cloud 콘솔 액세스
Google SecOps에서 웹훅 피드 만들기
피드 만들기
- SIEM 설정 > 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Rubrik Security Cloud Events). - 소스 유형으로 Webhook을 선택합니다.
- 로그 유형으로 Rubrik Security Cloud를 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- 분할 구분 기호 (선택사항): 각 웹훅 요청에 단일 이벤트가 포함되므로 비워 둡니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
보안 비밀 키 생성 및 저장
피드를 만든 후 인증을 위한 보안 비밀 키를 생성해야 합니다.
- 피드 세부정보 페이지에서 보안 비밀 키 생성을 클릭합니다.
- 대화상자에 보안 비밀 키가 표시됩니다.
- 보안 비밀 키를 복사하여 안전하게 저장합니다.
피드 엔드포인트 URL 가져오기
- 피드의 세부정보 탭으로 이동합니다.
- 엔드포인트 정보 섹션에서 피드 엔드포인트 URL을 복사합니다.
- 다음 단계를 위해 이 URL을 저장합니다.
- 완료를 클릭합니다.
Google Cloud API 키 만들기
Google SecOps에는 인증을 위한 API 키가 필요합니다. Google Cloud 콘솔에서 제한된 API 키를 만듭니다.
API 키 만들기
- Google Cloud 콘솔 사용자 인증 정보 페이지로 이동합니다.
- 프로젝트 (Google SecOps 인스턴스와 연결된 프로젝트)를 선택합니다.
- 사용자 인증 정보 만들기 API 키를 클릭합니다.
- API 키가 생성되어 대화상자에 표시됩니다.
- API 키 수정을 클릭하여 키를 제한합니다.
API 키 제한
- API 키 설정 페이지에서 다음을 수행합니다.
- 이름: 설명이 포함된 이름을 입력합니다 (예:
Google SecOps Webhook API Key).
- 이름: 설명이 포함된 이름을 입력합니다 (예:
- API 제한사항에서 다음을 실행합니다.
- 키 제한을 선택합니다.
- API 선택 드롭다운에서 Google SecOps API (또는 Chronicle API)를 검색하여 선택합니다.
- 저장을 클릭합니다.
- 페이지 상단의 API 키 필드에서 API 키 값을 복사합니다.
API 키를 안전하게 저장합니다.
Rubrik Security Cloud 웹훅 구성
웹훅 URL 구성
Google SecOps 엔드포인트 URL, API 키, 피드 비밀 키를 결합합니다. 두 사용자 인증 정보는 모두 쿼리 매개변수로 전달됩니다.
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET>예:
https://<REGION>-chronicle.googleapis.com/v1alpha/projects/<PROJECT_NUMBER>/locations/<REGION>/instances/<INSTANCE_ID>/feeds/<FEED_ID>:importPushLogs?key=AIzaSyD...&secret=a1b2c3d4...
Rubrik Security Cloud에서 웹훅 만들기
https://<account>.my.rubrik.com에서 Rubrik Security Cloud에 로그인합니다.- 오른쪽 상단에 있는 설정 아이콘을 클릭하고 설정을 선택합니다.
- 알림을 클릭하고 웹훅을 선택합니다.
- 웹훅 추가를 클릭합니다.
- 웹훅 추가 마법사가 표시됩니다.
공급업체에서 일반을 선택합니다.
Webhook name(웹훅 이름)에 설명이 포함된 이름을 입력합니다(예:
Google SecOps Integration).엔드포인트에
key및secret쿼리 매개변수를 포함한 위의 전체 웹훅 URL을 붙여넣습니다. 인증은 URL로 전달되므로 인증 전환 버튼을 사용 중지 상태로 유지할 수 있습니다.다음을 클릭합니다.
웹훅 테스트를 클릭하여 지정된 웹훅 구성이 작동하는지 확인하고 다음을 클릭합니다.
이벤트 및 심각도 선택 창이 표시됩니다.
RSC가 구성된 웹훅 엔드포인트로 전송하는 이벤트를 선택합니다.
이벤트에서 전달할 이벤트 유형을 선택합니다.
- 백업
- 복구
- 이상치
- 위협 헌팅
- 위협 모니터링
- 구성
- 진단
- 동기화
- 유지보수
- 시스템
감사에서 전달할 감사 유형을 선택합니다. 인증 감사 유형은 파서의 로그인 매핑을 제공합니다.
심각도에서 알림을 트리거할 심각도 수준을 선택합니다.
- 심각
- 경고
- 정보 제공
다음을 클릭합니다.
확인 창에서 구성 세부정보를 검토하고 저장을 클릭합니다.
웹훅이 작동하는지 확인
Rubrik Security Cloud 웹훅 상태 확인
- Rubrik Security Cloud에 로그인합니다.
- 설정 > 알림 > 웹훅으로 이동합니다.
- 웹훅의 상태 열을 확인합니다 (사용으로 표시되어야 함).
- 웹훅 세부정보에서 오류 메시지가 있는지 모니터링합니다.
Google SecOps 피드 상태 확인
- Google SecOps에서 SIEM 설정 > 피드로 이동합니다.
- 웹훅 피드의 상태 열을 확인합니다 (활성이어야 함).
수신된 이벤트 수를 확인합니다 (증가해야 함).
Google SecOps에서 로그 확인
- 검색 > UDM 검색으로 이동합니다.
다음 쿼리를 사용하세요.
metadata.vendor_name = "RUBRIK" nocase AND metadata.product_name = "RUBRIK SECURITY CLOUD" nocase기간을 지난 1시간으로 조정합니다.
이벤트가 결과에 표시되는지 확인합니다.
웹훅 페이로드 참조
Rubrik Security Cloud는 기본적으로 PagerDuty Common Event Format (PD-CEF)으로 이벤트를 전송합니다. 다음은 이벤트 페이로드의 예입니다.
{ "summary": "Failed backup of vSphere VM 'example-vm'.", "source": "Rubrik Security Cloud", "severity": "critical", "timestamp": "2024-07-18T06:39:40.46Z", "class": "Backup", "custom_details": { "seriesId": "ccd7a8a5-4c58-4c88-bff9-7bdffddb6099", "id": "c2b47274-6323-4025-b307-afed1cfb7574", "type": "Event", "objectId": "83c4a80a-4a57-5699-b399-651089135586", "objectName": "example-vm", "objectType": "VmwareVm", "status": "Failure", "clusterId": "6a271636-9392-4cba-90c5-bdbe227854ab", "clusterName": "production-cluster", "eventName": "Snapshot.BackupFailed", "errorId": "Snapshot.VmwareSnapshotError", "errorCode": "", "errorRemedy": "", "errorReason": "", "auditUserName": "", "auditUserId": "", "location": "vcenter.example.com", "url": "", "customerID": "rubrik-customer", "logicalSizeInBytes": "", "dataTransferredInBytes": "", "effectiveThroughput": "" } }
웹훅 한도 및 권장사항
요청 한도
| 한도 | 값 |
|---|---|
| 최대 단일 로그 줄 | 1MB |
| 최대 QPS (초당 쿼리 수) | 15,000 |
| 요청 제한 시간 | 90초 |
| 재시도 동작 | 발신자가 관리합니다. 버스트 한도를 초과하면 Google SecOps에서 HTTP 429를 반환하므로 전송 시스템에서 버퍼링하고 재시도해야 합니다. |
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 로직 |
|---|---|---|
audit_info_label |
additional.fields |
병합됨 |
effectiveThroughput_label |
additional.fields |
병합됨 |
group_label |
additional.fields |
병합됨 |
isPolarisAudit_label |
additional.fields |
병합됨 |
label_name_label |
additional.fields |
병합됨 |
node_label |
additional.fields |
병합됨 |
orgID_label |
additional.fields |
병합됨 |
snappable_name_label |
additional.fields |
병합됨 |
snappable_type_label |
additional.fields |
병합됨 |
snapshot_date_label |
additional.fields |
병합됨 |
type_label |
additional.fields |
병합됨 |
userNote_label |
additional.fields |
병합됨 |
has_target |
extensions.auth.type |
매핑됨: true → AUTHTYPE_UNSPECIFIED |
hunt_date |
metadata.event_timestamp |
ISO8601로 파싱됨 |
timestamp |
metadata.event_timestamp |
ISO8601로 파싱됨 |
has_principal |
metadata.event_type |
매핑됨: true → SCAN_HOST, true → STATUS_UPDATE |
has_target |
metadata.event_type |
매핑됨: true → USER_LOGIN |
custom_details.eventName |
metadata.product_event_type |
직접 매핑됨 |
custom_details.id |
metadata.product_log_id |
직접 매핑됨 |
source |
metadata.product_name |
직접 매핑됨 |
custom_details.url |
metadata.url_back_to_product |
직접 매핑됨 |
custom_details.dataTransferredInBytes |
network.sent_bytes |
직접 매핑됨 |
custom_details.customerID |
principal.administrative_domain |
직접 매핑됨 |
domain |
principal.domain.name |
직접 매핑됨 |
custom_details.ipAddress |
principal.ip |
병합됨 |
ip_address |
principal.ip |
병합됨 |
is_ip_assigned |
principal.ip |
매핑됨: false → ip_address |
custom_details.clusterName |
principal.resource.name |
직접 매핑됨 |
custom_details.clusterId |
principal.resource.product_object_id |
직접 매핑됨 |
user_email |
principal.user.email_addresses |
병합됨 |
custom_details.auditUserName |
principal.user.user_display_name |
직접 매핑됨 |
user_name |
principal.user.user_display_name |
직접 매핑됨 |
action_name |
security_result.action |
병합됨 |
custom_details.status |
security_result.action_details |
직접 매핑됨 |
category_temp |
security_result.category |
병합됨 |
class |
security_result.category_details |
병합됨 |
confidence |
security_result.confidence_details |
직접 매핑됨 |
custom_details.errorMessage |
security_result.description |
직접 매핑됨 |
access_type_label |
security_result.detection_fields |
병합됨 |
action_date_label |
security_result.detection_fields |
병합됨 |
detection_time_label |
security_result.detection_fields |
병합됨 |
directories_snoozed_label |
security_result.detection_fields |
병합됨 |
directories_unsnoozed_label |
security_result.detection_fields |
병합됨 |
document_count_label |
security_result.detection_fields |
병합됨 |
encryption_level_label |
security_result.detection_fields |
병합됨 |
errorCode_label |
security_result.detection_fields |
병합됨 |
errorId_label |
security_result.detection_fields |
병합됨 |
errorReason_label |
security_result.detection_fields |
병합됨 |
errorRemedy_label |
security_result.detection_fields |
병합됨 |
event_info_label |
security_result.detection_fields |
병합됨 |
failed_document_count_label |
security_result.detection_fields |
병합됨 |
file_matches_label |
security_result.detection_fields |
병합됨 |
files_created_count_label |
security_result.detection_fields |
병합됨 |
files_modified_count_label |
security_result.detection_fields |
병합됨 |
files_removed_count_label |
security_result.detection_fields |
병합됨 |
files_suspicious_count_label |
security_result.detection_fields |
병합됨 |
hash_tf_version_label |
security_result.detection_fields |
병합됨 |
identity_name_label |
security_result.detection_fields |
병합됨 |
num_files_with_matches_label |
security_result.detection_fields |
병합됨 |
num_hash_matches_label |
security_result.detection_fields |
병합됨 |
num_of_violating_identities_label |
security_result.detection_fields |
병합됨 |
num_yara_rule_matches_label |
security_result.detection_fields |
병합됨 |
obj_failed_label |
security_result.detection_fields |
병합됨 |
obj_partially_succeeded_label |
security_result.detection_fields |
병합됨 |
obj_succeeded_label |
security_result.detection_fields |
병합됨 |
object_matches_label |
security_result.detection_fields |
병합됨 |
policy_name_label |
security_result.detection_fields |
병합됨 |
reason_label |
security_result.detection_fields |
병합됨 |
remediation_type_label |
security_result.detection_fields |
병합됨 |
remedy_label |
security_result.detection_fields |
병합됨 |
risk_name_label |
security_result.detection_fields |
병합됨 |
seriesID_label |
security_result.detection_fields |
병합됨 |
seriesId_label |
security_result.detection_fields |
병합됨 |
skipped_document_count_label |
security_result.detection_fields |
병합됨 |
strain_name_label |
security_result.detection_fields |
병합됨 |
successful_document_count_label |
security_result.detection_fields |
병합됨 |
total_accessible_files_at_risk_count_label |
security_result.detection_fields |
병합됨 |
vm_count_label |
security_result.detection_fields |
병합됨 |
yara_tf_version_label |
security_result.detection_fields |
병합됨 |
hunt_name |
security_result.rule_name |
직접 매핑됨 |
hunt_type |
security_result.rule_type |
직접 매핑됨 |
is_severity_assigned |
security_result.severity |
매핑됨: false → INFORMATIONAL, false → MEDIUM |
severity |
security_result.severity |
매핑됨: INFO → INFORMATIONAL, WARNING → MEDIUM |
severity_name |
security_result.severity |
매핑됨: INFO → INFORMATIONAL, WARNING → MEDIUM |
severity |
security_result.severity_details |
직접 매핑됨 |
severity_name |
security_result.severity_details |
직접 매핑됨 |
summary |
security_result.summary |
직접 매핑됨 |
threat_feed_type |
security_result.threat_feed_name |
직접 매핑됨 |
custom_details.logicalSizeInBytes |
target.file.size |
직접 매핑됨 |
client_id_label |
target.labels |
병합됨 |
client_name_label |
target.labels |
병합됨 |
custom_details.location |
target.location.name |
직접 매핑됨 |
custom_details.objectName |
target.resource.name |
직접 매핑됨 |
object_name |
target.resource.name |
직접 매핑됨 |
resource_name |
target.resource.name |
직접 매핑됨 |
custom_details.objectId |
target.resource.product_object_id |
직접 매핑됨 |
component |
target.resource.resource_subtype |
직접 매핑됨 |
custom_details.objectType |
target.resource.resource_subtype |
직접 매핑됨 |
is_object_type_assigned |
target.resource.resource_type |
매핑됨: false → UNSPECIFIED |
class |
target.user.email_addresses |
매핑됨: Login → user_email |
user_email |
target.user.email_addresses |
병합됨 |
each_group |
target.user.group_identifiers |
병합됨 |
custom_details.auditUserName |
target.user.user_display_name |
직접 매핑됨 |
user_name |
target.user.user_display_name |
직접 매핑됨 |
custom_details.auditUserId |
target.user.userid |
직접 매핑됨 |
| 해당 사항 없음 | extensions.auth.type |
상수: AUTHTYPE_UNSPECIFIED |
| 해당 사항 없음 | metadata.event_type |
상수: USER_LOGIN |
| 해당 사항 없음 | metadata.product_name |
상수: RUBRIK SECURITY CLOUD |
| 해당 사항 없음 | metadata.vendor_name |
상수: RUBRIK |
| 해당 사항 없음 | principal.resource.resource_type |
상수: CLUSTER |
| 해당 사항 없음 | security_result.severity |
상수: INFORMATIONAL |
| 해당 사항 없음 | target.resource.resource_type |
상수: UNSPECIFIED |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.