2026.03.20 - [프로젝트] - OpenCSP 프로젝트 내용 정리
OpenCSP (1) 프로젝트 내용 정리
진행 중인 오픈소스 프로젝트 OpenCSP의 깃허브 문서가 영어로만 있어서 한글로도 정리해보고 싶어졌다. https://github.com/h001-lab/OpenCSP-corehttps://github.com/h001-lab/OpenCSP-moduleshttps://github.com/h001-lab/OpenCSP-
miiml.tistory.com
Teleport 는 오픈소스 PAM으로 Audit과 안전한 리소스 접근을 위해 구성했다.
VPS나 클라우드 사업자 처럼 내 서버 자원을 대여해주면 자연스럽게 아래 고민들을 하게된다.
사용자가 웹에서 리소스(VM)를 할당 받긴 했는데 해당 리소스에 어떻게 안전하게 접근할지, 혹시 접속해서 악의적인 행동을 하진 않을지
이런 고민들을 한번에 해결해주는 도구가 PAM.
Teleport는 쿠버네티스를 기반으로 가볍고 강력한 기능을 제공하는 오픈소스 PAM이다.
구성은 생각보다 간단하다.
release.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: teleport-cluster
namespace: teleport
spec:
targetNamespace: teleport
interval: 30m
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
chart:
spec:
chart: teleport-cluster
version: "18.6.4"
sourceRef:
kind: HelmRepository
name: teleport
namespace: flux-system
dependsOn:
- name: cert-manager
namespace: flux-system
values:
fullnameOverride: "teleport-cluster"
clusterName: "teleport.domain.com"
proxyListenerMode: multiplex
tls:
existingSecretName: ""
certManager:
enabled: false # teleport 자체 서명 인증서 사용
# issuerName: "letsencrypt-prod"
# issuerKind: "ClusterIssuer"
auth:
teleportConfig:
teleport:
storage:
type: dir
path: /var/lib/teleport
proxy:
service:
type: ClusterIP
ingress:
enabled: false
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: teleport-ingress
namespace: teleport
annotations:
# cert-manager.io/cluster-issuer: "letsencrypt-prod"
kubernetes.io/ingress.class: "cilium"
ingress.cilium.io/backend-protocol: "https"
ingress.cilium.io/tls-passthrough: "true"
spec:
ingressClassName: cilium
tls:
- hosts:
- teleport.domain.com
- "*.teleport.domain.com"
secretName: teleport-tls-all
rules:
- host: teleport.domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: teleport-teleport-cluster
port:
number: 443
- host: "*.teleport.domain.com"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: teleport-teleport-cluster
port:
number: 443
Value는 그냥 차트 가져와서 구성하고, ingress랑 cert 인증서 설정해주는 게 전부라 크게 복잡하진 않다.
근데 텔레포트는 접근 시에 https를 강제하기 때문에 구성 후 ingress 까지 다 셋팅이 완료되어야 UI를 볼 수 있다.

그리고 UI에 Sign Up 이 없는 걸 볼 수 있는데
초기 어드민 계정은 아래처럼 파드 > 컨테이너 내부에서 tctl 이라는 전용 툴을 사용해서 만들 수 있다.
kubectl exec -it $(kubectl get pod -n teleport -l app.kubernetes.io/component=auth -o name) -n teleport -- \
tctl users add admin --roles=editor,access --logins=root,ubuntu
명령어 실행하면 임시로 접근할 수 있는 링크를 주고, 거기서 계정 정보 입력이 가능함. (그리고 MFA 가 강제된다)

생성한 계정으로 로그인하면 초기엔 teleport가 설치된 kubernetes 노드만 보이고
아래 ssh server는 vm에 agent 를 설치해 연결된 상태

노드 연결은 아래처럼 직접 할 수도 있지만
# 1. GPG 키 다운로드
sudo curl https://apt.releases.teleport.dev/gpg \
-o /usr/share/keyrings/teleport-archive-keyring.asc
# 2. 레포지토리 추가 (사용자 규칙에 따라 v18 최신 버전 지정)
source /etc/os-release
echo "deb [signed-by=/usr/share/keyrings/teleport-archive-keyring.asc] https://apt.releases.teleport.dev/${ID} ${VERSION_CODENAME} stable/v18" \
| sudo tee /etc/apt/sources.list.d/teleport.list > /dev/null
# 3. 설치
sudo apt update
sudo apt install teleport
# 4. 설정 파일 수정
sudo vi /etc/teleport.yaml
/etc/teleport.yaml
version: v3
teleport:
nodename: "my-vm-server" # Teleport 목록에 표시될 이름
proxy_server: "teleport.domain.com:443"
auth_token: "토큰_값" # 별도로 생성
ssh_service:
enabled: "yes"
labels:
env: "prod" # 관리용 라벨 (선택 사항)
auth_service:
enabled: "no"
proxy_service: # v3
enabled: "no"
# 서비스 활성화 및 시작
sudo systemctl enable teleport
sudo systemctl start teleport
# 상태 확인
sudo systemctl status teleport
프로젝트에선 이 과정이 자동으로 이루어져야한다.
그래서 VM을 생성해줄 Terraform 코드와 내부에 Teleport Agent 를 설치해줄 Ansible 코드가 필요하다.
해당 코드는 https://github.com/h001-lab/OpenCSP-modules 에 있고 위 이미지의 리소스를 해당 코드를 활용해서 만들었음
이후 리소스에 접근하는 방법은 크게 2가지 인데, 웹에 로그인해서 웹 콘솔로 쉘을 얻거나,
아래처럼 tsh이라는 전용 툴을 활용해 접근할 수 있다.
# 로그인 (안 되어 있다면)
tsh login --proxy=teleport.domain.com:443
# 노드 리스트 확인
tsh ls
tsh ssh ubuntu@node # 노드 리스트에 있는 위에 설정 파일에 node/ name
해당 방법으로 접근하면 모든 사용기록이 Audit logs와 Recodings에 남게된다.
기본 구성은 됐지만 프로젝트를 위해 2가지 더 해결해야될 부분이 있다.
1. 사용성 개선: 사용자는 teleport 웹에 직접 접근하면 안되고 tsh도 사용할 수 없다.
2. 프로비저닝 로직 개선: vm을 테라폼으로 직접 생성했는데 실제 사용자의 리소스는 gitOps로 프로비저닝되면 안됨.
각자 생각해둔 방법이 있긴한데 이건 다음에 ..
| OpenCSP Console로 VM 생성해보기 (0) | 2026.03.28 |
|---|---|
| API 요청으로 PVE VM 생성하기 (0) | 2026.03.25 |
| API 요청으로 Terraform CR 생성하기 (0) | 2026.03.23 |
| k3s에 zitadel 올려보기 (0) | 2026.03.21 |
| k3s에 lago 올려보기 (0) | 2026.03.20 |