인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Helm을 사용하여 자가 호스팅 클러스터에서 Teleport Policy의 접근 그래프 기능 실행하기
Teleport Policy의 접근 그래프를 자가 호스팅 Teleport 클러스터에서 사용하려면 PostgreSQL을 백엔드 스토리지로 사용하는 전용 서비스인 접근 그래프를 설정하고 Auth 서비스 및 Proxy 서비스와 통신하여 리소스 및 접근 정보를 수집해야 합니다.
이 가이드는 Kubernetes 클러스터에서 Helm 차트를 사용하여 접근 그래프 서비스를 설정하고, Teleport 클러스터에서 접근 그래프 기능을 활성화하는 데 도움을 줄 것입니다.
지원되는 매개변수의 전체 목록은 Helm 차트 참조에서 확인할 수 있습니다.
접근 그래프는 Teleport Enterprise 고객만 사용할 수 있는 Teleport Policy 제품의 기능입니다.
필수 사항
- Kubernetes >= v1.21
- Helm >= 3.4.2
- 실행 중인 Teleport Enterprise 클러스터 v14.3.6 이상.
- 이 가이드에서는 Teleport 클러스터가
teleport-cluster
Helm 차트 를 사용하여 설정되어 있다고 가정합니다. 접근 그래프를 배포하기 위해 사용할 동일한 Kubernetes 클러스터에서 설정됩니다.
- 이 가이드에서는 Teleport 클러스터가
- Teleport Policy가 활성화된
license.pem
파일. - PostgreSQL 데이터베이스 서버 v14 이상.
- 접근 그래프는 데이터를 저장할 전용 데이터베이스가 필요합니다.
Teleport가 데이터베이스에 연결할 때 사용하는 사용자 계정은 이 데이터베이스의 소유자여야 하거나 유사한 광범위한 권한을 가져야 합니다:
최소한
public
스키마에 대한CREATE TABLE
권한과CREATE SCHEMA
권한이 필요합니다. - Amazon RDS for PostgreSQL이 지원됩니다.
- 접근 그래프는 데이터를 저장할 전용 데이터베이스가 필요합니다.
Teleport가 데이터베이스에 연결할 때 사용하는 사용자 계정은 이 데이터베이스의 소유자여야 하거나 유사한 광범위한 권한을 가져야 합니다:
최소한
- 접근 그래프 서비스에 대한 TLS 인증서
- TLS 인증서는 "서버 인증" 키 사용을 위해 발급되어야 하며,
접근 그래프에 대한 Kubernetes 서비스 이름이 포함된 X.509 v3
subjectAltName
확장을 포함해야 합니다 (teleport-access-graph.teleport-access-graph.svc.cluster.local
기본값).
- TLS 인증서는 "서버 인증" 키 사용을 위해 발급되어야 하며,
접근 그래프에 대한 Kubernetes 서비스 이름이 포함된 X.509 v3
1/4단계. Teleport Helm 차트 저장소 추가
Teleport Helm 저장소를 설정합니다.
Helm이 Teleport Helm 저장소에서 호스팅되는 차트를 설치할 수 있도록 허용합니다:
helm repo add teleport https://charts.releases.teleport.dev
원격 저장소의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리스로 업그레이드할 수 있습니다:
helm repo update
2/4단계. 접근 그래프 설정
Teleport 클러스터의 호스트 인증 기관(CA) 복사본이 필요합니다. 접근 그래프는 Auth 서비스와 Proxy 서비스에서 발급한 호스트 인증서를 통해 수신 연결이 인증되어야 합니다.
호스트 CA는 다음 방법 중 하나로 검색할 수 있습니다:
curl 'https://teleport.example.com/webapi/auth/export?type=tls-host'-----BEGIN CERTIFICATE-----MIIDqjCCApKgAwIBAgIQMIK8/WiQ/rUOrjlmB0IHVTANBgkqhkiG9w0BAQsFADBv<...>-----END CERTIFICATE-----
tsh login --proxy=teleport.example.comtctl get cert_authorities --format=json \ | jq -r '.[] | select(.spec.type == "host") | .spec.active_keys.tls[].cert' \ | base64 -d-----BEGIN CERTIFICATE-----MIIDqjCCApKgAwIBAgIQMIK8/WiQ/rUOrjlmB0IHVTANBgkqhkiG9w0BAQsFADBv<...>-----END CERTIFICATE-----
그런 다음, 접근 그래프 배포를 위해 네임스페이스와 필요한 비밀을 생성합니다. TLS 인증서를 이미 Kubernetes 클러스터에서 인증서를 발급받거나 cert-manager를 사용하는 경우 마지막 명령어는 생략할 수 있습니다.
kubectl create namespace teleport-access-graphkubectl -n teleport-access-graph create secret generic teleport-access-graph-postgres \ --from-literal uri="postgres://access_graph_user:my_password@db.example.com:5432/access_graph_db?sslmode=require"kubectl -n teleport-access-graph create secret tls teleport-access-graph-tls --cert=./certs/cert.crt --key=./certs/cert.key
위 명령어는 접근 그래프 서버에 대한 TLS 인증서와 개인 키가 ./certs
디렉터리에 저장되어 있다고 가정합니다.
접근 그래프 배포를 위한 인증 기관 및 서버 TLS 인증서를 빠르게 생성하는 데 사용할 수 있는 스크립트입니다.
#!/usr/bin/env bash
set -e
mkdir -p ./certs
cd ./certs
openssl genrsa -aes256 -out ca.key 4096
openssl req -x509 -new -key ca.key -sha256 -days 3652 -out ca.crt -subj '/CN=root'
openssl req -new -out cert.csr -newkey rsa:4096 -nodes -keyout cert.key -subj '/CN=Access Graph'
openssl x509 -req -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cert.crt -days 3652 -sha256 \
-extfile <(printf 'extendedKeyUsage = serverAuth, clientAuth\nsubjectAltName = DNS:teleport-access-graph.teleport-access-graph.svc.cluster.local')
echo "인증서가 성공적으로 발급되었습니다."
이 스크립트는 동일한 비밀번호를 4번 입력하라는 프롬프트가 표시됩니다: CA 개인 키 자료를 암호화하기 위해 비밀번호를 생성하고 확인하기 위해 두 번, 그런 다음 개인 키를 사용하여 CA 인증서를 자체 서명하기 위해 한 번, 마지막으로 접근 그래프 서버 인증서에 서명하기 위해 한 번입니다.
이 스크립트는 검증 개념 증명 배포를 위해 제공되며, 최선의 보안 관행을 따르지 않을 수 있습니다.
비밀을 프로비저닝한 후 tag-values.yaml
이라는 다음 파일을 생성하고,
이전에 검색한 Teleport Host CA 인증서 아래의 clusterHostCAs
키의 값을 교체합니다.
postgres:
secretName: "teleport-access-graph-postgres"
tls:
# Kubernetes 워크로드에 대한 TLS 인증서를 프로비저닝하는 경우
# 이 값을 변경해야 할 수도 있습니다.
existingSecretName: "teleport-access-graph-tls"
clusterHostCAs:
# 1단계에서 검색한 인증서로 교체합니다.
# `clusterHostCAs` 는 여러 줄 YAML 문자열의 배열이며, `- |`는 제거하면 안 되며, 들여쓰기를 유지해야 합니다.
- |
-----BEGIN CERTIFICATE-----
MIIDqjCCApKgAwIBAgIQMIK8/WiQ/rUOrjlmB0IHVTANBgkqhkiG9w0BAQsFADBv
<...>
-----END CERTIFICATE-----
마지막으로, Helm을 사용하여 접근 그래프 서비스를 배포합니다:
helm install -n teleport-access-graph -f tag-values.yaml --version 1.24.4 teleport-access-graph teleport/teleport-access-graphkubectl -n teleport-access-graph rollout status deployment/teleport-access-graph # 배포가 성공할 때까지 대기
3/4단계. Teleport Auth 서비스 구성 업데이트
Teleport Auth 서비스와 Access Graph 서비스 간의 연결을 활성화하려면, Auth 서비스 구성을 다음으로 업데이트해야 합니다:
- Access Graph 서비스 주소
- Access Graph 서비스 TLS 인증서를 발급한 CA의 경로.
- 이 경로는 Teleport 파드에 마운트된 CA를 포함하는 볼륨을 참조해야 합니다.
- Teleport 클러스터에서 이미 신뢰하는 CA를 사용하는 경우,
(
tls.existingCASecretName
옵션을 통해)(../../../reference/helm-reference/teleport-cluster.mdx), 또는 인증서가 Mozilla CA 인증서 목록에 포함된 CA에서 발급된 경우, CA 인증서 파일을 지정하는 것은 생략할 수 있습니다.
CA 인증서를 포함하는 ConfigMap을 다음과 같이 생성합니다:
kubectl -n teleport-cluster-namespace create configmap teleport-access-graph-ca \ --from-file=ca.pem=./certs/ca.crt
그 다음, teleport-cluster
Helm 차트의 배포 값을 다음과 같이 업데이트합니다:
auth:
teleportConfig:
# <...>
# Access Graph 연결을 구성하는 섹션을 추가합니다.
access_graph:
enabled: true
endpoint: teleport-access-graph.teleport-access-graph.svc.cluster.local:443
# Teleport 클러스터가 이미 발급 CA를 신뢰하는 경우 `ca` 키를 생략합니다.
ca: /var/run/access-graph/ca.pem
# Access Graph CA를 Teleport Auth 서비스에 볼륨으로 제공합니다.
# Teleport 클러스터가 이미 발급 CA를 신뢰하는 경우 아래의 모든 내용을 생략합니다.
extraVolumes:
- name: tag-ca
configMap:
name: teleport-access-graph-ca
extraVolumeMounts:
- name: tag-ca
mountPath: /var/run/access-graph
teleport-cluster
Helm 차트를 사용하지 않는 경우, Teleport 클러스터 배포에 동등한 변경을 해야 합니다:
- Teleport Auth 서비스의 YAML 구성 파일 최상위에
access_graph:
섹션을 추가합니다. - Auth 서비스가 CA 인증서를 읽을 수 있도록 생성한 ConfigMap을 볼륨으로 마운트합니다.
마지막으로 Helm 차트를 재배포합니다 (값이 values-teleport.yaml
에 저장되어 있다고 가정합니다).
Auth 서비스 변경이 성공하면 Proxy 서비스를 재시작합니다.
helm upgrade -n teleport-cluster-namespace -f values-teleport.yaml \ --version <version> teleport-cluster-deployment-name teleport/teleport-clusterkubectl -n teleport-cluster-namespace rollout status deployment/teleport-auth # 배포가 성공할 때까지 대기kubectl -n teleport-cluster-namespace rollout restart deployment/teleport-proxykubectl -n teleport-cluster-namespace rollout status deployment/teleport-proxy # 배포가 성공할 때까지 대기
4/4단계. 웹 UI에서 Access Graph 보기
웹 UI의 "Access Management" 탭에서 Access Graph를 찾을 수 있습니다.

인터페이스에 접근하기 위해서는 사용자가 access_graph
리소스에 대한 list
및 read
동작을 허용하는 역할을 가져야 합니다. 예:
kind: role
version: v7
metadata:
name: my-role
spec:
allow:
rules:
- resources:
- access_graph
verbs:
- list
- read
사전 정의된 editor
역할은 기본적으로 필요한 권한을 가지고 있습니다.