Okta 관리자 콘솔에서, 보고서 → 시스템 로그 를 사용하여 이벤트를 검색하고 결과를 다운로드할 수 있습니다. JSON의 경우, 시스템 로그 API: GET /api/v1/logs를 사용하고, 다음 링크를 따라가기만 하면 됩니다. 간단한 스크립트가 아래에 있습니다. Okta는 시스템 로그 이벤트를 90일 동안 보관합니다.
신원이 경계일 때, Okta의 시스템 로그는 게이트 로그입니다. 모든 로그인, 모든 MFA 푸시, 모든 요소 재설정 및 모든 관리자 역할 변경을 기록합니다. Prime Core는 Okta 데이터에 대한 58개의 탐지 규칙을 가지고 있으며, 이는 32개의 MITRE ATT&CK 기법에 매핑되어 있습니다. 그중에는 비밀번호 스프레이 공격(T1110.003), MFA 피로(T1621) 및 공격자가 MFA 등록을 조작하는 행위(T1556.006)가 포함됩니다.
시작하기 전에
보존 기간은 90일입니다. 그보다 오래된 것은 오직 Okta 로그를 스트리밍하거나 전달해온 장소에만 존재합니다, 예를 들어 SIEM 같은 경우입니다.
토큰이 필요합니다. API 토큰(보안 → API → 토큰)은 토큰을 만든 관리자의 권한을 상속받습니다. 로그에는 읽기 전용 관리자로 충분합니다. 자동화된 항목에 대해서는 okta.logs.read 범위의 OAuth 서비스 앱을 사용하는 것이 더 깔끔한 선택입니다. 어떤 경우든 토큰은 자격 증명입니다. 터미널 기록에서 유지하지 않고 완료 시 토큰을 철회하세요.
속도 제한이 적용됩니다. 로그 엔드포인트에는 자체 속도 제한이 있습니다. 큰 창이 괜찮지만 즉시 실행되지는 않습니다.
시스템 로그 API로 내보내기
이 Python 스크립트는 시간 창을 페이지하며 라인당 하나의 이벤트를 작성합니다. requests가 필요합니다 (pip install requests):
import json, os, requests
org = "https://yourorg.okta.com"
headers = {"Authorization": f"SSWS {os.environ['OKTA_TOKEN']}", "Accept": "application/json"}
url = f"{org}/api/v1/logs"
params = {"since": "2026-10-19T00:00:00Z", "until": "2026-10-20T00:00:00Z", "limit": 1000}
with open("okta_1019.jsonl", "w") as out:
while url:
r = requests.get(url, headers=headers, params=params, timeout=60)
r.raise_for_status()
events = r.json()
for e in events:
out.write(json.dumps(e) + "n")
if not events:
break
url = r.links.get("next", {}).get("url")
params = None # the next link already carries the query
항상 설정하세요 until. 그렇지 않으면, Okta는 요청을 실시간 폴링으로 처리하며 계속해서 다음 링크를 반환합니다. 루프는 새로운 이벤트를 기다리며 영원히 실행됩니다.
범위를 좁히려면 매개변수에 필터를 추가하세요. 예를 들어 “filter”: ‘eventType eq “user.session.start”‘. 또는 “q”: “jane”을 사용하여 키워드 검색을 수행하세요.
찾아야 할 것
| eventType | 왜 중요합니까 |
|---|---|
| user.session.start with outcome.result: FAILURE | 실패한 로그인; 하나의 IP 범위에서 많은 사용자가 있다는 것은 스프레이를 의미합니다 |
| user.mfa.okta_verify.deny_push | 사용자가 푸시를 거부했습니다; 이것이 급증하는 것은 MFA 피로가 진행 중임을 나타냅니다 |
| user.mfa.factor.deactivate, user.mfa.factor.reset_all | 요소가 제거되었습니다, 이는 종종 헬프 데스크 사회공학적 전화 직후 발생합니다 |
| user.account.privilege.grant | 관리자 역할 부여됨 |
| policy.rule.update, policy.lifecycle.update | 로그인 또는 MFA 정책이 변경되었으며, 약화될 가능성이 있습니다 |
| system.api_token.create | 새로운 API 토큰 생성을 통한 조용한 접근 유지 방법 |
이야기를 전하는 필드: actor.alternateId (누구), client.ipAddress 및 client.geographicalContext (어디서), outcome (무슨 일이 있었는지) 및 debugContext.debugData (세부사항).
LogTotal에 업로드, 정비 및 리뷰
- 업로드. 열기 logtotal.com 에 .jsonl 파일을 드롭하세요. [증거: 업로드 화면, 크기 제한]
- 정비. [PROOF: what gets masked: usernames and emails, IPs, device and session IDs]. Look it over before you continue.
- 리뷰. [PROOF: what the results screen shows]
문제가 발생했을 때
| 증상 | 가능성 있는 원인 | Fix |
|---|---|---|
| 401 | 잘못된 또는 철회된 토큰, 또는 SSWS 접두사의 누락 | 헤더 형식을 확인하고 새 토큰을 생성하세요 |
| 403 | 토큰 생성자에게 로그 읽기 권한이 없음 | 로그 접근 권한이 있는 관리자로부터 토큰을 사용하세요 |
| 429 | 속도 제한 초과 | X-Rate-Limit-Reset의 시간까지 기다렸다가 계속하세요 |
| 스크립트가 끝나지 않음 | 쿼리에 until 없음 | until 설정 |
| 90일보다 오래된 것은 없음 | Okta 보존 기간 | SIEM 또는 로그 스트리밍 목적지를 확인하세요 |
FAQ
관리자 콘솔만 사용할 수는 없나요?
짧은 창을 빠르게 보기 위해서는 가능합니다. 분석하거나 보관하려는 모든 것에 대해서는 API가 모든 필드를 포함한 완전한 JSON을 제공합니다.
이것이 Auth0를 다루나요?
아니오. 이 가이드는 Okta 워크포스 아이덴티티에 관한 것입니다. Auth0는 자체 로그 형식과 API를 가지고 있습니다.