Tanium 감사 로그 수집
이 문서에서는 Tanium Connect의 기본 S3 내보내기 기능을 사용하여 Amazon S3를 통해 Tanium 감사 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 로그를 추출하여 처음에는 여러 기본 필드를 삭제합니다. 그런 다음 grok 및 json 필터를 사용하여 로그 메시지를 파싱하고 타임스탬프, 기기 IP, 감사 세부정보와 같은 필드를 추출합니다. 파서는 추출된 필드를 UDM에 매핑하여 다양한 데이터 유형과 조건부 로직을 처리하여 특정 Tanium 감사 로그 속성의 존재 여부와 값을 기반으로 적절한 UDM 필드를 채웁니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Tanium Connect 및 Tanium Console에 대한 권한 있는 액세스
- AWS (S3, IAM)에 대한 관리자 액세스
Amazon S3 버킷 만들기
- Amazon S3 콘솔을 엽니다.
- 필요한 경우 지역을 변경할 수 있습니다.
- 탐색 메뉴에서 Tanium 감사 로그가 상주할 리전을 선택합니다.
- 버킷 만들기를 클릭합니다.
- 버킷 이름: 버킷의 의미 있는 이름을 입력합니다 (예:
tanium-audit-logs
). - 리전: 원하는 리전을 선택합니다 (예:
us-east-1
). - 만들기를 클릭합니다.
- 버킷 이름: 버킷의 의미 있는 이름을 입력합니다 (예:
Amazon S3에 대한 모든 권한이 있는 IAM 사용자 만들기
- IAM console(IAM 콘솔)을 엽니다.
- 사용자> 사용자 추가를 클릭합니다.
- 사용자 이름을 입력합니다 (예:
tanium-connect-s3-user
). - 필요에 따라 프로그래매틱 액세스 및/또는 AWS 관리 콘솔 액세스를 선택합니다.
- 자동 생성 비밀번호 또는 맞춤 비밀번호를 선택합니다.
- 다음: 권한을 클릭합니다.
- 기존 정책 직접 연결을 선택합니다.
- 사용자에게 AmazonS3FullAccess 정책을 검색하여 선택합니다.
- 다음: 태그를 클릭합니다.
- 다음: 검토를 클릭합니다.
- 사용자 만들기를 클릭합니다.
- 나중에 참조할 수 있도록 액세스 키 ID 및 보안 비밀 액세스 키를 복사하고 저장합니다.
Amazon S3 버킷에 대한 권한 구성
- Amazon S3 콘솔에서 이전에 만든 버킷을 선택합니다.
- 권한 > 버킷 정책을 클릭합니다.
버킷 정책 편집기에서 다음 정책을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }
다음 변수를 바꿉니다.
YOUR_ACCOUNT_ID
를 AWS 계정 ID로 변경합니다.tanium-audit-logs
을 실제 버킷 이름으로 변경합니다(다른 경우).tanium-connect-s3-user
을 실제 IAM 사용자 이름으로 변경합니다(다른 경우).
저장을 클릭합니다.
S3 내보내기를 위한 Tanium Connect 구성
Tanium Connect에서 AWS S3 연결 만들기
- 관리자로 Tanium Console에 로그인합니다.
- Tanium Connect > Connections로 이동합니다.
- 연결 만들기를 클릭합니다.
- 일반 정보 섹션에서 다음 구성 세부정보를 제공합니다.
- 이름: 설명이 포함된 이름을 입력합니다 (예:
Tanium Audit to S3
). - 설명: 의미 있는 설명을 입력합니다 (예:
Export Tanium audit logs to S3 for Google SecOps ingestion
). - 사용 설정: 연결을 사용 설정하려면 선택합니다.
- 로그 수준: 정보 (기본값)를 선택하거나 필요에 따라 조정합니다.
- 이름: 설명이 포함된 이름을 입력합니다 (예:
연결 소스 구성
- 구성 섹션의 소스에서 Tanium 감사를 선택합니다.
- 감사 소스 설정을 구성합니다.
- 검색된 기록 일수: 검색할 이전 감사 데이터의 일수를 입력합니다 (예:
7
는 1주일). - 감사 유형: 내보낼 감사 유형을 선택합니다. 다음 중에서 선택하세요.
- 작업 기록: 콘솔 운영자가 실행한 작업입니다.
- 인증: 사용자 인증 이벤트입니다.
- 콘텐츠: 콘텐츠 변경 및 수정
- 그룹: 컴퓨터 그룹 변경사항입니다.
- 패키지: 패키지 관련 활동입니다.
- 센서: 센서 수정
- 시스템 설정: 시스템 구성이 변경됩니다.
- 사용자: 사용자 관리 활동입니다.
- 검색된 기록 일수: 검색할 이전 감사 데이터의 일수를 입력합니다 (예:
AWS S3 대상 구성
- 대상에서 AWS S3를 선택합니다.
- 다음 구성 세부정보를 제공합니다.
- 대상 이름: 이름을 입력합니다 (예:
Google SecOps S3 Bucket
). - AWS 액세스 키: 이전에 만든 IAM 사용자의 액세스 키 ID를 입력합니다.
- AWS 보안 비밀 키: 이전에 만든 IAM 사용자의 보안 비밀 액세스 키를 입력합니다.
- 버킷 이름: S3 버킷 이름 (예:
tanium-audit-logs
)을 입력합니다. - 버킷 경로: 선택사항입니다. 경로 접두사 (예:
tanium/audit/
)를 입력합니다. - 리전: 버킷이 있는 AWS 리전을 선택합니다 (예:
us-east-1
).
- 대상 이름: 이름을 입력합니다 (예:
형식 및 일정 구성
- 형식 섹션에서 출력 형식을 구성합니다.
- 형식 유형: JSON을 선택합니다.
- 열 헤더 포함: 열 헤더를 포함할지 선택합니다.
- 문서 생성: 원시 JSON 데이터를 전송하려면 이 옵션을 선택 해제합니다.
- 일정 섹션에서 연결이 실행되는 시기를 구성합니다.
- Schedule Type(일정 유형): Cron을 선택합니다.
- 크론 표현식: 정기 내보내기를 위한 크론 표현식을 입력합니다 (예: 시간별 내보내기의 경우
0 */1 * * *
). - 시작일: 일정의 시작일을 설정합니다.
- 변경사항 저장을 클릭합니다.
연결 테스트 및 실행
- Connect 개요 페이지에서 연결로 이동합니다.
- 만든 연결 (Tanium Audit to S3)을 클릭합니다.
- 지금 실행을 클릭하여 연결을 테스트합니다.
- 연결을 실행할 것인지 확인합니다.
- 연결 상태를 모니터링하고 감사 로그가 S3 버킷으로 내보내지는지 확인합니다.
선택사항: 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:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }
이름을
secops-reader-policy
로 설정합니다.정책 만들기 > 검색/선택 > 다음 > 권한 추가로 이동합니다.
보안 사용자 인증 정보> 액세스 키> 액세스 키 만들기로 이동합니다.
CSV를 다운로드합니다 (이러한 값은 피드에 입력됨).
Tanium 감사 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예:
Tanium Audit logs
). - 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 Tanium 감사를 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- S3 URI:
s3://tanium-audit-logs/tanium/audit/
(다른 버킷 이름이나 경로를 사용한 경우 경로 조정). - 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
- 최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
- 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키 (위에서 생성한 읽기 전용 사용자에서 가져옴)
- 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키 (위에서 생성한 읽기 전용 사용자에서 가져옴)
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- S3 URI:
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
ActionId |
metadata.product_log_id |
ActionId 필드에서 직접 매핑됩니다. |
ActionName |
security_result.action_details |
ActionName 필드에서 직접 매핑됩니다. |
Approver |
additional.fields[Approver].value.string_value |
Approver 필드에서 직접 매핑됩니다. |
Approver |
principal.user.userid |
Issuer 이 없는 경우 Approver 필드에서 매핑됩니다. |
audit_name |
metadata.description |
audit_name 필드에서 직접 매핑됩니다. |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
audit_row_id 필드에서 직접 매핑됩니다. |
audit_type |
additional.fields[audit_type].value.string_value |
audit_type 필드에서 직접 매핑됩니다. |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
details 필드에서 추출한 authentication_type 필드에서 직접 매핑됩니다. |
Command |
principal.process.command_line |
URL 디코딩 후 Command 필드에서 직접 매핑됩니다. |
creation_time |
target.resource.attribute.creation_time |
creation_time 필드에서 직접 매핑됩니다. |
details |
network.session_id |
키-값 파싱을 사용하여 details 필드에서 추출됩니다. |
details |
principal.user.attribute.labels[authentication_type].value |
키-값 파싱을 사용하여 details 필드에서 추출됩니다. |
details |
principal.asset.ip , principal.ip |
IP 주소는 키-값 파싱을 사용하여 details 필드에서 추출되고 principal.asset.ip 및 principal.ip 에 모두 매핑됩니다. |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
DistributeOver 필드에서 직접 매핑됩니다. |
dvc_ip |
intermediary.hostname |
syslog 메시지에서 추출된 dvc_ip 필드에서 직접 매핑됩니다. |
dvc_ip |
observer.ip |
logstash.collect.host 이 없는 경우 dvc_ip 필드에서 직접 매핑됩니다. |
Expiration |
additional.fields[Expiration].value.string_value |
Expiration 필드에서 직접 매핑됩니다. |
host.architecture |
target.asset.hardware.cpu_platform |
host.architecture 필드에서 직접 매핑됩니다. |
host.id |
target.asset.asset_id |
host.id 필드에서 직접 매핑되며 '호스트 ID:'가 앞에 붙습니다. |
host.ip |
target.ip |
host.ip 필드에서 직접 매핑됩니다. |
host.mac |
target.mac |
host.mac 필드에서 직접 매핑됩니다. |
host.name |
target.hostname |
host.hostname 이 없는 경우 host.name 필드에서 직접 매핑됩니다. |
host.os.kernel |
target.platform_patch_level |
host.os.kernel 필드에서 직접 매핑됩니다. |
host.os.name |
additional.fields[os_name].value.string_value |
host.os.name 필드에서 직접 매핑됩니다. |
host.os.version |
target.platform_version |
host.os.version 필드에서 직접 매핑됩니다. |
InsertTime |
additional.fields[InsertTime].value.string_value |
InsertTime 필드에서 직접 매핑됩니다. |
Issuer |
additional.fields[Issuer].value.string_value |
Issuer 필드에서 직접 매핑됩니다. |
Issuer |
principal.user.userid |
있는 경우 Issuer 필드에서 직접 매핑됩니다. |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
last_modified_by 필드에서 직접 매핑됩니다. |
log.source.address |
principal.ip |
IP 주소는 log.source.address 필드에서 추출되어 principal.ip 에 매핑됩니다. |
log.source.address |
principal.port |
포트는 log.source.address 필드에서 추출됩니다. |
logstash.collect.host |
observer.ip |
있는 경우 logstash.collect.host 필드에서 직접 매핑됩니다. |
logstash.collect.timestamp |
metadata.collected_timestamp |
logstash.collect.timestamp 필드에서 직접 매핑됩니다. |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
logstash.ingest.timestamp 필드에서 직접 매핑됩니다. |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
logstash.irm_environment 필드에서 직접 매핑됩니다. |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
logstash.irm_region 필드에서 직접 매핑됩니다. |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
logstash.irm_site 필드에서 직접 매핑됩니다. |
logstash.process.host |
intermediary.hostname |
logstash.process.host 필드에서 직접 매핑됩니다. |
message |
dvc_ip , json_data , timestamp |
grok을 사용하여 dvc_ip , json_data , timestamp 를 추출했습니다. |
modification_time |
target.resource.attribute.last_update_time |
modification_time 필드에서 직접 매핑됩니다. |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
modifier_user_id 필드에서 직접 매핑됩니다. |
object_id |
target.resource.product_object_id |
object_id 필드에서 직접 매핑됩니다. |
object_name |
target.resource.name |
object_name 필드에서 직접 매핑됩니다. |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
object_type_name 필드에서 직접 매핑됩니다. |
PackageName |
additional.fields[PackageName].value.string_value |
PackageName 필드에서 직접 매핑됩니다. |
SourceId |
additional.fields[SourceId].value.string_value |
SourceId 필드에서 직접 매핑됩니다. |
StartTime |
additional.fields[StartTime].value.string_value |
StartTime 필드에서 직접 매핑됩니다. |
Status |
security_result.action |
Status 이 'Closed'인 경우 'BLOCK'에, Status 이 'Open'인 경우 'ALLOW'에 매핑됩니다. |
Status |
security_result.summary |
Status 필드에서 직접 매핑됩니다. |
tanium_audit_type |
metadata.product_event_type |
tanium_audit_type 필드에서 직접 매핑됩니다. |
timestamp |
metadata.event_timestamp |
syslog 메시지 또는 message 필드에서 추출된 timestamp 필드에서 직접 매핑됩니다. |
type |
additional.fields[type].value.string_value |
type 필드에서 직접 매핑됩니다. |
type_name |
metadata.product_event_type |
type_name 필드에서 직접 매핑됩니다. |
User |
principal.user.userid |
User 필드에서 직접 매핑됩니다. src_ip , has_target , has_user 의 존재를 기반으로 한 파서 로직에 의해 결정됩니다. 'NETWORK_CONNECTION', 'USER_RESOURCE_ACCESS', 'STATUS_UPDATE' 또는 'GENERIC_EVENT'일 수 있습니다. 'TANIUM_AUDIT'으로 하드코딩됩니다. '사이버 보안'으로 하드코딩됩니다. 'TANIUM_AUDIT'으로 하드코딩됩니다. |
@version |
metadata.product_version |
@version 필드에서 직접 매핑됩니다. |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
agent.ephemeral_id 필드에서 직접 매핑됩니다. |
agent.id |
observer.asset_id |
agent.id 필드에서 직접 매핑되며 'filebeat:'이 접두사로 붙습니다. |
agent.type |
observer.application |
agent.type 필드에서 직접 매핑됩니다. |
agent.version |
observer.platform_version |
agent.version 필드에서 직접 매핑됩니다. |
Comment |
security_result.description |
Comment 필드에서 직접 매핑됩니다. |
host.hostname |
target.hostname |
있는 경우 host.hostname 필드에서 직접 매핑됩니다. |
input.type |
network.ip_protocol |
input.type 이 'tcp' 또는 'TCP'인 경우 'TCP'에 매핑됩니다. |
syslog_severity |
security_result.severity |
syslog_severity 가 'error' 또는 'warning'인 경우 'HIGH'에 매핑되고, 'notice'인 경우 'MEDIUM'에 매핑되고, 'information' 또는 'info'인 경우 'LOW'에 매핑됩니다. |
syslog_severity |
security_result.severity_details |
syslog_severity 필드에서 직접 매핑됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.