Infograb logo
Teleport의 SAML 공급자를 사용하여 Grafana로 인증하기

Grafana는 오픈 소스 관측 가능성 플랫폼입니다. 그들의 기업 버전은 SAML 인증을 지원합니다. 이 가이드는 Teleport를 SAML 공급자로 구성하고, Grafana가 이를 통해 제공하는 아이덴티티를 수락하도록 도와줍니다.

Teleport는 SAML 호환 서비스에 대한 아이덴티티 제공자로 작용할 수 있으며, Teleport App Service 뒤에서 실행되는 서비스에 국한되지 않습니다.

전제 조건

  • grafana.ini에 대한 편집 권한이 있는 Grafana Enterprise 인스턴스.
    • SAML 연결을 위한 TLS 인증서/키를 생성할 신뢰할 수 있는 인증 기관.
  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.

  • tctl 관리 도구 및 tsh 클라이언트 도구 버전 >= 16.2.0.

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하세요.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl 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.yaml
role 'saml-idp-service-provider-manager' has been created

saml_idp_service_provider 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

  1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},saml_idp_service_provider"
  3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

  2. github.yaml을 편집하고 teams_to_roles 섹션에 saml_idp_service_provider을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - saml_idp_service_provider
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

  2. saml.yaml을 편집하고 attributes_to_roles 섹션에 saml_idp_service_provider을 추가합니다.

    이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - saml_idp_service_provider
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

  2. oidc.yaml을 편집하고 claims_to_roles 섹션에 saml_idp_service_provider을 추가합니다.

    이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - saml_idp_service_provider
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. 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
enabledSAML 인증을 활성화하려면 true로 설정합니다.
auto_logintrue로 설정하면 SAML을 사용한 자동 로그인이 활성화됩니다.
allow_idp_initiatedIdP 주도 로그인 허용을 위해 true로 설정합니다.
relay_stateIdP 주도 로그인에 대한 릴레이 상태입니다. Teleport의 IdP와 함께 작동하려면 ""로 설정해야 합니다.
private_key_pathGrafana를 식별하는 데 사용되는 TLS 키의 경로입니다.
certificate_pathGrafana를 식별하는 데 사용되는 TLS 인증서의 경로입니다.
idp_metadataTeleport 메타데이터 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로 설정한 경우 자동으로 리다이렉트됩니다.

Teleport 원문 보기