자가 호스팅 텔레포트 클러스터에서 텔레포트 정책의 Access Graph를 사용하려면, PostgreSQL을 백업 저장소로 사용하는 전용 서비스인 Access Graph를 설정해야 하며, Auth Service 및 Proxy Service와 통신하여 리소스 및 액세스에 대한 정보를 수집합니다.
이 가이드는 헬름 차트를 사용하여 Kubernetes 클러스터에 Access Graph 서비스를 설정하고, 텔레포트 클러스터에서 Access Graph 기능을 활성화하는 데 도움을 줍니다.
지원되는 매개변수의 전체 목록은 Helm 차트 참조에서 확인할 수 있습니다.
Access Graph는 텔레포트 기업 고객만 사용할 수 있는 텔레포트 정책 제품의 기능입니다.
전제 조건
- Kubernetes >= v1.21
- Helm >= 3.4.2
- 실행 중인 텔레포트 기업 클러스터 v14.3.6 이상.
- 이 가이드의 목적을 위해 텔레포트 클러스터가 Access Graph를 배포하는 데 사용되는 동일한 Kubernetes 클러스터에서 teleport-cluster 헬름 차트를 사용하여 설정되었다고 가정합니다.
- 텔레포트 정책이 활성화된 업데이트된
license.pem
. - PostgreSQL 데이터베이스 서버 v14 이상.
- Access Graph는 데이터를 저장하기 위해 전용 데이터베이스가 필요합니다.
텔레포트가 데이터베이스에 연결하는 사용자는 이 데이터베이스의 소유자이거나 유사한 광범위한 권한이 있어야 합니다:
적어도
public
스키마에 대한CREATE TABLE
권한 및CREATE SCHEMA
권한을 가져야 합니다. - Amazon RDS for PostgreSQL이 지원됩니다.
- Access Graph는 데이터를 저장하기 위해 전용 데이터베이스가 필요합니다.
텔레포트가 데이터베이스에 연결하는 사용자는 이 데이터베이스의 소유자이거나 유사한 광범위한 권한이 있어야 합니다:
적어도
- Access Graph 서비스에 대한 TLS 인증서
- TLS 인증서는 "서버 인증" 키 사용을 위해 발급되어야 하며,
Access Graph의 Kubernetes 서비스 이름을 포함하는 X.509 v3
subjectAltName
확장을 포함해야 합니다. (teleport-access-graph.teleport-access-graph.svc.cluster.local
기본값).
- TLS 인증서는 "서버 인증" 키 사용을 위해 발급되어야 하며,
Access Graph의 Kubernetes 서비스 이름을 포함하는 X.509 v3
1단계/4. 텔레포트 헬름 차트 리포지토리 추가하기
Teleport Helm 리포지토리를 설정하세요. Teleport Helm 리포지토리에 호스팅된 차트를 설치하도록 Helm을 허용하세요:
helm repo add teleport https://charts.releases.teleport.dev
원격 리포지토리의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리즈로 업그레이드할 수 있습니다:
helm repo update
2단계/4. Access Graph 설정하기
텔레포트 클러스터의 호스트 인증 기관(CA) 인증서 사본이 필요합니다. Access Graph는 Auth Service와 Proxy Service에 대해 호스트 CA가 발급한 호스트 인증서를 통해 수신 연결을 인증해야 합니다.
호스트 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-----
그런 다음, Access Graph 배포를 위한 네임스페이스와 필요한 시크릿을 생성합니다. 인증서를 발급하기 위한 cert-manager를 사용 중이거나, 이미 Kubernetes 클러스터에서 Access Graph를 위한 TLS 인증서를 마련한 경우 마지막 명령어는 생략할 수 있습니다.
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
위의 명령은 Access Graph 서버에 대한 TLS 인증서와 개인 키가 ./certs
디렉토리에 저장되어 있다고 가정합니다.
다음 스크립트를 사용하여 Access Graph 배포를 위한 인증 기관과 서버 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 "인증서가 성공적으로 발급되었습니다."
스クリプト는 CA 개인 키 자료를 암호화하기 위해 두 번 입력하게 할 때와 Access Graph 서버 인증서를 서명하기 위해 키를 사용할 때 각각 한 번씩 비밀번호 입력을 요청합니다.
이 스크립트는 프로토타입 배포를 위한 것이며, 최상의 보안 관행을 따르지 않을 수 있습니다.
시크릿을 준비한 후 Access Graph 배포를 위한 tag-values.yaml
파일을 아래와 같이 생성합니다.
이전 단계에서 가져온 텔레포트 호스트 CA 인증서로 clusterHostCAs
키 아래의 값을 교체하세요.
postgres:
secretName: "teleport-access-graph-postgres"
tls:
# TLS 인증서를 프로비저닝하기 위해 cert-manager 또는 기타 수단을 사용하는 경우 이 값을 변경해야 할 수 있습니다.
existingSecretName: "teleport-access-graph-tls"
clusterHostCAs:
# 1단계에서 가져온 인증서로 교체합니다.
# `clusterHostCAs`는 여러 줄 YAML 문자열의 배열이며, `- |`는 제거되지 않아야 하고, 들여쓰기는 유지해야 합니다.
- |
-----BEGIN CERTIFICATE-----
MIIDqjCCApKgAwIBAgIQMIK8/WiQ/rUOrjlmB0IHVTANBgkqhkiG9w0BAQsFADBv
<...>
-----END CERTIFICATE-----
마지막으로, 헬름을 사용하여 Access Graph 서비스를 배포합니다:
helm install -n teleport-access-graph -f tag-values.yaml --version 1.20.4 teleport-access-graph teleport/teleport-access-graphkubectl -n teleport-access-graph rollout status deployment/teleport-access-graph # 배포 성공을 기다립니다.
3단계/4. 텔레포트 Auth 서비스 구성 업데이트하기
텔레포트 Auth 서비스와 Access Graph 서비스 간의 연결을 활성화하려면, Auth 서비스 구성에 다음 항목이 업데이트되어야 합니다:
- Access Graph 서비스 주소
- Access Graph 서비스 TLS 인증서를 발급한 CA의 경로.
- 이 경로는 텔레포트 팟에 마운트된 CA를 포함하는 볼륨을 참조해야 합니다.
- 텔레포트 클러스터에서 이미 신뢰할 수 있는 CA를 사용하는 경우
(
tls.existingCASecretName
옵션을 통해 포함됨), 혹은 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
헬름 차트 배포 값을 아래와 같이 업데이트합니다:
auth:
teleportConfig:
# <...>
# Access Graph 연결 구성에 대한 섹션을 추가합니다.
access_graph:
enabled: true
endpoint: teleport-access-graph.teleport-access-graph.svc.cluster.local:443
# 텔레포트 클러스터에서 이미 발급한 CA를 신뢰하는 경우 `ca` 키는 생략할 수 있습니다.
ca: /var/run/access-graph/ca.pem
# Access Graph CA를 텔레포트 Auth 서비스에 볼륨으로 제공합니다.
# 텔레포트 클러스터에서 이미 신뢰하는 CA를 사용하는 경우 아래 모든 내용을 생략할 수 있습니다.
extraVolumes:
- name: tag-ca
configMap:
name: teleport-access-graph-ca
extraVolumeMounts:
- name: tag-ca
mountPath: /var/run/access-graph
teleport-cluster
헬름 차트를 사용하지 않는 경우,
텔레포트 Auth 서비스의 YAML 구성 파일 최상위에 access_graph:
섹션을 추가해야 하며,
생성된 ConfigMap을 볼륨으로 마운트하여 Auth 서비스가 CA 인증서를 읽을 수 있도록 해야 합니다.
마지막으로 헬름 차트를 재배포합니다(값이 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
역할은 기본적으로 필요한 권한을 가지고 있습니다.