Workday ๊ฐ์ฌ ๋ก๊ทธ ์์ง
์ด ๋ฌธ์์์๋ AWS S3๋ฅผ ์ฌ์ฉํ์ฌ Workday ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ Google Security Operations์ ์์งํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ํ์๋ ๋จผ์ CSV ๋ฐ์ดํฐ์ ํจํด ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ์์ ํน์ ์ด๋ฒคํธ ์ ํ์ ์๋ณํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ณ๋ ์ ํ์ ๋ฐ๋ผ ๊ด๋ จ ํ๋๋ฅผ ์ถ์ถํ๊ณ ๊ตฌ์กฐํํ์ฌ ์ผ๊ด๋ ๋ณด์ ๋ถ์์ ์ํด ํตํฉ ๋ฐ์ดํฐ ๋ชจ๋ธ (UDM)์ ๋งคํํฉ๋๋ค.
์์ํ๊ธฐ ์ ์
๋ค์ ๊ธฐ๋ณธ ์๊ฑด์ด ์ถฉ์กฑ๋์๋์ง ํ์ธํฉ๋๋ค.
- Google SecOps ์ธ์คํด์ค
- AWS์ ๋ํ ์ก์ธ์ค ๊ถํ
- Workday์ ๋ํ ์ก์ธ์ค ๊ถํ ๊ด๋ฆฌ
Google SecOps์ฉ AWS S3 ๋ฒํท ๋ฐ IAM ๊ตฌ์ฑ
- ์ด ์ฌ์ฉ์ ๊ฐ์ด๋(๋ฒํท ๋ง๋ค๊ธฐ)์ ๋ฐ๋ผ Amazon S3 ๋ฒํท์ ๋ง๋ญ๋๋ค.
- ๋์ค์ ์ฐธ์กฐํ ์ ์๋๋ก ๋ฒํท ์ด๋ฆ๊ณผ ๋ฆฌ์ ์ ์ ์ฅํฉ๋๋ค (์:
workday-audit-logs
). - ์ด ์ฌ์ฉ์ ๊ฐ์ด๋(IAM ์ฌ์ฉ์ ๋ง๋ค๊ธฐ)์ ๋ฐ๋ผ ์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค.
- ์์ฑ๋ ์ฌ์ฉ์๋ฅผ ์ ํํฉ๋๋ค.
- ๋ณด์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ํญ์ ์ ํํฉ๋๋ค.
- ์ก์ธ์ค ํค ์น์ ์์ ์ก์ธ์ค ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก๋ก ์๋ ํํฐ ์๋น์ค๋ฅผ ์ ํํฉ๋๋ค.
- ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ์ ํ์ฌํญ: ์ค๋ช ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ก์ธ์ค ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ก์ธ์ค ํค์ ๋น๋ฐ ์ก์ธ์ค ํค๋ฅผ ์ ์ฅํ์ฌ ๋์ค์ ์ฐธ๊ณ ํ๋ ค๋ฉด CSV ํ์ผ ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๊ถํ ํญ์ ์ ํํฉ๋๋ค.
- ๊ถํ ์ ์ฑ ์น์ ์์ ๊ถํ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๊ถํ ์ถ๊ฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์ ์ฑ ์ง์ ์ฐ๊ฒฐ์ ์ ํํฉ๋๋ค.
- AmazonS3FullAccess ์ ์ฑ ์ ๊ฒ์ํ์ฌ ์ ํํฉ๋๋ค.
- ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ๊ถํ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Workday ํตํฉ ์์คํ ์ฌ์ฉ์ (ISU) ๋ง๋ค๊ธฐ
- Workday์์ Create Integration System User > OK๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ด๋ฆ (์:
audit_s3_user
)์ ์ ๋ ฅํฉ๋๋ค. - ํ์ธ์ ํด๋ฆญํฉ๋๋ค.
- ๊ด๋ จ ์์ > ๋ณด์ > ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ผ๋ก ์ด๋ํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํฉ๋๋ค.
- ๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋ฃ๋์ง ์๋๋ก ํ๋ ค๋ฉด ๋น๋ฐ๋ฒํธ ๊ท์น ์ ์ง๋ฅผ ์ ํํฉ๋๋ค.
- Create Security Group > Integration System Security Group (Unconstrained)์ ๊ฒ์ํฉ๋๋ค.
- ์ด๋ฆ (์:
ISU_Audit_S3
)์ ์ ๊ณตํ๊ณ ISU๋ฅผ ํตํฉ ์์คํ ์ฌ์ฉ์์ ์ถ๊ฐํฉ๋๋ค. - ๊ธฐ๋ฅ ์์ญ > ์์คํ ์ ๋๋ฉ์ธ ๋ณด์ ์ ์ฑ ์ ๊ฒ์ํฉ๋๋ค.
- ๊ฐ์ฌ ์ถ์ ์์ ์์ > ๊ถํ ์์ ์ ์ ํํฉ๋๋ค.
- Get Only์์
ISU_Audit_S3
๊ทธ๋ฃน์ ์ถ๊ฐํฉ๋๋ค. - ํ์ธ > ๋ณด๋ฅ ์ค์ธ ๋ณด์ ์ ์ฑ ๋ณ๊ฒฝ์ฌํญ ํ์ฑํ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Workday ๋ง์ถค ๋ณด๊ณ ์ ๊ตฌ์ฑ
- Workday์์ ๋ง์ถค ๋ณด๊ณ ์ ๋ง๋ค๊ธฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ๋ค์ ๊ตฌ์ฑ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฆ: ๊ณ ์ ํ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค (์:
Audit_Trail_BP_JSON
). - ์ ํ: ๊ณ ๊ธ์ ์ ํํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ค: ๊ฐ์ฌ ์ถ์ - ๋น์ฆ๋์ค ํ๋ก์ธ์ค๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ธ์ ํด๋ฆญํฉ๋๋ค.
- ์ ํ์ฌํญ: ๋น์ฆ๋์ค ํ๋ก์ธ์ค ์ ํ ๋๋ ์์์ผ์ ํํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ด๋ฆ: ๊ณ ์ ํ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค (์:
- ์ถ๋ ฅ ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ์น ์๋น์ค๋ก ์ฌ์ฉ ์ค์ , ์ฑ๋ฅ์ ์ต์ ํ๋ฅผ ์ ํํ๊ณ JSON ํ์์ ์ ํํฉ๋๋ค.
- ํ์ธ > ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ณด๊ณ ์๋ฅผ ์ด๊ณ ๊ณต์ > ๋ณด๊ธฐ ๊ถํ์ผ๋ก
ISU_Audit_S3
์ถ๊ฐ > ํ์ธ์ ํด๋ฆญํฉ๋๋ค. - ๊ด๋ จ ์์ > ์น ์๋น์ค > URL ๋ณด๊ธฐ๋ก ์ด๋ํฉ๋๋ค.
- JSON URL (์:
https://wd-services1.workday.com/ccx/service/customreport2/<tenant>/<user>/Audit_Trail_BP_JSON?format=json
)์ ๋ณต์ฌํฉ๋๋ค.
S3 ์ ๋ก๋์ฉ IAM ์ ์ฑ ๋ฐ ์ญํ ๊ตฌ์ฑ
์ ์ฑ JSON (๋ค๋ฅธ ๋ฒํท ์ด๋ฆ์ ์ ๋ ฅํ ๊ฒฝ์ฐ
workday-audit-logs
๋์ฒด):{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutWorkdayObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::workday-audit-logs/*" } ] }
AWS ์ฝ์ > IAM > ์ ์ฑ > ์ ์ฑ ์์ฑ > JSON ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
์ ์ฑ ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ต๋๋ค.
๋ค์ > ์ ์ฑ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
IAM > ์ญํ > ์ญํ ์์ฑ > AWS ์๋น์ค > Lambda๋ก ์ด๋ํฉ๋๋ค.
์๋ก ๋ง๋ ์ ์ฑ ์ ์ฐ๊ฒฐํฉ๋๋ค.
์ญํ ์ด๋ฆ์
WriteWorkdayToS3Role
๋ก ์ง์ ํ๊ณ ์ญํ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Lambda ํจ์ ๋ง๋ค๊ธฐ
์ค์ | ๊ฐ |
---|---|
์ด๋ฆ | workday_audit_to_s3 |
๋ฐํ์ | Python 3.13 |
์ํคํ ์ฒ | x86_64 |
์คํ ์ญํ | WriteWorkdayToS3Role |
ํจ์๊ฐ ์์ฑ๋๋ฉด ์ฝ๋ ํญ์ ์ด๊ณ ์คํ ์ ์ญ์ ํ ํ ์๋ ์ฝ๋ (
workday_audit_to_s3.py
)๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.#!/usr/bin/env python3 import os, json, gzip, io, uuid, base64, datetime as dt, urllib.request, urllib.error import boto3 WD_USER = os.environ["WD_USER"] WD_PASS = os.environ["WD_PASS"] WD_URL = os.environ["WD_URL"] S3_BUCKET = os.environ["S3_BUCKET_NAME"] def fetch_report() -> bytes: credentials = f"{WD_USER}:{WD_PASS}".encode() auth_header = b"Basic " + base64.b64encode(credentials) req = urllib.request.Request(WD_URL, headers={"Authorization": auth_header.decode()}) with urllib.request.urlopen(req, timeout=30) as r: return r.read() # raw JSON bytes def upload(payload: bytes, ts: dt.datetime) -> None: key = f"{ts:%Y/%m/%d}/workday-audit-{uuid.uuid4()}.json.gz" buf = io.BytesIO() with gzip.GzipFile(fileobj=buf, mode="w") as gz: gz.write(payload) buf.seek(0) boto3.client("s3").upload_fileobj(buf, S3_BUCKET, key) def lambda_handler(event=None, context=None): now = dt.datetime.utcnow().replace(microsecond=0) data = fetch_report() upload(data, now) print(f"Uploaded Workday audit report ({len(data)} bytes raw)") if __name__ == "__main__": lambda_handler()
๊ตฌ์ฑ > ํ๊ฒฝ ๋ณ์ > ์์ > ์ ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ๋ก ์ด๋ํฉ๋๋ค.
๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ๋ ฅํ๊ณ ๊ฐ์ ๋ฐ๊ฟ๋๋ค.
ํ๊ฒฝ ๋ณ์
ํค ์์ ๊ฐ WD_USER
audit_s3_user
WD_PASS
Wrokday-Password
WD_URL
https://.../Audit_Trail_BP_JSON?format=json
S3_BUCKET_NAME
workday-audit-logs
ํจ์๊ฐ ์์ฑ๋ ํ ํด๋น ํ์ด์ง์ ๋จธ๋ฌด๋ฅด๊ฑฐ๋ Lambda > ํจ์ > yourโfunction์ ์ฝ๋๋ค.
๊ตฌ์ฑ ํญ์ ์ ํํฉ๋๋ค.
์ผ๋ฐ ๊ตฌ์ฑ ํจ๋์์ ์์ ์ ํด๋ฆญํฉ๋๋ค.
์ ํ ์๊ฐ์ 5๋ถ (300์ด)์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
Lambda ํจ์ ์์ฝ (EventBridge ์ค์ผ์ค๋ฌ)
- ๊ตฌ์ฑ > ํธ๋ฆฌ๊ฑฐ > ํธ๋ฆฌ๊ฑฐ ์ถ๊ฐ > EventBridge ์ค์ผ์ค๋ฌ > ๊ท์น ๋ง๋ค๊ธฐ๋ก ์ด๋ํฉ๋๋ค.
- ๋ค์ ๊ตฌ์ฑ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฆ:
daily-workday-audit export
. - ์ผ์ ํจํด: ํฌ๋ก ํํ์
- ํํ์:
20 2 * * ? *
(๋งค์ผ 02:20 UTC์ ์คํ๋จ)
- ์ด๋ฆ:
- ๋๋จธ์ง๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๊ณ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Workday ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ ์์งํ๋๋ก Google SecOps์์ ํผ๋ ๊ตฌ์ฑ
- SIEM ์ค์ > ํผ๋๋ก ์ด๋ํฉ๋๋ค.
- + ์ ํผ๋ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํผ๋ ์ด๋ฆ ํ๋์ ํผ๋ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค (์:
Workday Audit Logs
). - ์์ค ์ ํ์ผ๋ก Amazon S3 V2๋ฅผ ์ ํํฉ๋๋ค.
- ๋ก๊ทธ ์ ํ์ผ๋ก Workday ๊ฐ์ฌ๋ฅผ ์ ํํฉ๋๋ค.
- ์๋น์ค ๊ณ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ๋ค์ ์
๋ ฅ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์ง์ ํฉ๋๋ค.
- S3 URI: ๋ฒํท URI์
๋๋ค.
s3://workday-audit-logs/
.workday-audit-logs
์ ๋ฒํท์ ์ค์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
- ์์ค ์ญ์ ์ต์ : ํ๊ฒฝ์ค์ ์ ๋ฐ๋ผ ์ญ์ ์ต์ ์ ์ ํํฉ๋๋ค.
- ์ต๋ ํ์ผ ๊ธฐ๊ฐ: ์ง๋ ์ผ์ ๋์ ์์ ๋ ํ์ผ์ ํฌํจํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 180์ผ์ ๋๋ค.
- ์ก์ธ์ค ํค ID: s3 ๋ฒํท์ ์ก์ธ์คํ ์ ์๋ ์ฌ์ฉ์ ์ก์ธ์ค ํค์ ๋๋ค.
- ๋ณด์ ๋น๋ฐ ์ก์ธ์ค ํค: s3 ๋ฒํท์ ์ก์ธ์คํ ์ ์๋ ์ฌ์ฉ์ ๋ณด์ ๋น๋ฐ ํค์ ๋๋ค.
- ์ ์ ๋ค์์คํ์ด์ค: ์ ์ ๋ค์์คํ์ด์ค์ ๋๋ค.
- ์์ง ๋ผ๋ฒจ: ์ด ํผ๋์ ์ด๋ฒคํธ์ ์ ์ฉํ ๋ผ๋ฒจ์ ๋๋ค.
- S3 URI: ๋ฒํท URI์
๋๋ค.
- ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ํ์ ํ๋ฉด์์ ์ ํผ๋ ๊ตฌ์ฑ์ ๊ฒํ ํ ๋ค์ ์ ์ถ์ ํด๋ฆญํฉ๋๋ค.
UDM ๋งคํ ํ ์ด๋ธ
๋ก๊ทธ ํ๋ | UDM ๋งคํ | ๋ ผ๋ฆฌ |
---|---|---|
Account |
metadata.event_type | '๊ณ์ ' ํ๋๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด 'metadata.event_type' ํ๋๊ฐ 'USER_RESOURCE_UPDATE_CONTENT'๋ก ์ค์ ๋ฉ๋๋ค. |
Account |
principal.user.primaryId | userid๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'Account' ํ๋์์ ์ถ์ถ๋๊ณ principal.user.primaryId ์ ๋งคํ๋ฉ๋๋ค. |
Account |
principal.user.primaryName | ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ grok ํจํด์ ์ฌ์ฉํ์ฌ '๊ณ์ ' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.primaryName'์ ๋งคํ๋ฉ๋๋ค. |
ActivityCategory |
metadata.event_type | 'ActivityCategory' ํ๋๊ฐ 'READ'์ธ ๊ฒฝ์ฐ 'metadata.event_type' ํ๋๊ฐ 'RESOURCE_READ'๋ก ์ค์ ๋ฉ๋๋ค. 'WRITE'์ธ ๊ฒฝ์ฐ 'RESOURCE_WRITTEN'์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
ActivityCategory |
metadata.product_event_type | 'ActivityCategory' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
AffectedGroups |
target.user.group_identifiers | 'AffectedGroups' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Area |
target.resource.attribute.labels.area.value | '์ง์ญ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
AuthType |
extensions.auth.auth_details | 'AuthType' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
AuthType |
extensions.auth.type | 'AuthType' ํ๋์์ ํน์ ๊ฐ์ ๋ฐ๋ผ UDM์ ์ ์๋ ์ฌ๋ฌ ์ธ์ฆ ์ ํ์ผ๋ก ๋งคํ๋ฉ๋๋ค. |
CFIPdeConexion |
src.domain.name | 'CFIPdeConexion' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์๊ฐ ์๋ ๊ฒฝ์ฐ 'src.domain.name'์ ๋งคํ๋ฉ๋๋ค. |
CFIPdeConexion |
target.ip | 'CFIPdeConexion' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์์ธ ๊ฒฝ์ฐ 'target.ip'์ ๋งคํ๋ฉ๋๋ค. |
ChangedRelationship |
metadata.description | 'ChangedRelationship' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
ClassOfInstance |
target.resource.attribute.labels.class_instance.value | 'ClassOfInstance' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
column18 |
about.labels.utub.value | 'column18' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
CreatedBy |
principal.user.userid | userid๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'CreatedBy' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.userid'์ ๋งคํ๋ฉ๋๋ค. |
CreatedBy |
principal.user.user_display_name | ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ grok ํจํด์ ์ฌ์ฉํ์ฌ 'CreatedBy' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.user_display_name'์ ๋งคํ๋ฉ๋๋ค. |
Domain |
about.domain.name | '๋๋ฉ์ธ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
EffectiveDate |
@timestamp | 'yyyy-MM-dd HH:mm:ss.SSSZ' ํ์์ผ๋ก ๋ณํํ ํ '@timestamp'๋ก ํ์ฑ๋ฉ๋๋ค. |
EntryMoment |
@timestamp | 'ISO8601' ํ์์ผ๋ก ๋ณํ๋ ํ '@timestamp'๋ก ํ์ฑ๋ฉ๋๋ค. |
EventType |
security_result.description | 'EventType' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Form |
target.resource.name | '์์' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
InstancesAdded |
about.resource.attribute.labels.instances_added.value | 'InstancesAdded' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
InstancesAdded |
target.user.attribute.roles.instances_added.name | 'InstancesAdded' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
InstancesRemoved |
about.resource.attribute.labels.instances_removed.value | 'InstancesRemoved' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
InstancesRemoved |
target.user.attribute.roles.instances_removed.name | 'InstancesRemoved' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
IntegrationEvent |
target.resource.attribute.labels.integration_event.value | 'IntegrationEvent' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
IntegrationStatus |
security_result.action_details | 'IntegrationStatus' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
IntegrationSystem |
target.resource.name | 'IntegrationSystem' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
IP |
src.domain.name | 'IP' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์๊ฐ ์๋๋ฉด 'src.domain.name'์ ๋งคํ๋ฉ๋๋ค. |
IP |
src.ip | 'IP' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์์ธ ๊ฒฝ์ฐ 'src.ip'์ ๋งคํ๋ฉ๋๋ค. |
IsDeviceManaged |
additional.fields.additional1.value.string_value | 'IsDeviceManaged' ํ๋๊ฐ 'N'์ด๋ฉด ๊ฐ์ด 'Successful'๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด '๋ก๊ทธ์ธ ์คํจ ๋ฐ์'์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
IsDeviceManaged |
additional.fields.additional2.value.string_value | 'IsDeviceManaged' ํ๋๊ฐ 'N'์ด๋ฉด ๊ฐ์ด 'Successful'๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด 'Invalid Credentials'๋ก ์ค์ ๋ฉ๋๋ค. |
IsDeviceManaged |
additional.fields.additional3.value.string_value | 'IsDeviceManaged' ํ๋๊ฐ 'N'์ด๋ฉด ๊ฐ์ด 'Successful'๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด '๊ณ์ ์ ๊น'์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
IsDeviceManaged |
security_result.action_details | 'IsDeviceManaged' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
OutputFiles |
about.file.full_path | 'OutputFiles' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Person |
principal.user.primaryId | 'Person' ํ๋๊ฐ 'INT'๋ก ์์ํ๋ฉด grok ํจํด์ ์ฌ์ฉํ์ฌ userid๊ฐ ์ถ์ถ๋๊ณ 'principal.user.primaryId'์ ๋งคํ๋ฉ๋๋ค. |
Person |
principal.user.primaryName | 'Person' ํ๋๊ฐ 'INT'๋ก ์์ํ๋ฉด grok ํจํด์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ด ์ถ์ถ๋๊ณ 'principal.user.primaryName'์ ๋งคํ๋ฉ๋๋ค. |
Person |
principal.user.user_display_name | 'Person' ํ๋๊ฐ 'INT'๋ก ์์ํ์ง ์์ผ๋ฉด 'principal.user.user_display_name'์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Person |
metadata.event_type | 'Person' ํ๋๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด 'metadata.event_type' ํ๋๊ฐ 'USER_RESOURCE_UPDATE_CONTENT'๋ก ์ค์ ๋ฉ๋๋ค. |
ProcessedTransaction |
target.resource.attribute.creation_time | 'dd/MM/yyyy HH:mm:ss,SSS (ZZZ)', 'dd/MM/yyyy, HH:mm:ss,SSS (ZZZ)' ๋๋ 'MM/dd/yyyy, HH:mm:ss.SSS A ZZZ' ํ์์ผ๋ก ๋ณํํ ํ 'target.resource.attribute.creation_time'์ผ๋ก ํ์ฑ๋ฉ๋๋ค. |
ProgramBy |
principal.user.userid | 'ProgramBy' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
RecurrenceEndDate |
principal.resource.attribute.last_update_time | 'yyyy-MM-dd' ํ์์ผ๋ก ๋ณํ๋ ํ 'principal.resource.attribute.last_update_time'์ผ๋ก ํ์ฑ๋ฉ๋๋ค. |
RecurrenceStartDate |
principal.resource.attribute.creation_time | 'yyyy-MM-dd' ํ์์ผ๋ก ๋ณํ๋ ํ 'principal.resource.attribute.creation_time'์ผ๋ก ํ์ฑ๋ฉ๋๋ค. |
RequestName |
metadata.description | 'RequestName' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
ResponseMessage |
security_result.summary | 'ResponseMessage' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
RestrictedToEnvironment |
security_result.about.hostname | 'RestrictedToEnvironment' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
RevokedSecurity |
security_result.outcomes.outcomes.value | 'RevokedSecurity' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
RunFrequency |
principal.resource.attribute.labels.run_frequency.value | 'RunFrequency' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
ScheduledProcess |
principal.resource.name | 'ScheduledProcess' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SecuredTaskExecuted |
target.resource.name | 'SecuredTaskExecuted' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SecureTaskExecuted |
metadata.event_type | 'SecureTaskExecuted' ํ๋์ 'Create'๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ 'metadata.event_type' ํ๋๊ฐ 'USER_RESOURCE_CREATION'์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
SecureTaskExecuted |
target.resource.name | 'SecureTaskExecuted' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SentTime |
@timestamp | 'ISO8601' ํ์์ผ๋ก ๋ณํ๋ ํ '@timestamp'๋ก ํ์ฑ๋ฉ๋๋ค. |
SessionId |
network.session_id | 'SessionId' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
ShareBy |
target.user.userid | 'ShareBy' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SignOffTime |
additional.fields.additional4.value.string_value | 'AuthFailMessage' ํ๋ ๊ฐ์ด 'Enterprise Interface Builder' ํค์ ํจ๊ป 'additional.fields' ๋ฐฐ์ด ๋ด์ ๋ฐฐ์น๋ฉ๋๋ค. |
SignOffTime |
metadata.description | 'AuthFailMessage' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SignOffTime |
metadata.event_type | 'SignOffTime' ํ๋๊ฐ ๋น์ด ์์ผ๋ฉด 'metadata.event_type' ํ๋๊ฐ 'USER_LOGIN'์ผ๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด 'USER_LOGOUT'์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
SignOffTime |
principal.user.attribute.last_update_time | 'ISO8601' ํ์์ผ๋ก ๋ณํ๋ ํ 'principal.user.attribute.last_update_time'์ผ๋ก ํ์ฑ๋ฉ๋๋ค. |
SignOnIp |
src.domain.name | 'SignOnIp' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์๊ฐ ์๋๋ฉด 'src.domain.name'์ ๋งคํ๋ฉ๋๋ค. |
SignOnIp |
src.ip | 'SignOnIp' ํ๋๊ฐ ์ ํจํ IP ์ฃผ์์ธ ๊ฒฝ์ฐ 'src.ip'์ ๋งคํ๋ฉ๋๋ค. |
Status |
metadata.product_event_type | '์ํ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
principal.user.email_addresses | ์ด๋ฉ์ผ ์ฃผ์๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.email_addresses'์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
principal.user.primaryId | userid๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.primaryId'์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
principal.user.primaryName | ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'principal.user.primaryName'์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
src.user.userid | ๋ณด์กฐ ์ฌ์ฉ์ ID๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'src.user.userid'์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
src.user.user_display_name | ๋ณด์กฐ ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'src.user.user_display_name'์ ๋งคํ๋ฉ๋๋ค. |
SystemAccount |
target.user.userid | ํ๊ฒ userid๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'SystemAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'target.user.userid'์ ๋งคํ๋ฉ๋๋ค. |
Target |
target.user.user_display_name | 'ํ๊ฒ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Template |
about.resource.name | 'ํ ํ๋ฆฟ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Tenant |
target.asset.hostname | 'ํ ๋ํธ' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
TlsVersion |
network.tls.version | 'TlsVersion' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
Transaction |
security_result.action_details | '๊ฑฐ๋' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
TransactionType |
security_result.summary | 'TransactionType' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
TypeForm |
target.resource.resource_subtype | 'TypeForm' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
UserAgent |
network.http.parsed_user_agent | 'useragent' ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ 'UserAgent' ํ๋์์ ํ์ฑ๋ฉ๋๋ค. |
UserAgent |
network.http.user_agent | 'UserAgent' ํ๋์์ ์ง์ ๋งคํ๋ฉ๋๋ค. |
WorkdayAccount |
target.user.user_display_name | ์ฌ์ฉ์ ํ์ ์ด๋ฆ์ grok ํจํด์ ์ฌ์ฉํ์ฌ 'WorkdayAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'target.user.user_display_name'์ ๋งคํ๋ฉ๋๋ค. |
WorkdayAccount |
target.user.userid | userid๋ grok ํจํด์ ์ฌ์ฉํ์ฌ 'WorkdayAccount' ํ๋์์ ์ถ์ถ๋๊ณ 'target.user.userid'์ ๋งคํ๋ฉ๋๋ค. |
additional.fields.additional1.key | 'FailedSignOn'์ผ๋ก ์ค์ ๋ฉ๋๋ค. | |
additional.fields.additional2.key | 'InvalidCredentials'๋ก ์ค์ ๋ฉ๋๋ค. | |
additional.fields.additional3.key | 'AccountLocked'๋ก ์ค์ ๋ฉ๋๋ค. | |
additional.fields.additional4.key | 'Enterprise Interface Builder'๋ก ์ค์ ๋ฉ๋๋ค. | |
metadata.event_type | ์ฒ์์๋ 'GENERIC_EVENT'๋ก ์ค์ ๋๊ณ ๋ค๋ฅธ ํ๋์ ๊ด๋ จ๋ ๋ก์ง์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. | |
metadata.event_type | ํน์ ์ด๋ฒคํธ ์ ํ์ ๊ฒฝ์ฐ 'USER_CHANGE_PERMISSIONS'๋ก ์ค์ ๋ฉ๋๋ค. | |
metadata.event_type | ํน์ ์ด๋ฒคํธ ์ ํ์ ๊ฒฝ์ฐ 'RESOURCE_WRITTEN'์ผ๋ก ์ค์ ๋ฉ๋๋ค. | |
metadata.log_type | 'WORKDAY_AUDIT'์ผ๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
metadata.product_name | 'Enterprise Interface Builder'๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
metadata.vendor_name | 'Workday'๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
principal.asset.category | 'DeviceType' ํ๋๊ฐ 'Phone'์ธ ๊ฒฝ์ฐ 'Phone'์ผ๋ก ์ค์ ๋ฉ๋๋ค. | |
principal.resource.resource_type | 'ScheduledProcess' ํ๋๊ฐ ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ 'TASK'๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
security_result.action | 'FailedSignOn', 'IsDeviceManaged', 'InvalidCredentials', 'AccountLocked' ํ๋์ ๊ฐ์ ๋ฐ๋ผ 'ALLOW' ๋๋ 'FAIL'๋ก ์ค์ ๋ฉ๋๋ค. | |
security_result.summary | 'FailedSignOn', 'IsDeviceManaged', 'InvalidCredentials', 'AccountLocked' ํ๋์ ๊ฐ์ ๋ฐ๋ผ 'Successful' ๋๋ ํน์ ์ค๋ฅ ๋ฉ์์ง๋ก ์ค์ ๋ฉ๋๋ค. | |
target.resource.resource_type | ํน์ ์ด๋ฒคํธ ์ ํ์ ๊ฒฝ์ฐ 'TASK'๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
target.resource.resource_type | 'TypeForm' ํ๋๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด 'DATASET'์ผ๋ก ํ๋์ฝ๋ฉ๋ฉ๋๋ค. | |
message |
principal.user.email_addresses | grok ํจํด์ ์ฌ์ฉํ์ฌ 'message' ํ๋์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ถ์ถํ๊ณ ํน์ ํจํด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ 'principal.user.email_addresses'์ ๋ณํฉํฉ๋๋ค. |
message |
src.user.userid | 'event.idm.read_only_udm.principal.user.userid' ํ๋๊ฐ 'message' ํ๋์์ ์ถ์ถ๋ 'user_target'๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ํ๋๋ฅผ ์ง์๋๋ค. |
message |
src.user.user_display_name | 'event.idm.read_only_udm.principal.user.userid' ํ๋๊ฐ 'message' ํ๋์์ ์ถ์ถ๋ 'user_target'๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ํ๋๋ฅผ ์ง์๋๋ค. |
message |
target.user.userid | grok ํจํด์ ์ฌ์ฉํ์ฌ 'message' ํ๋์์ userid๋ฅผ ์ถ์ถํ๊ณ ํน์ ํจํด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ 'target.user.userid'์ ๋งคํํฉ๋๋ค. |
๋์์ด ๋ ํ์ํ์ ๊ฐ์? ์ปค๋ฎค๋ํฐ ํ์ ๋ฐ Google SecOps ์ ๋ฌธ๊ฐ๋ก๋ถํฐ ๋ต๋ณ์ ๋ฐ์ผ์ธ์.