감사 로그는 감사자가 Foundry 사용자가 수행한 액션을 이해하는 주요 방법입니다.
Foundry의 감사 로그에는 다음을 추론할 수 있는 충분한 정보가 포함되어 있습니다:
일부 경우, 감사 로그에는 이름 및 이메일 주소와 같은 개인 식별 정보(PII)를 포함한 사용자에 대한 컨텍스트 정보가 포함될 수 있습니다. 따라서 감사 로그 내용은 민감한 것으로 간주되어야 하며 필요한 보안 자격을 갖춘 사람만이 볼 수 있어야 합니다.
감사 로그는 일반적으로 고객이 소유한 보안 모니터링을 위한 목적별 시스템("보안 정보 및 이벤트 관리" 또는 SIEM 솔루션)으로 소비됩니다.
이 가이드는 두 섹션에서 감사 로그를 추출하고 사용하는 과정을 설명합니다:
고객은 아래에 제시된 메커니즘을 통해 자신의 감사 로그를 캡처하고 모니터링할 것을 강력히 권장합니다. 추가 지침은 보안 감사 로그 모니터링을 참조하세요.
감사 로그는 고객의 보안 인프라 및 SIEM 요구 사항에 따라 여러 메커니즘을 통해 하위 소비를 위해 전달됩니다. Foundry 서비스에서 생성된 감사 로그 배치는 컴파일, 압축되어 24시간 이내에 로그 버킷(종종 S3, 환경에 따라 다름)으로 이동됩니다. 여기에서 Foundry는 Audit Export To Foundry를 통해 고객에게 로그를 직접 전달할 수 있습니다.
감사 로그는 조직별로 직접 Foundry 데이터셋으로 내보낼 수 있습니다. 구성 설정의 일부로, 조직 관리자는 Foundry 파일 시스템 내에서 이 감사 로그 데이터셋이 생성될 위치를 선택합니다.
로그 데이터가 데이터셋에 도착하면, 고객은 Foundry의 Data Connection 애플리케이션을 통해 외부 SIEM으로 감사 데이터를 내보낼 수 있습니다.
감사 로그를 내보내려면 사용자는 대상 그룹에 대해 audit-export:orchestrate-v2
작업이 필요합니다. 이는 Organization permissions 탭의 Control Panel에서 Organization administrator 역할을 통해 부여할 수 있습니다. 자세한 내용은 Organization Permissions를 참조하세요.
Foundry로의 감사 내보내기를 설정하려면:
더 큰 스택의 경우, 첫 몇 시간 동안의 빌드는 빈 추가 트랜잭션을 생성할 수 있습니다. 이는 파이프라인이 감사 로그의 백로그를 처리하면서 예상되는 동작입니다.
감사 로그의 민감성으로 인해 생성된 데이터셋은 필요에 따라 제한되어야 하며 필요한 자격을 갖춘 사람만 접근할 수 있도록 강력히 권장됩니다. markings를 사용하여 감사 로그 데이터셋을 제한하고 식별 정보나 검색 쿼리와 같은 잠재적으로 민감한 사용 세부 정보를 볼 수 있는 플랫폼 관리자의 집합을 지정하세요.
내보내기를 비활성화하려면 감사 로그 데이터셋을 휴지통이나 다른 프로젝트로 이동하세요.
감사 로그 데이터셋을 이동하면 해당 데이터셋의 추가 빌드가 중지됩니다. 데이터셋이 휴지통에서 복원되거나 원래 프로젝트로 다시 이동하더라도 이러한 빌드를 다시 시작할 방법은 없습니다.
빌드 시, 감사 로그 데이터셋은 새로운 로그가 제공될 때 추가할 특정 조건 집합을 따릅니다(변경 가능):
감사 로그 데이터셋은 매우 많은 양의 데이터를 포함할 수 있으므로, 집계나 시각화를 수행하기 전에 time
열을 사용하여 이 데이터셋을 필터링할 것을 권장합니다. 필터링을 위해, 감사 데이터셋은 Contour에서 필터링하지 않고는 효과적으로 분석하기에 너무 클 수 있으므로 Pipeline Builder나 Transforms를 사용하는 것이 좋습니다.
Palantir 제품이 생성하는 모든 로그는 구조화된 로그입니다. 이는 특정 스키마를 따르며, 하위 시스템에서 신뢰할 수 있음을 의미합니다.
Palantir 감사 로그는 현재 audit.2
스키마로 제공되며, 일반적으로 "Audit V2"라고도 합니다. 업데이트된 스키마인 audit.3
또는 "Audit V3"는 개발 중이지만 아직 일반적으로 사용 가능하지 않습니다.
audit.2
및 audit.3
스키마 모두에서 감사 로그는 이를 생성하는 서비스에 따라 다를 수 있습니다. 이는 각 서비스가 다른 도메인에 대해 논리적으로 설명하고 있어 설명해야 할 우려 사항이 다르기 때문입니다. 이 차이는 아래에서 설명할 audit.2
에서 더 두드러집니다.
서비스별 정보는 주로 request_params
및 result_params
필드 내에 캡처됩니다. 이러한 필드의 내용은 로깅하는 서비스와 로깅되는 이벤트에 따라 모양이 변경됩니다.
감사 로그는 플랫폼에서 사용자가 수행한 모든 액션의 정제된 기록으로 생각할 수 있습니다. 이는 지나치게 상세한 로그가 더 많은 정보를 포함할 수 있지만 이해하기 어려울 수 있는 경우의 절충안입니다.
Palantir 로그에는 서비스별 지식이 거의 없이 로그를 이해하기 쉽게 하기 위한 감사 카테고리라는 개념이 포함되어 있습니다.
감사 카테고리를 사용하면 감사 로그는 감사 가능한 이벤트의 합집합으로 설명됩니다. 감사 카테고리는 data
대 metaData
대 logic
과 같은 핵심 개념 집합을 기반으로 하며, 이러한 개념에 대한 액션을 설명하는 카테고리로 나뉩니다. 예를 들어, dataLoad
는 시스템에서 데이터를 로드하는 것을, metaDataCreate
는 데이터를 설명하는 새로운 메타데이터를 생성하는 것을, logicDelete
는 시스템 내에서 두 데이터 조각 간의 변환을 설명하는 로직을 삭제하는 것을 의미합니다.
감사 카테고리는 audit.2
로그 내의 느슨한 형식에서 audit.3
로그 내의 더 엄격하고 풍부한 형식으로 버전 변경을 겪었습니다. 자세한 내용은 아래를 참조하세요.
사용 가능한 audit.2
및 audit.3
카테고리의 자세한 목록은 Audit log categories를 참조하세요.
감사 로그는 환경별로 단일 로그 아카이브에 작성됩니다. 감사 로그가 전달 파이프라인을 통해 처리될 때, 사용자 ID 필드(uid
및 아래 스키마의 otherUids
)가 추출되고 사용자는 해당 그룹에 매핑됩니다.
주어진 오케스트레이션에 대해 조정된 감사 내보내기는 해당 그룹에 귀속된 감사 로그로 제한됩니다. 서비스(비인간) 사용자가 단독으로 수행한 액션은 일반적으로 그룹에 귀속되지 않습니다. 이러한 사용자는 그룹 구성원이 아니기 때문입니다. 단, 등록 그룹에 의해 사용되는 Client Credentials Grants를 사용하는 타사 애플리케이션의 서비스 사용자는 해당 그룹에 귀속된 감사 로그를 생성합니다.
audit.2
로그는 요청 및 응답 파라미터의 모양에 대한 서비스 간 보장이 없습니다. 따라서 감사 로그에 대한 논리는 일반적으로 서비스별로 수행되어야 합니다.
audit.2
로그는 검색을 좁히는 데 유용한 감사 카테고리를 포함할 수 있습니다. 그러나 이 카테고리는 감사 로그의 나머지 내용을 추가로 설명하지 않으며, audit.2
로그는 감사 카테고리를 포함할 보장이 없습니다. 카테고리가 있는 경우, request_params
내의 _category
또는 _categories
필드에 포함됩니다.
audit.2
로그 내보내기 데이터셋의 스키마는 아래에 제공됩니다.
필드 | 유형 | 설명 |
---|---|---|
filename | .log.gz | 로그 아카이브에서 압축된 파일의 이름 |
type | string | 감사 스키마 버전을 지정 - "audit.2" |
time | datetime | RFC3339Nano UTC 날짜 시간 문자열, 예: 2023-03-13T23:20:24.180Z |
uid | optional<UserId> | 사용자 ID (가능한 경우); 이는 가장 하위 호출자입니다 |
sid | optional<SessionId> | 세션 ID (가능한 경우) |
token_id | optional<TokenId> | API 토큰 ID (가능한 경우) |
ip | string | 출발지 IP 주소의 최선의 식별자 |
trace_id | optional<TraceId> | Zipkin 추적 ID (가능한 경우) |
name | string | 감사 이벤트의 이름, 예: PUT_FILE |
result | AuditResult | 이벤트의 결과 (성공, 실패 등) |
request_params | map<string, any> | 메서드 호출 시점에 알려진 파라미터 |
result_params | map<string, any> | 메서드 내에서 파생된 정보, 일반적으로 반환 값의 일부 |
Audit V3는 개발 중이며 아직 일반적으로 사용 가능하지 않습니다.
audit.3
로그는 로그 내용에 대한 이해를 위해 특정 서비스를 이해할 필요성을 줄이기 위해 감사 카테고리의 엄격한 사용을 설정합니다. audit.3
로그는 다음 보장을 염두에 두고 생성됩니다:
dataLoad
는 로드된 리소스를 정확히 설명합니다.audit.3
스키마의 최상위 수준으로 승격됩니다. 예를 들어, 모든 명명된 리소스는 최상위 수준뿐만 아니라 요청 및 응답 파라미터 내에도 존재합니다.이러한 보장은 특정 로그에 대해 (1) 어떤 감사 가능한 이벤트가 그것을 생성했는지와 (2) 정확히 어떤 필드를 포함하는지를 알 수 있음을 의미합니다. 이러한 보장은 서비스에 구애받지 않습니다.
audit.3
스키마는 아래에 제공됩니다. 이 정보는 포괄적이지 않으며 변경될 수 있습니다:
필드 | 유형 | 설명 |
---|---|---|
environment | optional<string> | 이 로그를 생성한 환경. |
stack | optional<string> | 이 로그가 생성된 스택. |
service | optional<string> | 이 로그를 생성한 서비스. |
product | string | 이 로그를 생성한 제품. |
productVersion | string | 이 로그를 생성한 제품의 버젼. |
host | string | 이 로그를 생성한 호스트. |
producerType | AuditProducer | 이 감사 로그가 생성된 방법; 예를 들어, 백엔드(SERVER) 또는 프론트엔드(CLIENT)에서. |
time | datetime | RFC3339Nano UTC 날짜 시간 문자열, 예: 2023-03-13T23:20:24.180Z . |
name | string | 감사 이벤트의 이름, 예: PUT_FILE. |
result | AuditResult | 요청이 성공했는지 또는 실패 유형을 나타냅니다; 예를 들어, ERROR 또는 UNAUTHORIZED. |
categories | set<string> | 이 감사 이벤트가 생성한 모든 감사 카테고리. |
entities | list<any> | 이 로그의 요청 및 응답 파라미터에 존재하는 모든 엔티티(예: 리소스). |
users | set<ContextualizedUser> | 이 감사 로그에 존재하는 모든 사용자, 컨텍스트화됨. ContextualizedUser : 필드:
|
requestFields | map<string, any> | 메서드 호출 시점에 알려진 파라미터. 요청 및 응답 필드의 항목은 위에서 정의된 categories 필드에 따라 달라집니다. |
resultFields | map<string, any> | 메서드 내에서 파생된 정보, 일반적으로 반환 값의 일부. |
origins | list<string> | 요청 헤더에 의해 결정된 네트워크 요청의 출처. 이 값은 스푸핑될 수 있습니다. 사용자 시작 요청에 대한 감사 로그를 식별하려면, 비어 있지 않은 origins 를 가진 감사 로그로 필터링하세요. 비어 있는 origins 를 가진 감사 로그는 사용자 시작 요청을 이행하는 동안 Palantir 백엔드에 의해 수행된 서비스 시작 요청에 해당합니다.비어 있지 않은 origins 를 가진 감사 로그가 categories 에 apiGatewayRequest 를 포함하는 경우, 관련 요청은 API 게이트웨이에 의해 이행되었습니다. 사용자 시작 요청을 이행하기 위해 API 게이트웨이가 수행한 요청에 대한 감사 로그를 찾으려면, 이 감사 로그의 service 로 시작하는 userAgent 를 가진 동일한 traceId 를 가진 로그로 필터링하세요. |
sourceOrigin | optional<string> | TCP 스택에 의해 결정된 네트워크 요청의 출처. |
origin | optional<string> | 출발지 머신의 최선의 식별자. 예를 들어, IP 주소, Kubernetes 노드 식별자 또는 유사한 것. 이 값은 스푸핑될 수 있습니다. |
orgId | optional<string> | 사용 가능한 경우, uid 가 속한 그룹. |
userAgent | optional<string> | 이 로그를 시작한 사용자의 사용자 에이전트. |
uid | optional<UserId> | 사용자 ID, 가능한 경우. 이는 가장 하위 호출자입니다. |
sid | optional<SessionId> | 세션 ID, 가능한 경우. |
eventId | uuid | 감사 가능한 이벤트에 대한 고유 식별자. 이는 동일한 이벤트의 일부인 로그 라인을 그룹화하는 데 사용할 수 있습니다. 예를 들어, 큰 이진 응답이 소비자에게 스트리밍될 때 시작과 끝에 기록된 동일한 eventId 가 로그됩니다. |
logEntryId | uuid | 이 감사 로그 라인의 고유 식별자, 시스템의 다른 로그 라인과 반복되지 않음. Foundry로의 수집 중에 일부 로그 라인이 중복될 수 있으며, 동일한 logEntryId 를 가진 여러 행이 있을 수 있습니다. 동일한 logEntryId 를 가진 행은 중복이며 무시할 수 있습니다. |
sequenceId | uuid | 동일한 eventId 를 공유하는 이벤트에 대한 최선의 순서 지정 필드. |
traceId | optional<TraceId> | Zipkin 추적 ID, 가능한 경우. |