Microsoft Teams를 통한 Access Request
Teleport v18.9이 가이드는 Teleport에서 Access Request 메시지를 수신하도록 Microsoft Teams를 설정하는 방법을 설명합니다. Teleport Enterprise Cloud에서는 Teleport가 the Microsoft Teams integration를 대신 관리하며, Teleport 웹 UI에서 the Microsoft Teams integration를 등록할 수 있습니다.
이 가이드는 Teleport에서 Access Request 메시지를 수신하도록 Microsoft Teams를 설정하는 방법을 설명합니다.
이 통합은 Teleport Enterprise (Cloud)에서 호스팅됩니다
Teleport Enterprise Cloud에서는 Teleport가 the Microsoft Teams integration를 대신 관리하며, Teleport 웹 UI에서 the Microsoft Teams integration를 등록할 수 있습니다.
Teleport 웹 UI로 이동하여 왼쪽 사이드바에서 Add New를 클릭한 다음 Integration을 클릭하십시오:

"Select Integration Type" 메뉴에서 사용할 통합의 타일을 클릭하십시오. 통합을 설정하는 방법에 대한 지침과 함께 통합을 구성하는 데 사용할 수 있는 양식이 있는 페이지가 표시됩니다.

등록 후 통합 상태 페이지에서 필요한 app.zip 파일을 다운로드할 수 있습니다.

작동 방식#
Teleport의 Microsoft Teams 통합은 개인에게 Access Request를 알립니다. 사용자는 메시지 링크를 따라 Access Request를 승인하거나 거부할 수 있으므로, 생산성을 저해하지 않으면서 보안 모범 사례를 더 쉽게 구현할 수 있습니다.

사전 요구사항#
-
실행 중인 Teleport Enterprise 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
권장: Machine & Workload Identity를 구성하여 플러그인에 수명이 짧은
Teleport 자격 증명을 제공하십시오. 이 가이드를 따르기 전에, 인프라에서
tbot 바이너리를 실행하도록 Machine & Workload Identity
배포 가이드를 먼저 따르십시오.
- Microsoft Teams 라이선스 (Microsoft 365 Business).
- Microsoft Teams 라이선스를 보유한 조직/디렉터리의 Azure 콘솔 접근 권한.
- 동일한 디렉터리의 Azure 리소스 그룹. Microsoft Teams Access Request 플러그인의 리소스를 호스팅합니다. 이 리소스 그룹에서 Azure Bot Services를 생성하고 편집할 수 있는 충분한 권한이 있어야 합니다.
- 플러그인에 권한을 부여하기 위해 Microsoft Entra ID에 대한 전역 관리자 권한을 가진 사람.
- Microsoft Teams 앱의 설치 요청을 승인할 수 있는
Teams administrator역할을 가진 사람. - Teleport Microsoft Teams 플러그인을 실행할 Azure 가상 머신 또는 Kubernetes 클러스터.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
1/9단계. RBAC 리소스 정의#
Microsoft Teams 플러그인을 설정하기 전에, Teleport 클러스터에서 Role Access Request를 활성화해야 합니다.
이 가이드에서는 내장 editor 역할을 요청할 수 있는 editor-requester 역할과,
editor 역할에 대한 요청을 검토할 수 있는 editor-reviewer 역할을
정의합니다.
다음 내용으로 editor-request-rbac.yaml라는 파일을 생성합니다:
kind: role
version: v7
metadata:
name: editor-reviewer
spec:
allow:
review_requests:
roles: ['editor']
---
kind: role
version: v7
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
Web UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
본인에게 editor-reviewer 역할을 할당하여, editor-requester 역할을 가진
사용자의 요청을 검토할 수 있도록 허용합니다.
인증 공급자에 맞는 적절한 명령을 실행하여 editor-reviewer 역할을
your Teleport user에게 할당하십시오:
Local User
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
$ ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새 역할을 추가합니다:
$ tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},editor-reviewer" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에editor-reviewer을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - editor-reviewer -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
SAML
-
saml구성 리소스를 가져옵니다:$ tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을saml.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 saml.yaml 파일을 삭제해야 합니다. -
saml.yaml을 편집하여attributes_to_roles섹션에editor-reviewer을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - editor-reviewer -
변경 사항을 적용합니다:
$ tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
OIDC
-
oidc구성 리소스를 가져옵니다:$ tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을oidc.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 oidc.yaml 파일을 삭제해야 합니다. -
oidc.yaml을 편집하여claims_to_roles섹션에editor-reviewer을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - editor-reviewer -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
editor-requester 역할을 가진 myuser라는 사용자를 생성합니다. 이 사용자는
editor 역할을 요청하지 않으면 클러스터 구성을 편집할 수 없습니다:
$ tctl users add myuser --roles=editor-requester
tctl은 초대 URL을 터미널에 출력합니다. 해당 URL을 방문하여 myuser로 처음
로그인하고, Teleport 클러스터에 구성된 대로 자격 증명을
등록합니다.
이 가이드의 뒷부분에서는 myuser가 editor 역할을 요청하도록 하여, Teleport
플러그인을 사용해 요청을 검토할 수 있습니다.
2/9단계. Teleport Microsoft Teams 플러그인 사용자 정의#
플러그인에 필요한 권한은 사전 설정된 access-plugin 역할에 구성되어 있습니다. 플러그인에 대한 자격 증명을 생성하려면, Machine ID 봇 사용자 또는 일반 Teleport 사용자를 정의합니다.
아직 Machine ID 봇을 설정하지 않았다면, 인프라에서 tbot 바이너리를
실행하려면 배포 가이드를
참고하십시오.
다음으로, Machine ID 봇이 access-plugin 역할에 대한 자격 증명을 생성할 수
있도록 허용합니다. tctl을 사용하여 이 작업을 수행할 수 있으며, my-bot을
사용자의 봇 이름으로 바꾸십시오:
$ tctl bots update my-bot --add-roles access-plugin
모든 Teleport 사용자와 마찬가지로, Teleport Auth Service는 수명이 짧은 TLS
자격 증명을 발급하여 access-plugin 사용자를 인증합니다. 이 경우에는
access-plugin 역할과 사용자를 가장(impersonate) 하여 자격 증명을 수동으로
요청해야 합니다.
자체 호스팅 Teleport Enterprise 배포를 실행 중이고 Auth Service 호스트에서
tctl을 사용하는 경우, 이미 가장(impersonation)
권한을 보유하고 있습니다.
사용자에게 access-plugin에 대한 가장 권한을 부여하려면, 다음 YAML 문서를
access-plugin-impersonator.yaml라는 파일에 추가하여 access-plugin이라는
사용자와 access-plugin-impersonator라는 역할을 정의합니다:
kind: user
metadata:
name: access-plugin
spec:
roles: ['access-plugin']
version: v2
---
kind: role
version: v7
metadata:
name: access-plugin-impersonator
spec:
allow:
impersonate:
roles:
- access-plugin
users:
- access-plugin
사용자와 역할을 생성합니다:
$ tctl create -f access-plugin-impersonator.yaml
user "access-plugin" has been created
role "access-plugin-impersonator" has been created
Web UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
access-plugin 역할과 사용자에 대한 자격 증명을 생성하는 데 사용할 사용자에게
이 역할을 할당합니다:
인증 공급자에 맞는 적절한 명령을 실행하여 access-plugin-impersonator 역할을
your Teleport user에게 할당하십시오:
Local User
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
$ ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새 역할을 추가합니다:
$ tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},access-plugin-impersonator" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에access-plugin-impersonator을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - access-plugin-impersonator -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
SAML
-
saml구성 리소스를 가져옵니다:$ tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을saml.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 saml.yaml 파일을 삭제해야 합니다. -
saml.yaml을 편집하여attributes_to_roles섹션에access-plugin-impersonator을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - access-plugin-impersonator -
변경 사항을 적용합니다:
$ tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
OIDC
-
oidc구성 리소스를 가져옵니다:$ tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을oidc.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 oidc.yaml 파일을 삭제해야 합니다. -
oidc.yaml을 편집하여claims_to_roles섹션에access-plugin-impersonator을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - access-plugin-impersonator -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
이제 access-plugin 역할과 사용자에 대한 서명된 인증서를 생성할 수 있게
됩니다.
3/9단계. 액세스 플러그인 ID 내보내기#
플러그인에 Teleport ID 파일 접근 권한을 부여합니다. 유출 시 위험도가 낮은 단기 ID 파일을 생성하기 위해 Machine ID를 사용하는 것을 권장하지만, 데모 배포에서는 tctl로 장기 ID 파일을 생성할 수 있습니다:
the plugin에서 필요로 하는 자격 증명을 생성하는 output으로 tbot을
구성하세요. the plugin가 Teleport API에 접근하므로, 사용해야 할 올바른
output 유형은 identity입니다.
이 가이드에서는 directory destination을 사용합니다. 이는 이러한
자격 증명을 디스크의 지정된 디렉터리에 기록합니다. 이 디렉터리가 tbot이
실행되는 Linux 사용자에 의해 쓰기 가능하고, the plugin가 실행되는
Linux 사용자에 의해 읽기 가능한지 확인하세요.
identity output을 추가하도록 tbot 구성을 수정하세요.
Linux 서버에서 tbot을 실행하는 경우, directory output을 사용하여
identity 파일을 /opt/machine-id 디렉터리에 기록하세요:
services:
- type: identity
destination:
type: directory
# For this guide, /opt/machine-id is used as the destination directory.
# You may wish to customize this. Multiple outputs cannot share the same
# destination.
path: /opt/machine-id
Kubernetes에서 tbot을 실행하는 경우, identity 파일을 대신 Kubernetes secret에
기록하세요:
services:
- type: identity
destination:
type: kubernetes_secret
name: teleport-plugin-msteams-identity
tbot을 백그라운드 서비스로 운영하는 경우, 재시작하세요. tbot을
one-shot 모드로 실행하는 경우, 지금 실행하세요.
이제 /opt/machine-id 아래에 identity 파일 또는 teleport-plugin-msteams-identity이라는
이름의 Kubernetes secret이 보일 것입니다. 여기에는 the plugin가 Teleport Auth
Service에 인증하는 데 필요한 개인 키와 서명된 인증서가 담겨 있습니다.
모든 Teleport 사용자와 마찬가지로, access-plugin가 Teleport 클러스터에 연결하려면
서명된 자격 증명이 필요합니다. tctl auth sign 명령을 사용하여 이러한 자격 증명을
요청합니다.
다음 tctl auth sign 명령은 access-plugin 사용자를 impersonate하여 서명된 자격
증명을 생성하고, 로컬 디렉터리에 identity 파일을 작성합니다:
$ tctl auth sign --user=access-plugin --out=identity
plugin는 TLS를 통해 Teleport Auth Service의 gRPC 엔드포인트에 연결합니다.
identity 파일 identity에는 TLS 자격 증명과 SSH 자격 증명이 모두 포함됩니다.
plugin는 SSH 자격 증명을 사용하여 Proxy Service에 연결하며, Proxy Service는
Auth Service로의 리버스 터널 연결을 설정합니다. plugin는 이 리버스 터널과
TLS 자격 증명을 함께 사용하여 Auth Service의 gRPC 엔드포인트에 연결합니다.
Certificate Lifetime
기본적으로 tctl auth sign은 비교적 짧은 수명을 가진 인증서를 생성합니다.
프로덕션 배포의 경우, 플러그인의 인증서를 프로그래밍 방식으로 발급하고 갱신하기
위해 Machine
& Workload Identity를 사용하는 것을 권장합니다.
자세히 알아보려면 Machine & Workload Identity 시작
가이드를 참조하세요.
기존 자격 증명보다 더 오래 유효한 인증서는 발급할 수 없다는 점에 유의하세요.
예를 들어, 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/plugins/api-credentials
$ sudo mv identity /var/lib/teleport/plugins/api-credentials
Kubernetes에서 plugin를 실행하는 경우, Teleport identity 파일이 포함된 Kubernetes secret을 생성합니다:
$ kubectl -n teleport create secret generic --from-file=identity teleport-plugin-msteams-identity
Teleport 자격 증명이 만료되면 tctl auth sign 명령을 다시 실행하여 갱신해야
합니다.
4/9단계. Teleport Microsoft Teams 플러그인 설치#
워크스테이션에 Microsoft Teams 플러그인을 설치합니다. Kubernetes에 플러그인을 배포하는 경우에도 이 가이드의 뒷부분에서 업로드할 애플리케이션 아카이브를 생성하기 위해 로컬에 플러그인을 설치해야 합니다.
Download
Access Request Plugin은 amd64 및 arm64 Linux 바이너리로 다운로드할 수 있습니다.
ARCH를 필요한 버전으로 교체하세요.
$ curl -L -O https://cdn.teleport.dev/teleport-access-msteams-v(=teleport.plugin.version=)-linux-ARCH-bin.tar.gz
$ tar -xzf teleport-access-msteams-v(=teleport.plugin.version=)-linux-ARCH-bin.tar.gz
$ cd teleport-access-msteams
$ sudo ./install
바이너리가 설치되었는지 확인합니다:
$ teleport-msteams version
teleport-msteams v(=teleport.plugin.version=) git:teleport-msteams-v(=teleport.plugin.version=)-fffffffff go(=teleport.golang=)
Docker Image
$ docker pull public.ecr.aws/gravitational/teleport-plugin-msteams:(=teleport.plugin.version=)
다음 명령을 실행하여 플러그인이 설치되었는지 확인합니다:
$ docker run public.ecr.aws/gravitational/teleport-plugin-msteams:(=teleport.plugin.version=) version
teleport-msteams v(=teleport.plugin.version=) (=teleport.golang=)
사용 가능한 태그 목록은 Amazon ECR Public Gallery를 참조하세요.
From Source
소스에서 설치하려면 git과 go가 설치되어 있어야 합니다. Go가 설치되어 있지
않다면 Go downloads page를 방문하세요.
$ git clone https://github.com/gravitational/teleport -b branch/v(=teleport.major_version=)
$ cd teleport/integrations/access/msteams
$ git checkout v(=teleport.plugin.version=)
$ make build/teleport-msteams
teleport-msteams 바이너리를 PATH로 이동합니다.
바이너리가 설치되었는지 확인합니다:
$ teleport-msteams version
teleport-msteams v(=teleport.plugin.version=) git:teleport-msteams-v(=teleport.plugin.version=)-fffffffff go(=teleport.golang=)
Helm Chart
Helm이 Teleport Helm 리포지토리에 호스팅된 차트를 설치할 수 있도록 허용합니다:
$ helm repo add teleport (=teleport.helm_repo_url=)
원격 리포지토리에서 차트 캐시를 업데이트합니다:
$ helm repo update
5/9단계. Azure 봇 등록#
Microsoft Teams용 Access Request 플러그인은 Teleport Auth Service에서 Access Request 이벤트를 수신하고, 이를 Microsoft Teams 메시지로 포맷하여 워크스페이스에 게시하기 위해 Microsoft Teams API로 전송합니다. 이를 위해 새 Azure 봇을 등록해야 합니다. Azure 봇은 Microsoft가 제공하는 관리 서비스로, Microsoft Teams를 포함한 다양한 채널을 통해 사용자와 상호작용하는 봇을 개발할 수 있게 합니다.
새 Azure 봇 등록#
https://portal.azure.com/#create/Microsoft.AzureBot을 방문하여 새 봇을 생성합니다. Azure 콘솔에서 나중에 봇을 찾을 수 있도록 봇 핸들을 선택합니다 (봇 핸들은 사용자에게 표시되거나 Microsoft Teams 플러그인 설정에 사용되지 않습니다). Azure 구독, 리소스 그룹 및 봇 가격 등급도 편집합니다.
"Microsoft App ID" 섹션에서 "Single Tenant"와 "Create new Microsoft App ID"를 선택합니다.

Microsoft Teams에 봇 연결#
봇이 생성되면 Azure 콘솔의 봇 리소스 페이지를 열고 "채널" 탭으로 이동합니다. "Microsoft Teams"를 클릭하고 Microsoft Teams 채널을 추가합니다.
결과는 다음과 같아야 합니다:

Microsoft App에 대한 정보 가져오기#
봇의 "구성" 탭에서 "Microsoft App ID"와 "App Tenant ID" 값을 복사하여 안전한 곳에 보관합니다. 이 두 UUID는 플러그인 설정에 사용됩니다.
"Microsoft App ID" 옆의 "관리" 링크를 클릭합니다. 앱 관리 보기가 열립니다.

그런 다음 "인증서 및 비밀" 섹션으로 이동하여 "새 클라이언트 비밀"을 생성하도록 선택합니다. "복사" 아이콘을 사용하여 새로 생성된 비밀을 복사하고 이전에 가져온 App ID 및 Tenant ID와 함께 보관합니다.
클라이언트 비밀은 Teleport 플러그인이 봇의 앱으로 인증하여 사용자를 검색하고 메시지를 게시할 때 사용됩니다.
앱에서 사용하는 권한 지정#
앱 관리 보기("구성", 그런 다음 Microsoft App ID "관리")에서 "API 권한" 탭으로 이동합니다.
다음 Microsoft Graph 애플리케이션 권한을 추가합니다:
| 권한 이름 | 이유 |
|---|---|
AppCatalog.Read.All |
Teams 앱을 나열하고 앱이 설치되어 있는지 확인하는 데 사용됩니다. |
User.Read.All |
알림 수신자를 가져오는 데 사용됩니다. |
TeamsAppInstallation.ReadWriteSelfForUser.All |
이전에 Teams 앱과 상호작용한 적이 없는 사용자와 통신을 시작하는 데 사용됩니다. |
TeamsAppInstallation.ReadWriteSelfForTeam.All |
앱이 팀에 설치되어 있는지 확인하는 데 사용됩니다. |
이 시점에서 앱은 필요한 권한을 선언했지만 아직 부여되지 않았습니다.
관리자인 경우 "<디렉터리 이름>에 대한 관리자 동의 부여"를 클릭합니다. 관리자가 아닌 경우 관리자에게 권한 부여를 요청합니다.

권한이 승인되면 페이지를 새로 고치고 승인 상태를 확인합니다. 결과는 다음과 같아야 합니다:

6/9단계. Teleport Microsoft Teams 플러그인 설정#
이 시점에서 Teleport Microsoft Teams 플러그인은 Teleport 클러스터와 Azure API와 통신하는 데 필요한 자격 증명을 갖추고 있지만, 앱은 아직 Microsoft Teams에 설치되지 않았습니다.
이 단계에서는 Azure 자격 증명을 사용하도록 Microsoft Teams 플러그인을 설정하고, Microsoft Teams 앱을 설치하는 데 사용될 Teams 앱 패키지를 생성합니다. 또한 Access Request 업데이트를 수신할 때 올바른 Microsoft Teams 사용자에게 알리도록 플러그인을 설정합니다.
설정 파일 및 에셋 생성#
플러그인의 설정 파일을 생성합니다. 지침은 가상 머신에 플러그인을 배포하는지 Kubernetes에 배포하는지에 따라 다릅니다:
Teleport Microsoft Teams 플러그인은 TOML 형식의 설정 파일을 사용합니다. configure 서브명령은 TOML 설정 파일과 나중에 Teams 앱을 조직 카탈로그에 추가하는 데 사용될 app.zip 파일이 포함된 /var/lib/teleport/plugins/msteams/assets 디렉터리를 생성합니다.
가상 머신에서 다음 명령을 실행합니다:
$ export AZURE_APPID="your-appid"
$ export AZURE_TENANTID="your-tenantid"
$ export AZURE_APPSECRET="your-appsecret"
$ teleport-msteams configure /var/lib/teleport/plugins/msteams/assets --appID "$AZURE_APPID" --tenantID "$AZURE_TENANTID" --appSecret "$AZURE_APPSECRET"
결과는 아래와 같은 설정 파일이어야 합니다:
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>teleport-msteams.toml</code>)</p></div>
/var/lib/teleport/plugins/msteams/assets/app.zip 파일을 로컬 컴퓨터에 복사합니다. 나중에 Microsoft Teams에 업로드해야 합니다.
Microsoft Teams 플러그인을 실행할 호스트에서 /var/lib/teleport/plugins/msteams/assets/teleport-msteams.toml 파일을 /etc/teleport-msteams.toml로 이동합니다. 그런 다음 /etc/에 있는 복사본을 편집할 수 있습니다.
로컬 머신에서 다음 명령을 실행합니다:
$ export AZURE_APPID="your-appid"
$ export AZURE_TENANTID="your-tenantid"
$ export AZURE_APPSECRET="your-appsecret"
$ teleport-msteams configure /var/lib/teleport/plugins/msteams/assets --appID "$AZURE_APPID" --tenantID "$AZURE_TENANTID" --appSecret "$AZURE_APPSECRET"
이 명령은 /var/lib/teleport/plugins/msteams/assets/app.zip에 애플리케이션 아카이브를 생성합니다. 이 가이드의 뒷부분에서 Microsoft Teams에 업로드합니다.
워크스테이션에 다음 내용으로 teleport-msteams-helm.yaml 파일을 생성합니다:
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>teleport-msteams-helm.yaml</code>)</p></div>
다음 섹션에서 이 파일을 편집합니다.
configure 명령은 멱등성이 없습니다. 각 실행마다 새 Microsoft Teams 애플리케이션 UUID를 생성합니다. 두 번의 다른 실행으로 생성된 app.zip과 TOML 설정을 함께 사용하는 것은 불가능합니다.
설정 파일 편집#
아래 지침에 따라 설정 파일을 편집합니다.
[teleport]#
Microsoft Teams 플러그인은 이 섹션을 사용하여 Teleport 클러스터에 연결합니다.
Executable or Docker
addr: Teleport Proxy Service 또는 Teleport Enterprise Cloud 계정의 호스트명과
HTTPS 포트를 입력합니다(예: teleport.example.com:443 또는
mytenant.teleport.sh:443).
identity: 앞서 내보낸 identity 파일의 경로를 입력합니다.
client_key, client_crt, root_cas: 이 구성에서는 사용하지 않으므로
주석 처리합니다.
Helm Chart
address: Teleport Proxy Service 또는 Teleport Enterprise Cloud 테넌트의 호스트명과
HTTPS 포트를 입력합니다(예: teleport.example.com:443 또는
mytenant.teleport.sh:443).
identitySecretName: identitySecretName 필드에 앞서 생성한 Kubernetes secret의
이름을 입력합니다.
identitySecretPath: identitySecretPath 필드에 Kubernetes secret 내 identity
파일의 경로를 입력합니다. 위 지침을 따랐다면 identity가 됩니다.
Linux 서버에서 실행되는 tbot 바이너리를 사용하여 플러그인에 자격 증명을
제공하는 경우, identity 값이 tbot이 생성하도록 구성한 신원 파일의 경로인
/opt/machine-id/identity와 동일한지 확인하십시오.
플러그인이 만료된 자격 증명으로 Teleport Auth Service에 연결을 시도하지 않도록 신원 파일을 주기적으로 다시 로드하도록 플러그인을 구성하십시오.
구성의 teleport 섹션에 다음을 추가하십시오:
refresh_identity = true
[msapi]/msTeams#
이 가이드의 앞부분에서 얻은 올바른 정보로 app_id, app_secret, tenant_id, teams_app_id 필드가 채워져 있는지 확인합니다.
이 가이드의 앞부분에서 얻은 올바른 정보로 appID, tenantID, teamsAppID 필드가 채워져 있는지 확인합니다.
[role_to_recipients]#
role_to_recipients 맵(Helm 사용자의 경우 roleToRecipients)은 사용자가 특정 역할에 대한 액세스를 요청할 때 Microsoft Teams 플러그인이 알릴 사용자와 채널을 설정합니다. Microsoft Teams 플러그인이 Auth Service에서 Access Request를 수신하면, 요청된 역할을 조회하고 알릴 Microsoft Teams 사용자와 채널을 식별합니다.
다음은 role_to_recipients 맵의 예시입니다. 각 값은 단일 문자열 또는 문자열 배열이 될 수 있습니다:
[role_to_recipients]
"*" = "alice@example.com"
"dev" = ["alice@example.com", "bob@example.com"]
"dba" = "https://teams.microsoft.com/l/channel/19%3somerandomid%40thread.tacv2/ChannelName?groupId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&tenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Helm 차트에서 role_to_recipients 필드는 roleToRecipients로 불리며, 키는 문자열이고 값은 문자열 배열인 다음 형식을 사용합니다:
roleToRecipients:
"*": "alice@example.com"
"dev": ["alice@example.com", "bob@example.com"]
"dba": "https://teams.microsoft.com/l/channel/19%3somerandomid%40thread.tacv2/ChannelName?groupId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&tenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
role_to_recipients 맵에서 각 키는 Teleport 역할의 이름입니다. 각 값은 알릴 Teams 사용자(또는 사용자들)를 설정합니다. 각 문자열은 Microsoft Teams 사용자의 이메일 주소 또는 채널 URL이어야 합니다.
채널을 열고 "채널 링크 가져오기" 버튼을 클릭하여 채널의 URL을 찾을 수 있습니다:

role_to_recipients 맵에는 "*" 항목도 포함해야 합니다. 이 항목은 다른 항목이 특정 역할 이름과 일치하지 않을 때 플러그인이 조회합니다. 위 예시에서 dev와 dba 이외의 역할에 대한 요청은 alice@example.com에 알림을 보냅니다.
제안된 검토자
사용자는 Access Request를 생성할 때 검토자를 제안할 수 있습니다. 예를 들어:
$ tsh request create --roles=dbadmin --reviewers=alice@example.com,ivan@example.com
Access Request에 제안된 검토자가 포함된 경우, Microsoft Teams 플러그인은 이들을 알릴 채널 목록에 추가합니다. 제안된 검토자가 이메일 주소인 경우, 플러그인은 해당 주소의 직접 메시지 채널을 조회하고 해당 채널에 메시지를 게시합니다.
TELEPORT_USERNAME을 이전에 editor-reviewer 역할을 할당한 사용자의 이메일로 교체하여 role_to_recipients 설정에 다음을 추가함으로써 사용자가 editor 역할을 요청할 때 알림을 받도록 Microsoft Teams 플러그인을 설정합니다:
[role_to_recipients]
"*" = "TELEPORT_USERNAME"
"editor" = "TELEPORT_USERNAME"
roleToRecipients:
"*": "TELEPORT_USERNAME"
"editor": "TELEPORT_USERNAME"
최종 설정 파일은 다음과 유사해야 합니다:
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>teleport-msteams.toml</code>)</p></div>
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>teleport-msteams-helm.yaml</code>)</p></div>
7/9단계. Teams 앱 추가 및 설정#
Teams 앱 업로드#
Microsoft Teams를 열고 "앱", "앱 관리"로 이동한 다음 추가 선택 메뉴에서 "앱 업로드"를 선택합니다.

Teams 관리자인 경우 "조직의 앱 카탈로그에 앱 업로드"를 선택합니다. 이렇게 하면 승인 단계를 건너뛸 수 있습니다. Microsoft Teams 관리자가 아닌 경우 "조직에 앱 제출"을 선택합니다.
이전에 생성한 app.zip 파일을 업로드합니다.
Teams 앱 승인#
Teams 관리자가 아니고 "조직에 앱 제출"을 선택한 경우, Teams 관리자에게 승인을 요청해야 합니다.
Teams 관리 대시보드에 연결하여 "TeleBot"을 검색하고, 선택한 다음 "허용"을 선택하면 됩니다.

팀에 Teams 앱 추가#
앱이 승인되면 "조직용 앱" 섹션에 나타나야 합니다. 새로 업로드된 앱을 팀에 추가합니다. 앱을 열고 "팀에 추가"를 클릭하고 팀의 "일반" 채널을 선택한 다음 "봇 설정"을 클릭합니다.

참고: 앱이 팀에 추가되면 모든 채널에 게시할 수 있습니다.
8/9단계. Teams 앱 테스트#
Teleport가 실행 중이고, Teams 앱을 생성했고, 플러그인이 설정된 후, 이제 플러그인을 실행하고 워크플로를 테스트할 수 있습니다.
Microsoft Teams 연결 테스트#
유효성 검사 모드에서 플러그인을 시작합니다:
$ teleport-msteams validate <teams 계정 이메일>
모든 것이 잘 작동하면, 로그 출력은 다음과 같아야 합니다:
teleport-msteams v(=teleport.plugin.version=) go(=teleport.golang=)
- Checking application xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx status...
- Application found in the team app store (internal ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- User xxxxxx@xxxxxxxxx.xxx found: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- Application installation ID for user: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- Chat ID for user: 19:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@unq.gbl.spaces
- Chat web URL: https://teams.microsoft.com/l/chat/19%3Axxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%40unq.gbl.spaces/0?tenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- Hailing the user...
- Message sent, ID: XXXXXXXXXXXXX
Check your MS Teams!
플러그인이 종료되고 Microsoft Teams를 통해 두 개의 메시지를 받아야 합니다.

MS Teams 플러그인 시작#
MS Teams 플러그인을 설정하고 유효성을 검사한 후, 이제 플러그인을 실행하고 워크플로를 테스트할 수 있습니다.
다음 명령을 실행하여 Teleport MS Teams 플러그인을 시작합니다. -d 플래그는 플러그인이 MS Teams와 Teleport 클러스터에 연결할 수 있는지 확인하기 위한 디버그 정보를 제공합니다:
$ teleport-msteams start -d
DEBU DEBUG logging enabled msteams/main.go:120
INFO Starting Teleport MS Teams Plugin (=teleport.plugin.version=): msteams/app.go:74
DEBU Attempting GET teleport.example.com:443/webapi/find webclient/webclient.go:129
DEBU Checking Teleport server version msteams/app.go:242
INFO MS Teams app found in org app store id:292e2881-38ab-7777-8aa7-cefed1404a63 name:TeleBot msteams/app.go:179
INFO Preloading recipient data... msteams/app.go:185
INFO Recipient found, chat found chat_id:19:a8c06deb-aa2b-4db5-9c78-96e48f625aef_a36aec2e-f11c-4219-b79a-19UUUU57de70@unq.gbl.spaces kind:user recipient:jeff@example.com msteams/app.go:195
INFO Recipient data preloaded and cached. msteams/app.go:198
DEBU Watcher connected watcherjob/watcherjob.go:121
INFO Plugin is ready msteams/app.go:227
플러그인 실행:
$ docker run -v <path-to-config>:/etc/teleport-msteams.toml public.ecr.aws/gravitational/teleport-plugin-msteams:(=teleport.version=) start
플러그인 설치:
$ helm upgrade --install teleport-plugin-msteams teleport/teleport-plugin-msteams --values teleport-msteams-helm.yaml
플러그인의 로그를 검사하려면, 다음 명령을 사용합니다:
$ kubectl logs deploy/teleport-plugin-msteams
teleport-msteams-helm.yaml에서 log.severity를 DEBUG로 설정하고 위의 helm upgrade ... 명령을 다시 실행하여 디버그 로그를 활성화할 수 있습니다. 그런 다음 다음 명령으로 플러그인을 재시작할 수 있습니다:
$ kubectl rollout restart deployment teleport-plugin-msteams
Access Request 생성#
다음 단계에 따라 Access Request를 생성하고 플러그인이 예상대로 작동하는지 확인합니다.
As an Admin
Teleport 관리자는 tctl을 사용하여 다른 사용자를 위한 Access Request를 생성할 수 있습니다:
$ tctl request create myuser --roles=editor
As a User
사용자는 tsh를 사용하여 Access Request를 생성하고 승인된 역할로 로그인할 수 있습니다:
$ tsh request create --roles=editor
Seeking request approval... (id: 8f77d2d1-2bbf-4031-a300-58926237a807)
From the Web UI
사용자는 Web UI에서 "Identity"로 이동하여 "Access Requests"를 클릭한 다음 "New Request"를 클릭하여 액세스를 요청할 수 있습니다:

이전에 요청을 검토하도록 설정한 사용자는 Microsoft Teams에서 "TeleBot"으로부터 Teleport Web UI의 링크를 방문하여 요청을 승인하거나 거부할 수 있는 직접 메시지를 받아야 합니다.
요청 해결#
Access Request 메시지를 받으면 링크를 클릭하여 Teleport로 이동한 후 요청을 승인하거나 거부하십시오:

명령줄에서 검토하기
명령줄에서도 Access Request를 검토할 수 있습니다:
As an Admin
# Replace REQUEST_ID with the id of the request
$ tctl request approve REQUEST_ID
$ tctl request deny REQUEST_ID
As a User
# Replace REQUEST_ID with the id of the request
$ tsh request review --approve REQUEST_ID
$ tsh request review --deny REQUEST_ID
요청이 해결되면 Microsoft Teams 봇은 새 상태를 반영하도록 Access Request 메시지를 업데이트합니다.
Microsoft Teams 플러그인이 채널에 Access Request 알림을 게시하면, 채널에 접근할 수 있는 모든 사람이 알림을 보고 링크를 따라갈 수 있습니다. 사용자가 Teleport 역할을 통해 Access Request를 검토하도록 권한을 받아야 하지만, 올바른 사용자가 올바른 요청을 검토하고 있는지 확인하기 위해 Teleport 감사 로그를 확인해야 합니다.
Access Request 검토를 감사할 때, Teleport Web UI에서 Access Request Reviewed 유형의 이벤트를 확인합니다.
9/9단계. systemd 설정#
이 섹션은 가상 머신에서 Teleport Microsoft Teams 플러그인을 실행하는 경우에만 해당됩니다.
프로덕션 환경에서는 systemd와 같은 init 시스템을 통해 Teleport 플러그인 데몬을 시작하는 것을 권장합니다. systemd를 위한 권장 Teleport 플러그인 서비스 유닛 파일은 다음과 같습니다:
<div class="admonition note"><div class="admonition-title">Note</div><p>이 섹션의 내용은 원문 문서를 참조하세요. (<code>teleport-msteams.service</code>)</p></div>
이를 /usr/lib/systemd/system/ 또는 systemd가 지원하는 다른 유닛 파일 로드 경로에 teleport-msteams.service로 저장합니다.
플러그인을 활성화하고 시작합니다:
$ sudo systemctl enable teleport-msteams
$ sudo systemctl start teleport-msteams
문제 해결#
이 섹션의 내용은 원문 문서를 참조하세요. (access-plugin-troubleshooting.mdx)
다음 단계#
- 리소스 Access Request 및 역할 Access Request 설정에 대한 가이드를 읽어 Access Request 플러그인을 최대한 활용하세요.