Okta 로그 수집

다음에서 지원:

이 문서에서는 Okta API를 사용하여 Okta 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 시스템 로그를 추출하여 JSON 배열 내에서 단일 이벤트와 일괄 이벤트를 모두 처리합니다. 데이터를 UDM 형식으로 표준화하고, Okta 필드를 UDM에 상응하는 필드에 매핑하고, 파싱된 사용자 에이전트, 지리 정보, 인증 세부정보로 데이터를 보강하고, 결과 및 위험 정보를 기반으로 보안 결과 이벤트를 생성합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • Okta에 대한 권한이 있는지 확인합니다.

Okta 구성

Okta SSO를 구성하려면 다음 작업을 완료하세요.

읽기 전용 권한이 있는 Okta 관리 사용자 만들기

  1. Okta 관리 콘솔에 로그인합니다.
  2. 표준 사용자를 만듭니다.

    • 디렉터리 > 사용자로 이동합니다.
    • 사용자 추가를 클릭하고 필수 입력란을 작성합니다.
  3. 보안 > 관리자를 선택합니다.

  4. 관리자 추가를 클릭합니다.

  5. 관리자 할당 입력란에서 일반 사용자를 찾습니다.

  6. 역할 섹션의 목록에서 읽기 전용 관리자를 선택합니다.

  7. 관리자 계정에서 로그아웃합니다.

API 키 가져오기

  1. 읽기 전용 관리자 사용자로 Okta 관리 콘솔에 로그인합니다.
  2. 보안 > API > 토큰으로 이동합니다.
  3. 토큰 만들기를 클릭합니다.
  4. 토큰에 의미 있는 이름을 지정합니다.
  5. API가 사용될 IP 영역을 입력합니다. 잘 모르겠다면 any IP를 선택해도 됩니다.
  6. 토큰 만들기를 클릭합니다.
  7. API 키를 복사합니다.
  8. 확인을 클릭합니다.

Okta 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: Okta Logs).
  4. 소스 유형으로 서드 파티 API를 선택합니다.
  5. 로그 유형으로 Okta를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.
    • 인증 HTTP 헤더: Authorization:<API_KEY> 형식으로 Okta API 키를 입력합니다.
    • API 호스트 이름: Okta 호스트의 도메인 이름을 지정합니다 (예: <your-domain>.okta.com).
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용된 라벨입니다.
  8. 다음을 클릭합니다.
  9. 확정 화면에서 피드 구성을 검토한 다음 제출을 클릭합니다.

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.ipChainclient.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.detecteduser.account.report_suspicious_activity_by_enduser 이벤트의 경우 true로 설정합니다.
해당 사항 없음 is_significant security.threat.detecteduser.account.report_suspicious_activity_by_enduser 이벤트의 경우 true로 설정합니다.

변경사항

2024년 5월 16일

  • is_alert이 true이고 is_significant이 true이면 security_result.alert_stateALERTING로 설정합니다.

2024-03-05

  • 트래픽이 허용되었는지 또는 차단되었는지 반영하도록 security_result.action 필드를 업데이트했습니다.

2024-02-16

버그 수정:

  • target.0.typeUser 또는 AppUser이면 target.0.alternateIdtarget.user.userid에 매핑했습니다.
  • target.1.typeUser 또는 AppUser이면 target.1.alternateIdtarget.user.userid에 매핑했습니다.

2023-12-14

  • securityContext.asNumbersecurity_result.detection_fields에 매핑했습니다.
  • legacyEventTypesecurity_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.threatSuspectedtrue인 경우 security_result.threat_statusACTIVE로 매핑하고, 그렇지 않으면 FALSE_POSITIVE로 매핑하도록 수정했습니다.

2023-03-24

  • logOnlySecurityData 필드를 security_result.detection_fields에 매핑했습니다.
  • 또한 작업 목록에 DEFERRED를 추가하여 파싱 오류를 해결했습니다.

2023-04-11

  • http.user_agent에 매핑된 필드를 http.parsed_user_agent로 다시 매핑했습니다.
  • target.displayNametarget.resource_ancestors.name에 매핑했습니다.
  • targetfield.detailEntry.methodTypeUsedtarget.resource_ancestors.attribute.labels에 매핑했습니다.
  • targetfield.detailEntry.methodUsedVerifiedPropertiestarget.resource_ancestors.attribute.labels에 매핑했습니다.

2023-02-20

  • eventTypeuser.authentication.auth_via_AD_agent인 경우 metadata.event_typeUSER_LOGIN에서 STATUS_UPDATE로 변경했습니다.

2022-12-14

  • debugContext.debugData.changedAttributessecurity_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

  • signOnModeTypesecurity_result.detection_fields에 매핑되었습니다.
  • authenticationProvidersecurity_result.detection_fields에 매핑되었습니다.
  • credentialProvidersecurity_result.detection_fields에 매핑되었습니다.
  • deviceadditional.fields에 매핑되었습니다.
  • zoneadditional.fields에 매핑되었습니다.
  • typeadditional.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.osprincipal.platform에 매핑했습니다.
  • client.deviceprincipal.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.clientAppIdtarget.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 전문가의 답변을 받으세요.