Teleport의 SAML 공급자를 사용하여 Grafana 인증하기
Teleport v18.9Grafana는 오픈 소스 관측성 플랫폼입니다. Teleport는 Teleport App Service 뒤에서 실행되는 서비스뿐만 아니라 SAML 호환 서비스에 대한 ID 공급자로 작동할 수 있습니다. Grafana를 통해 사용자는 SAML을 사용하여 인증할 수 있습니다.
Grafana는 오픈 소스 관측성 플랫폼입니다. 엔터프라이즈 버전은 SAML 인증을 지원합니다. 이 가이드는 Teleport를 SAML 공급자로 설정하고, Grafana가 Teleport가 제공하는 ID를 수용하도록 설정하는 방법을 안내합니다.
Teleport는 Teleport App Service 뒤에서 실행되는 서비스뿐만 아니라 SAML 호환 서비스에 대한 ID 공급자로 작동할 수 있습니다.
작동 방식#
Grafana를 통해 사용자는 SAML을 사용하여 인증할 수 있습니다. Teleport에서 SAML IdP 메타데이터를 내보낸 다음, Grafana 설정 파일에 제공하여 Grafana가 Teleport IdP의 인증 기관을 신뢰하도록 지시할 수 있습니다. 그런 다음 Teleport 클러스터는 SAML IdP 서비스 프로바이더 리소스를 사용하여 Teleport SAML IdP에 Grafana 배포에 대한 정보를 제공합니다.
사전 요구사항#
-
grafana.ini에 편집 접근 권한이 있는 Grafana Enterprise 인스턴스.- SAML 연결을 위한 TLS 인증서/키를 생성할 신뢰할 수 있는 인증 기관.
-
실행 중인 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단계. SAML 서비스 프로바이더 객체 접근을 위한 Teleport 역할 설정#
먼저, saml_idp_service_provider 객체를 읽고 수정할 수 있는 권한이 있는 사용자로 Teleport에 로그인했는지 확인해야 합니다. 기본 editor 역할에는 이미 이 접근 권한이 있지만, 더 맞춤화된 설정을 사용하는 경우 다음 내용으로 sp-manager.yaml이라는 역할을 생성합니다:
kind: role
version: v7
metadata:
name: sp-manager
spec:
allow:
rules:
- resources: [saml_idp_service_provider]
verbs: [list, create, read, update, delete]
tctl로 생성합니다:
$ tctl create sp-manager.yaml
role 'sp-manager' has been created
Web UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
인증 공급자에 맞는 적절한 명령을 실행하여 saml_idp_service_provider 역할을
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?},saml_idp_service_provider" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에saml_idp_service_provider을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - saml_idp_service_provider -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
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섹션에saml_idp_service_provider을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - saml_idp_service_provider -
변경 사항을 적용합니다:
$ 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섹션에saml_idp_service_provider을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - saml_idp_service_provider -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
2/3단계. Teleport ID 공급자를 인식하도록 Grafana 설정#
Grafana SSO 설정의 첫 번째 단계는 Teleport의 SAML ID 공급자 메타데이터를 가져오는 것입니다. https://<proxy-address>/enterprise/saml-idp/metadata로 이동하여 이 메타데이터를 XML 형식으로 얻을 수 있습니다. teleport-metadata.xml과 같이 기억하기 쉬운 파일 이름으로 저장합니다.
Grafana 설정에 제공하기 위해 base64를 사용하여 메타데이터를 인코딩합니다:
$ cat teleport-metadata.xml | base64
Grafana 호스트에서 [auth.saml] 섹션을 추가하여 grafana.ini를 편집합니다:
[auth.saml]
enabled = true
auto_login = false
allow_idp_initiated = true
relay_state = ""
private_key_path = '/path/to/certs/grafana-host-key.pem'
certificate_path = '/path/to/certs/grafana-host.pem'
idp_metadata = 'PEVudGl0eURl.....'
assertion_attribute_name = uid
assertion_attribute_login = uid
assertion_attribute_email = uid
assertion_attribute_groups = eduPersonAffiliation
| 키 | 값 |
|---|---|
enabled |
SAML 인증을 활성화하려면 true로 설정합니다. |
auto_login |
true로 설정하면 SAML을 사용한 자동 로그인이 활성화됩니다. |
allow_idp_initiated |
IdP 시작 로그인을 허용하려면 true로 설정합니다. |
relay_state |
IdP 시작 로그인의 릴레이 상태. Teleport IdP와 함께 작동하려면 ""로 설정해야 합니다. |
private_key_path |
Grafana를 식별하는 데 사용되는 TLS 키 경로. |
certificate_path |
Grafana를 식별하는 데 사용되는 TLS 인증서 경로. |
idp_metadata |
Teleport 메타데이터 XML 파일의 base64로 인코딩된 내용. |
assertion_* |
SAML 어설션에 매핑될 다양한 Grafana 사용자 필드. |
SAML을 위한 grafana.ini 편집에 대한 자세한 내용은 Grafana의 Grafana에서 SAML 인증 설정 페이지를 확인할 수 있습니다.
3/3단계. Teleport에 서비스 프로바이더 메타데이터 추가#
편집된 설정으로 Grafana를 다시 시작한 후, /saml/metadata 경로에서 Grafana의 SAML 메타데이터를 다운로드합니다. entity_descriptor 값으로 다운로드한 메타데이터를 사용하여 이 서비스 프로바이더를 정의하는 grafana-sp.yaml 파일을 생성합니다:
kind: saml_idp_service_provider
metadata:
# 서비스 프로바이더의 친숙한 이름. 서비스 프로바이더 관리 및
# ID 공급자 시작 SSO에서 사용됩니다.
name: saml-grafana
spec:
# entity_descriptor는 서비스 프로바이더 XML입니다.
entity_descriptor: |
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"...
version: v1
Teleport에 서비스 프로바이더 정의를 추가합니다:
$ tctl create grafana-sp.yaml
이제 Grafana 로그인 화면에 "Sign in with SAML" 버튼이 나타나며, 이를 클릭하면 Teleport 로그인 화면으로 이동합니다. 또는 auto_login = true로 설정한 경우 자동으로 리디렉션됩니다.