인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
비밀에서 값 조회하기
이 가이드는 Teleport Kubernetes 운영자 CR 대신 Kubernetes Secrets에 민감한 정보를 저장하는 방법을 설명합니다.
작동 방식
일부 Teleport 리소스는 민감한 값을 포함할 수 있습니다. 선택한 CR 필드는 기존 Kubernetes 비밀을 참조할 수 있으며, 운영자는 조정할 때 비밀에서 값을 검색합니다.
현재 GithubConnector와 OIDCConnector의 client_secret
필드만 비밀 조회를 지원합니다.
필수 조건
이 가이드를 따르려면 다음이 필요합니다:
- 실행 중인 Teleport 클러스터
- 기능하는 Teleport Kubernetes 운영자 설정
- 운영자 네임스페이스에서 CR 및 Secrets를 편집할 수 있는 Kubernetes 권한
- 로컬에 설치되어 Kubernetes 클러스터에 구성된
kubectl
- 운영자가 관리할 수 있는 작동 중인 GitHub 또는 OIDC 커넥터
- Teleport 클러스터에 로그인한
tctl
및tsh
설치
중요한 고려 사항
CR에서 민감한 값을 저장하더라도 CR은 Kubernetes 비밀만큼 중요하게 여겨져야 합니다. CR을 편집할 수 있는 권한이 있는 사람은 Teleport 관리자가 되어 Teleport에서 민감한 값을 검색할 수 있습니다.
비밀 조회 기능에는 구성하기 전에 고려해야 할 두 가지 제한 사항이 있습니다:
- 성능상의 이유로 비밀이 감시되지 않습니다. 비밀 내용의 변경 사항이 리소스에 즉시 반영되지 않습니다. 운영자가 새 비밀 값을 사용하도록 유도하려면 CR을 편집하거나 운영자를 다시 시작하거나 다음 전체 동기화(12시간마다)를 기다려야 합니다.
- 보안상의 이유로 운영자는 임의의 비밀에서의 조회를 허용하지 않습니다. 비밀에는
resources.teleport.dev/allow-lookup-from-cr
애너테이션이 필요합니다. 가능한 값은*
또는 CR 이름의 쉼표로 구분된 목록입니다.
1/3단계. 민감한 값을 포함하는 Kubernetes Secret 생성
이 가이드에서 저장하려는 민감한 값은 GitHub 커넥터 클라이언트 비밀입니다.
다음 secret.yaml
매니페스트를 생성합니다:
apiVersion: v1
kind: Secret
metadata:
name: teleport-github-connector
annotations:
# 이 애너테이션은 모든 CR이 이 비밀을 조회할 수 있도록 허용합니다
resources.teleport.dev/allow-lookup-from-cr: "*"
# 단순화를 위해 data 대신 stringData를 사용합니다. 둘 다 가능합니다
stringData:
githubSecret: my-github-secret-value
teleport-iac가 귀하의 Teleport Kubernetes 운영자 네임스페이스라면, 다음과 같이 매니페스트를 적용합니다:
kubectl apply -n teleport-iac -f secret.yamlsecret/teleport-github-connector created
2/3단계. 비밀을 참조하는 사용자 정의 리소스 생성
다음 github-connector.yaml
매니페스트를 생성합니다:
apiVersion: resources.teleport.dev/v3
kind: TeleportGithubConnector
metadata:
name: github
spec:
# 이 값은 비밀에서 조회됩니다. `teleport-github-connector` 는 비밀 이름이고 `githubSecret` 는 비밀 키입니다.
client_secret: "secret://teleport-github-connector/githubSecret"
# 아래의 모든 값은 귀하의 GitHub 계정에서 작업할 값으로 교체하세요
client_id: my-client-id
display: Github
redirect_url: "my value"
teams_to_roles:
- organization: ORG-NAME
roles:
- access
team: team-name
운영자 및 비밀과 동일한 네임스페이스에서 매니페스트를 적용합니다:
kubectl apply -n teleport-iac -f github-connector.yamlteleportgithubconnector.resources.teleport.dev/github created
3/3단계. 리소스 생성 확인
운영자는 CR status
필드에서 조정이 성공했는지 여부를 표시합니다. 작동했는지 확인하려면 다음 명령을 실행하세요:
kubectl get -n -n teleport-iac teleportgithubconnector github -o yaml
apiVersion: resources.teleport.dev/v3kind: TeleportGithubConnector[...]
status: conditions: - lastTransitionTime: "2022-07-25T16:15:52Z" message: Teleport 리소스에 Kubernetes 출처 레이블이 있습니다. reason: OriginLabelMatching status: "True" type: TeleportResourceOwned - lastTransitionTime: "2022-07-25T17:08:58Z" message: 'Teleport 리소스가 성공적으로 조정되었으며 Teleport에서 오류가 반환되지 않았습니다.' reason: NoError status: "True" type: SuccessfullyReconciled
모든 작업이 성공하면 모든 조건 상태가 True
여야 합니다. 어떤 상태가 False
인 경우, 메시지 및 이유가 실패에 대한 추가 정보를 제공합니다.
마지막으로, Teleport에서 리소스가 제대로 생성되었는지 확인하세요:
tctl get githubversion: v3kind: githubmetadata: name: githubspec: client_secret: "my-github-secret-value" # ...
spec.client_secret
의 내용이 비밀의 내용으로 대체되었음을 확인할 수 있습니다.