Salesforce 로그 수집
이 문서에서는 Amazon AppFlow와 Amazon S3 또는 서드 파티 API라는 두 가지 방법을 사용하여 Salesforce 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 LEEF, CSV, JSON 형식의 로그를 처리합니다. 필드를 추출하고, 형식별 처리 (LEEF 키-값 쌍, CSV 열, JSON 구조 처리)를 실행하고, UDM에 매핑하고, 메타데이터와 파생 필드로 데이터를 보강합니다. 파서는 다양한 Salesforce 이벤트 유형도 처리하여 로그인, 로그아웃, 기타 작업에 특정 로직을 적용하고, 이벤트를 분류하고, 적절한 UDM 이벤트 유형을 설정합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Salesforce에 대한 권한 액세스 (시스템 관리자 또는 이에 상응하는 권한)
옵션 1: 서드 파티 API 메서드
- Salesforce Shield 이벤트 모니터링 라이선스 또는 이벤트 모니터링 부가기능
- X.509 인증서 및 RSA 키 쌍을 생성하고 관리하는 기능
옵션 2: S3 메서드를 사용하는 Amazon AppFlow
- AWS에 대한 액세스 권한
- 조직에서 Salesforce Enterprise, Unlimited 또는 Performance Edition을 사용합니다.
중요 라이선스 참고사항: Salesforce Shield 이벤트 모니터링이 없으면 EventLogFile에 대한 API 액세스가 1일 보관 기간의 기본 이벤트 유형 7개 (로그인, 로그아웃, API 총 사용량, CORS 위반 기록, CSP 위반, 호스트 이름 리디렉션, Apex 예기치 않은 예외)로 제한됩니다. Shield가 없는 대부분의 조직은 Amazon AppFlow 메서드 (옵션 2)를 사용해야 합니다.
옵션 1: 서드 파티 API (OAuth JWT Bearer)를 사용하여 Salesforce Direct API 통합 구성
이 메서드는 서버 간 인증을 위해 OAuth 2.0 JWT Bearer 흐름을 사용하여 Google SecOps에서 Salesforce로 직접 API 연결을 설정합니다.
이 방법의 기본 요건:
- Salesforce Shield 이벤트 모니터링 라이선스 또는 이벤트 모니터링 부가기능 (포괄적인 EventLogFile 액세스에 필요)
- Salesforce의 시스템 관리자 액세스 권한
- X.509 인증서 및 RSA 키 쌍을 생성하고 관리하는 기능
RSA 키 쌍 및 X.509 인증서 생성
JWT 전달자 인증에는 RSA 비공개 키와 해당 X.509 인증서가 필요합니다.
RSA 비공개 키를 생성합니다.
openssl genrsa -out salesforce_jwt_private.key 2048인증서 서명 요청 (CSR)을 생성합니다.
openssl req -new -key salesforce_jwt_private.key -out salesforce_jwt.csr자체 서명 인증서 (1년 동안 유효)를 생성합니다.
openssl x509 -req -days 365 -in salesforce_jwt.csr -signkey salesforce_jwt_private.key -out salesforce_jwt.crt비공개 키를 안전하게 저장합니다. Google SecOps 피드 구성에 필요합니다.
JWT Bearer 흐름으로 Salesforce 연결 앱 만들기
- 시스템 관리자로 Salesforce에 로그인합니다.
- 설정 > 앱 > 앱 관리자로 이동합니다.
- 새로 연결된 앱을 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 연결된 앱 이름: 이름을 입력합니다 (예:
Google Security Operations Integration). - API 이름: 연결된 앱 이름을 기반으로 자동 입력됩니다.
- 연락처 이메일: 이메일 주소를 입력합니다.
- 연결된 앱 이름: 이름을 입력합니다 (예:
- API (OAuth 설정 사용 설정) 섹션에서 다음을 수행합니다.
- Enable OAuth Settings(OAuth 설정 사용)를 선택합니다.
- 콜백 URL:
https://login.salesforce.com/services/oauth2/callback를 입력합니다 (JWT 흐름에는 사용되지 않지만 필요함). - 디지털 서명 사용을 선택합니다.
- 파일 선택을 클릭하고 이전에 생성한 X.509 인증서 (
salesforce_jwt.crt)를 업로드합니다. - 선택한 OAuth 범위: 다음 범위를 추가합니다.
- Selected OAuth Scopes(api)(데이터 액세스 및 관리)
- 사용자를 대신하여 언제든지 요청 수행(refresh_token, offline_access)
- 지원되는 승인 흐름에 코드 교환용 증명 키 (PKCE) 확장 프로그램 필요: 이 옵션을 선택 해제합니다.
- 저장을 클릭합니다.
- 경고 메시지에서 계속을 클릭합니다.
- 연결된 앱 세부정보 페이지에서 소비자 키를 확인합니다. 이 값은 Google SecOps에서 JWT 클레임 발급자로 사용됩니다.
- 관리 > 정책 수정을 클릭합니다.
- OAuth 정책 섹션에서 다음을 수행합니다.
- 허용된 사용자: 관리자가 승인한 사용자는 사전 승인 처리됨을 선택합니다.
- IP 완화: IP 제한사항 완화를 선택합니다.
- 저장을 클릭합니다.
Salesforce에서 통합 사용자 만들기 및 구성
- 설정 > 사용자 > 사용자로 이동합니다.
- New User를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 이름:
Google를 입력합니다. - 성:
Google SecOps Integration를 입력합니다. - 이메일: 이메일 주소를 입력합니다.
- 사용자 이름: 고유한 사용자 이름을 입력합니다.
- 사용자 라이선스: Salesforce를 선택합니다.
- 프로필: 시스템 관리자를 선택하거나 API 액세스 권한이 있는 맞춤 프로필을 만듭니다.
- 이름:
- 저장을 클릭합니다.
- 입력한 그대로 사용자 이름을 기록합니다. 이 값은 Google SecOps에서 JWT 클레임 주체로 사용됩니다.
연결된 앱에 통합 사용자 할당
- 설정 > 앱 > 연결된 앱 > 연결된 앱 관리로 이동합니다.
- 생성한 Google Security Operations 통합 연결된 앱을 클릭합니다.
- 관리 > 프로필 관리 또는 권한 집합 관리를 클릭합니다.
- 통합 사용자에게 할당된 프로필 또는 권한 집합 (예: 시스템 관리자)을 선택합니다.
- 저장을 클릭합니다.
통합 사용자에게 API 및 이벤트 모니터링 권한 부여
- 설정 > 사용자 > 권한 집합으로 이동합니다.
- New(새로 만들기)를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 라벨:
Event Monitoring API Access를 입력합니다. - API 이름: 자동으로 채워집니다.
- 라벨:
- 저장을 클릭합니다.
- 권한 집합 세부정보 페이지에서 다음을 수행합니다.
- 시스템 권한을 클릭합니다.
- 수정을 클릭합니다.
- 다음 권한을 확인합니다.
- API 사용 설정됨
- 이벤트 로그 파일 보기
- 모든 데이터 보기 (선택사항이지만 포괄적인 액세스를 위해 권장됨)
- 저장을 클릭합니다.
- 할당 관리 > 할당 추가를 클릭합니다.
- 앞에서 만든 통합 사용자를 선택합니다.
- 할당 > 완료를 클릭합니다.
API를 통해 Salesforce 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- + 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예:
Salesforce logs). - 소스 유형으로 서드 파티 API를 선택합니다.
- 로그 유형으로 Salesforce를 선택합니다.
- 다음을 클릭합니다.
- 드롭다운에서 OAuth JWT 부여를 선택합니다.
- 다음 입력 파라미터의 값을 지정합니다.
- OAuth JWT 엔드포인트: Salesforce OAuth 토큰 엔드포인트를 입력합니다.
- 프로덕션:
https://login.salesforce.com/services/oauth2/token - 샌드박스:
https://test.salesforce.com/services/oauth2/token - 맞춤 도메인:
https://yourdomain.my.salesforce.com/services/oauth2/token
- 프로덕션:
- JWT 클레임 발급자: 연결된 앱의 고객 키를 입력합니다.
- JWT 클레임 제목: 통합 사용자의 사용자 이름을 입력합니다.
- JWT 클레임 잠재고객: Salesforce 로그인 기본 URL을 입력합니다.
- 프로덕션:
https://login.salesforce.com - 샌드박스:
https://test.salesforce.com
- 프로덕션:
- RSA 비공개 키:
-----BEGIN PRIVATE KEY-----및-----END PRIVATE KEY-----줄을 포함하여 RSA 비공개 키 (salesforce_jwt_private.key)의 전체 콘텐츠를 붙여넣습니다.
- OAuth JWT 엔드포인트: Salesforce OAuth 토큰 엔드포인트를 입력합니다.
- 추가 매개변수를 지정합니다.
- 애셋 네임스페이스: 애셋 네임스페이스입니다.
- 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
- 다음을 클릭합니다.
- 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
옵션 2: Amazon AppFlow 및 S3를 사용하여 Salesforce 로그 내보내기 구성
이 방법은 Amazon AppFlow를 사용하여 Salesforce에서 데이터를 추출하고 Amazon S3에 저장한 후 Google SecOps에서 수집합니다.
Google SecOps용 AWS S3 버킷 및 IAM 구성
- 이 사용자 가이드(버킷 만들기)에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 참조할 수 있도록 버킷 이름과 리전을 저장합니다 (예:
salesforce-secops-logs). - 이 사용자 가이드(IAM 사용자 만들기)에 따라 사용자를 만듭니다.
- 생성된 사용자를 선택합니다.
- 보안용 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키와 보안 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 정책을 검색합니다.
- 정책을 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
Amazon AppFlow 구성
- Amazon AppFlow 콘솔을 엽니다.
- 흐름 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 흐름 이름: 이름을 입력합니다 (예:
Salesforce-to-S3-SecOps). - 흐름 설명: 선택사항인 설명입니다.
- 흐름 이름: 이름을 입력합니다 (예:
- 다음을 클릭합니다.
- 소스 세부정보:
- 소스 이름: Salesforce를 선택합니다.
- Salesforce 연결 선택: 새 연결 만들기를 클릭합니다.
- Salesforce 로그인 창이 표시됩니다. Salesforce 사용자 인증 정보로 로그인합니다.
- 메시지가 표시되면 액세스 권한을 부여합니다.
- Salesforce 객체: 전송할 객체를 선택합니다 (예: 이벤트 모니터링이 있는 경우 EventLogFile 또는 기타 감사 객체).
- 다음을 클릭합니다.
- 대상 세부정보:
- 대상 이름: Amazon S3를 선택합니다.
- 버킷 세부정보: 이전에 만든 S3 버킷을 선택합니다.
- S3 버킷 접두사: 선택적 접두사 (예:
salesforce-logs/)입니다.
- 다음을 클릭합니다.
- 흐름 트리거의 경우 다음 안내를 따르세요.
- 일정에 따라 실행을 선택합니다.
- 시작 시간: 원하는 시작 시간을 설정합니다.
- 반복: 요구사항에 따라 매시간 또는 매일을 선택합니다.
- 다음을 클릭합니다.
- 데이터 필드 매핑:
- 모든 필드를 직접 매핑을 선택하거나 매핑할 필드를 지정할 수 있습니다.
- 수동으로 매핑하는 경우 전송할 필드를 선택합니다.
- 다음을 클릭합니다.
- 필터 추가 (선택사항):
- 전송되는 데이터를 제한하는 필터를 추가합니다.
- 다음을 클릭합니다.
- 구성을 검토하고 흐름 만들기를 클릭합니다.
- 흐름 활성화를 클릭하여 예약된 전송을 시작합니다.
Salesforce 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예: Salesforce 로그).
- 소스 유형으로 Amazon S3 V2를 선택합니다.
- 로그 유형으로 Salesforce를 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- S3 URI: 버킷 URI입니다.
s3://BUCKET_NAME다음을 바꿉니다.- BUCKET_NAME: 버킷의 이름입니다.
소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
액세스 키 ID: s3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.
보안 비밀 액세스 키: s3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
- S3 URI: 버킷 URI입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
지원되는 Salesforce 로그 형식
Salesforce 파서는 KV (LEEF) 및 CSV 형식의 로그를 지원합니다.
지원되는 Salesforce 샘플 로그
KV (LEEF)
LEEF:1.0|Salesforce|SecurityMonitoring|343.0|Login: Success|cat=SalesforceLoginHistory devTime=2020-04-23T14:40:38.000+0000 devTimeFormat=yyyy-MM-dd'T'HH:mm:ss.SSSZ ApiVersion=N/A Platform=Windows 7 LoginUrl=sanitized.salesforce.com src=192.0.2.1 usrName=user.sanitized@fakecorp.com attributes.url=https://sanitized.salesforce.com/services/data/v38.0/sobjects/LoginHistory/FAKEID12345 Id=FAKEID12345 LoginType=Remote Access 2.0 Application=Salesforce for Outlook Browser=N/ACSV
"EVENT_TYPE","TIMESTAMP","REQUEST_ID","ORGANIZATION_ID","USER_ID","RUN_TIME","CPU_TIME","URI","SESSION_KEY","LOGIN_KEY","USER_TYPE","REQUEST_STATUS","DB_TOTAL_TIME","METHOD","MEDIA_TYPE","STATUS_CODE","USER_AGENT","ROWS_PROCESSED","NUMBER_FIELDS","DB_BLOCKS","DB_CPU_TIME","REQUEST_SIZE","RESPONSE_SIZE","ENTITY_NAME","EXCEPTION_MESSAGE","TIMESTAMP_DERIVED","USER_ID_DERIVED","CLIENT_IP","URI_ID_DERIVED" "RestApi","20240421120015.367","SLB:sanitized_request_id","00D040000004g6r","005Sv000000CxcD",329,69,"/services/data/v58.0/query","TJestP3qzXKiV/Ud","D/M3fSrc6oTXlmLq","Standard","S",37030739,"GET","application/json;charset=UTF-8",200,9999,840,5,19481,47,10,250361,"EventLogFile",NaN,"2024-04-21T12:00:15.366Z","005Sv000000CxcDIAS","192.0.2.3",NaN
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
Account.Name |
target.resource.name |
원시 로그의 Account.Name 값입니다. |
AccountId |
target.resource.id |
원시 로그의 AccountId 값입니다. |
Action |
security_result.description |
원시 로그의 Action 값입니다. |
AdditionalInfo |
- | IDM 객체에 매핑되지 않았습니다. |
ApiType |
target.application |
원시 로그의 ApiType 값입니다. |
ApiVersion |
- | IDM 객체에 매핑되지 않았습니다. |
Application |
principal.application |
원시 로그의 Application 값 또는 LoginAsEvent의 경우 '브라우저', LoginEvent의 경우 '통합 JWT 토큰', objecttype이 LoginHistory인 LoginHistory의 경우 'SfdcSiqActivityPlatform', ApiEvent의 경우 '해당 사항 없음', LoginAsEventStream의 경우 '브라우저'입니다. |
attributes.url |
target.url |
원시 로그의 attributes.url 값 또는 원시 로그의 다양한 이벤트 유형의 특정 URL입니다. |
attributes.type |
metadata.product_event_type |
원시 로그의 attributes.type 값입니다. |
AuthSessionId |
network.session_id |
원시 로그의 AuthSessionId 값입니다. |
Browser |
principal.resource.name |
원시 로그의 Browser 값입니다. Browser이 원시 로그에서 제공되지 않고 Application이 '인사이트'인 경우 '알 수 없음'입니다. ApiType이 'SOAP 파트너'인 LoginHistory의 경우 'Java (Salesforce.com)'입니다. Application이 'SfdcSiqActivityPlatform'인 LoginHistory의 경우 '알 수 없음'입니다. LoginAsEventStream의 경우 data.properties.Browser.str에서 가져옵니다. |
Case.Subject |
target.resource.name |
원시 로그의 Case.Subject 값입니다. |
CaseId |
target.resource.id |
원시 로그의 CaseId 값입니다. |
cat |
metadata.product_event_type |
원시 로그의 cat 값입니다. |
City |
principal.location.city |
원시 로그 또는 LoginHistory의 경우 LoginGeo.City에서 가져온 City 값입니다. |
Client |
principal.labels |
원시 로그의 Client 값으로, 라벨로 형식이 지정됩니다. |
CLIENT_IP |
principal.ip, principal.asset.ip |
원시 로그의 CLIENT_IP 값입니다. |
ClientVersion |
- | IDM 객체에 매핑되지 않았습니다. |
CipherSuite |
network.tls.cipher |
원시 로그의 CipherSuite 값입니다. |
ColumnHeaders |
principal.labels |
원시 로그의 ColumnHeaders 값으로, 라벨로 형식이 지정됩니다. |
ConnectedAppId |
principal.labels |
원시 로그의 ConnectedAppId 값으로, 라벨로 형식이 지정됩니다. |
Contact.Name |
target.resource.name |
원시 로그의 Contact.Name 값입니다. |
ContactId |
target.resource.id |
원시 로그의 ContactId 값입니다. |
Country |
principal.location.country_or_region |
원시 로그의 Country 값 또는 LoginHistory의 LoginGeo.Country 값입니다. |
CreatedByContext |
principal.user.userid |
원시 로그의 CreatedByContext 값입니다. |
CreatedById |
principal.resource.attribute.labels |
원시 로그의 CreatedById 값으로, 라벨로 형식이 지정됩니다. |
CreatedDate |
metadata.collected_timestamp |
원시 로그의 CreatedDate 값입니다. 없는 경우 현재 타임스탬프입니다. |
CPU_TIME |
target.resource.attribute.labels |
원시 로그의 CPU_TIME 값으로, 라벨로 형식이 지정됩니다. |
data |
- | 개별적으로 추출되고 매핑된 다양한 필드를 포함합니다. |
DATASET_IDS |
target.resource.name |
원시 로그의 DATASET_IDS 값입니다. |
DelegatedOrganizationId |
target.administrative_domain |
원시 로그의 DelegatedOrganizationId 값입니다. |
DelegatedUsername |
observer.user.userid |
원시 로그의 DelegatedUsername 값입니다. |
Description |
metadata.description |
원시 로그의 Description 값입니다. |
DevicePlatform |
principal.resource.type |
리소스 유형을 추출하기 위해 파싱된 원시 로그의 DevicePlatform 값입니다. |
Display |
metadata.description |
원시 로그의 Display 값입니다. |
DOWNLOAD_FORMAT |
target.resource.attribute.labels |
원시 로그의 DOWNLOAD_FORMAT 값으로, 라벨로 형식이 지정됩니다. |
Duration |
target.resource.attribute.labels |
원시 로그의 Duration 값으로, 라벨로 형식이 지정됩니다. |
ENTITY_NAME |
target.resource.attribute.labels |
원시 로그의 ENTITY_NAME 값으로, 라벨로 형식이 지정됩니다. |
ErrorCode |
security_result.action |
원시 로그의 ErrorCode 값이 ALLOW 또는 BLOCK으로 변환됩니다. |
EventDate |
timestamp |
원시 로그의 EventDate 값입니다. data.properties.TIMESTAMP_DERIVED.str(사용 가능한 경우), data.properties.TIMESTAMP_DERIVED_FIRST.str(사용 가능한 경우), @timestamp(사용 가능한 경우), created_date(사용 가능한 경우), timestamp(사용 가능한 경우) 또는 LoginHistory의 LoginTime일 수 있습니다. |
EventIdentifier |
metadata.product_log_id |
원시 로그의 EventIdentifier 값입니다. |
EventType |
metadata.product_event_type |
원시 로그의 EventType 값입니다. |
Id |
principal.user.userid |
원시 로그의 Id 값 또는 SetupAuditTrail 및 기타 이벤트의 metadata.product_log_id 값입니다. |
IdentityUsed |
principal.user.email_addresses |
원시 로그의 IdentityUsed 값입니다. |
Lead.Name |
target.resource.name |
원시 로그의 Lead.Name 값입니다. |
LeadId |
target.resource.id |
원시 로그의 LeadId 값입니다. |
LoginAsCategory |
- | IDM 객체에 매핑되지 않았습니다. |
LoginGeo.Country |
principal.location.country_or_region |
원시 로그의 LoginGeo.Country 값입니다. |
LoginHistoryId |
- | IDM 객체에 매핑되지 않았습니다. |
LoginKey |
principal.user.userid, network.session_id |
원시 로그의 LoginKey 값 또는 SetupAuditTrail의 CreatedByContext 값입니다. |
LoginTime |
timestamp |
원시 로그의 LoginTime 값입니다. |
LoginType |
security_result.description |
원시 로그의 LoginType 값 또는 ApiType이 'SOAP Partner'인 LoginHistory의 경우 'Other Apex API', Application이 'SfdcSiqActivityPlatform'인 LoginHistory의 경우 'Remote Access 2.0'입니다. |
LoginUrl |
target.url, principal.url |
원시 로그의 LoginUrl 값입니다. |
LogFile |
principal.resource.attribute.labels |
원시 로그의 LogFile 값으로, 라벨로 형식이 지정됩니다. |
LogFileContentType |
principal.resource.attribute.labels |
원시 로그의 LogFileContentType 값으로, 라벨로 형식이 지정됩니다. |
LogFileLength |
principal.resource.attribute.labels |
원시 로그의 LogFileLength 값으로, 라벨로 형식이 지정됩니다. |
Message |
- | IDM 객체에 매핑되지 않았습니다. |
METHOD |
network.http.method |
원시 로그의 METHOD 값입니다. |
Name |
target.application |
원시 로그의 Name 값입니다. |
NewValue |
- | OldValue와 함께 사용하여 security_result.summary을 생성합니다. |
NUMBER_FIELDS |
target.resource.attribute.labels |
원시 로그의 NUMBER_FIELDS 값으로, 라벨로 형식이 지정됩니다. |
OldValue |
- | NewValue와 함께 사용하여 security_result.summary을 생성합니다. |
Operation |
security_result.description, target.resource.attribute.labels |
원시 로그의 Operation 값 또는 SetupAuditTrail의 Display 값입니다. |
OperationStatus |
security_result.action |
원시 로그의 OperationStatus 값이 ALLOW 또는 BLOCK으로 변환됩니다. |
ORGANIZATION_ID |
target.administrative_domain |
원시 로그의 ORGANIZATION_ID 값입니다. |
OsName |
principal.platform |
원시 로그의 OsName 값입니다. |
OsVersion |
principal.platform_version |
원시 로그의 OsVersion 값입니다. |
Platform |
principal.platform |
원시 로그 또는 LightningUriEventStream의 경우 data.properties.OsName.str, LoginEventStream의 경우 data.properties.OsName.str에서 가져온 Platform 값입니다. |
QueriedEntities |
target.resource.name, principal.labels |
원시 로그의 QueriedEntities 값 또는 UriEvent 및 ApiEvent의 component_name 값입니다. |
Query |
target.process.command_line, principal.labels |
원시 로그의 Query 값입니다. |
RecordId |
target.resource.id |
원시 로그의 RecordId 값입니다. |
Records |
principal.labels |
원시 로그의 Records 값으로, 라벨로 형식이 지정됩니다. |
REQUEST_ID |
metadata.product_log_id, target.resource.product_object_id |
원시 로그의 REQUEST_ID 값입니다. |
REQUEST_SIZE |
network.sent_bytes |
원시 로그의 REQUEST_SIZE 값입니다. |
REQUEST_STATUS |
security_result.summary |
원시 로그의 REQUEST_STATUS 값입니다. |
RESPONSE_SIZE |
network.received_bytes |
원시 로그의 RESPONSE_SIZE 값입니다. |
RowsProcessed |
target.resource.attribute.labels |
원시 로그의 RowsProcessed 값으로, 라벨로 형식이 지정됩니다. |
RUN_TIME |
target.resource.attribute.labels |
원시 로그의 RUN_TIME 값으로, 라벨로 형식이 지정됩니다. |
SamlEntityUrl |
- | IDM 객체에 매핑되지 않았습니다. |
SdkAppType |
- | IDM 객체에 매핑되지 않았습니다. |
SdkAppVersion |
- | IDM 객체에 매핑되지 않았습니다. |
SdkVersion |
- | IDM 객체에 매핑되지 않았습니다. |
Section |
security_result.summary |
원시 로그의 Section 값입니다. |
SessionKey |
network.session_id |
원시 로그의 SessionKey 값입니다. |
SessionLevel |
target.resource.attribute.labels |
원시 로그의 SessionLevel 값으로, 라벨로 형식이 지정됩니다. |
SourceIp |
principal.ip, principal.asset.ip |
원시 로그의 SourceIp 값입니다. |
src |
principal.ip, principal.asset.ip |
원시 로그의 src 값입니다. |
SsoType |
target.resource.attribute.labels |
원시 로그의 SsoType 값으로, 라벨로 형식이 지정됩니다. |
STATUS_CODE |
network.http.response_code |
원시 로그의 STATUS_CODE 값입니다. |
Status |
security_result.action, security_result.action_details |
원시 로그의 Status 값으로, ALLOW 또는 BLOCK으로 변환되거나 LoginEventStream의 작업 세부정보로 사용됩니다. |
Subject |
target.resource.name |
원시 로그의 Subject 값입니다. |
TargetUrl |
- | IDM 객체에 매핑되지 않았습니다. |
TIMESTAMP |
metadata.collected_timestamp |
원시 로그의 TIMESTAMP 값입니다. |
TIMESTAMP_DERIVED |
timestamp |
원시 로그의 TIMESTAMP_DERIVED 값입니다. |
TlsProtocol |
network.tls.version_protocol |
원시 로그의 TlsProtocol 값입니다. |
URI |
target.url |
원시 로그의 URI 값입니다. |
USER_AGENT |
network.http.user_agent |
원시 로그의 USER_AGENT 값입니다. |
USER_ID |
principal.user.userid |
원시 로그의 USER_ID 값입니다. |
USER_ID_DERIVED |
principal.user.product_object_id, target.resource.attribute.labels |
원시 로그의 USER_ID_DERIVED 값입니다. |
UserId |
principal.user.userid |
원시 로그의 UserId 값입니다. |
USER_TYPE |
target.resource.attribute.labels |
원시 로그의 USER_TYPE 값으로, 라벨로 형식이 지정됩니다. |
Username |
principal.user.userid, principal.user.email_addresses, target.user.email_addresses |
원시 로그의 Username 값 또는 다양한 이벤트의 src_email 값, IdentityProviderEventStore의 IdentityUsed 값, Search 및 SearchAlert의 data.properties.Email.str 값, LoginAsEventStream 및 LoginEventStream의 data.properties.Username.str 값입니다. |
UserType |
target.resource.attribute.labels |
원시 로그의 UserType 값으로, 라벨로 형식이 지정됩니다. |
usrName |
principal.user.userid, principal.user.email_addresses, target.user.email_addresses |
원시 로그의 usrName 값입니다. |
VerificationMethod |
target.resource.attribute.labels |
원시 로그의 VerificationMethod 값으로, 라벨로 형식이 지정됩니다. |
| 파서 로직 | metadata.event_type |
event_id 및 operation 필드를 기반으로 파생되거나 LoginEventStream의 경우 'USER_LOGIN', Logout 및 LogoutEvent의 경우 'USER_LOGOUT', 다양한 이벤트의 경우 'USER_RESOURCE_UPDATE_CONTENT', PlatformEncryption의 경우 'USER_RESOURCE_UPDATE_PERMISSIONS', QueuedExecution, ApexExecution, LightningInteraction, LightningPerformance, LightningPageView, URI, RestApi, API, AuraRequest, ApexCallout, OneCommerceUsage, Sites, MetadataApiOperation, OneCommerceUsage, VisualforceRequest, Dashboard, Search, ListViewEvent의 경우 'RESOURCE_READ', Operation이 'Create' 또는 'INSERT'인 UriEvent 및 TimeBasedWorkflow의 경우 'RESOURCE_CREATION', Operation이 'Update'인 UriEvent 및 LightningUriEvent의 경우 'RESOURCE_WRITTEN', Operation이 'Delete' 또는 'ROLLBACK'인 UriEvent의 경우 'RESOURCE_DELETION', SetupAuditTrail 및 AuditTrail의 경우 'USER_UNCATEGORIZED', operation이 'namedCredentialEncryptedFieldChange'인 SetupAuditTrail의 경우 'USER_CHANGE_PASSWORD', ApiEventStream 및 LightningUriEventStream의 경우 'GENERIC_EVENT' 또는 네트워크 및 주 구성원 존재 여부를 기반으로 설정됩니다. |
| 파서 로직 | metadata.ingestion_labels |
이벤트의 소스를 나타내는 라벨입니다('이벤트 로그 파일', '실시간 이벤트 모니터링', 'SetupAuditTrail'). |
| 파서 로직 | metadata.log_type |
항상 'SALESFORCE'로 설정됩니다. |
| 파서 로직 | metadata.product_name |
항상 'SALESFORCE'로 설정됩니다. |
| 파서 로직 | metadata.vendor_name |
항상 'SALESFORCE'로 설정됩니다. |
| 파서 로직 | metadata.url_back_to_product |
LoginUrl, attributes.url, data.properties.PageUrl.str, data.properties.LoginUrl.str과 같은 다양한 필드에서 구성됩니다. |
| 파서 로직 | network.application_protocol |
uri 필드가 'http'로 시작하는 경우 'HTTPS'로 설정됩니다. |
| 파서 로직 | network.http.referral_url |
'Referer='가 포함된 경우 user_agent 필드에서 추출됩니다. |
| 파서 로직 | network.http.response_code |
다양한 이벤트에 대해 request_status에서 파생됩니다. |
| 파서 로직 | network.http.user_agent |
원시 로그의 user_agent 값 또는 ApiEventStream 및 LoginEventStream의 data.properties.UserAgent.str 값 또는 Sites 이벤트의 값 또는 Sites 이벤트의 'User-Agent'입니다. |
| 파서 로직 | network.session_id |
원시 로그의 session_key 또는 SESSION_KEY 값 또는 LoginKey 또는 AuthSessionId와 같은 다른 필드에서 구성된 값입니다. |
| 파서 로직 | network.tls.version |
원시 로그 또는 LoginEventStream의 경우 data.properties.TlsProtocol.str에서 가져온 tls_protocol 값입니다. |
| 파서 로직 | principal.application |
원시 로그의 application 값 또는 로그인: 성공 이벤트의 경우 'Salesforce for Outlook', 애플리케이션이 없는 로그인: 성공 이벤트의 경우 'Insights', Lightning 이벤트의 경우 device_platform에서 추출됩니다. |
| 파서 로직 | principal.asset.hostname |
client_ip이 호스트 이름인 경우의 값입니다. |
| 파서 로직 | principal.asset.ip |
IP 주소인 경우 client_ip 또는 src_ip 또는 SourceIp 또는 CLIENT_IP 값입니다. |
| 파서 로직 | principal.hostname |
client_ip이 호스트 이름인 경우의 값입니다. |
| 파서 로직 | principal.ip |
IP 주소인 경우 client_ip 또는 src_ip 또는 SourceIp 또는 CLIENT_IP 값입니다. |
| 파서 로직 | principal.labels |
FederationIdentifier, ApiType, OrgId, channel과 같은 다양한 필드에서 구성된 라벨입니다. |
| 파서 로직 | principal.location.city |
원시 로그의 geoip_src.city_name 또는 City 또는 LoginGeo.City 값입니다. |
| 파서 로직 | principal.location.country_or_region |
원시 로그의 geoip_src.country_name 또는 Country 또는 LoginGeo.Country 또는 client_geo 값입니다. |
| 파서 로직 | principal.location.region_latitude |
원시 로그의 data.properties.LoginLatitude.number 값입니다. |
| 파서 로직 | principal.location.region_longitude |
원시 로그의 data.properties.LoginLongitude.number 값입니다. |
| 파서 로직 | principal.location.state |
원시 로그의 geoip_src.region_name 값입니다. |
| 파서 로직 | principal.platform |
원시 로그의 Platform 또는 OsName 또는 os_name 값입니다. Platform에 'Windows'가 포함된 LoginEventStream의 경우 'WINDOWS'입니다. |
| 파서 로직 | principal.platform_version |
원시 로그의 OsVersion 또는 os_version 값 또는 Platform에 'Windows'가 포함된 LoginEventStream의 경우 Platform에서 추출한 값 |
| 파서 로직 | principal.resource.attribute.labels |
CreatedById, ApiVersion, LogFile, LogFileContentType, LogFileLength과 같은 다양한 필드에서 구성된 라벨입니다. |
| 파서 로직 | principal.resource.name |
원시 로그의 Browser 또는 browser_name 값 또는 ApiType이 'SOAP Partner'인 LoginHistory의 경우 'Java (Salesforce.com)' |
| 파서 로직 | principal.resource.type |
Lightning 이벤트의 경우 device_platform에서 추출되고 LoginAsEvent 및 LoginAsEventStream의 경우 '브라우저'입니다. |
| 파서 로직 | principal.url |
원시 로그의 LoginUrl 값입니다. |
| 파서 로직 | principal.user.email_addresses |
원시 로그의 usrName 또는 Username 또는 src_email 또는 IdentityUsed 또는 data.properties.Username.str 또는 data.properties.Email.str 값입니다. |
| 파서 로직 | principal.user.product_object_id |
원시 로그의 attrs.USER_ID_DERIVED 또는 data.properties.USER_ID_DERIVED.str 값입니다. |
| 파서 로직 | principal.user.userid |
원시 로그의 usrName 또는 Username 또는 user_id 또는 UserId 또는 USER_ID 또는 Id 또는 LoginKey 또는 CreatedByContext 또는 data.properties.Username.str 또는 data.properties.USER_ID.str 또는 data.properties.LoginKey.str 값입니다. |
| 파서 로직 | security_result.action |
원시 로그의 Status 또는 OperationStatus 또는 ErrorCode 또는 action 또는 operation_status에서 파생되어 허용 또는 차단으로 변환됩니다. |
| 파서 로직 | security_result.action_details |
LoginEventStream의 원시 로그에서 가져온 Status 값입니다. |
| 파서 로직 | security_result.description |
원시 로그의 LoginType 또는 logintype 또는 Operation 또는 Action 또는 Display 값입니다. |
| 파서 로직 | security_result.rule_name |
원시 로그의 Policy 또는 rule_name 값입니다. |
| 파서 로직 | security_result.summary |
원시 로그의 NewValue 및 OldValue 또는 REQUEST_STATUS 또는 Section 또는 forecastcategory에서 구성됩니다. |
| 파서 로직 | target.administrative_domain |
원시 로그의 ORGANIZATION_ID 또는 DelegatedOrganizationId 또는 organization_id 또는 data.properties.OrgName.str 값입니다. |
| 파서 로직 | target.application |
원시 로그의 Application 또는 app_name 또는 ApiType 또는 Name 또는 data.properties.Application.str 값입니다. |
| 파서 로직 | target.asset.hostname |
uri 필드에서 추출한 target_hostname 값입니다. |
| 파서 로직 | target.asset.ip |
원시 로그의 data.properties.CLIENT_IP.str 값입니다. |
| 파서 로직 | target.asset_id |
device_id 또는 REQUEST_ID에서 생성됩니다. |
| 파서 로직 | target.file.mime_type |
원시 로그의 file_type 값입니다. |
| 파서 로직 | target.file.size |
원시 로그의 size_bytes 값입니다. |
| 파서 로직 | target.hostname |
uri 필드에서 추출한 target_hostname 값입니다. |
| 파서 로직 | target.process.command_line |
원시 로그의 query_exec 또는 Query 또는 data.properties.Query.str 값입니다. |
| 파서 로직 | target.process.pid |
원시 로그의 job_id 값입니다. |
| 파서 로직 | target.resource.attribute.labels |
CPU_TIME, RUN_TIME, USER_TYPE, DB_TOTAL_TIME, MEDIA_TYPE, ROWS_PROCESSED, NUMBER_FIELDS, DB_BLOCKS, DB_CPU_TIME, ENTITY_NAME, EXCEPTION_MESSAGE, USER_ID_DERIVED, DOWNLOAD_FORMAT, USER_TYPE, CPU_TIME, RUN_TIME, WAVE_SESSION_ID, SessionLevel, verification_method, cpu_time, run_time, db_total_time, db_cpu_time, exec_time, callout_time, number_soql_queries, duration, user_type, entry_point, operation, session_level, rows_processed, sso_type, dashboard_type, Operation, SessionLevel와 같은 다양한 필드에서 구성된 라벨 |
| 파서 로직 | target.resource.id |
원시 로그의 REQUEST_ID 또는 RecordId 또는 caseid 또는 leadid 또는 contactid 또는 opportunityid 또는 accountid 값입니다. |
| 파서 로직 | target.resource.name |
원시 로그의 QueriedEntities 또는 resource_name 또는 component_name 또는 DATASET_IDS 또는 field 또는 StageName 또는 Subject 값입니다. |
| 파서 로직 | target.resource.product_object_id |
원시 로그의 REQUEST_ID 값입니다. |
| 파서 로직 | target.resource.resource_type |
ApexCallout 및 PlatformEncryption의 경우 'ACCESS_POLICY', ApexTrigger의 경우 'DATABASE', ContentTransfer의 경우 'FILE', ApiEvent의 경우 'TABLE'로 설정됩니다. |
| 파서 로직 | target.resource.type |
QueuedExecution 및 ApexExecution의 경우 'BATCH', ContentTransfer의 경우 'FILE', ApexTrigger의 경우 'DATABASE_TRIGGER', 해당 ID 필드의 존재 여부에 따라 'Case', 'Lead', 'Contact', 'Opportunity', 'Account'로 설정됩니다. |
| 파서 로직 | target.url |
원시 로그의 LoginUrl 또는 URI 또는 attributes.url 또는 login_url 또는 uri 값입니다. |
| 파서 로직 | target.user.email_addresses |
원시 로그의 Username 또는 attrs.usrName 또는 email_address 값입니다. |
| 파서 로직 | target.user.user_display_name |
원시 로그의 target_user_display_name 또는 user_name 또는 username 값입니다. |
| 파서 로직 | target.user.userid |
원시 로그의 target_user_name 또는 data.properties.UserId.str 또는 data.properties.CreatedById.str 값입니다. |
| 파서 로직 | extensions.auth.auth_details |
Status이 'Success'가 아닌 경우 'ACTIVE'로 설정하고, 그렇지 않은 경우 'UNKNOWN_AUTHENTICATION_STATUS'로 설정합니다. |
| 파서 로직 | extensions.auth.mechanism |
로그인: 성공 및 로그인 이벤트의 경우 logintype에 'Remote'가 포함된 경우 'REMOTE'로 설정하거나, LoginEventStream의 경우 'USERNAME_PASSWORD'로 설정하거나, login_url이 있는 이벤트의 경우 'MECHANISM_OTHER'로 설정하거나, 로그인: 성공 및 로그아웃 이벤트의 경우 'AUTHTYPE_UNSPECIFIED'로 설정합니다. |
| 파서 로직 | extensions.auth.type |
LoginType이 'SAML Sfdc Initiated SSO'인 로그인, 로그아웃, LogoutEvent, LoginAs, IdentityProviderEventStore, LoginHistory, LoginAsEvent의 경우 'SSO'로 설정하고, LoginType이 'Application'인 로그인: 성공, 로그아웃, LoginAsEvent의 경우 'AUTHTYPE_UNSPECIFIED'로 설정합니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.