Teleport SAML IdP를 사용한 GCP 인력 ID 페더레이션
GCP 인력 ID 페더레이션(Workforce Identity Federation)은 Google Workspace Admin 또는 GCP Cloud Identity에서 관리되지 않는 ID에 대해 GCP 웹 콘솔 및 API 접근을 프로비저닝할 수 있습니다.
GCP 인력 ID 페더레이션(Workforce Identity Federation)은 Google Workspace Admin 또는 GCP Cloud Identity에서 관리되지 않는 ID에 대해 GCP 웹 콘솔 및 API 접근을 프로비저닝할 수 있습니다.
인력 ID 페더레이션 설정의 일반적인 워크플로는 먼저 인력 풀(workforce pool)을 생성하는 것입니다. 그런 다음 풀 ID 공급자를 생성하고 설정합니다. 풀 ID 공급자가 설정되면, 페더레이션 인증 프로세스에서 ID 공급자가 사용자 ID에 서명하는 한 사용자는 GCP 웹 콘솔에 로그인할 수 있습니다.
이 가이드에서는 GCP 인력 ID 페더레이션 서비스를 Teleport SAML IdP와 통합하여 사용자가 Teleport로 인증하여 GCP 웹 콘솔에 로그인할 수 있는 방법을 자세히 설명합니다.
사전 요구사항#
-
A running Teleport Enterprise cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.
-
The
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Determine the version of your Teleport cluster. The
tctlandtshclients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at/v1/webapi/findand 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')" -
Follow the instructions for your platform to install
tctlandtshclients:
-
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.
- SAML을 처음 사용하신다면 진행하기 전에 SAML ID 공급자 레퍼런스를 먼저 확인하시기 바랍니다.
- 서비스 프로바이더 리소스를 생성할 권한이 있는 사용자. 사전 설정된
editor역할에 이 권한이 있습니다. - 인력 ID 풀, 풀 공급자 및 IAM 정책을 생성할 권한이 있는 GCP IAM API 접근. GCP 인력 ID 페더레이션을 설정하려면 최소한 "IAM Workforce Pool Admin"과 "Organization Viewer" GCP 역할이 모두 필요합니다(GCP 조직 수준에서 할당).
Teleport 웹 UI는 GCP 인력 ID 페더레이션에 대한 가이드 설정과 수동 설정 플로우를 모두 제공합니다. 수동 플로우는 Teleport에 SAML 서비스 프로바이더를 등록하는 방법과 유사합니다. 가이드 플로우에서 Teleport는 인력 풀 및 풀 공급자를 설정하는 bash 스크립트를 생성하여 통합을 빠르게 시작할 수 있도록 도와줍니다.
가이드 설정 플로우#
Teleport에서 생성한 스크립트로 인력 풀 및 풀 공급자를 생성합니다.
웹 UI의 왼쪽 패널에서 Add New 아래 Resource 메뉴를 클릭합니다.
검색 상자에 "workforce"를 입력하면 인력 ID 페더레이션 통합 타일이 표시됩니다. 타일을 클릭합니다.

이제 아래 단계를 따릅니다.
1/3단계. 인력 풀 설정#
첫 번째 단계로, 스크립트 생성기에 다음 정보를 제공합니다.

- 조직 ID: GCP 계정의 조직 ID. 인력 풀을 생성하는 데 필요합니다.
- 인력 풀 이름: 생성할 인력 풀의 이름. 이름은 GCP 리소스 이름 지정 규칙을 따라야 합니다.
- 앱 이름 - 인력 풀 공급자 이름: SAML 앱 이름. 이 이름은 GCP에서 인력 풀 공급자 이름으로도 사용됩니다. 이름은 GCP 리소스 이름 지정 규칙을 따라야 합니다.
Generate Command 버튼을 클릭합니다. Teleport 웹 UI에 복사 가능한 bash 스크립트가 표시됩니다.
GCP Cloud Shell을 열고 Cloud Shell 터미널에 위에서 복사한 bash 스크립트를 붙여넣습니다.
스크립트가 실행되면 curl을 사용하여 다른 bash 스크립트를 다운로드합니다. 이 다운로드된 bash 스크립트는 teleport 바이너리를 다운로드하고 실행하도록 설정됩니다. teleport 바이너리를 다운로드하면, bash 스크립트는 teleport integration configure samlidp gcp-workforce 명령을 실행하여 위에서 제공한 리소스 이름으로 인력 풀 및 인력 풀 ID 공급자를 생성합니다.
인력 풀 공급자의 경우, Teleport는 GCP에서 두 가지 속성 매핑 필드도 생성합니다:
google.subject=assertion.subject: Teleport 사용자 이름을 GCP 사용자 이름으로 매핑합니다.google.groups=assertion.attributes.roles: Teleport 사용자 역할을 GCP 그룹으로 매핑합니다.
인력 풀과 풀 공급자가 생성되면, Teleport 웹 UI로 돌아가서 아래 단계를 따릅니다.
참고 - 리소스 이름과 ID: Teleport는 풀 이름과 풀 공급자 이름 값을 사용하여 인력 풀과 인력 풀 공급자의 리소스 이름과 리소스 ID를 모두 설정합니다.
2/3단계. Teleport에 인력 풀 추가#
Next 버튼을 클릭하여 UI의 다음 단계로 진행합니다.
이 단계에서 SAML IdP 서비스 프로바이더 이름, 엔티티 ID, ACS URL 및 속성 이름 "roles"가 포함된 하나의 속성 매핑 필드가 이미 입력되어 있는 것을 확인할 수 있습니다. 이 값들은 이전 단계에서 제공한 GCP 설정 값을 기반으로 Teleport가 생성합니다.
Finish 버튼을 클릭합니다. 인력 풀이 이제 SAML IdP 서비스 프로바이더 리소스로 Teleport에 추가됩니다.
참고 - 엔티티 ID와 ACS URL: 엔티티 ID와 ACS URL 값은 풀 이름과 풀 공급자 이름을 기반으로 생성됩니다. GCP에서 이 값 또는 속성 매핑을 업데이트하는 경우, Teleport의 SAML 서비스 프로바이더 스펙도 함께 업데이트해야 합니다.
3/3단계. GCP IAM 정책 생성#
GCP에서 풀 및 풀 공급자가 설정되고, 해당 설정이 Teleport에 SAML 서비스 프로바이더 리소스로 추가되면, Teleport 역할이 SAML 리소스 접근을 허용하는 한 사용자는 GCP 웹 콘솔에 로그인할 수 있습니다.
단, 이 단계에서는 인증된 사용자가 GCP 웹 콘솔에만 로그인할 수 있으며 리소스에는 아직 접근할 수 없습니다. 이를 위해서는 사용자에게 원하는 역할이 있는 GCP IAM 정책을 생성해야 합니다.
GCP Cloud Shell로 이동하여 IAM 정책을 생성합니다.
인력 풀에 대한 IAM 정책 생성 프로세스는 일반적인 GCP IAM 정책 설정과 유사하며, 유일한 차이점은 "member" 필드에서 외부 사용자 또는 사용자 그룹을 식별하는 인력 주체(workforce principal) 값을 참조해야 한다는 것입니다.
예를 들어, 다음 gcloud 명령은 GCP 프로젝트 리소스를 탐색할 수 있는 권한을 가진 인력 풀 사용자 test@example.com에 대한 IAM 정책을 생성하는 방법을 보여줍니다.
gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
--role="roles/browser" \
--member="principal://iam.googleapis.com/locations/global/workforcePools/<pool id>/subject/test@example.com"
IAM 정책에서 인력 사용자 및 그룹을 나타내는 데 사용할 수 있는 가능한 모든 값에 대한 GCP 문서를 참조하십시오.
인력 풀 접근 관리#
중요한 점은 GCP 인력 풀과 풀 ID 공급자가 GCP 조직 수준에서 생성된다는 것입니다. 프로젝트 수준에서 IAM 정책을 생성하여 각 인력 풀을 특정 프로젝트 및 리소스와 바인딩하는 세밀한 접근 제어를 설정할 수 있습니다.
여러 인력 풀을 생성하고 여러 인력 ID 공급자(Teleport에서 개별 SAML IdP 서비스 프로바이더로 추가됨)로 설정하는 것이 GCP 리소스에 대한 세밀한 접근 제어를 설정하는 권장 방법입니다.
속성 매핑#
속성 매핑을 통해 Teleport가 생성한 SAML 어설션 데이터에서 사용 가능한 사용자 ID와 트레잇을 GCP ID에 매핑할 수 있습니다.
GCP 속성 매핑은 조건식 대신 Google CEL을 사용하여 속성을 매핑한다는 약간의 차이점을 제외하면 Teleport SAML IdP 속성 매핑과 유사합니다.
가이드 플로우에서 Teleport는 두 가지 속성 매핑을 생성합니다:
- Google 주체 이름:
google.subject=assertion.subject. Teleport 사용자 이름을 Google 사용자 이름으로 매핑합니다. - Google 그룹:
google.groups=assertion.attributes.roles. Teleport 역할을 Google 그룹으로 매핑합니다.
자세한 내용은 인력 ID 페더레이션 속성 매핑 문서를 참조하십시오.
접근 조건#
접근 조건을 사용하여 GCP 인력 풀에 허용되는 사용자를 제어할 수 있습니다. 예를 들어, gcp-prod 역할 이름을 가진 Teleport 사용자만 GCP 풀에 허용되도록 하려면 인력 풀 공급자에 다음 접근 조건을 생성할 수 있습니다.
"gcp-prod" in assertion.attributes.roles
자세한 내용은 인력 ID 페더레이션 접근 조건 문서를 참조하십시오.
Teleport 역할을 기반으로 GCP 리소스 접근 매핑#
Teleport 역할을 기반으로 GCP 리소스 접근을 매핑하려면, Teleport 역할 이름을 참조하는 principalSet에 바인딩되는 IAM 정책을 생성해야 합니다.
예를 들어, gcp-dev 역할을 가진 Teleport 사용자에게 GCP 역할 roles/browser가 할당되는 접근 정책을 생성하려면 다음 단계를 따라야 합니다.
먼저, 인력 풀 ID 공급자는 Teleport 역할을 GCP 그룹으로 매핑하는 속성 매핑으로 설정해야 합니다. google.groups=assertion.attributes.roles
다음으로, GCP 그룹을 참조하는 IAM 정책을 생성해야 합니다.
gcloud projects add-iam-policy-binding \
--role="roles/browser" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<pool id>/group/gcp-dev"
Teleport 역할이 속성 매핑으로 GCP 그룹으로 매핑되었으므로, 정책은 gcp-dev 역할에 할당된 Teleport 사용자에게 접근 권한을 부여합니다.
gcloud CLI 및 Google Cloud API 클라이언트 인증#
GCP는 인력 풀 사용자를 위한 단기 토큰을 얻는 다양한 방법을 제공합니다.
이러한 단기 토큰은 gcloud CLI 및 Google Cloud API 클라이언트와 함께 사용할 수 있습니다.
자격 증명을 얻는 가장 간단한 방법은 gcloud CLI와 브라우저 기반 로그인 프로세스를 통한 것입니다.
먼저, 워크스테이션에 로그인 설정 파일을 생성합니다.
gcloud iam workforce-pools create-login-config \
locations/global/workforcePools/<pool_id>/providers/pool_provider_id \
--output-file=/Users/alice/.gcp/my-gcp-workforce-login.json
이 명령은 워크스테이션에 로그인 프로필을 생성합니다.
{
"universe_domain": "googleapis.com",
"universe_cloud_web_domain": "cloud.google",
"type": "external_account_authorized_user_login_config",
"audience": "//iam.googleapis.com/locations/global/workforcePools/pool_id/providers/pool_provider_id",
"auth_url": "https://auth.cloud.google/authorize",
"token_url": "https://sts.googleapis.com/v1/oauthtoken",
"token_info_url": "https://sts.googleapis.com/v1/introspect"
}
이제 브라우저 기반 로그인 플로우를 시작합니다.
gcloud auth login --login-config=/Users/alice/.gcp/my-gcp-workforce-login.json
브라우저 창이 열리고 Teleport SAML IdP로 사용자를 인증합니다.
인증이 성공하면, GCP는 사용자에게 Google Cloud SDK를 승인하도록 확인을 요청합니다.
확인하면, GCP는 gcloud CLI를 설정하는 데 필요한 자격 증명으로 응답합니다.
이제 인력 풀 사용자에 대해 범위가 지정되고 설정된 자격 증명으로 gcloud CLI를 사용할 수 있습니다.
gcloud CLI 또는 API 클라이언트와 함께 사용할 수 있는 자격 증명을 얻는 다른 방법을 알아보려면 GCP 문서를 참조하십시오.
주의: GCP는 로그인 프로필 설정 파일을 읽기 전용으로 만들고 ACL로 보호할 것을 권장합니다.
수동 통합#
가이드 통합이 시작을 쉽게 해주지만, 고급 설정 요구사항은 수동 통합을 따라야 합니다. 웹 UI와 Teleport tctl 클라이언트 모두 수동 설정에 사용할 수 있습니다. 다음 단계는 Teleport tctl 관리자 클라이언트를 사용한 설정을 보여줍니다.
1/3단계. 인력 풀 및 풀 공급자 생성#
먼저, 인력 풀을 생성합니다.
gcloud iam workforce-pools create <pool_name> \
--display-name=<pool_name> \
--organization=<gcp_organization_id> \
--description="Teleport workforce pool" \
--location=global
다음으로, Teleport SAML IdP 메타데이터 파일을 다운로드합니다.
curl -o teleport-samlidp-metadata.xml https://<proxy_host>/enterprise/saml-idp/metadata
마지막으로, 인력 풀 공급자를 생성합니다.
gcloud iam workforce-pools providers create-saml <pool_provider_name> \
--workforce-pool=<pool_name> \
--display-name=<pool_provider_name> \
--description="Teleport workforce identity provider" \
--idp-metadata-path=./teleport-samlidp-metadata.xml \
--attribute-mapping="google.subject=assertion.subject,google.groups=assertion.attributes.roles" \
--location=global
정식 레퍼런스로 GCP 인력 ID 페더레이션 문서를 참조하십시오.
2/3단계. Teleport에 인력 풀 추가#
인력 풀 및 인력 풀 공급자를 생성한 후, 인력 풀 공급자 설정을 Teleport의 SAML 서비스 프로바이더 리소스로 추가해야 합니다.
saml_idp_service_provider 스펙:
kind: saml_idp_service_provider
version: v1
metadata:
name: pool_provider_name
spec:
entity_id: https://iam.googleapis.com/locations/global/workforcePools/pool_name/providers/pool_provider_name
acs_url: https://auth.cloud.google/signin-callback/locations/global/workforcePools/pool_name/providers/pool_provider_name
preset: gcp-workforce
relay_state: https://console.cloud.google/
attribute_mapping:
- name: roles
name_format: urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified
value: user.spec.roles
pool_name과 pool_provider_name 값을 1단계에서 사용한 인력 풀 및 풀 공급자 이름으로 교체합니다.
스펙을 pool_provider_name.yaml 파일로 저장하고 SAML 서비스 프로바이더 리소스를 생성합니다.
$ tctl create pool_provider_name.yaml
3/3단계. GCP IAM 정책 생성#
이 단계는 가이드 설정 플로우의 3단계와 유사합니다. 인력 주체(workforce principal)를 나타내는 GCP IAM 정책을 생성해야 합니다.
