Uptycs EDR 로그 수집
이 문서에서는 Amazon S3를 사용하여 Uptycs EDR 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 원시 JSON 로그를 통합 데이터 모델 (UDM)로 변환합니다. 먼저 JSON에서 필드를 추출하고 데이터 정리 및 보강을 실행한 다음 관련 정보를 해당 UDM 필드에 매핑하여 다양한 데이터 유형과 특이 사례를 처리하여 UDM 스키마 내에서 정확하고 일관된 표현을 보장합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Uptycs에 대한 액세스 권한 관리
- AWS(S3, IAM)에 대한 액세스 권한
Uptycs 기본 요건 가져오기
- Uptycs 관리 콘솔에 로그인합니다.
- 구성 > 사용자로 이동합니다.
- 사용자를 선택하거나 서비스 계정 사용자를 만듭니다.
- 사용자 API 키를 클릭합니다.
- 다음 세부정보를 복사하여 안전한 위치에 저장합니다.
- API 키
- API 비밀번호
- 고객 ID
- API 도메인 (Uptycs URL에서 파생됨, 예:
mystack.uptycs.io)
Google SecOps용 AWS S3 버킷 및 IAM 구성
- 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 참조할 수 있도록 버킷 이름과 리전을 저장합니다(예:
uptycs-telemetry-export). - 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
- 생성된 사용자를 선택합니다.
- 보안용 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키와 보안 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 정책을 검색합니다.
- 정책을 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
S3 업로드용 IAM 정책 및 역할 구성
- AWS 콘솔에서 IAM > 정책으로 이동합니다.
- 정책 만들기 > JSON 탭을 클릭합니다.
다음 정책을 입력합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }- 다른 버킷 이름을 입력한 경우
uptycs-telemetry-export을 바꿉니다.
- 다른 버킷 이름을 입력한 경우
다음 > 정책 만들기를 클릭합니다.
정책 이름을
uptycs-s3-write-policy로 지정합니다.IAM> 사용자로 이동합니다.
Uptycs 내보내기를 위해 생성된 사용자를 선택합니다.
권한 추가 > 정책 직접 연결을 클릭합니다.
uptycs-s3-write-policy을 검색하여 선택합니다.다음 > 권한 추가를 클릭합니다.
Uptycs 내보내기 원시 원격 분석 구성
- Uptycs Console에 로그인합니다.
- 내보내기 구성 섹션으로 이동합니다.
- S3 내보내기 대상을 구성합니다.
- 다음 구성 세부정보를 제공합니다.
- 내보내기 유형: 원시 원격 분석을 선택합니다.
- 대상: Amazon S3를 선택합니다.
- 형식: JSON을 선택합니다.
- S3 버킷:
uptycs-telemetry-export를 입력합니다. - S3 경로 접두사:
telemetry/를 입력합니다. - AWS 리전: 버킷 리전을 선택합니다.
- AWS 액세스 키 ID: IAM 사용자의 액세스 키를 입력합니다.
- AWS 보안 비밀 액세스 키: 보안 비밀 액세스 키를 입력합니다.
- 이벤트 유형: 필요한 원격 분석 유형을 모두 선택합니다.
- 내보내기를 테스트하고 사용 설정합니다.
Google SecOps용 읽기 전용 IAM 사용자 만들기
- AWS 콘솔 > IAM > 사용자로 이동합니다.
- Add users를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 사용자:
secops-reader를 입력합니다. - 액세스 유형: 액세스 키 – 프로그래매틱 액세스를 선택합니다.
- 사용자:
- 사용자 만들기를 클릭합니다.
- 최소 읽기 정책(맞춤) 연결: 사용자 > secops-reader > 권한 > 권한 추가 > 정책 직접 연결 > 정책 만들기
JSON 편집기에 다음 정책을 입력합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }이름을
secops-reader-policy로 설정합니다.정책 만들기 > 검색/선택 > 다음 > 권한 추가로 이동합니다.
보안용 사용자 인증 정보> 액세스 키> 액세스 키 만들기로 이동합니다.
CSV를 다운로드합니다(이러한 값은 피드에 입력됨).
Uptycs 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Uptycs EDR logs). - 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 Uptycs EDR을 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- S3 URI:
s3://uptycs-telemetry-export/telemetry/ - 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
- 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키
- 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- S3 URI:
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
| osquery_raw_data.answer | read_only_udm.network.dns.answers.name | osquery_raw_data.answer가 비어 있지 않은 경우 osquery_raw_data.answer에서 가져온 값입니다. |
| osquery_raw_data.container_id | read_only_udm.metadata.product_log_id | osquery_raw_data.container_id가 비어 있지 않은 경우 osquery_raw_data.container_id에서 가져온 값입니다. |
| osquery_raw_data.local_address | read_only_udm.principal.ip | osquery_raw_data.local_address가 비어 있지 않고 유효한 IP 주소인 경우 osquery_raw_data.local_address에서 가져온 값입니다. |
| osquery_raw_data.local | read_only_udm.principal.ip | 그렇지 않으면 osquery_raw_data.local이 비어 있지 않고 유효한 IP 주소인 경우 osquery_raw_data.local에서 가져온 값이 사용됩니다. |
| osquery_raw_data.local_port | read_only_udm.principal.port | osquery_raw_data.local_port에서 가져온 값이며 osquery_raw_data.local_port가 비어 있지 않은 경우 정수로 변환됩니다. |
| osquery_raw_data.md5 | read_only_udm.target.process.file.md5 | osquery_raw_data.md5가 비어 있지 않은 경우 osquery_raw_data.md5에서 가져온 값입니다. |
| osquery_raw_data.port | read_only_udm.target.port | osquery_raw_data.port에서 가져온 값이며 osquery_raw_data.port가 비어 있지 않은 경우 정수로 변환됩니다. |
| osquery_raw_data.question | read_only_udm.network.dns.questions.name | osquery_raw_data.question이 비어 있지 않은 경우 osquery_raw_data.question에서 가져온 값입니다. |
| osquery_raw_data.remote_address | read_only_udm.intermediary.ip | osquery_raw_data.remote_address가 비어 있지 않은 경우 osquery_raw_data.remote_address에서 가져온 값입니다. |
| osquery_raw_data.remote_port | read_only_udm.intermediary.port | osquery_raw_data.remote_port에서 가져온 값으로, osquery_raw_data.remote_port가 비어 있지 않은 경우 정수로 변환됩니다. |
| osquery_raw_data.type | read_only_udm.network.dns.questions.type | osquery_raw_data.type에서 가져온 값이며 osquery_raw_data.type이 비어 있지 않은 경우 정수로 변환됩니다. |
| osquery_raw_data.uid | read_only_udm.principal.user.userid | osquery_raw_data.uid가 비어 있지 않고 '0'과 같지 않은 경우 osquery_raw_data.uid에서 가져온 값입니다. |
| osquery_raw_data.worker_instance_id | read_only_udm.principal.user.userid | 그렇지 않으면 osquery_raw_data.worker_instance_id가 비어 있지 않은 경우 osquery_raw_data.worker_instance_id에서 가져온 값입니다. |
| upt_asset_group_id | read_only_udm.principal.user.group_identifiers | upt_asset_group_id가 비어 있지 않은 경우 upt_asset_group_id에서 가져온 값입니다. |
| upt_asset_group_name | read_only_udm.principal.group.group_display_name | upt_asset_group_name이 비어 있지 않은 경우 upt_asset_group_name에서 가져온 값입니다. |
| upt_asset_id | read_only_udm.principal.asset.asset_id | upt_asset_id가 비어 있지 않은 경우 upt_asset_id 값과 연결된 문자열 'UPT ASSET ID:' |
| upt_hash | read_only_udm.target.file.md5 | upt_hash에서 '-'가 모두 ''로 대체됩니다. 그런 다음 upt_hash가 비어 있지 않으면 값이 read_only_udm.target.file.md5에 할당됩니다. |
| upt_hostname | read_only_udm.principal.hostname | upt_hostname이 비어 있지 않은 경우 upt_hostname에서 가져온 값입니다. |
| upt_resource_type | read_only_udm.target.resource.type | upt_resource_type이 비어 있지 않은 경우 upt_resource_type에서 가져온 값입니다. |
| upt_time | read_only_udm.metadata.event_timestamp.seconds | upt_time이 비어 있지 않으면 upt_time에서 가져온 값입니다. |
| read_only_udm.metadata.event_type | osquery_raw_data.pid가 비어 있지 않으면 값이 'PROCESS_LAUNCH'로 설정됩니다. osquery_raw_data.question이 비어 있지 않으면 값이 'NETWORK_DNS'로 설정됩니다. event_type이 비어 있으면 값은 'GENERIC_EVENT'로 설정됩니다. | |
| read_only_udm.metadata.log_type | 값은 'UPTYCS_EDR'로 설정됩니다. | |
| read_only_udm.metadata.product_name | 값은 'UPTYCS_EDR'로 설정됩니다. | |
| read_only_udm.metadata.vendor_name | 값은 'UPTYCS'로 설정됩니다. | |
| read_only_udm.network.application_protocol | osquery_raw_data.question이 비어 있지 않으면 값이 'DNS'로 설정됩니다. | |
| read_only_udm.security_result.action | osquery_raw_data.return_code가 'SUCCESS'와 같거나 osquery_raw_data.success가 '1'과 같은 경우 값이 'ALLOW'로 설정됩니다. | |
| read_only_udm.target.process.command_line | osquery_raw_data.cmdline이 비어 있지 않은 경우 osquery_raw_data.cmdline에서 가져온 값입니다. | |
| read_only_udm.target.process.file.full_path | osquery_raw_data.path가 비어 있지 않은 경우 osquery_raw_data.path에서 가져온 값입니다. | |
| read_only_udm.target.process.parent_process | 이 값은 osquery_raw_data.ancestor_list의 ancestor_list 배열을 반복하여 구성됩니다. 배열의 각 요소에 대해 command_line, 파일의 full_path, pid가 추출되고 프로세스 체인을 나타내는 JSON 구조로 형식이 지정됩니다. | |
| read_only_udm.target.process.pid | osquery_raw_data.pid가 비어 있지 않은 경우 osquery_raw_data.pid에서 가져온 값입니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.