Infograb logo
비밀에서 값 조회하기

이 가이드는 Teleport Kubernetes 운영자 CR 대신 Kubernetes Secrets에 민감한 정보를 저장하는 방법을 설명합니다.

작동 방식

일부 Teleport 리소스는 민감한 값을 포함할 수 있습니다. 선택한 CR 필드는 기존 Kubernetes 비밀을 참조할 수 있으며, 운영자는 조정할 때 비밀에서 값을 검색합니다.

현재 GithubConnector와 OIDCConnector의 client_secret 필드만 비밀 조회를 지원합니다.

필수 조건

이 가이드를 따르려면 다음이 필요합니다:

  • 실행 중인 Teleport 클러스터
  • 기능하는 Teleport Kubernetes 운영자 설정
  • 운영자 네임스페이스에서 CR 및 Secrets를 편집할 수 있는 Kubernetes 권한
  • 로컬에 설치되어 Kubernetes 클러스터에 구성된 kubectl
  • 운영자가 관리할 수 있는 작동 중인 GitHub 또는 OIDC 커넥터
  • Teleport 클러스터에 로그인한 tctltsh 설치

중요한 고려 사항

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.yaml
secret/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.yaml
teleportgithubconnector.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 github
version: v3kind: githubmetadata: name: githubspec: client_secret: "my-github-secret-value" # ...

spec.client_secret 의 내용이 비밀의 내용으로 대체되었음을 확인할 수 있습니다.

Teleport 원문 보기