Okta 로그 수집
다음에서 지원:
Google SecOps
SIEM
이 문서에서는 Okta API를 사용하여 Okta 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 시스템 로그를 추출하여 JSON 배열 내에서 단일 이벤트와 일괄 이벤트를 모두 처리합니다. 데이터를 UDM 형식으로 표준화하고, Okta 필드를 UDM에 상응하는 필드에 매핑하고, 파싱된 사용자 에이전트, 지리 정보, 인증 세부정보로 데이터를 보강하고, 결과 및 위험 정보를 기반으로 보안 결과 이벤트를 생성합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Okta에 대한 권한이 있는지 확인합니다.
Okta 구성
Okta SSO를 구성하려면 다음 작업을 완료하세요.
읽기 전용 권한이 있는 Okta 관리 사용자 만들기
- Okta 관리 콘솔에 로그인합니다.
표준 사용자를 만듭니다.
- 디렉터리 > 사용자로 이동합니다.
- 사용자 추가를 클릭하고 필수 입력란을 작성합니다.
보안 > 관리자를 선택합니다.
관리자 추가를 클릭합니다.
관리자 할당 입력란에서 일반 사용자를 찾습니다.
역할 섹션의 목록에서 읽기 전용 관리자를 선택합니다.
관리자 계정에서 로그아웃합니다.
API 키 가져오기
- 읽기 전용 관리자 사용자로 Okta 관리 콘솔에 로그인합니다.
- 보안 > API > 토큰으로 이동합니다.
- 토큰 만들기를 클릭합니다.
- 토큰에 의미 있는 이름을 지정합니다.
- API가 사용될 IP 영역을 입력합니다. 잘 모르겠다면 any IP를 선택해도 됩니다.
- 토큰 만들기를 클릭합니다.
- API 키를 복사합니다.
- 확인을 클릭합니다.
Okta 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: Okta Logs).
- 소스 유형으로 서드 파티 API를 선택합니다.
- 로그 유형으로 Okta를 선택합니다.
- 다음을 클릭합니다.
- 다음 입력 매개변수의 값을 지정합니다.
- 인증 HTTP 헤더:
Authorization:<API_KEY>
형식으로 Okta API 키를 입력합니다. - API 호스트 이름: Okta 호스트의 도메인 이름을 지정합니다 (예:
<your-domain>.okta.com
). - 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
- 인증 HTTP 헤더:
- 다음을 클릭합니다.
- 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
actor.alternateId |
principal.user.email_addresses |
이메일 주소인 경우 actor.alternateId 에서 추출됩니다. 이메일 주소가 아닌 경우 principal.user.userid 로 사용됩니다. |
actor.displayName |
principal.user.user_display_name |
직접 매핑됩니다. |
actor.id |
principal.user.product_object_id |
직접 매핑됩니다. |
actor.type |
principal.user.attribute.roles.name |
직접 매핑됩니다. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value |
키 authenticationProvider 로 직접 매핑됩니다. |
authenticationContext.credentialProvider |
security_result.detection_fields.value |
키 credentialProvider 로 직접 매핑됩니다. |
authenticationContext.credentialType |
extensions.auth.mechanism |
인증 메커니즘 (OTP, USERNAME_PASSWORD, LOCAL)을 파생하는 데 사용됩니다. |
authenticationContext.externalSessionId |
network.parent_session_id |
직접 매핑됩니다. |
client.device |
principal.asset.type /additional.fields.value.string_value |
값에 따라 principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED)에 매핑됩니다. additional.fields 에서 키 device 를 사용하여 문자열 값으로 매핑됩니다. |
client.geographicalContext.city |
principal.location.city |
직접 매핑됩니다. |
client.geographicalContext.country |
principal.location.country_or_region |
직접 매핑됩니다. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
직접 매핑됩니다. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
직접 매핑됩니다. |
client.geographicalContext.postalCode |
additional.fields.value.string_value |
additional.fields 에서 키 Postal code 를 사용하여 문자열 값으로 직접 매핑됩니다. |
client.geographicalContext.state |
principal.location.state |
직접 매핑됩니다. |
client.ipAddress |
principal.ip , principal.asset.ip |
직접 매핑됩니다. |
client.userAgent.browser |
target.resource.attribute.labels.value |
키 Browser 로 직접 매핑됩니다. |
client.userAgent.os |
principal.platform |
값을 기반으로 플랫폼 (LINUX, WINDOWS, MAC)에 매핑됩니다. |
client.userAgent.rawUserAgent |
network.http.user_agent , network.http.parsed_user_agent |
직접 매핑되고 파싱됩니다. |
client.zone |
additional.fields.value.string_value |
additional.fields 에서 키 zone 를 사용하여 문자열 값으로 직접 매핑됩니다. |
debugContext.debugData.behaviors |
security_result.description , security_result.detection_fields |
설명에 직접 매핑됩니다. 개별 동작이 추출되어 감지 필드로 추가됩니다. |
debugContext.debugData.changedAttributes |
security_result.detection_fields.value |
키 changedAttributes 로 직접 매핑됩니다. |
debugContext.debugData.clientAddress |
principal.ip , principal.asset.ip |
request.ipChain 및 client.ipAddress 가 누락된 경우 직접 매핑됩니다. |
debugContext.debugData.deviceFingerprint |
target.asset.asset_id |
직접 매핑되며 접두어는 device_finger_print: 입니다. |
debugContext.debugData.dtHash |
security_result.detection_fields.value |
키 dtHash 로 직접 매핑됩니다. |
debugContext.debugData.factor |
security_result.detection_fields.value |
키 factor 로 직접 매핑됩니다. |
debugContext.debugData.factorIntent |
security_result.detection_fields.value |
키 factorIntent 로 직접 매핑됩니다. |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value |
키 Risk Reasons 로 직접 매핑됩니다. |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles |
개별 권한으로 분할하고 이름과 설명이 있는 역할로 추가했습니다. |
debugContext.debugData.pushOnlyResponseType |
security_result.detection_fields.value |
키 pushOnlyResponseType 로 직접 매핑됩니다. |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value |
키 pushWithNumberChallengeResponseType 로 직접 매핑됩니다. |
debugContext.debugData.requestUri |
extensions.auth.auth_details |
직접 매핑됩니다. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value |
키 suspiciousActivityEventId 로 직접 매핑됩니다. |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value |
키 suspiciousActivityEventType 로 직접 매핑됩니다. |
debugContext.debugData.threatDetections |
security_result.detection_fields.value |
키 threatDetections 로 직접 매핑됩니다. |
debugContext.debugData.threatSuspected |
security_result.detection_fields.value , security_result.threat_status |
threatSuspected 키를 사용하여 감지 필드로 매핑됩니다. 위협 상태 (ACTIVE 또는 FALSE_POSITIVE)를 파생하는 데 사용됩니다. |
debugContext.debugData.url |
target.url |
직접 매핑됩니다. |
displayMessage |
security_result.summary |
직접 매핑됩니다. |
eventType |
metadata.product_event_type , metadata.event_type |
product_event_type 에 직접 매핑됩니다. event_type (USER_LOGIN, USER_LOGOUT, USER_CHANGE_PASSWORD, USER_CHANGE_PERMISSIONS, USER_DELETION, GROUP_MODIFICATION, SETTING_MODIFICATION, SCHEDULED_TASK_ENABLE, RESOURCE_CREATION, USER_UNCATEGORIZED)를 파생하는 데 사용됩니다. |
legacyEventType |
security_result.detection_fields.value |
키 legacyEventType 로 직접 매핑됩니다. |
outcome.reason |
security_result.category_details |
직접 매핑됩니다. |
outcome.result |
security_result.action |
값에 따라 작업 (ALLOW, CHALLENGE, BLOCK)에 매핑됩니다. |
published |
metadata.event_timestamp |
타임스탬프로 파싱됩니다. |
request.ipChain.n.geographicalContext |
intermediary.location |
요청 체인의 중간 IP의 지리적 컨텍스트입니다. |
request.ipChain.n.ip |
intermediary.ip |
요청 체인의 중개자의 IP 주소입니다. |
securityContext.asNumber |
security_result.detection_fields.value |
키 asNumber 로 직접 매핑됩니다. |
securityContext.asOrg |
security_result.detection_fields.value |
키 asOrg 로 직접 매핑됩니다. |
securityContext.domain |
security_result.detection_fields.value |
키 domain 로 직접 매핑됩니다. |
securityContext.isp |
security_result.detection_fields.value |
키 isp 로 직접 매핑됩니다. |
securityContext.isProxy |
security_result.detection_fields.value |
키 anonymized IP 로 직접 매핑됩니다. |
target.n.alternateId |
target.user.email_addresses /target.user.userid |
이메일 주소인 경우 target.user.email_addresses 에 매핑됩니다. 이메일 주소가 아닌 경우 target.user.userid 로 사용됩니다. |
target.n.detailEntry.clientAppId |
target.asset_id |
직접 매핑되며 접두어는 Client_app_id: 입니다. |
target.n.detailEntry.methodTypeUsed |
target.resource_ancestors.attribute.labels.value |
타겟 유형이 AuthenticatorEnrollment인 경우 키 methodTypeUsed 로 직접 매핑됩니다. |
target.n.detailEntry.methodUsedVerifiedProperties |
target.resource_ancestors.attribute.labels.value |
타겟 유형이 AuthenticatorEnrollment인 경우 키 methodUsedVerifiedProperties 로 직접 매핑됩니다. |
target.n.detailEntry.policyType |
target.resource_ancestors.attribute.labels.value |
키 Policy Type 로 직접 매핑됩니다. |
target.n.detailEntry.signOnModeType |
security_result.detection_fields.value |
키 signOnModeType 로 직접 매핑됩니다. |
target.n.displayName |
target.user.user_display_name / target.application / target.resource.name |
타겟 유형을 기반으로 매핑됩니다. |
target.n.id |
target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id |
타겟 유형을 기반으로 매핑됩니다. |
target.n.type |
target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype |
타겟 유형을 기반으로 매핑됩니다. |
transaction.id |
network.session_id |
직접 매핑됩니다. |
transaction.type |
additional.fields.value.string_value |
additional.fields 에서 키 type 를 사용하여 문자열 값으로 직접 매핑됩니다. |
uuid |
metadata.product_log_id |
직접 매핑됩니다. |
해당 사항 없음 | metadata.vendor_name |
Okta 로 설정합니다. |
해당 사항 없음 | metadata.product_name |
Okta 로 설정합니다. |
해당 사항 없음 | extensions.auth.type |
SSO 로 설정합니다. |
해당 사항 없음 | is_alert |
security.threat.detected 및 user.account.report_suspicious_activity_by_enduser 이벤트의 경우 true로 설정합니다. |
해당 사항 없음 | is_significant |
security.threat.detected 및 user.account.report_suspicious_activity_by_enduser 이벤트의 경우 true로 설정합니다. |
변경사항
2024년 5월 16일
is_alert
이 true이고is_significant
이 true이면security_result.alert_state
를ALERTING
로 설정합니다.
2024-03-05
- 트래픽이 허용되었는지 또는 차단되었는지 반영하도록
security_result.action
필드를 업데이트했습니다.
2024-02-16
버그 수정:
target.0.type
가User
또는AppUser
이면target.0.alternateId
를target.user.userid
에 매핑했습니다.target.1.type
가User
또는AppUser
이면target.1.alternateId
를target.user.userid
에 매핑했습니다.
2023-12-14
securityContext.asNumber
를security_result.detection_fields
에 매핑했습니다.legacyEventType
를security_result.detection_fields
에 매핑했습니다.metadata.event_type
를 설정하기 전에conditional_check
를 추가했습니다.
2023-06-28
debugContext.debugData.suspiciousActivityEventType
의 전체 값을security_result.detection_fields
에 매핑했습니다.debugContext.debugData.logOnlySecurityData.behaviors.New Device
의 전체 값을security_result.detection_fields
에 매핑했습니다.
2023-06-09
debugContext.debugData.deviceFingerprint
필드는target.asset.asset_id
에 매핑됩니다.debugContext.debugData.risk.reasons
의 전체 값을security_result.detection_fields
에 매핑했습니다.
2023-05-17
- 'authenticationContext.externalSessionId' 필드가 'network.parent_session_id'에 매핑됩니다.
- 'debugContext.debugData.pushOnlyResponseType' 필드가 'security_result.detection_fields.key/value'에 매핑됩니다.
- 'debugContext.debugData.factor' 필드가 'security_result.detection_fields.key/value'에 매핑됩니다.
- 'debugContext.debugData.factorIntent' 필드가 'security_result.detection_fields.key/value'에 매핑됩니다.
- 'debugContext.debugData.pushWithNumberChallengeResponseType' 필드가 'security_result.detection_fields.key/value'에 매핑됩니다.
- 'debugContext.debugData.dtHash' 필드가 'security_result.detection_fields.key/value'에 매핑됩니다.
- 'client.userAgent.rawUserAgent' 필드가 'network.http.user_agent'에 매핑됩니다.
- 'security_result.action'의 매핑이 'ALLOW_WITH_MODIFICATION'에서 enum 값 'CHALLENGE'로 변경되었습니다.
- eventType 'system.api_token.create'의 경우 metadata.event_type이 'USER_UNCATEGORIZED'에서 'RESOURCE_CREATION'으로 변경되었습니다.
2023-04-28
버그 수정:
debugContext.debugData.threatSuspected
이true
인 경우security_result.threat_status
를ACTIVE
로 매핑하고, 그렇지 않으면FALSE_POSITIVE
로 매핑하도록 수정했습니다.
2023-03-24
logOnlySecurityData
필드를security_result.detection_fields
에 매핑했습니다.- 또한 작업 목록에
DEFERRED
를 추가하여 파싱 오류를 해결했습니다.
2023-04-11
http.user_agent
에 매핑된 필드를http.parsed_user_agent
로 다시 매핑했습니다.target.displayName
를target.resource_ancestors.name
에 매핑했습니다.targetfield.detailEntry.methodTypeUsed
를target.resource_ancestors.attribute.labels
에 매핑했습니다.targetfield.detailEntry.methodUsedVerifiedProperties
를target.resource_ancestors.attribute.labels
에 매핑했습니다.
2023-02-20
eventType
이user.authentication.auth_via_AD_agent
인 경우metadata.event_type
를USER_LOGIN
에서STATUS_UPDATE
로 변경했습니다.
2022-12-14
debugContext.debugData.changedAttributes
를security_result.detection_fields
에 매핑했습니다.detail.actor.alternateId
용 null 검사를 추가했습니다.
2022-11-17
target[n].alternateId
필드가target.resource.attribute.labels
에 매핑됩니다.detail.target.0.alternateId
필드는target.resource.attribute.labels
에 매핑됩니다.
2022-11-08
버그 수정:
user_email
필드의 올바른 이메일 확인을 위한 조건을 추가했습니다.RATE_LIMIT
에 없는Action1
필드에 대한 검사를 추가했습니다.actor.displayName
에 null, 알 수 없음 검사를 추가했습니다.
2022-11-04
- 여러 이벤트가 있는 로그에 대한 지원을 추가했습니다.
2022-10-15
signOnModeType
가security_result.detection_fields
에 매핑되었습니다.authenticationProvider
가security_result.detection_fields
에 매핑되었습니다.credentialProvider
가security_result.detection_fields
에 매핑되었습니다.device
가additional.fields
에 매핑되었습니다.zone
가additional.fields
에 매핑되었습니다.type
가additional.fields
에 매핑되었습니다.
2022-10-14
버그 수정:
- 'principal.user.email_addresses' 및 'target.user.email_addresses'에 대한 조건부 검사가 추가되었습니다.
- 'principal.ip'에 매핑된 'request.ipChain.0.ip' 필드의 유효한 ip_address를 확인하는 grok를 추가했습니다.
- 'target.url'에 매핑된 'debugContext.debugData.url' 필드에 on_error 조건을 추가했습니다.
2022-10-03
client.userAgent.os
를principal.platform
에 매핑했습니다.client.device
를principal.asset.type
에 매핑했습니다.anonymized IP
(하드코딩된 문자열)를 security_result.detection_fields.key에 매핑하고 'securityContext.isProxy' 값을 상응하는 security_result.detection_fields.value에 매핑했습니다.
2022-09-16
- 'securityContext.asOrg'가 'security_result.category_details'에 매핑되었습니다.
- 'securityContext.isProxy'가 'security_result.detection_fields'에 매핑되었습니다.
- 'securityContext.domain'이 'security_result.detection_fields'에 매핑되었습니다.
- 'securityContext.isp'가 'security_result.detection_fields'에 매핑되었습니다.
- 'debugContext.debugData.risk.level'이 'security_result.severity'에 매핑되었습니다.
- 'debugContext.debugData.risk.reasons'가 'security_result.detection_fields'에 매핑되었습니다.
2022-08-12
- 새로 처리된 로그가 파싱되어 다음 필드에 매핑되었습니다.
- 'detail.uuid'가 'metadata.product_log_id'에 매핑되었습니다.
- 'detail.eventType'이 'metadata.product_event_type'에 매핑됨
- 'detail.actor.id'가 'principal.user.product_object_id'에 매핑되었습니다.
- 'detail.actor.alternateId'가 'principal.user.userid'에 매핑된 경우
- 'detail.actor.alternateId'가 'principal.user.email_addresses'에 매핑되었습니다.
- 'detail.actor.displayName'이 'principal.user.user_display_name'에 매핑되었습니다.
- 'detail.actor.type'이 '.principal.user.attribute.roles'에 매핑되었습니다.
- 'detail.client.ipChain.0.ip'가 'principal.ip'에 매핑되었습니다.
- 'detail.client.ipChain.0.geographicalContext.state'가 'principal.location.state'에 매핑되었습니다.
- 'detail.client.ipChain.0.geographicalContext.city'가 'principal.location.city'에 매핑되었습니다.
- 'detail.client.ipChain.0.geographicalContext.country'가 'principal.location.country_or_region'에 매핑되었습니다.
- 'detail.debugContext.debugData.requestUri'가 'target.url'에 매핑되었습니다.
- 'detail.target.0.type'이 'target.resource.resource_subtype'에 매핑되었습니다.
- 'detail.target.0.id'가 'target.resource.resource.product_object_id'에 매핑되었습니다.
- 'detail.target.0.displayName'이 'target.resource.resource_subtype'에 매핑되었습니다.
- 'detail.target.0.detailEntry.policyType'이 'target.resource_ancestors.attribute.labels'에 매핑되었습니다.
- 'detail.outcome.reason'이 'security_result.category_details'에 매핑되었습니다.
- 'detail.debugContext.debugData.threatSuspected'가 'security_result.detection_fields'에 매핑되었습니다.
- 'detail.displayMessage'가 'security_result.summary'에 매핑되었습니다.
- 'detail.outcome.result'가 'security_result.action'에 매핑되었습니다.
- 'detail.severity'가 'security_result.severity'에 매핑되었습니다.
- 'detail.transaction.id'가 'network.session_id'에 매핑되었습니다.
- 'detail.debugContext.debugData.requestUri'가 'extensions.auth.auth_details'에 매핑되었습니다.
2022-07-08
actor.type
의 매핑을principal.user.role_name
에서principal.user.attribute.roles
로 수정했습니다.target.0.type
의 매핑을target.user.role_name
에서target.user.attribute.roles
로 수정했습니다.target.1.type
의 매핑을target.user.role_name
에서target.user.attribute.roles
로 수정했습니다.
2022-06-15
개선사항:
target.0.type
==Token
의 경우target.0.detailEntry.clientAppId
를target.asset_id
에 매핑했습니다.- UDM 필드 'network.session_id'에 매핑된 'transaction.id' 필드에 대한 조건부 검사가 추가되었습니다.
2022-06-03
개선사항:
- debugContext.debugData.privilegeGranted를 target.user.attribute.roles.name에 추가로 매핑했습니다.
- debugContext.debugData.requestUri를 extensions.auth.auth_details에 매핑했습니다.
- debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections, debugContext.debugData.threatSuspected가 security_result.detection_fields에 매핑되었습니다.
2022-03-22
개선사항:
- debugContext.debugData.behaviors가 security_result.description에 매핑됨
- debugContext.debugData.threatSuspected가 security_result.threat_status에 매핑됨
- debugContext.debugData.risk가 security_result.severity에 매핑되었습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.