지원 세션이란
지원 세션은 troubleshooter가 ClickHouse 지원 엔지니어의 명령어를 수락하는, 시간이 정해진 윈도우입니다. 세션이 아닐 때는 아웃바운드 WebSocket이 연결되어 있더라도 모든 명령어를 거부합니다. 다른 실행 경로는 존재하지 않으며, ClickHouse가 사용자를 대신해 세션을 열 수도 없습니다. ClickHouse Cloud는 사용자의 환경으로 접속하지 않으며, troubleshooter가 아웃바운드 채널로 전송하는 내용만 수신합니다. 세션은 진단만을 관장합니다. 관리형 모드 서비스의 라이프사이클 명령어는 실행기의 별도 채널을 통해 전달되며, 지원 세션은 이 채널을 열지도, 통제하지도 않습니다. managed services를 참조하십시오. 세션은 두 가지 인터페이스를 통해 제어합니다.- 세션 gateway: troubleshooter에 내장된 인증 API입니다.
POST /v1/clctl/session/enable,POST /v1/clctl/session/disable,GET /v1/clctl/session/status를 제공합니다. 모든 호출에는 이메일이 연산자 허용 목록에 등록된 단기 OIDC ID 토큰이 필요합니다. - 로컬 세션 파일: Linux VM 설치 환경에서 root 액세스로 호스트에 기록됩니다.
kubectl port-forward(터널이 API server의 TLS를 사용)를 이용하거나 CA 발급 인증서로 TLS를 종료하는 인그레스를 통해 접근합니다.
연산자 허용 목록를 포함한 세션 정책은 clicklink clctl init 과정에서 선택합니다.
세션 활성화 및 비활성화
- Kubernetes
- Linux VM
Gateway는 troubleshooter 파드의 8443 포트에서 수신 대기합니다. 클러스터에 액세스할 수 있으면 포트 포워딩을 통해 연결하십시오.그런 다음 다른 터미널에서 세션을 활성화하십시오.같은 방법으로 상태를 확인하거나 세션을 종료할 수 있습니다.호출자의 OIDC 아이덴티티는 연산자 허용 목록에 있어야 합니다. 인증되지 않았거나 허용 목록에 없는 호출자는 401 또는 403을 받으며, Gateway가 해당 시도를 기록합니다. 연산자가 클러스터 자격 증명 없이 작업할 수 있도록 하려면 차트의 선택적 인그레스를 통해 Gateway를 노출하십시오. 이 인그레스는 CA가 발급한 인증서로 TLS를 종료합니다. 자세한 내용은 구성을 참조하십시오.
세션 만료
세션은 자동으로 만료됩니다. 기본 지속 시간은 4시간이며,session enable --duration은 최대 24시간까지 허용합니다. 만료되거나 session disable을 실행하면 troubleshooter는 즉시 명령어 수락을 중지합니다. 비활성화하면 액세스가 즉시 해지되며, 재시작하거나 ClickHouse와 조정할 필요가 없습니다.
연산자 허용 목록
모든 gateway 호출은 연산자 이메일 허용 목록을 기준으로 권한이 부여됩니다. 일치 여부는 검증된 OIDC 토큰으로 증명된 이메일을 기준으로 판단하며, 클라이언트가 제공하는 값은 결코 사용하지 않습니다.- Kubernetes: values 오버레이에서
clctl.gateway.allowedOperators를 설정하십시오. 차트가 이 목록을 ConfigMap에 렌더링하므로, values를 변경하고helm upgrade를 실행하면 파드를 재시작하지 않고도 허용 목록을 교체할 수 있습니다. - Linux VM: 허용 목록은
/etc/clicklink/allowed-operators.txt에 저장되며, 제공한 연산자 이메일을 바탕으로clicklink clctl init이 작성합니다.
세션 중 연산자가 수행할 수 있는 작업
세션이 활성화된 동안 ClickHouse 지원 엔지니어는 두 가지 종류의 명령어를 실행할 수 있습니다. 읽기 전용 SQL은pcm_troubleshooter 사용자 권한으로 클러스터에 실행되며, 이 사용자에게 부여된 권한은 세션 테이블 허용 목록로 제한됩니다. 또한 Troubleshooter는 SELECT, WITH, SHOW, DESCRIBE, EXPLAIN으로 시작하지 않는 SQL 문을 모두 거부합니다. 해당 사용자는 테이블별 SELECT 권한만 보유하며, 쓰기, DDL, 관리 권한은 없습니다.
기본 허용 목록에는 system.parts, system.merges, system.replicas, system.metrics, system.settings와 같은 system 테이블이 포함됩니다. system.query_log와 system.text_log는 허용 목록에 추가할 수 없습니다. 데몬이 이 테이블을 포함한 구성을 거부하므로, 해당 테이블에 대한 권한은 프로비저닝되지 않습니다. 기본 허용 목록에는 system.processes도 포함되며, 이 테이블의 query 열에는 실행 중인 SQL 문의 텍스트가 표시됩니다. 실행 중인 쿼리 텍스트가 세션에서 절대 노출되어서는 안 된다면 troubleshooter.allowedTables(Helm overlay) 또는 troubleshooter.allowed_tables(VM 설정 파일)에서 이를 제거하십시오.
읽기 전용 Kubernetes 뷰는 권한이 부여된 네임스페이스 내의 파드, 파드 상태, 파드 로그, 서비스, configmap, 이벤트, PersistentVolumeClaim, deployment, statefulset, replicaset에 대한 get, list, watch 작업입니다. Access bundle은 두 설치 대상 모두에서 Kubernetes ServiceAccount에 연결됩니다. 프로비저닝된 bundle이 없으면 Troubleshooter는 kubectl 유형의 명령어를 아예 거부합니다. 실행기는 관리형 서비스에 대해 scraper는 프로비저닝하지만 Troubleshooter는 프로비저닝하지 않습니다. 관리형 서비스의 지원 세션을 참조하십시오.
Troubleshooter의 RBAC에는 exec, delete, patch 권한이 없으므로, 연산자는 파드에서 셸을 열거나 세션을 통해 어떤 것도 변경할 수 없습니다. 전체 권한 및 RBAC 목록은 권한 모델 참고 문서에서 확인할 수 있습니다.
감사 로그
세션 중 실행된 모든 명령어는 한 줄에 하나의 JSON 객체 형식(NDJSON)으로/var/log/clicklink/troubleshoot-audit.log에 기록됩니다. 차단된 명령어도 함께 기록되며, blocked_by 필드에 차단 사유(예: session inactive)가 표시됩니다. submitted_by는 명령 채널의 조직 ID, 즉 사용자 본인의 조직 ID입니다. 명령을 실행한 개별 ClickHouse 엔지니어 정보는 이 파일이 아니라 ClickHouse Cloud 측에 기록됩니다. 세션 명령어 항목은 다음과 같은 형태입니다:
status는 명령 실행 결과를 나타내며 completed, error, rejected 중 하나입니다.
Gateway 호출은 별도로 기록됩니다. 거부된 호출을 포함한 모든 호출은 Troubleshooter 자체 로그에 구조화된 clctl.gateway 줄로 남습니다. VM에서는 journal에, Kubernetes에서는 컨테이너 로그에 기록됩니다. 이 줄에는 submitted_by(검사를 통과한 토큰으로 증명된 이메일이며, 클라이언트가 제공한 값은 절대 사용되지 않습니다)와 command_type(clctl.session.enable, clctl.session.disable, clctl.session.status)이 포함됩니다. 또한 reason(enable 시 지정한 --reason), remote_addr, status도 포함됩니다. status는 ok, unauthorized, forbidden, rate_limited, bad_request, conflict, error 중 하나이므로 거부된 액세스도 로그에 남습니다.
VM에서 이루어진 로컬 세션 변경은 감사 로그 항목이 아닙니다. 명령을 실행한 호스트 사용자는 /var/lib/clicklink/session.json에 enabled_by로 기록되며 session status로 확인할 수 있습니다.
VM에서는 clicklink clctl troubleshoot audit tail 명령으로 감사 로그를 확인합니다. Kubernetes에서는 로그가 Troubleshooter 파드 내부에 있고 컨테이너 이미지에 shell이 없으므로, kubectl exec로 바이너리에 내장된 reader를 호출하십시오:
민감 정보 삭제
troubleshooter가 반환하는 모든 내용은 사용자 환경을 벗어나기 전에 민감 정보가 삭제됩니다. 기본 제공 패턴은 IPv4 및 IPv6 주소, Bearer token, AWS 액세스 키, 이메일 주소, JWT, SSH private key, connection string에 포함된 자격 증명을 처리합니다./etc/clicklink/redaction-patterns.yaml에서 이를 확장하거나 재정의할 수 있으며, 기본 제공 패턴과 이름이 같은 항목은 해당 패턴을 대체합니다. 패턴 파일이 유효하지 않으면 데몬이 시작되지 않으며 clicklink clctl preflight에서도 이를 검증하므로, 민감 정보 삭제 구성이 잘못되면 명확하게 실패합니다.
관련 페이지
- Architecture: 커넥터가 설정하는 모든 연결과 세션 관련 데이터 흐름을 설명합니다.
- 구성: gateway, 허용 목록 및 민감 정보 삭제 설정을 설명합니다.
- FAQ: 취소, 감사 및 데이터 egress 관련 질문에 간략히 답변합니다.