Grafana는 오픈 소스 관측 가능성 플랫폼입니다. 그들의 기업 버전은 SAML 인증을 지원합니다. 이 가이드는 Teleport를 SAML 공급자로 구성하고, Grafana가 이를 통해 제공하는 아이덴티티를 수락하도록 도와줍니다.
Teleport는 SAML 호환 서비스에 대한 아이덴티티 제공자로 작용할 수 있으며, Teleport App Service 뒤에서 실행되는 서비스에 국한되지 않습니다.
전제 조건
grafana.ini
에 대한 편집 권한이 있는 Grafana Enterprise 인스턴스.- SAML 연결을 위한 TLS 인증서/키를 생성할 신뢰할 수 있는 인증 기관.
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.
-
tctl
관리 도구 및tsh
클라이언트 도구 버전 >= 16.2.0.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
github
인증 커넥터를 가져옵니다:tctl get github/github --with-secrets > github.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을github.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시github.yaml
파일을 제거해야 합니다. -
github.yaml
을 편집하고teams_to_roles
섹션에saml_idp_service_provider
을 추가합니다.이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.
여기에 예시가 있습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - saml_idp_service_provider
-
변경 사항을 적용합니다:
tctl create -f github.yaml -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.
-
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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
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 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
2단계/3단계. Grafana가 Teleport의 아이덴티티 제공자를 인식하도록 구성하기
Grafana를 SSO로 구성하는 첫 번째 단계는 Teleport의
SAML 아이덴티티 제공자 메타데이터를 검색하는 것입니다. https://<proxy-address>/enterprise/saml-idp/metadata
로 이동하여
XML 형식의 메타데이터를 얻을 수 있습니다. 기억하기 쉬운 파일 이름으로
teleport-metadata.xml
로 저장합니다.
메타데이터를 base64
로 인코딩하여 Grafana 구성에 제공합니다:
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 사용자 필드입니다. |
Grafana의 grafana.ini
를 SAML에 대해 편집하는 방법에 대한 자세한 정보는
그들의 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
로 설정한 경우 자동으로 리다이렉트됩니다.