Splunk으로 Teleport 감사 이벤트 내보내기
Teleport의 Event Handler 플러그인은 Teleport Auth Service에서 감사 이벤트를 수신하여 로그 관리 솔루션으로 전달하므로, 기록 분석, 비정상적인 동작 감지, Teleport 클러스터와 사용자가 상호 작용하는 방식에 대한 더 나은 이...
Teleport의 Event Handler 플러그인은 Teleport Auth Service에서 감사 이벤트를 수신하여 로그 관리 솔루션으로 전달하므로, 기록 분석, 비정상적인 동작 감지, Teleport 클러스터와 사용자가 상호 작용하는 방식에 대한 더 나은 이해를 얻을 수 있습니다.
이 가이드에서는 Teleport 감사 이벤트를 Splunk로 전송하도록 Teleport Event Handler 플러그인을 구성하는 방법을 보여줍니다.
작동 방식#
Teleport Event Handler는 Teleport Auth Service에 인증하여 gRPC 스트림을 통해 감사 이벤트를 수신한 후, HTTP 요청으로 로컬 Fluentd 인스턴스에 전송합니다. Fluentd 인스턴스는 이 요청을 Splunk HTTP Event Collector(HEC)로 전달하고, HEC는 시각화 및 알림을 위해 이를 Splunk Cloud Platform 또는 Splunk Enterprise로 전송합니다.
사전 요구사항#
- Splunk Cloud Platform 또는 Splunk Enterprise v9.0.1 이상.
- Fluentd 버전 v
[fluentd.version]이상. Teleport Event Handler는 기존 Fluentd 시스템에 통합하거나 새로운 설정과 함께 사용할 수 있는 새 fluent.conf 파일을 생성합니다. - Teleport Event Handler 플러그인을 실행할 서버, 가상 머신, Kubernetes 클러스터 또는 Docker 환경.
- Splunk Enterprise에서 포트
8088은 Teleport Event Handler와 Fluentd 인스턴스를 실행하는 호스트의 트래픽에 열려 있어야 합니다.
이 가이드는 Event Handler 설정 가이드 중 하나를 완료했다고 가정합니다:
아래 지침은 워크스테이션에서 Event Handler 플러그인을 로컬로 테스트하는 방법을 보여줍니다. 다른 환경에서는 경로, 포트 및 도메인을 조정해야 합니다.
1/4단계. Splunk 구성#
이 섹션에서는 Teleport 감사 이벤트를 수집하고 인덱싱하도록 Splunk를 구성하고, HEC가 Splunk에 인증하기 위한 토큰을 만듭니다. 이 섹션의 모든 단계는 Splunk 웹 인터페이스에서 수행됩니다.
Teleport 감사 이벤트용 인덱스 생성#
- Splunk UI 홈 페이지를 방문하여 Settings > Indexes로 이동합니다.
New Index를 클릭합니다. 인덱스 이름을
teleport-audit-logs로 지정하고 Index Data Type 필드를Events로 설정합니다. - 나머지 필드인 Max raw data size와 **Searchable retention (days)**를 조직의 필요에 따라 입력합니다.
- Save를 클릭합니다.
[선택 사항] Teleport 감사 이벤트용 소스 타입 생성#
기본적으로 Splunk의 _json 소스 타입은 time 필드가 Teleport 감사 이벤트와 다른 형식일 것으로 예상합니다. 즉, 이벤트가 생성된 시간이 아닌 수집된 시간에 Splunk에 표시됩니다. Teleport 감사 이벤트가 예상대로 표시되도록 Splunk에서 time 필드 형식을 조정합니다.
- Settings -> Source Types로 이동합니다.
_json소스 타입을 찾아 Clone을 클릭합니다.- 새 소스 타입 이름을
_json-gotime으로 지정합니다. - Timestamp 아래에서 Advanced를 클릭합니다.
%Y-%m-%dT%H:%M:%S.%3NZ를 입력하고 Save를 클릭합니다.
HTTP Event Collector용 토큰 생성#
- Splunk UI 홈 페이지를 방문합니다.
- Settings > Data inputs로 이동합니다.
- Local inputs 테이블에서 HTTP Event Collector 행을 찾아 Add new를 클릭합니다.
- 나중에 관리할 수 있도록 토큰을 식별할 수 있는 이름(예:
Teleport Audit Events)을 입력합니다. - Next를 클릭합니다.
- Input Settings 보기에서 Source type 필드 옆의 Select를 클릭합니다.
- Select Source Type 드롭다운 메뉴에서 Structured를 클릭한 다음 이전에 만든
_json-gotime타입을 선택합니다. 해당 선택 사항 단계를 건너뛴 경우_json을 선택합니다. Splunk는 수신 로그를 JSON 형식으로 인덱싱하며, 이는 Event Handler가 Splunk로 로그를 전송하는 형식입니다. - Index 섹션에서 이전에 만든
teleport-audit-logs인덱스를 선택합니다. - Review를 클릭한 다음 요약을 확인하고 Submit을 클릭합니다.
- Token Value 필드를 복사하여 이 가이드의 뒷부분에서 사용할 수 있도록 에 할당합니다.
2/4단계. Splunk HTTP Event Collector에 Fluentd 연결#
Splunk는 이전에 https://github.com/splunk/fluent-plugin-splunk-hec 에서 전용 출력 플러그인을 유지 관리했지만, 이는 더 이상 지원되지 않습니다. Fluentd의 내장 HTTP 출력 플러그인을 사용하여 Fluentd를 HEC에 연결할 수 있습니다.
1단계에서 fluent.conf에 Fluentd용 구성 파일이 생성되었습니다. fluent.conf 파일을 다음과 같이 편집합니다:
-
<parse>섹션을 다음 섹션으로 편집합니다:<parse> @type json json_parser oj # This time format is used by the plugin. This field is required. time_type string time_format %Y-%m-%dT%H:%M:%S keep_time_key true </parse>이렇게 하면 Splunk로 전송될 때 JSON의
time필드가 보존됩니다. 일부 Fluentd 출력 플러그인은 파싱된 시간을 사용할 수 있어야 합니다. -
를 Splunk HTTP Event Collector 엔드포인트로 설정합니다.
Splunk Enterprise의 경우 형식은 다음과 같습니다:
https://<host>:8088/services/collector/raw
Splunk Cloud의 경우 형식은 다음과 같습니다:
- AWS:
https://http-inputs-<host>.splunkcloud.com:443/services/collector/raw - Google Cloud / Azure:
https://http-inputs.<host>.splunkcloud.com:443/services/collector/raw - 무료 체험:
https://<host>.splunkcloud.com:8088/services/collector/raw
Splunk HEC URI에 대한 자세한 내용은 Splunk HTTP Event Collector를 참조하세요.
-
<match test.log>섹션을 다음 섹션으로 편집합니다.<match test.log> @type http endpoint <Var name="splunk-endpoint" /> headers {"Authorization": "Splunk <Var name="TOKEN" />"} # tls_verify_mode none <buffer> flush_interval 2s </buffer> </match>이렇게 하면 이전에 생성한 토큰을 사용하여 HEC에 인증하도록 Fluentd가 구성됩니다. Splunk Cloud 무료 체험을 사용하는 경우 자체 서명된 인증서를 허용하도록
tls_verify_mode none의 주석을 제거합니다. -
Fluentd를 실행하여 변경 사항을 테스트합니다:
$ docker run -u $(id -u ${USER}):$(id -g ${USER}) -p 8888:8888 -v $(pwd):/keys -v $(pwd)/fluent.conf:/fluentd/etc/fluent.conf fluent/fluentd:edge
3/4단계. Event Handler 플러그인 실행#
이제 HTTP를 통해 로그를 수신하고 Splunk로 전달하도록 Fluentd 인스턴스를 구성했으므로, Event Handler 구성을 수정하고 Event Handler를 실행하여 구성을 테스트합니다.
Event Handler 구성#
설치 방법에 따라 Event Handler 구성을 편집합니다.
다음 필드를 업데이트합니다.
이 섹션의 내용은 원문 문서를 참조하세요. (finish-event-handler-fields.mdx)
Event Handler 시작#
이 섹션의 내용은 원문 문서를 참조하세요. (start-event-handler.mdx)
4/4단계. Splunk에서 감사 이벤트 시각화#
이 설정은 감사 이벤트를 구조화된 JSON 형식으로 Splunk에 전달하므로, Splunk가 자동으로 인덱싱하여 필드를 즉시 시각화에 사용할 수 있습니다. 이 필드를 사용하여 사용자가 Teleport 클러스터와 상호 작용하는 방식을 추적하는 대시보드를 만들 수 있습니다.
예를 들어, Splunk UI 홈 페이지에서 Search & Reporting > Dashboards > Create New Dashboard로 이동합니다. 대시보드 제목으로 "Teleport Audit Log Types"를 입력하고 Classic Dashboards를 클릭합니다. Create를 클릭한 다음 Edit Dashboard 보기에서 Add Panel을 클릭합니다.
Add Panel 사이드바에서 New > Column Chart를 클릭합니다. Search String 필드에 다음을 입력합니다:
index="teleport-audit-logs" | timechart count by event
Add to Dashboard를 클릭하면 시간에 따른 Teleport 이벤트 유형 수가 표시되어 사용자가 Teleport와 상호 작용하는 방식을 전반적으로 파악할 수 있습니다:

연결 문제 해결#
Teleport Event Handler가 Teleport 클러스터에 연결하는 동안 오류 로그를 표시하는 경우 다음을 확인하세요:
- Teleport Event Handler가 Teleport 클러스터에 연결하는 데 사용하는 인증서가 만료 날짜를 지나지 않았는지 확인합니다. 이는
tctl auth sign명령의--ttl플래그 값으로, 기본적으로 12시간입니다. - Teleport Event Handler 구성 파일에서 Teleport Proxy Service에 대한 올바른 호스트 및 포트를 제공했는지 확인합니다.
다음 단계#
감사 로그를 Splunk로 내보내기 시작했다면, 시각화 및 알림을 계획할 수 있도록 감사 로그 참조를 참조하세요.
teleport-plugin-event-handlerHelm 차트의 values 파일에서 설정할 수 있는 모든 옵션을 보려면 참조 가이드를 참조하세요.
