Infograb logo
이메일로 텔레포트 접근 요청

이 가이드에서는 텔레포트를 설정하여 Just-in-Time Access Request 알림을 사용자에게 이메일로 전송하는 방법을 설명합니다. 모든 조직이 최소한 일부 통신에 이메일을 사용하므로 텔레포트의 이메일 플러그인은 접근 요청을 기존 워크플로에 통합하는 데 간단하게 만들며, 생산성을 저하시키지 않으면서 보안 모범 사례를 구현할 수 있게 해줍니다.

전제 조건

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.

  • tctl 관리 도구 및 tsh 클라이언트 도구 버전 >= 16.2.0.

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하세요.

권장 사항: 짧은 수명의 Teleport 자격 증명을 플러그인에 제공하기 위해 머신 ID를 구성하십시오. 이 가이드를 따르기 전에 tbot 바이너리를 귀하의 인프라에서 실행하기 위해 머신 ID 배포 가이드를 따르십시오.

  • SMTP 서비스에 대한 접근. 텔레포트 이메일 플러그인은 Mailgun 또는 사용자 이름과 비밀번호를 통해 인증하는 일반 SMTP 서비스를 지원합니다.
  • 이메일 플러그인을 실행할 리눅스 호스트나 쿠버네티스 클러스터가 필요합니다.
이메일 계정 보호하기

텔레포트 플러그인은 SMTP 서비스에 인증하기 위해 사용자 이름과 비밀번호를 사용해야 합니다. 이러한 자격 증명이 유출될 위험을 완화하기 위해 텔레포트 플러그인 전용 이메일 계정을 설정하고 비밀번호를 주기적으로 변경해야 합니다.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

1단계/7단계. RBAC 리소스 정의

이메일 플러그인을 설정하기 전에 텔레포트 클러스터에서 역할 접근 요청을 활성화하세요.

For the purpose of this guide, we will define an editor-requester role, which
can request the built-in editor role, and an editor-reviewer role that can
review requests for the editor role.

editor-request-rbac.yaml라는 파일을 생성하고 다음 내용을 추가하세요:

kind: role  
version: v5  
metadata:  
  name: editor-reviewer  
spec:  
  allow:  
    review_requests:  
      roles: ['editor']  
---  
kind: role  
version: v5  
metadata:  
  name: editor-requester  
spec:  
  allow:  
    request:  
      roles: ['editor']  
      thresholds:  
        - approve: 1  
          deny: 1  

정의한 역할을 생성하세요:

tctl create -f editor-request-rbac.yaml
role 'editor-reviewer' has been created role 'editor-requester' has been created

editor-requester 역할을 가진 사용자들로부터 요청을 검토할 수 있도록
editor-reviewer 역할을 자신의 계정에 할당하세요.

editor-reviewer 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

  1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},editor-reviewer"
  3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

  2. github.yaml을 편집하고 teams_to_roles 섹션에 editor-reviewer을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - editor-reviewer
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

  2. saml.yaml을 편집하고 attributes_to_roles 섹션에 editor-reviewer을 추가합니다.

    이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - editor-reviewer
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

  2. oidc.yaml을 편집하고 claims_to_roles 섹션에 editor-reviewer을 추가합니다.

    이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - editor-reviewer
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

editor-requester 역할을 가진 사용자 myuser를 생성하세요. 이 사용자는
editor 역할을 요청하지 않는 한 클러스터 구성을 편집할 수 없습니다:

tctl users add myuser --roles=editor-requester

tctl은 터미널에 초대 URL을 출력할 것입니다. URL을 방문하고
myuser로 처음 로그인하여 Teleport 클러스터에 대해 설정된 자격 증명을 등록하세요.

이 가이드의 후반부에서 myusereditor 역할을 요청할 것이며,
이를 통해 요청을 검토할 수 있습니다.

2단계/7단계. 텔레포트 이메일 플러그인 설치

로컬 SMTP 서버를 사용하여 플러그인을 테스트하는 경우, 플러그인이 SMTP 서버에 연결하고 이메일을 보내기 위해 필요한 DNS 조회를 수행할 수 있도록 로컬 머신에 플러그인을 설치해야 합니다.

당신의 텔레포트 클러스터는 플러그인에 대해 DNS 조회를 수행할 필요가 없습니다. 플러그인은 텔레포트 프록시 서비스 또는 텔레포트 인증 서비스에 다이얼을 겁니다.

액세스 요청 플러그인은 amd64arm64 Linux 이진 파일로 다운로드할 수 있습니다. ARCH를 필요로 하는 버전으로 바꿔주세요.

curl -L -O https://cdn.teleport.dev/teleport-access-email-v16.2.0-linux-ARCH-bin.tar.gz
tar -xzf teleport-access-email-v16.2.0-linux-ARCH-bin.tar.gz
cd teleport-access-email
sudo ./install

이진 파일이 설치되었는지 확인하세요:

teleport-email version
teleport-email v16.2.0 git:teleport-email-v16.2.0-fffffffff go1.22
docker pull public.ecr.aws/gravitational/teleport-plugin-email:16.2.0

다음 명령을 실행하여 플러그인이 설치되었는지 확인하세요:

docker run public.ecr.aws/gravitational/teleport-plugin-email:16.2.0 version
teleport-email v16.2.0 git:teleport-email-v16.2.0-api/14.0.0-gd1e081e 1.22

사용 가능한 태그 목록은 Amazon ECR Public Gallery를 방문하세요.

소스에서 설치하려면 gitgo가 설치되어 있어야 합니다. Go가 설치되어 있지 않다면, Go 다운로드 페이지를 방문하세요.

git clone https://github.com/gravitational/teleport -b branch/v16
cd teleport/integrations/access/email
git checkout 16.2.0
make

teleport-email 이진 파일을 PATH로 이동하세요.

이진 파일이 설치되었는지 확인하세요:

teleport-email version
teleport-email v16.2.0 git:teleport-email-v16.2.0-fffffffff go1.22

Helm이 Teleport Helm 저장소에 호스팅된 차트를 설치할 수 있도록 허용하세요:

helm repo add teleport https://charts.releases.teleport.dev

원격 저장소에서 차트의 캐시를 업데이트하세요:

helm repo update

3단계/7단계. 플러그인에 대한 사용자 및 역할 생성

Teleport의 Access Request 플러그인은 Access Requests를 나열하고 읽을 수 있는 권한을 가진 사용자로 Teleport 클러스터에 인증합니다. 이렇게 하면 플러그인이 Teleport Auth Service에서 Access Requests를 검색하고 이를 검토자에게 제시할 수 있습니다.

access-plugin이라는 사용자 및 역할을 정의하려면 access-plugin.yaml이라는 파일에 다음 내용을 추가합니다:

kind: role
version: v5
metadata:
  name: access-plugin
spec:
  allow:
    rules:
      - resources: ['access_request']
        verbs: ['list', 'read']
      - resources: ['access_plugin_data']
        verbs: ['update']
---
kind: user
metadata:
  name: access-plugin
spec:
  roles: ['access-plugin']
version: v2

사용자와 역할을 생성합니다:

tctl create -f access-plugin.yaml

As with all Teleport users, the Teleport Auth Service authenticates the
access-plugin 사용자를 발급하는 짧은 수명의 TLS 자격 증명을 통해 인증합니다. 이 경우, 우리는 임시 사용자를 통해
access-plugin 역할 및 사용자를 가장하여 자격 증명을 수동으로 요청해야 합니다.

자체 호스팅 Teleport Enterprise 배포를 실행하고 Auth Service 호스트에서
tctl을 사용하는 경우, 이미 임시 권한이 있습니다.

access-plugin에 대한 임시 권한을 부여하려면,
access-plugin-impersonator라는 역할을 정의하며 다음 YAML 문서를
access-plugin-impersonator.yaml라는 파일에 붙여넣습니다:

kind: role
version: v5
metadata:
  name: access-plugin-impersonator
spec:
  allow:
    impersonate:
      roles:
      - access-plugin
      users:
      - access-plugin

access-plugin-impersonator 역할을 생성합니다:

tctl create -f access-plugin-impersonator.yaml

기계 ID로 플러그인에 대한 신원 파일을 제공하는 경우,
기계 ID 봇 사용자에게 access-plugin 역할을 부여하십시오. 그렇지 않으면,
access-plugin 역할 및 사용자에 대한 자격 증명을 생성하는 데 사용할 사용자에게 이 역할을 부여하십시오:

access-plugin-impersonator 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

  1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},access-plugin-impersonator"
  3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

  2. github.yaml을 편집하고 teams_to_roles 섹션에 access-plugin-impersonator을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - access-plugin-impersonator
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

  2. saml.yaml을 편집하고 attributes_to_roles 섹션에 access-plugin-impersonator을 추가합니다.

    이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - access-plugin-impersonator
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

  2. oidc.yaml을 편집하고 claims_to_roles 섹션에 access-plugin-impersonator을 추가합니다.

    이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - access-plugin-impersonator
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

이제 access-plugin 역할 및 사용자의 서명된 인증서를 생성할 수 있습니다.

4단계/7단계. 접근 플러그인 신원 내보내기

플러그인에 텔레포트 신원 파일에 대한 접근을 부여하세요. 우리는 이를 위해 짧은 수명의 신원 파일을 생성하는 머신 ID를 사용하는 것을 추천합니다. 누출될 경우 덜 위험합니다. 그러나 데모 배포에서는 tctl를 사용하여 긴 수명의 신원 파일을 생성할 수 있습니다.

tbot을 구성하여 the plugin에 필요한 자격증명을 생성하는 출력을 만듭니다. the plugin가 Teleport API에 접근할 것이므로, 올바른 출력 유형은 identity입니다.

이 가이드에서는 directory 대상을 사용합니다. 이를 통해 자격증명이 디스크의 지정된 디렉토리에 기록됩니다. 이 디렉토리는 tbot이 실행되는 리눅스 사용자가 쓸 수 있고, the plugin가 실행될 리눅스 사용자가 읽을 수 있어야 합니다.

tbot 구성을 수정하여 identity 출력을 추가하세요.

리눅스 서버에서 tbot을 실행하는 경우, /opt/machine-id 디렉토리에 자격증명 파일을 쓰기 위해 directory 출력을 사용하세요:

outputs:
- type: identity
  destination:
    type: directory
    # 이 가이드에서는 /opt/machine-id를 목적지 디렉토리로 사용합니다.
    # 필요에 따라 사용자 정의할 수 있습니다. 여러 출력은 동일한
    # 대상을 공유할 수 없습니다.
    path: /opt/machine-id

Kubernetes에서 tbot을 실행하는 경우, 대신 Kubernetes 비밀에 자격증명 파일을 기록하세요:

outputs:
  - type: identity
    destination:
      type: kubernetes_secret
      name: teleport-plugin-email-identity

tbot을 백그라운드 서비스로 운영하는 경우, 이를 재시작하세요. tbot을 원샷 모드로 실행하는 경우 지금 실행하세요.

이제 /opt/machine-id 아래에 identity 파일이 보이거나 teleport-plugin-email-identity이라는 이름의 Kubernetes 비밀이 보일 것입니다. 이는 the plugin가 Teleport Auth Service와 인증하는 데 필요한 개인 키와 서명된 인증서를 포함하고 있습니다.

모든 Teleport 사용자와 마찬가지로, access-plugin는 Teleport 클러스터에 연결하기 위해 서명된 자격 증명이 필요합니다. 이러한 자격 증명을 요청하기 위해 tctl auth sign 명령을 사용합니다.

다음의 tctl auth sign 명령은 access-plugin 사용자로 가장하고, 서명된 자격 증명을 생성하며, 로컬 디렉토리에 ID 파일을 작성합니다:

tctl auth sign --user=access-plugin --out=identity

plugin는 TLS를 통해 Teleport Auth Service의 gRPC 엔드포인트에 연결합니다.

ID 파일인 identity는 TLS 및 SSH 자격 증명을 포함합니다. plugin는 SSH 자격 증명을 사용하여 Proxy Service에 연결하고, 이 Proxy Service는 Auth Service에 대한 리버스 터널 연결을 설정합니다. plugin는 이 리버스 터널과 TLS 자격 증명을 사용하여 Auth Service의 gRPC 엔드포인트에 연결합니다.

기본적으로, tctl auth sign은 비교적 짧은 수명의 인증서를 생성합니다. 프로덕션 배포의 경우, Machine ID를 사용하여 플러그인에 대해 인증서를 프로그램matically Issuing과 Renew하는 것을 권장합니다. 우리의 Machine ID 시작 가이드를 참조하여 자세히 알아보세요.

기존 자격 증명보다 유효 기간이 긴 인증서를 발급할 수 없습니다. 예를 들어, 1000시간의 TTL을 가진 인증서를 발급하려면 최소한 1000시간 동안 유효한 세션으로 로그인해야 합니다. 즉, 사용자는 최소 1000시간(60000분)의 max_session_ttl을 허용하는 역할을 가지고 있어야 하며, 로그인할 때 --ttl을 지정해야 합니다:

tsh login --proxy=teleport.example.com --ttl=60060

Linux 서버에서 plugin를 실행하는 경우, plugin를 위한 인증서 파일을 보관할 데이터 디렉토리를 만드세요:

sudo mkdir -p /var/lib/teleport/api-credentials
sudo mv identity /var/lib/teleport/plugins/api-credentials

Kubernetes에서 plugin를 실행하는 경우, Teleport ID 파일을 포함하는 Kubernetes 비밀을 생성하세요:

kubectl -n teleport create secret generic --from-file=identity teleport-plugin-email-identity

Teleport 자격 증명이 만료되면, 다시 tctl auth sign 명령을 실행하여 갱신해야 합니다.

5단계/7단계. 플러그인 구성

이 시점에서 이메일 플러그인이 텔레포트에 연결하는 데 사용할 자격 증명을 생성했습니다. 이제 이러한 자격 증명을 사용하여 텔레포트로부터 접근 요청 알림을 수신하고 이를 선택한 수신자에게 이메일로 전송하도록 플러그인을 구성할 것입니다.

구성 파일 생성

텔레포트 이메일 플러그인은 TOML 형식의 구성 파일을 사용합니다. 다음 명령어를 실행하여 보일러플레이트 구성을 생성하세요:

teleport-email configure | sudo tee /etc/teleport-email.toml

이메일 플러그인 Helm Chart는 YAML 값 파일을 사용하여 플러그인을 구성합니다. 로컬 작업 공간에서, 다음 예제를 기반으로 teleport-email-helm.yaml라는 파일을 생성하세요:

(!examples/resources/plugins/teleport-email-helm.yaml!)

구성 파일 편집

환경에 맞게 구성 파일을 편집하세요. 아래에 각 값을 설정하는 방법을 보여드리겠습니다.

[teleport]

addr: Teleport Proxy Service 또는 Teleport Enterprise Cloud 테넌트의 호스트 이름과 HTTPS 포트를 포함하세요 (예: teleport.example.com:443 또는 mytenant.teleport.sh:443).

identity: 이전에 내보낸 식별자 파일의 경로를 입력하세요.

client_key, client_crt, root_cas: 이 구성에서는 사용하지 않으므로 주석 처리하세요.

address: Teleport Proxy Service 또는 Teleport Enterprise Cloud 테넌트의 호스트 이름과 HTTPS 포트를 포함하세요 (예: teleport.example.com:443 또는 mytenant.teleport.sh:443).

identitySecretName: 이전에 생성한 Kubernetes 비밀의 이름으로 identitySecretName 필드를 입력하세요.

identitySecretPath: Kubernetes 비밀 내의 식별자 파일 경로로 identitySecretPath 필드를 입력하세요. 위의 지침을 따랐다면, 이는 identity가 될 것입니다.

신뢰할 수 있는 링크를 통해 tbot 바이너리를 사용하여 플러그인에 자격 증명을 제공하는 경우,
identity의 값이 구성한 tbot이 생성하도록 설정한 정체성 파일의 경로와 동일한지 확인하세요.
/opt/machine-id/identity.

플러그인이 주기적으로 정체성 파일을 다시 로드하도록 구성하여,
만료된 자격 증명으로 Teleport Auth Service에 연결을 시도하지 않도록 합니다.

구성의 teleport 섹션에 다음을 추가하세요:

refresh_identity = true

[mailgun] 또는 [smtp]

Mailgun 또는 SMTP 서비스를 사용하는지에 따라 SMTP 서비스에 대한 자격 증명을 제공하세요.

이메일 플러그인을 리눅스 호스트에 배포하는 경우:

  1. mailgun 섹션에서 domain을 Mailgun 계정의 도메인 이름 및 서브도메인에 할당하세요.
  2. mailgun.private_key를 Mailgun 비밀 키에 할당하세요.

이메일 플러그인을 쿠버네티스에 배포하는 경우:

  1. Mailgun 비밀 키를 mailgun-private-key라는 로컬 파일에 작성하세요.
  2. 파일을 기반으로 쿠버네티스 비밀을 생성합니다:
kubectl -n teleport create secret generic mailgun-private-key --from-file=mailgun-private-key
  1. mailgun.privateKeyFromSecretmailgun-private-key에 할당하세요.

host를 SMTP 서비스의 완전한 도메인 이름에 할당하며, URL 스킴과 포트는 제외하세요. (테스트를 위해 로컬 SMTP 서버를 사용하는 경우 host"localhost"를 사용하세요.) port에는 SMTP 서비스의 포트를 할당하세요.

이메일 플러그인을 리눅스 호스트에서 실행하는 경우 usernamepassword를 입력하세요.

비밀번호를 별도의 파일에 저장하고 password_file을 파일의 경로에 할당할 수도 있습니다. 플러그인은 파일을 읽고 파일의 내용을 비밀번호로 사용합니다.

이메일 플러그인을 쿠버네티스에 배포하는 경우:

  1. SMTP 서비스의 비밀번호를 smtp-password.txt라는 로컬 파일에 작성하세요.
  2. 파일을 기반으로 쿠버네티스 비밀을 생성합니다:
kubectl -n teleport create secret generic smtp-password --from-file=smtp-password
  1. smtp.passwordFromSecretsmtp-password에 할당하세요.

신뢰할 수 있는 내부 SMTP 서버에 대해 이메일 플러그인을 테스트하고 싶고 TLS를 사용하지 않으려는 경우(예: 개발 머신의 로컬 SMTP 서버) starttls_policy 설정을 disabled(항상 TLS 비활성화) 또는 opportunistic(서버가 STARTTLS 확장을 광고하지 않으면 TLS 비활성화)로 설정할 수 있습니다. 기본값은 항상 TLS를 적용하는 것이며, 위험을 이해하지 않는 한 이 설정을 비워 두는 것이 좋습니다.

쿠버네티스 배포의 경우, starttls_policy는 이메일 플러그인에 대한 Helm 값 파일에서 smtp.starttlsPolicy라고 합니다.

[delivery]

sender를 텔레포트 플러그인이 메시지를 보내고 싶은 이메일 주소로 할당하세요.

[role_to_recipients]

role_to_recipients 맵(roleToRecipients는 Helm 사용자용)은 사용자가 특정 역할에 대한 접근을 요청할 때 이메일 플러그인이 알릴 수신자를 구성합니다. 플러그인이 Auth 서비스로부터 접근 요청을 수신하면 요청된 역할을 조회하고 알릴 수신자를 식별합니다.

다음은 role_to_recipients 맵의 예입니다:

[role_to_recipients]
"*" = ["security@example.com", "executive-team@example.com"]
"dev" = "eng@example.com"
"dba" = "mallory@example.com"
roleToRecipients:
  "*": ["security@example.com", "executive-team@example.com"]
  "dev": "eng@example.com"
  "dba": "mallory@example.com"

role_to_recipients 맵에서 각 키는 텔레포트 역할의 이름이며, 각 값은 플러그인이 해당 역할에 대한 접근 요청을 수신할 때 이메일을 보낼 수신자를 구성합니다. 값은 단일 문자열 또는 문자열 배열일 수 있으며, 각 문자열은 이메일 주소여야 합니다.

role_to_recipients 맵에는 "*" 에 대한 항목도 포함되어야 하며, 해당 플러그인은 주어진 역할 이름과 일치하는 항목이 없으면 이를 조회합니다. 위의 예에서 devdba가 아닌 역할에 대한 요청은 security@example.comexecutive-team@example.com에게 알립니다.

사용자는 접근 요청을 생성할 때 추천 리뷰어를 제안할 수 있습니다. 예를 들어:

tsh request create --roles=dbadmin --reviewers=alice@example.com,ivan@example.com

접근 요청에 추천 리뷰어가 포함되면 이메일 플러그인은 이를 수신자 목록에 추가합니다. 추천 리뷰어가 이메일 주소인 경우, 플러그인은 role_to_recipients에 구성된 수신자와 함께 해당 수신자에게 메시지를 보냅니다.

이메일 플러그인을 구성하여 사용자가 editor 역할을 요청할 때 알림을 받을 수 있도록 하려면, role_to_recipients 구성에 다음을 추가하세요. YOUR_EMAIL_ADDRESS를 적절한 주소로 교체하세요:

[role_to_recipients]
"*" = "YOUR_EMAIL_ADDRESS"
"editor" = "YOUR_EMAIL_ADDRESS"
roleToRecipients:
  "*": "YOUR_EMAIL_ADDRESS"
  "editor": "YOUR_EMAIL_ADDRESS"

역할-수신자 매핑을 사용할 계획이 없다면, delivery.recipients 필드를 사용하여 모든 접근 요청 이벤트에 대해 정적 수신자 목록에 알리도록 텔레포트 이메일 플러그인을 구성할 수 있습니다:

[delivery]
recipients = ["eng@exmaple.com", "dev@example.com"]
delivery:
  recipients: ["eng@exmaple.com", "dev@example.com"]

delivery.recipients를 사용하는 경우 role_to_recipients 구성 섹션을 제거해야 합니다. 내부적으로 delivery.recipients는 수신자 목록을 와일드카드 값 "*" 아래의 role_to_recipients 매핑에 할당합니다.

구성은 다음과 유사해야 합니다:

# /etc/teleport-email.toml
[teleport]
addr = "example.com:443"
identity = "/var/lib/teleport/plugins/email/identity"
refresh_identity = true

[mailgun]
domain = "sandbox123abc.mailgun.org" 
private_key = "xoxb-fakekey62b0eac53565a38c8cc0316f6"                                     

# 또는, SMTP 서버 자격 증명을 사용할 수 있습니다:
#
# [smtp]
# host = "smtp.gmail.com"
# port = 587
# username = "username@gmail.com"
# password = ""
# password_file = "/var/lib/teleport/plugins/email/smtp_password"

[delivery]
sender = "noreply@example.com" 

[role_to_recipients]
"*" = "eng@example.com"
"editor" = ["admin@example.com", "execs@example.com"]

[log]
output = "stderr" # 로거 출력. "stdout", "stderr" 또는 "/var/lib/teleport/email.log" 중 하나가 될 수 있습니다.
severity = "INFO" # 로거 심각도. "INFO", "ERROR", "DEBUG" 또는 "WARN"이 될 수 있습니다.
# teleport-email-helm.yaml
teleport:
  address: "teleport.example.com:443"
  identitySecretName: teleport-plugin-email-identity
  identitySecretPath: identity

mailgun:
  domain: "sandbox123abc.mailgun.org" 
  privateKeyFromSecret: "mailgun-private-key"                                     
# 또는, SMTP 서버 자격 증명을 사용할 수 있습니다:
#
# smtp:
#   host: "smtp.gmail.com"
#   port: 587
#   username: "username@gmail.com"
#   passwordFromSecret: "smtp-password"

delivery:
  sender: "noreply@example.com" 

roleToRecipients:
  "*": "eng@example.com"
  "editor": ["admin@example.com", "execs@example.com"]

6단계/7단계. 이메일 플러그인 테스트

구성을 마친 후, 이제 플러그인을 실행하고 이메일 기반 접근 요청 흐름을 테스트할 수 있습니다:

teleport-email start

모든 것이 예상대로 작동한다면 로그 출력은 다음과 같아야 합니다:

teleport-email start
INFO Starting Teleport Access Email Plugin (): email/app.go:80INFO Plugin is ready email/app.go:101

플러그인을 시작하세요:

docker run -v <path-to-config>:/etc/teleport-email.toml public.ecr.aws/gravitational/teleport-plugin-email:16.2.0 start

플러그인을 설치하세요:

helm upgrade --install teleport-plugin-email teleport/teleport-plugin-email --values teleport-email-helm.yaml

플러그인의 로그를 검사하려면 다음 명령을 사용하세요:

kubectl logs deploy/teleport-plugin-email

디버그 로그는 텔레포트 이메일 플러그인에 대한 teleport-email-helm.yaml에서 log.severityDEBUG로 설정하고 위에서 helm upgrade ... 명령을 다시 실행하여 활성화할 수 있습니다. 그런 다음 다음 명령으로 플러그인을 재시작할 수 있습니다:

kubectl rollout restart deployment teleport-plugin-email

접근 요청 생성

Teleport 관리자는 tctl을 사용하여 다른 사용자의 액세스 요청을 생성할 수 있습니다:

tctl request create myuser --roles=editor

사용자는 tsh를 사용하여 액세스 요청을 생성하고 승인된 역할로 로그인할 수 있습니다:

tsh request create --roles=editor
요청 승인 중... (id: 8f77d2d1-2bbf-4031-a300-58926237a807)

사용자는 "액세스 요청" 탭을 방문하고 "새 요청"을 클릭하여 웹 UI를 사용하여 액세스를 요청할 수 있습니다:

앞서 구성한 수신자는 이메일로 요청 알림을 받아야 합니다.

요청 해결

접근 요청 메시지를 수신하면 링크를 클릭하여 Teleport를 방문하고 요청을 승인하거나 거부하세요:

명령줄에서도 접근 요청을 검토할 수 있습니다:

REQUEST_ID를 요청의 ID로 교체하세요

tctl request approve REQUEST_ID
tctl request deny REQUEST_ID

REQUEST_ID를 요청의 ID로 교체하세요

tsh request review --approve REQUEST_ID
tsh request review --deny REQUEST_ID

7단계/7단계. systemd 설정

이 섹션은 리눅스 호스트에서 텔레포트 이메일 플러그인을 실행하는 경우에만 관련이 있습니다.

프로덕션에서는 시스템과 같은 이니트 시스템을 통해 텔레포트 플러그인 데몬을 시작하는 것을 권장합니다. 다음은 systemd에 대한 권장 텔레포트 플러그인 서비스 단위 파일입니다:

(!/examples/systemd/plugins/teleport-email.service!)

이 파일을 /usr/lib/systemd/system/ 또는 systemd에서 지원하는 다른 유닛 파일 로드 경로로 저장하세요.

플러그인을 활성화하고 시작하세요:

sudo systemctl enable teleport-email
sudo systemctl start teleport-email
Teleport 원문 보기