인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Teleport의 SAML 공급자를 사용하여 Grafana와 인증하기
Grafana는 오픈 소스 관찰 플랫폼입니다. 기업 버전은 SAML 인증을 지원합니다. 이 가이드는 Teleport를 SAML 공급자로 구성하고, Grafana가 제공하는 ID를 수락하도록 설정하는 데 도움이 될 것입니다.
Teleport는 Teleport App Service 뒤에서 실행되지 않는 SAML 호환 서비스에 대해서도 ID 공급자로 작용할 수 있습니다.
사전 조건
grafana.ini
에 대한 편집 액세스 권한이 있는 Grafana Enterprise 인스턴스.- SAML 연결을 위한 TLS 인증서/키를 생성할 신뢰된 인증 기관.
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하여 무료 평가판을 이용해 보십시오.
-
tctl
관리자 도구 및tsh
클라이언트 도구.tctl
및tsh
다운로드에 대한 지침은 설치 를 방문하십시오.
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, 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.yamlrole 'saml-idp-service-provider-manager' has been created
saml_idp_service_provider
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
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
인증 커넥터를 엽니다: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
구성 리소스를 가져옵니다: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
구성 리소스를 가져옵니다: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단계. Grafana가 Teleport의 ID 공급자를 인식하도록 구성하기
SSO를 위한 Grafana 구성의 첫 번째 단계는 Teleport의 SAML ID 공급자 메타데이터를 가져오는 것입니다. https://<proxy-address>/enterprise/saml-idp/metadata
로 이동하여 이 메타데이터를 XML 형식으로 얻을 수 있습니다. 기억하기 쉬운 파일 이름인 teleport-metadata.xml
로 저장하십시오.
메타데이터를 base64
로 인코딩하여 Grafana 구성에 제공합니다:
cat teleport-metadata.xml | base64
Grafana 호스트에서 grafana.ini
를 편집하여 [auth.saml]
섹션을 추가합니다:
[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 assertion에 매핑될 다양한 Grafana 사용자 필드입니다. |
SAML에 대해 grafana.ini
를 편집하는 것에 대한 더 많은 정보는 Grafana의 SAML 인증 구성 페이지를 참조하십시오.
3/3단계. Teleport에 서비스 제공자 메타데이터 추가
편집된 구성으로 Grafana를 재시작한 후, /saml/metadata
경로에서 SAML 메타데이터를 다운로드합니다. 다운로드한 메타데이터를 entity_descriptor
의 값으로 사용하여 서비스 제공자를 정의하는 grafana-sp.yaml
파일을 생성합니다:
kind: saml_idp_service_provider
metadata:
# 서비스 제공자의 친숙한 이름입니다. 이는 서비스 제공자를 관리하는 데 사용되며
# 아이덴티티 제공자 주도 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 로그인 화면에 "SAML로 로그인" 버튼이 표시되며, 이는 Teleport 로그인 화면으로 안내합니다. 또는 auto_login = true
로 설정한 경우, 자동으로 리디렉션됩니다.