InfoGrab Docs

Kubernetes에 tbot 배포

요약

이 가이드는 Kubernetes 클러스터에 머신 및 워크로드 아이덴티티 에이전트 tbot을 배포하고 인증에 클러스터의 서비스 계정 발급자 키에 대한 정적 참조를 사용하는 방법을 보여줍니다. 이 가이드에서 보여주는 설정에서 tbot은 Kubernetes 배포로 실행됩니다.

이 가이드는 Kubernetes 클러스터에 머신 및 워크로드 아이덴티티 에이전트 tbot을 배포하고 인증에 클러스터의 서비스 계정 발급자 키에 대한 정적 참조를 사용하는 방법을 보여줍니다.

작동 방식#

이 가이드에서 보여주는 설정에서 tbot은 Kubernetes 배포로 실행됩니다. 출력 자격 증명을 Kubernetes 시크릿에 작성하며, 그런 다음 자격 증명을 사용해야 하는 Pod에 마운트할 수 있습니다. tbot은 자격 증명을 생성하는 서비스와 동일한 Pod 내에서 사이드카로 실행할 수도 있지만, Kubernetes가 사이드카에 대한 지원이 제한되어 있으므로 tbot을 독립적인 배포로 실행하는 것이 좋습니다.

이 가이드에서는 kubernetes 조인 방법을 보여주며, 이 방법에서 tbot은 Kubernetes API 서버가 서명한 JSON 웹 토큰(JWT)을 제시하여 Teleport Auth Service에 아이덴티티를 증명합니다. 이 JWT에는 tbot이 실행 중인 서비스 계정, Pod 및 네임스페이스가 포함됩니다. Teleport Auth Service는 Kubernetes 클러스터의 공개 서명 키에 대해 JWT의 서명을 확인합니다.

OIDC 조인

Amazon EKS와 같은 특정 클라우드 공급자는 OIDC 서명 키를 정기적으로 순환하며, 이로 인해 이 가이드에서 만드는 static_jwks 설정이 짧은 시간 후에 유효하지 않게 됩니다.

Amazon의 Elastic Kubernetes Service(EKS), Google Kubernetes Engine(GKE) 및 Azure Kubernetes Service(AKS)와 같이 OIDC를 지원하는 Kubernetes 공급자에서는 대신 Kubernetes OIDC 조인 사용을 고려하세요.

다른 조인 방법 사용

tbot을 Teleport 클러스터에 배포할 때는 일반적으로 kubernetes 조인 방법을 사용하는 것이 좋습니다. 이는 대부분의 Kubernetes 클러스터에서 작동합니다. 다음 가이드에서는 이 조인 방법 설정을 보여줍니다.

그러나 특정 클라우드 Kubernetes 서비스를 사용할 때는 kubernetes 조인 방법 대신 해당 플랫폼과 관련된 조인 방법을 사용할 수 있습니다. 단일 조인 토큰으로 Kubernetes 클러스터 내와 동일한 플랫폼의 표준 VM에서 tbot 조인을 관리하려는 경우에 유용합니다. 이러한 서비스는 다음과 같습니다:

사전 조건#

  • A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.

  • The tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Determine the version of your Teleport cluster. The tctl and tsh clients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at /v1/webapi/find and use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:

      $ TELEPORT_DOMAIN=
      $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')"
      
    2. Follow the instructions for your platform to install tctl and tsh clients:

To check that you can connect to your Teleport cluster, sign in with tsh login, then verify that you can run tctl commands using your current credentials.

For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:

$ tsh login --proxy= --user=
$ tctl status
# Cluster  (=teleport.url=)
# Version  (=teleport.version=)
# CA pin   (=presets.ca_pin=)

If you can connect to the cluster and run the tctl status command, you can use your current credentials to run subsequent tctl commands from your workstation. If you host your own Teleport cluster, you can also run tctl commands on the computer that hosts the Teleport Auth Service for full permissions.

  • Token Request Projection을 지원하는 Kubernetes 클러스터(Kubernetes 1.20에서 일반 가용 기능으로 졸업).
  • tbot을 배포하려는 클러스터에서 리소스를 만들 수 있는 권한으로 인증된 kubectl.
  • helm CLI 도구 설치.

이 가이드의 예시는 Kubernetes 클러스터의 default 네임스페이스에 tbot 배포를 설치합니다. 사용하려는 네임스페이스에 맞게 default 참조를 조정하세요.

1단계/3단계. 봇 만들기#

Next, you need to create a Bot. A Bot is a Teleport identity for a machine or group of machines. Like users, bots have a set of roles and traits which define what they can access.

Create bot.yaml:

kind: bot
version: v1
metadata:
  # name is a unique identifier for the Bot in the cluster.
  name: example
spec:
  # roles is a list of roles to grant to the Bot. Don't worry if you don't know
  # what roles you need to specify here, the Access Guides will walk you through
  # creating and assigning roles to the already created Bot.
  roles: []

Make sure you replace example with a unique, descriptive name for your Bot.

Use tctl to apply this file:

$ tctl create bot.yaml

2단계/3단계. 조인 토큰 만들기#

다음으로 조인 토큰을 설정해야 합니다. tbot이 클러스터에 조인하는 데 사용됩니다. kubernetes 조인 방법을 사용하므로 먼저 Kubernetes 클러스터의 공개 키를 확인해야 합니다. JWT에 서명하는 데 사용되는 공개 키는 Kubernetes API 서버의 "JWKS" 엔드포인트에 노출됩니다. 그런 다음 이 공개 키를 Teleport Auth Service가 tbot이 제시한 서비스 계정 JWT가 Kubernetes 클러스터에 의해 합법적으로 서명되었는지 확인하는 데 사용할 수 있습니다.

JWKS 형식의 공개 키를 확인하려면 다음 명령을 실행합니다:

$ kubectl get --raw /openid/v1/jwks
{"keys":[--snip--]}%

spec.kubernetes.static_jwks.jwks에 JWKS 엔드포인트의 값을 삽입하여 bot-token.yaml을 만듭니다:

kind: token
version: v2
metadata:
  # name은 이 토큰을 사용하는 `tbot`에서 지정됩니다.
  name: example-bot
spec:
  roles: [Bot]
  # bot_name은 이 가이드에서 이전에 만든 봇의 이름과 일치해야 합니다.
  bot_name: example
  join_method: kubernetes
  kubernetes:
    # static_jwks는 Auth Service가 정적으로 설정된 JWKS의 공개 키를 사용하여
    # `tbot`이 제시한 JWT를 검증하도록 설정합니다.
    type: static_jwks
    static_jwks:
      jwks: |
        # curl 명령으로 반환된 데이터를 여기에 배치합니다.
        {"keys":[--snip--]}
    # allow는 Auth Service가 `tbot`의 조인 허용 여부를 결정하는 규칙을 지정합니다.
    allow:
    - service_account: "default:tbot" # service_account

tctl을 사용하여 이 파일을 적용합니다:

$ tctl create -f bot-token.yaml

3단계/3단계. tbot 배포 만들기#

이제 Teleport tbot Helm 차트를 사용하여 Kubernetes 클러스터에 tbot을 배포합니다. Helm CLI 도구에 제공된 값을 사용하여 설정됩니다.

먼저 Helm 차트의 설정 값을 보관할 tbot-values.yaml 파일을 만듭니다:

# 클러스터 이름을 Teleport 클러스터의 이름으로 교체하세요.
# 이것은 반드시 Teleport Proxy Service의 공개 주소일 필요는 없습니다.
clusterName: "example.teleport.sh"
# Teleport Proxy Service의 주소로 교체하세요.
teleportProxyAddress: "example.teleport.sh:443"
# 이전에 만든 조인 토큰의 이름과 일치하는지 확인하세요.
token: "example-bot"
FIPS 준수

기본 tbot-distroless 이미지에는 FIPS 준수 바이너리가 포함되어 있지 않습니다. FIPS 준수가 필요한 환경에서 운영하는 경우 image: public.ecr.aws/gravitational/tbot-fips-distroless를 추가로 설정하세요.

Helm 차트를 배포하기 전에 이전에 Teleport Helm 차트를 배포하지 않은 경우 CLI에 Teleport 차트 저장소를 추가해야 합니다:

$ helm repo add teleport (=teleport.helm_repo_url=)
$ helm repo update

이제 이전에 만든 설정을 사용하여 tbot Helm 차트를 배포할 수 있으며, tbot을 배포할 네임스페이스를 지정해야 합니다:

$ helm install tbot teleport/tbot \
  --namespace default \
  --values tbot-values.yaml

kubectl을 사용하여 배포가 정상인지 확인합니다:

$ kubectl describe deployment/tbot
$ kubectl logs deployment/tbot

이 작업이 완료되면 tbot이 클러스터에 성공적으로 배포됩니다.

다음 단계: 인프라 접근 설정#

기본적으로 tbot Helm 차트는 tbot이 배포된 네임스페이스에서 tbot-out이라는 Kubernetes 시크릿에 아이덴티티 파일을 작성하도록 설정됩니다.

이 아이덴티티 파일은 다른 Pod에 마운트하여 tsh 또는 tctl과 함께 사용하여 Teleport 클러스터에 접근하고 설정할 수 있습니다. 예를 들면:

apiVersion: v1
kind: Pod
metadata:
  name: tsh
  namespace: default
spec:
  containers:
    - name: tsh
      image: public.ecr.aws/gravitational/teleport-distroless:(=teleport.version=)
      command:
        - tsh
      args:
       - -i
       - /identity-output/identity
       - --proxy
       - example.teleport.sh:443
       - ls
      volumeMounts:
        - name: identity-output
          mountPath: /identity-output
  volumes:
    - name: identity-output
      secret:
        secretName: tbot-out

다른 유형의 접근을 위해 tbot을 사용하려는 경우 Helm 차트의 services 값을 사용하고 defaultOutput.enabledfalse로 설정하여 출력 유형을 재정의할 수 있습니다.

사용 사례에 맞게 tbot을 설정하는 방법에 대한 자세한 내용은 접근 가이드 중 하나를 따르세요.

추가 정보#

Kubernetes에 tbot 배포

원문 보기
요약

이 가이드는 Kubernetes 클러스터에 머신 및 워크로드 아이덴티티 에이전트 tbot을 배포하고 인증에 클러스터의 서비스 계정 발급자 키에 대한 정적 참조를 사용하는 방법을 보여줍니다. 이 가이드에서 보여주는 설정에서 tbot은 Kubernetes 배포로 실행됩니다.

이 가이드는 Kubernetes 클러스터에 머신 및 워크로드 아이덴티티 에이전트 tbot을 배포하고 인증에 클러스터의 서비스 계정 발급자 키에 대한 정적 참조를 사용하는 방법을 보여줍니다.

작동 방식#

이 가이드에서 보여주는 설정에서 tbot은 Kubernetes 배포로 실행됩니다. 출력 자격 증명을 Kubernetes 시크릿에 작성하며, 그런 다음 자격 증명을 사용해야 하는 Pod에 마운트할 수 있습니다. tbot은 자격 증명을 생성하는 서비스와 동일한 Pod 내에서 사이드카로 실행할 수도 있지만, Kubernetes가 사이드카에 대한 지원이 제한되어 있으므로 tbot을 독립적인 배포로 실행하는 것이 좋습니다.

이 가이드에서는 kubernetes 조인 방법을 보여주며, 이 방법에서 tbot은 Kubernetes API 서버가 서명한 JSON 웹 토큰(JWT)을 제시하여 Teleport Auth Service에 아이덴티티를 증명합니다. 이 JWT에는 tbot이 실행 중인 서비스 계정, Pod 및 네임스페이스가 포함됩니다. Teleport Auth Service는 Kubernetes 클러스터의 공개 서명 키에 대해 JWT의 서명을 확인합니다.

OIDC 조인

Amazon EKS와 같은 특정 클라우드 공급자는 OIDC 서명 키를 정기적으로 순환하며, 이로 인해 이 가이드에서 만드는 static_jwks 설정이 짧은 시간 후에 유효하지 않게 됩니다.

Amazon의 Elastic Kubernetes Service(EKS), Google Kubernetes Engine(GKE) 및 Azure Kubernetes Service(AKS)와 같이 OIDC를 지원하는 Kubernetes 공급자에서는 대신 Kubernetes OIDC 조인 사용을 고려하세요.

다른 조인 방법 사용

tbot을 Teleport 클러스터에 배포할 때는 일반적으로 kubernetes 조인 방법을 사용하는 것이 좋습니다. 이는 대부분의 Kubernetes 클러스터에서 작동합니다. 다음 가이드에서는 이 조인 방법 설정을 보여줍니다.

그러나 특정 클라우드 Kubernetes 서비스를 사용할 때는 kubernetes 조인 방법 대신 해당 플랫폼과 관련된 조인 방법을 사용할 수 있습니다. 단일 조인 토큰으로 Kubernetes 클러스터 내와 동일한 플랫폼의 표준 VM에서 tbot 조인을 관리하려는 경우에 유용합니다. 이러한 서비스는 다음과 같습니다:

사전 조건#

  • A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.

  • The tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Determine the version of your Teleport cluster. The tctl and tsh clients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at /v1/webapi/find and use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:

      $ TELEPORT_DOMAIN=
      $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')"
      
    2. Follow the instructions for your platform to install tctl and tsh clients:

To check that you can connect to your Teleport cluster, sign in with tsh login, then verify that you can run tctl commands using your current credentials.

For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:

$ tsh login --proxy= --user=
$ tctl status
# Cluster  (=teleport.url=)
# Version  (=teleport.version=)
# CA pin   (=presets.ca_pin=)

If you can connect to the cluster and run the tctl status command, you can use your current credentials to run subsequent tctl commands from your workstation. If you host your own Teleport cluster, you can also run tctl commands on the computer that hosts the Teleport Auth Service for full permissions.

  • Token Request Projection을 지원하는 Kubernetes 클러스터(Kubernetes 1.20에서 일반 가용 기능으로 졸업).
  • tbot을 배포하려는 클러스터에서 리소스를 만들 수 있는 권한으로 인증된 kubectl.
  • helm CLI 도구 설치.

이 가이드의 예시는 Kubernetes 클러스터의 default 네임스페이스에 tbot 배포를 설치합니다. 사용하려는 네임스페이스에 맞게 default 참조를 조정하세요.

1단계/3단계. 봇 만들기#

Next, you need to create a Bot. A Bot is a Teleport identity for a machine or group of machines. Like users, bots have a set of roles and traits which define what they can access.

Create bot.yaml:

kind: bot
version: v1
metadata:
  # name is a unique identifier for the Bot in the cluster.
  name: example
spec:
  # roles is a list of roles to grant to the Bot. Don't worry if you don't know
  # what roles you need to specify here, the Access Guides will walk you through
  # creating and assigning roles to the already created Bot.
  roles: []

Make sure you replace example with a unique, descriptive name for your Bot.

Use tctl to apply this file:

$ tctl create bot.yaml

2단계/3단계. 조인 토큰 만들기#

다음으로 조인 토큰을 설정해야 합니다. tbot이 클러스터에 조인하는 데 사용됩니다. kubernetes 조인 방법을 사용하므로 먼저 Kubernetes 클러스터의 공개 키를 확인해야 합니다. JWT에 서명하는 데 사용되는 공개 키는 Kubernetes API 서버의 "JWKS" 엔드포인트에 노출됩니다. 그런 다음 이 공개 키를 Teleport Auth Service가 tbot이 제시한 서비스 계정 JWT가 Kubernetes 클러스터에 의해 합법적으로 서명되었는지 확인하는 데 사용할 수 있습니다.

JWKS 형식의 공개 키를 확인하려면 다음 명령을 실행합니다:

$ kubectl get --raw /openid/v1/jwks
{"keys":[--snip--]}%

spec.kubernetes.static_jwks.jwks에 JWKS 엔드포인트의 값을 삽입하여 bot-token.yaml을 만듭니다:

kind: token
version: v2
metadata:
  # name은 이 토큰을 사용하는 `tbot`에서 지정됩니다.
  name: example-bot
spec:
  roles: [Bot]
  # bot_name은 이 가이드에서 이전에 만든 봇의 이름과 일치해야 합니다.
  bot_name: example
  join_method: kubernetes
  kubernetes:
    # static_jwks는 Auth Service가 정적으로 설정된 JWKS의 공개 키를 사용하여
    # `tbot`이 제시한 JWT를 검증하도록 설정합니다.
    type: static_jwks
    static_jwks:
      jwks: |
        # curl 명령으로 반환된 데이터를 여기에 배치합니다.
        {"keys":[--snip--]}
    # allow는 Auth Service가 `tbot`의 조인 허용 여부를 결정하는 규칙을 지정합니다.
    allow:
    - service_account: "default:tbot" # service_account

tctl을 사용하여 이 파일을 적용합니다:

$ tctl create -f bot-token.yaml

3단계/3단계. tbot 배포 만들기#

이제 Teleport tbot Helm 차트를 사용하여 Kubernetes 클러스터에 tbot을 배포합니다. Helm CLI 도구에 제공된 값을 사용하여 설정됩니다.

먼저 Helm 차트의 설정 값을 보관할 tbot-values.yaml 파일을 만듭니다:

# 클러스터 이름을 Teleport 클러스터의 이름으로 교체하세요.
# 이것은 반드시 Teleport Proxy Service의 공개 주소일 필요는 없습니다.
clusterName: "example.teleport.sh"
# Teleport Proxy Service의 주소로 교체하세요.
teleportProxyAddress: "example.teleport.sh:443"
# 이전에 만든 조인 토큰의 이름과 일치하는지 확인하세요.
token: "example-bot"
FIPS 준수

기본 tbot-distroless 이미지에는 FIPS 준수 바이너리가 포함되어 있지 않습니다. FIPS 준수가 필요한 환경에서 운영하는 경우 image: public.ecr.aws/gravitational/tbot-fips-distroless를 추가로 설정하세요.

Helm 차트를 배포하기 전에 이전에 Teleport Helm 차트를 배포하지 않은 경우 CLI에 Teleport 차트 저장소를 추가해야 합니다:

$ helm repo add teleport (=teleport.helm_repo_url=)
$ helm repo update

이제 이전에 만든 설정을 사용하여 tbot Helm 차트를 배포할 수 있으며, tbot을 배포할 네임스페이스를 지정해야 합니다:

$ helm install tbot teleport/tbot \
  --namespace default \
  --values tbot-values.yaml

kubectl을 사용하여 배포가 정상인지 확인합니다:

$ kubectl describe deployment/tbot
$ kubectl logs deployment/tbot

이 작업이 완료되면 tbot이 클러스터에 성공적으로 배포됩니다.

다음 단계: 인프라 접근 설정#

기본적으로 tbot Helm 차트는 tbot이 배포된 네임스페이스에서 tbot-out이라는 Kubernetes 시크릿에 아이덴티티 파일을 작성하도록 설정됩니다.

이 아이덴티티 파일은 다른 Pod에 마운트하여 tsh 또는 tctl과 함께 사용하여 Teleport 클러스터에 접근하고 설정할 수 있습니다. 예를 들면:

apiVersion: v1
kind: Pod
metadata:
  name: tsh
  namespace: default
spec:
  containers:
    - name: tsh
      image: public.ecr.aws/gravitational/teleport-distroless:(=teleport.version=)
      command:
        - tsh
      args:
       - -i
       - /identity-output/identity
       - --proxy
       - example.teleport.sh:443
       - ls
      volumeMounts:
        - name: identity-output
          mountPath: /identity-output
  volumes:
    - name: identity-output
      secret:
        secretName: tbot-out

다른 유형의 접근을 위해 tbot을 사용하려는 경우 Helm 차트의 services 값을 사용하고 defaultOutput.enabledfalse로 설정하여 출력 유형을 재정의할 수 있습니다.

사용 사례에 맞게 tbot을 설정하는 방법에 대한 자세한 내용은 접근 가이드 중 하나를 따르세요.

추가 정보#