Google Workspace(G Suite)를 사용한 Teleport 인증
Teleport v18.9이 가이드는 특정 사용자 그룹에게 Teleport 자격 증명을 발급하는 SSO 프로바이더로 Google Workspace를 구성하는 방법을 설명합니다. Teleport cluster를 Google Workspace에 애플리케이션으로 등록한 다음, 애플리케이션에 대한 정보를 Teleport에 제공하는 authentication connector 리소스를 생성할 수 있습니다.
이 가이드는 특정 사용자 그룹에게 Teleport 자격 증명을 발급하는 SSO 프로바이더로 Google Workspace를 구성하는 방법을 설명합니다. Google Workspace를 Teleport 역할 기반 접근 제어(RBAC)와 함께 사용하면 다음과 같은 정책을 정의할 수 있습니다:
- "DBA" Google 그룹의 구성원만 PostgreSQL 데이터베이스에 연결할 수 있습니다.
- 개발자는 프로덕션 서버에 절대 SSH 접근을 하면 안 됩니다.
작동 방식#
Teleport cluster를 Google Workspace에 애플리케이션으로 등록한 다음, 애플리케이션에 대한 정보를 Teleport에 제공하는 authentication connector 리소스를 생성할 수 있습니다. 사용자가 Teleport에 로그인하면 Google Workspace가 자체 인증 플로우를 실행한 후, 인증이 완료되었음을 알리기 위해 Teleport cluster에 HTTP 요청을 보냅니다.
Teleport는 수명이 짧은 인증서를 발급하여 사용자를 인프라에 인증합니다. 사용자가 SSO 인증 플로우를 완료하면 Teleport는 사용자에게 수명이 짧은 TLS 및 SSH 인증서를 발급합니다. 또한 Teleport는 Auth Service 백엔드에 임시 사용자를 생성합니다.
Teleport role은 사용자의 인증서에 인코딩됩니다. 사용자에게 Teleport role을 할당하기 위해 Auth Service는 authentication connector 내의 role mapping을 검사하며, 이는 Google Workspace의 사용자 데이터를 하나 이상의 Teleport role 이름과 연결합니다.
사전 요구 사항#
시작하기 전에 다음을 확인합니다:
-
Google Workspace 최고 관리자 계정이 있습니다. 모범 사례로 관리자 작업을 수행하기 위해 다단계 인증이 필요한 별도의 계정을 설정해야 합니다. 대부분의 경우 자신의 로그인 사용자 계정에 높은 관리자 권한을 부여하지 않아야 합니다.
-
Google Cloud에 가입하고 Google Cloud 프로젝트를 만들 수 있습니다. 이 가이드는 유료 Google Cloud 서비스 사용이 필요하지 않습니다.
-
Google Workspace 그룹을 설정할 수 있습니다.
-
oidc리소스를 유지 관리할 수 있는 권한이 있는 Teleport 역할이 있습니다. 이 권한은 사전 설정editor역할에서 사용 가능합니다. -
Teleport 클러스터, Enterprise 에디션, 그리고 커맨드라인 도구가 있습니다.
-
실행 중인 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
```
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/3단계. Google Workspace 구성#
Google Workspace가 Teleport와 함께 작동하도록 구성하려면 다음 단계가 필요합니다:
- Google Workspace 에디션을 검토하여 Teleport와 통합 방식을 결정합니다.
- Google Cloud Platform에서 새 프로젝트를 만듭니다.
- 새 프로젝트에 대한 OAuth 동의를 구성합니다.
- 필수 API를 활성화합니다.
- Teleport 클러스터에 Google Workspace 사용자가 로그인할 수 있도록 OAuth 클라이언트 ID를 만듭니다.
- Teleport가 추가 Google Groups 정보에 접근하기 위한 서비스 계정을 만듭니다.
- 서비스 계정에 대한 도메인 전체 위임을 구성합니다.
Google Workspace 에디션 검토#
Google Workspace는 개인과 조직을 위해 다양한 기능과 기능을 갖춘 여러 에디션으로 제공됩니다. Google Workspace 에디션 간의 차이로 인해 사용하는 Google Workspace 에디션에 따라 Teleport가 Google Workspace와 통합하는 방식에 근본적인 차이가 있습니다.
일부 Google Workspace 에디션은 전이적 그룹 멤버십을 제공합니다. 전이적 그룹 멤버십을 사용하면 사용자는 다른 그룹에 속함으로써 한 그룹의 구성원이 될 수 있습니다. 예를 들어 부모 그룹 내에 중첩된 자식 그룹이 있는 경우 자식 그룹의 모든 구성원은 부모 그룹의 구성원이기도 합니다. Teleport는 직접 그룹 멤버십과 전이적 그룹 멤버십을 모두 지원하지만 다른 방법을 사용합니다.
Google Workspace 에디션 및 API#
Google Workspace 서비스 계정은 Google Workspace Cloud Identity API의 메서드를 호출하여 사용자가 특정 그룹에 전이적 멤버십을 가지고 있는지 확인할 수 있습니다. 이 API 메서드는 특정 Google Workspace 에디션에 속하는 사용자에게만 사용할 수 있습니다.
Google Workspace Directory API는 관리자가 Google Workspace 도메인의 사용자와 그룹을 나열할 수 있지만 전이적 그룹 멤버십을 쿼리할 수는 없습니다. Directory API는 모든 Google Workspace 에디션에서 사용 가능합니다.
Teleport의 Google Workspace API 사용 방법#
Teleport OIDC 커넥터는 Google Workspace API를 사용하여 Google Workspace 그룹 구성원을 속한 Teleport 역할에 매핑합니다.
사용자의 Google Workspace 그룹 목록을 가져오기 위해 Teleport는 먼저 Cloud Identity API 메서드를 호출하여 자격 증명을 얻으려고 합니다. 성공하면 Teleport는 자격 증명을 사용하여 사용자의 전이적 그룹 멤버십을 쿼리합니다.
자격 증명이 존재하지 않으면 Teleport는 Directory API 메서드를 호출하여 자격 증명을 얻습니다. Teleport는 그런 다음 Directory API를 사용하여 조직의 전체 Google Workspace에서 사용자의 그룹을 나열합니다. 사용자가 속한 워크스페이스 외부의 그룹은 나열되지 않습니다.
현재 에디션 확인 방법#
Google Workspace 에디션이 전이적 그룹 멤버십 쿼리를 지원하는지 확인하려면:
-
Google Workspace Admin Console에서 Inspect Groups를 엽니다.
그룹 검사는 Cloud Identity API에 의존합니다.
-
List all groups for a member 및 Include external groups를 선택합니다.
Google Workspace 에디션이 Cloud Identity API를 지원하는 경우 외부 그룹에 대한 접근 허용 또는 차단에 설명된 대로 워크스페이스 수준에서 외부 그룹에 대한 접근을 차단해야 합니다. 그렇지 않으면 워크스페이스 외부의 모든 그룹에 멤버십이 있으면 사용자가 로그인하지 못합니다.
Google Workspace 에디션이 Cloud Identity API를 지원하지 않는 경우 역할 기반 접근 제어가 전이적 그룹 멤버십에 의존하지 않도록 해야 합니다.
새 프로젝트 만들기#
기존 Google Cloud 프로젝트에 Teleport용 싱글 사인온을 추가하려면 Google Cloud console에서 해당 프로젝트를 선택하고 이 단계를 건너뛸 수 있습니다. 프로젝트가 없거나 Teleport를 위해 특별히 새 프로젝트를 만들려면 Enabled APIs & Service 프로젝트 선택기 대시보드로 직접 이동할 수 있습니다.
새 프로젝트를 만들려면:
-
Google Cloud console을 엽니다.
-
Google Cloud console 탐색 메뉴에서 APIs & Services를 클릭합니다.
-
Enabled APIs and services에서 프로젝트 선택기를 클릭한 다음 New Project를 클릭합니다. 대시보드에 선택할 프로젝트가 없으면 Create Project를 클릭합니다.

-
프로젝트 이름을 입력하고 프로젝트의 조직과 위치를 선택한 다음 Create를 클릭합니다.
OAuth 동의 구성#
새 프로젝트에 대한 OAuth 동의를 구성하려면:
-
Google Cloud console 사이드바에서 OAuth consent screen을 클릭합니다.
-
User Type으로 Internal을 선택하고 Create를 클릭합니다.

-
다음을 수행하여 OAuth 클라이언트 동의 정보를 구성합니다:
- 애플리케이션 이름을 입력합니다.
- OAuth 동의에 대한 이메일 메시지를 받을 사용자 또는 그룹을 선택합니다.
- 필요에 따라 다른 애플리케이션 옵션을 설정합니다.
- 프로젝트에 변경 사항이 있는 경우 연락할 개발자의 이메일 주소를 제공합니다.
-
Save and continue를 클릭합니다.
-
Add or remove scopes를 클릭합니다.
-
.../auth/userinfo.email 및 openid 범위를 선택한 다음 Update를 클릭합니다.
-
Save and continue를 클릭합니다.
-
요약 페이지의 정보를 검토한 다음 Back to dashboard를 클릭합니다.
필수 API 활성화#
OAuth 클라이언트에 필요한 API를 활성화하려면:
- API Library에서 Admin SDK API를 선택한 다음 Enable을 클릭하여 직접 그룹 멤버십을 지원합니다.
- API Library에서 Cloud Identity API를 선택한 다음 Enable을 클릭하여 전이적 그룹 멤버십을 지원합니다.
하나 또는 두 API 라이브러리를 모두 활성화할 수 있습니다. 그러나 Google Workspace 에디션은 사용하려는 API를 지원해야 합니다. 지원되는 Google Workspace 에디션이 있는지 확인하려면 API 라이브러리 문서를 참조하세요.
OAuth 클라이언트 ID 만들기#
OAuth 클라이언트 식별자를 만들려면:
-
Google Cloud console 사이드바에서 APIs & Services를 클릭합니다.
-
APIs & Services 사이드바에서 Credentials를 클릭합니다.
-
Create credentials를 클릭하여 만들 수 있는 자격 증명 목록을 표시합니다.

-
OAuth client ID를 선택합니다.
-
Application type으로 Web application을 선택하고 애플리케이션 이름을 입력합니다.
-
Authorized redirect URIs에서 Add URI를 클릭합니다.
-
리다이렉트 URI를 Teleport 클러스터 주소로 설정한 다음 URI에
/v1/webapi/oidc/callback을 추가합니다. 여러 공개 주소를 가진 셀프 호스팅 클러스터가 있는 경우 이 주소가 첫 번째로 나열된 것을 가리키도록 합니다:
-
Create를 클릭합니다.
-
만든 OAuth 클라이언트에서 Client ID와 Client secret을 복사하거나 Download JSON을 클릭하여 이 정보를 저장한 다음 OK를 클릭합니다.
JSON을 클릭하여 클라이언트 식별자와 클라이언트 시크릿을 저장하도록 선택하면 이 JSON 파일은 인증 자격 증명을 처리하는 데 사용되는 파일이 아님에 유의하세요. 두 번째 JSON 파일은 OAuth 클라이언트에 대한 서비스 계정을 만들 때 생성됩니다.
예를 들어:

서비스 계정 만들기#
서비스 계정을 만들려면:
-
Google Cloud console 사이드바에서 IAM & admin을 클릭한 다음 Service Accounts를 선택합니다.
-
Create service account를 클릭합니다.
-
서비스 계정 이름과 선택적으로 서비스 계정의 용도에 대한 설명을 입력합니다.
-
Create and continue를 클릭한 다음 Done을 클릭합니다.

Done을 클릭하면 새 서비스 계정이 현재 프로젝트의 서비스 계정 목록에 추가됩니다. 새로 만든 계정을 클릭하여 세부 정보를 보고 계정 정보를 편집할 수 있습니다.
-
새 서비스 계정을 클릭하여 세부 정보를 표시하고 나중에 사용할 Unique ID를 복사합니다.

-
Keys를 클릭하고 Add key를 클릭하고 Create new key를 선택하여 서비스 계정에 대한 키를 만듭니다.

-
Key type으로 JSON을 선택한 다음 Create를 클릭합니다.
Google Cloud는 다음과 유사한 서비스 계정 키가 포함된 JSON 파일을 자동으로 다운로드합니다:
{ "type": "service_account", "project_id": "teleport-project-xxxxxx", "private_key_id": "f06e000000000000000dc18", "private_key": "-----BEGIN PRIVATE KEY-----\n0000000000000w==\n-----END PRIVATE KEY-----\n", "client_email": "g-w-sso@teleport-project-xxxxxx.iam.gserviceaccount.com", "client_id": "11xxxxxxxxxxxxx76", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gwsso%40teleport-project-xxxxxx.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }이 파일은 Teleport Auth Service를 실행하는 호스트의 로컬 파일을 참조하거나 커넥터 리소스를 만드는 명령어에 내용을 포함하여 Teleport Auth Service가 사용하도록 OIDC 커넥터를 구성하는 데 사용됩니다.
도메인 전체 위임 구성#
Teleport가 사용할 서비스 계정이 있으므로 서비스 계정에 대한 도메인 전체 위임을 구성할 수 있습니다.
위임을 구성하려면:
-
Google Workspace Admin console을 열고 도메인 전체 위임 관리로 이동합니다.
-
Add new를 클릭합니다.
-
서비스 계정에서 복사한 숫자 Unique ID를 붙여넣습니다.
-
Google Workspace 에디션에 따라 다음 범위 중 하나를 추가합니다:
- 직접 그룹만의 경우:
https://www.googleapis.com/auth/admin.directory.group.readonly - 직접 및 전이적 그룹 멤버십 지원의 경우:
https://www.googleapis.com/auth/cloud-identity.groups.readonly
- 직접 그룹만의 경우:
-
Authorize를 클릭합니다.
2/3단계. Google Workspace를 Teleport에 연결#
이 섹션에서는 Teleport가 Google Workspace와 OIDC 메시지를 교환하고 사용자에게 인증서를 발급하는 데 필요한 정보를 제공하는 인증 커넥터를 만듭니다.
역할 매핑 할당#
사용자가 Teleport에 인증하면, Teleport Auth Service는 사용자의 Teleport 역할이 포함된 SSH 및 TLS 인증서를 사용자에게 발급합니다.
SSO 인증 커넥터의 경우, Auth Service는 인증 커넥터의 역할 매핑을 읽어 인증서에 어떤 역할을 인코딩할지 결정합니다. 역할 매핑은 아이덴티티 제공자가 사용자에 대해 저장하는 데이터를 기반으로 어떤 Teleport 역할을 할당할지 나타냅니다.
tctl CLI를 사용하여 인증 커넥터를 구성할 때, 역할 매핑은 다음 형식을
따릅니다:
<claim_name>,<claim_value>,<teleport_role_1>,<teleport_role_2>,...,<teleport_role_n>
예를 들어, 다음 역할 매핑은 값이 admins인 claim groups를 가진 모든
사용자가 Teleport 역할 auditor와 editor를 받는다는 것을 의미합니다:
groups,admins,auditor,editor
이 가이드의 목적을 위해 두 개의 개별 역할 매핑을 할당합니다:
- 더 관대한 역할 매핑:
groups,admins,auditor,editor - 더 제한적인 역할 매핑:
groups,devs,access
OIDC 커넥터 구성#
Google Workspace를 준비한 후 tctl sso configure oidc 명령을 실행하여 OIDC 커넥터를 만들 수 있습니다. Teleport 클러스터 배포 방식에 따라 두 가지 방법 중 하나로 OIDC 커넥터 리소스를 만들 수 있습니다:
- 커넥터 리소스에 서비스 계정 정보를 임베드할 수 있습니다.
- Teleport Auth Service를 실행하는 호스트에 서비스 계정 JSON 파일을 업로드할 수 있습니다.
서비스 계정 JSON은 고가용성 클러스터로 Teleport를 배포하는 경우 모든 Teleport Auth Service 호스트에서 사용 가능해야 합니다. 대부분의 경우 여러 서버의 파일에 자격 증명을 저장하지 않도록 고가용성 및 클라우드 배포에서 임베드된 JSON 방법을 사용하여 커넥터를 만들어야 합니다.
임베드된 JSON으로 OIDC 커넥터를 만드는 대신 JSON 파일을 업로드하는 방법도 있습니다. 셀프 호스팅 Teleport 클러스터가 있는 경우 Teleport Auth Service를 실행하는 모든 호스트에 서비스 계정 JSON 파일을 업로드할 수 있습니다.
워크스테이션에서 클라이언트 시크릿만 포함된 client-secret.txt 파일을 만듭니다.
다음 명령은 커넥터 리소스를 만드는 데 사용되는 명령에 JSON을 임베드하여 서비스 계정을 정의합니다. 이 방법을 사용하면 Teleport Auth Service를 실행하는 모든 호스트에 JSON 파일을 제공하지 않아도 됩니다.
$ tctl sso configure oidc --preset google --id \
--secret $( cat client-secret.txt) \
--claims-to-roles mapping_1 \
--claims-to-roles mapping_2 \
--google-admin= \
--google-acc '
{
"type": "service_account",
"project_id": ,
"private_key_id": ,
"private_key": "-----BEGIN PRIVATE KEY-----\n0000000000000w==\n-----END PRIVATE KEY-----\n",
"client_email": ,
"client_id": ,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gwsso%40teleport-project-xxxxxx.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}'
이 명령을 복사한 후 꺽쇠 괄호(< >)를 제거하고 플레이스홀더 문자열을 Google Workspace에 맞는 정보로 교체합니다. 예를 들어 을 admin@yourdomain.com과 유사한 도메인 관리자 이메일 주소로 교체합니다.
이 명령은 다음과 유사한 파일을 만듭니다:
kind: oidc
metadata:
name: google
spec:
claims_to_roles:
- claim: groups
roles:
- auditor
- editor
value: admins@example.com
- claim: groups
roles:
- access
value: devs@example.com
client_id:
client_secret:
display: Google
google_admin_email:
google_service_account: |2-
{
"type": "service_account",
"project_id": ,
"private_key_id": ,
"private_key": "-----BEGIN PRIVATE KEY-----\n0000000000000w==\n-----END PRIVATE KEY-----\n",
"client_email": ,
"client_id": ,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gwsso%40teleport-project-xxxxxx.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
issuer_url: https://accounts.google.com
redirect_url: https://example.teleport.sh:443/v1/webapi/oidc/callback
version: v3
다음 명령은 Teleport Auth Service를 실행하는 호스트의 JSON 파일 경로를 지정합니다. Teleport Auth Service를 실행하는 모든 호스트에 JSON 파일을 사용할 수 있는 경우 셀프 호스팅 Teleport Auth Service 인스턴스에 이 방법을 사용할 수 있습니다.
$ tctl sso configure oidc --preset google --id \
--secret $( cat client-secret.txt) \
--google-acc-uri .json \
--claims-to-roles mapping_1 \
--claims-to-roles mapping_2 \
--google-admin= > gworkspace-connector.yaml
이 명령을 복사한 후 꺽쇠 괄호(< >)를 제거하고 플레이스홀더 문자열을 Google Workspace에 맞는 정보로 교체합니다. 예를 들어 을 admin@yourdomain.com과 유사한 도메인 관리자 이메일 주소로 교체합니다.
이 명령은 다음과 유사한 파일을 만듭니다:
kind: oidc
metadata:
name: google
spec:
claims_to_roles:
- claim: groups
roles:
- auditor
- editor
value: admins@example.com
- claim: groups
roles:
- access
value: devs@example.com
client_id:
client_secret:
display: Google
google_admin_email:
google_service_account_uri: </PATH-TO-SERVICE-ACCOUNT-KEY>.json
issuer_url: https://accounts.google.com
redirect_url: https://teleport.example.com/v1/webapi/oidc/callback
version: v3
google_admin_email에 설정한 이메일은 반드시 Google Workspace의 모든 그룹, 사용자 및 그룹 멤버십을 나열할 수 있는 권한이 있는 계정의 이메일 주소여야 합니다. 일반적으로 이 사용자 계정에는 전체 관리자 권한이나 그룹 관리자 권한이 있어야 합니다.
google_admin_email에는 서비스 계정의 이메일을 사용하지 마세요. 구성이 동일하게 보일 수 있지만 서비스 계정에는 필요한 도메인 전체 위임이 없습니다.
client_id 필드는 Google Cloud console에서 OAuth 클라이언트를 위해 만든 서비스 계정의 고유 숫자 ID여야 합니다. Teleport Auth Service를 실행하는 호스트의 감사 로그나 Teleport 웹 UI의 왼쪽 창에 있는 Audit 페이지를 통해 이 설정이 올바르게 구성되었는지 확인할 수 있습니다. 감사 로그 메시지에 "invalid Google Workspace credentials for scopes [...]"가 표시되면 리소스 구성 파일에서 client_id 설정을 변경합니다. 감사 로그 보기에 대한 자세한 내용은 문제 해결을 참조하세요.
기본적으로 Teleport는 OIDC claim에 email claim이 있을 것으로 예상합니다.
email claim의 값이 Teleport에서 사용자 이름으로 사용됩니다. 사용자 이름을 구성하는 데
다른 claim을 사용하려면 auth connector 스펙의 username_claim 필드로 기본적으로
예상되는 email claim을 재정의할 수 있습니다.
아래 예제는 username_claim 필드를 preferred_username 값으로 구성하는 방법을
보여줍니다. 이렇게 하면 Teleport가 email claim 대신 preferred_username claim을
쿼리하도록 구성됩니다.:
kind: oidc
metadata:
# ...
spec:
# ...
username_claim: preferred_username
username_claim을 구성하는 데 사용하는 claim 값이 사용자를 고유하게 식별할 수 있는
값인지 확인하세요.
콜백 주소 변경
로컬 머신 대신 원격 머신으로 콜백해야 하는 경우 콜백 주소를 변경할 수 있습니다.
# --bind-addr sets the host and port tsh will listen on, and --callback changes
# what link is displayed to the user
$ tsh login --proxy=proxy.example.com --auth=github --bind-addr=localhost:1234 --callback https://remote.machine:1234
이것이 동작하려면 콜백에 사용될 원격 머신의 호스트 이름 또는 CIDR을
auth 커넥터의 client_redirect_settings를 통해 허용해야 합니다.
kind: oidc
metadata:
name: example-connector
spec:
client_redirect_settings:
# a list of hostnames allowed for HTTPS client redirect URLs
# can be a regex pattern
allowed_https_hostnames:
- remote.machine
- '*.app.github.dev'
- '^\d+-[a-zA-Z0-9]+\.foo.internal$'
# a list of CIDRs allowed for HTTP or HTTPS client redirect URLs
insecure_allowed_cidr_ranges:
- '192.168.1.0/24'
- '2001:db8::/96'
커넥터 테스트#
커넥터를 테스트하려면 다음 명령을 실행합니다:
$ cat gworkspace-connector.yaml | tctl sso test
이 명령은 브라우저를 열고 Google을 사용하여 Teleport 클러스터에 로그인하려고 합니다. 실패하면 문제 해결 정보를 위해 명령 출력을 검토합니다.
커넥터 만들기#
tctl 도구를 사용하여 커넥터를 만들려면 다음 명령을 실행합니다:
$ tctl create -f gworkspace-connector.yaml
커넥터를 만들면 Teleport 웹 UI에 새 로그인 옵션 Login with Google이 표시됩니다. 커맨드라인에서 로그인하려면:
$ tsh --proxy=proxy.example.com login --auth=google
이 명령은 싱글 사인온 엔드포인트 URL을 표시하고 브라우저에서 자동으로 열려고 합니다.
3/3단계. 기본 OIDC 인증 활성화#
이 가이드에서 구성한 인증 커넥터를 Teleport 클러스터의 기본 인증 방식으로 설정할 수 있도록 클러스터 인증 기본 설정을 편집하십시오.
Teleport Web UI를 엽니다. 왼쪽 사이드바에서 Zero Trust Access > Auth Connectors로 이동합니다. 기본값으로 설정하려는 커넥터를 찾아 점 세 개 메뉴에서 Set as default를 선택하십시오.
Teleport 리소스를 구성 파일로 관리하는 경우, 동적 리소스를 사용하여 기본 인증
커넥터를 선택할 수 있습니다. 이 경우 tctl을 사용하여 cluster_auth_preference
값을 편집하십시오:
$ tctl edit cluster_auth_preference
spec.type 값을 oidc로 설정하십시오:
kind: cluster_auth_preference
metadata:
...
name: cluster-auth-preference
spec:
...
type: oidc
...
version: v2
저장 후 편집기를 종료하면 tctl이 리소스를 업데이트합니다:
cluster auth preference has been updated
클러스터 인증 기본 설정을 편집하는 추가 방법
클러스터 인증 기본 설정은 Teleport Terraform 프로바이더 리소스로 제공됩니다. 구성 옵션 목록은 Cluster Auth Preferences Resource Reference에서 확인하십시오.
Teleport를 자체 호스팅하는 경우, Teleport Auth Service 구성 파일을 편집하여 다음을 포함할 수 있습니다:
# Snippet from /etc/teleport.yaml
auth_service:
authentication:
type: oidc
아이덴티티 프로바이더를 구성하기 전에 다시 로그인해야 하는 경우,
--auth=local
다음 단계#
이제 Teleport를 자격 증명 공급자(identity provider)에 연결했으므로, Teleport가 IdP 데이터를 Teleport 역할에 포함하는 방식을 사용자 정의할 수 있습니다.
**역할 템플릿(role templates)**을 사용하면 IdP의 사용자 데이터를 Teleport
역할에 직접 포함할 수 있습니다. 역할 필드 값에 external 템플릿 변수를 사용하면,
Teleport가 해당 값을 IdP에서 전달받습니다. 다음 예시에서는 사용자가 원격 시스템의
특정 프린시펄(principal)을 가정하도록 허용하는 데 사용할 수 있는 모든 역할 옵션이
IdP에서 옵니다:
kind: role
version: v7
metadata:
name: sso-users
spec:
allow:
logins: ['{{external.logins}}']
aws_role_arns: ['{{external.aws_role_arns}}']
azure_identities: ['{{external.azure_identities}}']
db_names: ['{{external.db_names}}']
db_roles: ['{{external.db_roles}}']
db_users: ['{{external.db_users}}']
desktop_groups: ['{{external.desktop_groups}}']
gcp_service_accounts: ['{{external.gcp_service_accounts}}']
host_groups: ['{{external.host_groups}}']
host_sudoers: ['{{external.host_sudoers}}']
kubernetes_groups: ['{{external.kubernetes_groups}}']
kubernetes_users: ['{{external.kubernetes_users}}']
windows_desktop_logins: ['{{external.windows_desktop_logins}}']
external 템플릿 변수 사용에 대한 자세한 내용은 역할
템플릿을 참조하세요.
위에 나열된 필드에 대한 설명은 역할 레퍼런스를 참조하세요.
IdP 사용자 데이터를 Teleport 역할에 포함하기 전에 변환해야 하는 경우, **로그인 규칙(Login Rules)**을 사용하여 이를 수행할 수 있습니다. 로그인 규칙을 사용하면 IdP가 Teleport가 예상하는 형식과 다른 형식으로 사용자 데이터를 제공하더라도 외부 트레잇(external traits)을 Teleport 역할에 포함할 수 있습니다. 로그인 규칙에 대해 자세히 알아보세요.
문제 해결#
SSO 구성 문제를 해결하는 것은 까다로울 수 있습니다. 일반적으로 Teleport 관리자는 다음을 수행할 수 있어야 합니다:
- SSO 공급자가 Teleport로 내보내고 전달하는 SAML/OIDC 클레임과 값이 무엇인지 확인할 수 있어야 합니다.
- Teleport가 수신한 클레임을 커넥터에 정의된 역할 매핑에 어떻게 매핑하는지 확인할 수 있어야 합니다.
- 셀프 호스팅 Teleport Enterprise 클러스터의 경우, Teleport Proxy Service와 SSO 공급자 모두에 대해 HTTP/TLS 인증서가 올바르게 구성되어 있는지 확인해야 합니다.
무언가 제대로 동작하지 않는다면, 다음을 권장합니다:
- 커넥터 정의에서 호스트 이름, 토큰, TCP 포트를 다시 한 번 확인하십시오.
Web UI 사용하기#
"access denied" 또는 기타 로그인 오류가 발생하면 가장 먼저 확인해야 할 곳은 Audit Log입니다. 레코딩을 보려면 Teleport Web UI에서 Audit을 선택한 다음, 메뉴에서 Session Recordings를 클릭하십시오.

clusteradmin 역할이 설정되지 않아 사용자가 거부되는 예시입니다:
{
"code": "T1001W",
"error": "role clusteradmin is not found",
"event": "user.login",
"message": "Failed to calculate user attributes.\n\trole clusteradmin is not found",
"method": "oidc",
"success": false,
"time": "2024-11-07T15:41:25.584Z",
"uid": "71e46f17-d611-48bb-bf5e-effd90016c13"
}
Teleport에 예상한 Node가 표시되지 않음#
Teleport Auth Service는 Teleport에 연결된 리소스를 나열하라는 요청(예: Web UI 또는
tsh ls를 통한 리소스 표시)을 받으면, 현재 사용자가 볼 수 있는 권한이 있는 리소스만
반환합니다.
사용자의 Teleport cluster에 있는 각 리소스에 대해 Auth Service는 다음 검사를 순서대로 적용하며, 한 검사라도 실패하면 해당 리소스를 사용자에게 숨깁니다:
- 사용자의 role 중 어느 것도 리소스의 label과 일치하는
deny규칙을 포함하지 않아야 합니다. - 사용자의 role 중 적어도 하나는 리소스의 label과 일치하는
allow규칙을 포함해야 합니다.
예상한 대로 리소스가 보이지 않는 경우, Access Controls
Reference에 문서화된 대로 사용자의 role에
적절한 allow 및 deny 규칙이 포함되어 있는지 확인하십시오.
SSO를 구성할 때, ID 공급자가 각 사용자의 trait를 올바르게 채우고 있는지
확인하십시오. 사용자가 Teleport에서 Node를 보려면, 역할의 allow.logins에 있는
템플릿 변수를 채운 결과가 사용자의 traits.logins 중 적어도 하나와
일치해야 합니다.
이 예시에서 사용자는 env: dev 레이블이 있는 Node에 대해 사용자 이름 ubuntu, debian과 SSO trait logins의 사용자 이름을 갖게 됩니다. SSO trait 사용자 이름이 bob이라면, 사용자 이름에는 ubuntu, debian, bob이 포함됩니다.
kind: role
metadata:
name: example-role
spec:
allow:
logins: ['{{external.logins}}', ubuntu, debian]
node_labels:
'env': 'dev'
version: v5
OIDC에서 싱글 사인온이 실패함#
"Failed to verify JWT: oidc: unable to verify JWT signature: no matching keys" 오류 메시지가 발생하는 경우, 이는 일반적으로 JWT 토큰에 서명하는 데 사용된 알고리즘과 JSON Web Key Set(JWKS)가 지원하는 알고리즘 간의 불일치를 나타냅니다. 구체적으로, 토큰은 하나의 알고리즘(예: HS256)으로 서명되었는데 JWKS는 다른 알고리즘(예: RS256)에 대한 키만 나열하고 있을 수 있습니다. 이 문제는 매우 낮은 수준의 기능을 제공하는 ID 공급자를 사용할 때 주로 발생합니다.
확인해야 할 사항은 다음과 같습니다:
- JWT 헤더가 올바른 서명 알고리즘을 지정하고 있는지 확인하십시오. 이는 JWKS 엔드포인트 응답의 keys 섹션에 나열된 알고리즘 중 하나와 일치해야 합니다.
- JWKS 엔드포인트가 관련된 모든 공개 키를 반환하고 있는지 확인하십시오. 때때로 키 로테이션으로 인해 유효한 키가 누락될 수 있습니다.
문제를 해결하려면, JWT 알고리즘 헤더를 JWKS에서 지원하는 알고리즘에 맞추십시오. 필요한 경우 키를 로테이션하십시오. JWKS가 활성화된 공개 키만 게시하는지 확인하십시오. 올바르게 구성하면 서명이 성공적으로 검증됩니다.