Infograb logo
Teleport를 SAML 아이덴티티 공급자로 사용하기

SAML 아이덴티티 공급자로서 Teleport 사용하기

이 가이드는 외부 서비스에 인증하기 위해 Teleport를 아이덴티티 공급자로 사용하는 방법에 대한 예를 자세히 설명합니다.

전제 조건

  • 실행 중인 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 명령어를 실행할 수도 있습니다.
  • SAML에 익숙하지 않으시다면, 진행하기 전에 SAML 아이덴티티 공급자 참조를 검토하는 것을 고려하세요.
  • 서비스 제공자 리소스를 생성할 수 있는 권한이 있는 사용자. 미리 설정된 editor 역할은 이 권한을 가지고 있습니다.
  • 테스트를 위한 SAML 애플리케이션(또는 SAML 서비스 제공자 또는 SP). 이 가이드에서는 Teleport SAML IdP를 테스트할 수 있는 무료 테스트 서비스인 RSA Simple Test Service Provider를 사용할 것입니다. 테스트 서비스는 보호된 페이지를 가지고 있으며, 사용자가 유효한 SAML 어설션 흐름을 통해 사이트에 연합될 때만 접근할 수 있습니다.

1단계/3. Teleport에 서비스 제공자 추가하기

Teleport에 서비스 제공자를 추가하려면, 서비스 제공자 메타데이터를 구성해야 합니다. 이는 서비스 제공자의 Entity IDACS URL 값을 제공하거나, 서비스 제공자의 엔티티 설명자 값(일명 메타데이터 파일, XML 파일)을 제공하여 구성할 수 있습니다.

아래에서는 두 가지 구성 옵션을 보여줍니다.

먼저, 웹 UI에서 Access Management 아래의 Enroll New Resource 메뉴를 클릭합니다. 검색 상자에 "saml"을 입력하면 SAML 애플리케이션 통합 타일이 표시됩니다. 타일을 클릭합니다.

첫 번째 구성 단계인 Teleport의 아이덴티티 공급자 메타데이터로 서비스 제공자 구성하기는 Teleport SAML IdP 메타데이터 값을 보여줍니다. 이 가이드에 따라 다음 단계로 이동하려면 Next 버튼을 클릭하면 됩니다. 이 버튼은 Teleport에 서비스 제공자 추가 단계로 이동하게 됩니다.

옵션 1: Entity ID 및 ACS URL로 구성하기

이 옵션에서는 서비스 제공자를 추가하는 데 필요한 최소 구성 값은 다음과 같습니다:

  1. Entity ID: SAML 메타데이터 값 또는 서비스 제공자의 엔드포인트.
  2. ACS URL: SAML 인증 후 사용자가 리디렉션될 엔드포인트. ACS URL은 SAML SSO URL로도 불립니다.

Simple Test Service Provider를 구성하려면 제공해야 할 값은 다음과 같습니다:

  • 앱 이름: iamshowcase
  • SP Entity ID / Audience URI: iamshowcase
  • ACS URL / SP SSO URL: https://sptest.iamshowcase.com/acs

Finish 버튼을 클릭하면 iamshowcase 앱이 이제 Teleport에 추가됩니다.

다음 saml_idp_service_provider 사양은 Simple Test Service Provider를 Teleport에 추가하기 위한 참조입니다:

kind: saml_idp_service_provider
metadata:
  # 서비스 제공자의 친숙한 이름. 이는 서비스 제공자를 관리하는 데 사용됩니다.
  name: iamshowcase
spec:
  # entity_id는 메타데이터 값 또는 서비스 제공자의 엔드포인트입니다.
  entity_id: iamshowcase
  # acs_url은 SAML 인증 후 사용자가 리디렉션될 엔드포인트입니다.
  acs_url: https://sptest.iamshowcase.com/acs
version: v1

tctl를 사용하여 사양을 Teleport에 추가합니다:

tctl create iamshowcase.yaml

SAML IdP 서비스 제공자 'iamshowcase'가 생성되었습니다.

Note

이 구성 방법을 사용하면, Teleport는 먼저 entity_id 엔드포인트를 쿼리하여 엔티티 설명자를 가져오려 시도합니다. 해당 엔드포인트에서 엔티티 설명자를 찾을 수 없는 경우, Teleport는 주어진 entity_idacs_url 값으로 새 엔티티 설명자를 생성합니다.

옵션 2: Entity Descriptor 파일로 구성하기

서비스 제공자가 엔티티 설명자 파일을 다운로드할 수 있는 옵션을 제공하거나 엔티티 설명자에 대한 더 많은 제어가 필요하다면, 이 방법이 서비스 제공자를 Teleport에 추가하는 데 권장되는 방법입니다.

이 옵션에서는 서비스 제공자 메타데이터를 구성하는 데 필요한 모든 세부정보가 포함된 서비스 제공자 엔티티 설명자 파일을 제공합니다.

Teleport에 서비스 제공자 추가 페이지에서 SAML 서비스 제공자 이름(iamshowcase)을 제공합니다. 이제 + Add Entity Descriptor (optional) 버튼을 클릭하면 엔티티 설명자 편집기가 확장됩니다. Simple Test Service Provider 메타데이터 파일을 복사하고, URL https://sptest.iamshowcase.com/testsp_metadata.xml에서 가져온 후 이를 Teleport 웹 UI의 엔티티 설명자 편집기에서 붙여넣습니다.

Finish 버튼을 클릭하면 iamshowcase 앱이 이제 Teleport에 추가됩니다.

먼저 Simple Test Service Provider에서 메타데이터를 iamshowcase.xml로 다운로드합니다:

curl -o iamshowcase.xml https://sptest.iamshowcase.com/testsp_metadata.xml

아래 템플릿을 사용하여 iamshowcase.yaml이라는 파일을 작성합니다. 방금 다운로드한 메타데이터를 saml_idp_service_provider 객체의 entity_descriptor 필드에 할당합니다:

kind: saml_idp_service_provider
metadata:
  # 서비스 제공자의 친숙한 이름. 이는 서비스 제공자를 관리하는 데 사용됩니다.
  name: iamshowcase
spec:
  # entity_descriptor는 서비스 제공자 XML입니다.
  entity_descriptor: |
    <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"...
version: v1

tctl을 사용하여 이를 Teleport에 추가합니다:

tctl create iamshowcase.yaml

SAML IdP 서비스 제공자 'samltest-id'가 생성되었습니다.

Important

entity_descriptor가 제공되면, 그 내용은 entity_idacs_url에 제공된 값보다 우선합니다.

Teleport는 서비스 제공자가 처음 생성될 때만 엔티티 설명서를 가져오거나 생성하려고 합니다. 이후 업데이트에는 서비스 제공자 사양에 엔티티 설명서가 있어야 합니다. 따라서 서비스 제공자를 업데이트할 때는 먼저 Teleport에 저장된 사양을 가져오고 그 후에 구성을 수정해야 합니다.

서비스 제공자 사양 가져오기

tctl get saml_idp_service_provider/<서비스 제공자 이름> > service-provider.yml

2단계/3. Teleport의 SAML IdP를 인식하도록 서비스 제공자 구성하기

이 단계는 서비스 제공자마다 다릅니다. 일부 서비스 제공자는 Teleport SAML IdP Entity ID, SSO URL 및 X.509 인증서를 제공하도록 요청할 수 있습니다. 다른 서비스는 Teleport SAML IdP 메타데이터 파일을 업로드할 것을 요청할 수 있습니다.

이 값들은 Teleport 웹 UI의 Teleport의 아이덴티티 공급자 메타데이터로 서비스 제공자 구성하기 UI에서 찾을 수 있습니다. 이는 SAML 앱 등록 흐름에서 첫 번째 단계로 표시됩니다.

이 가이드의 기본이 되는 Simple Test Service Provider의 경우, 샘플 앱은 잘 형식화된 IdP 연합 SAML 어설션 데이터를 위해 보호된 페이지에 대한 접근을 허가하리라 설계되었습니다.

따라서, 이전 단계에서 Finish 버튼을 클릭하면 Simple Test Service Provider의 보호된 페이지가 자원 페이지에서 이미 접근 가능하게 됩니다.

3단계/3. iamshowcase 보호된 페이지 접근 확인하기

모든 것이 제대로 작동하는지 확인하기 위해 Teleport 웹 UI의 Resources 페이지로 이동합니다.

"iamshowcase" 앱이 이제 자원 타일 아래에 나타날 것입니다. 이 타일 내부에서 Login 버튼을 클릭하면 iamshowcase 보호된 페이지로 전달됩니다.

이 페이지는 Teleport 사용자 세부사항과 역할과 같은 다른 속성을 보여줍니다. 이는 작동하는 idp-initiated SSO 로그인 흐름으로 구성된 Teleport에 서비스 제공자를 추가하는 것을 보여줍니다.

권장: 서비스 제공자를 관리하기 위한 전용 역할 만들기

프로덕션 환경에서는 서비스 제공자를 관리하기 위한 전용 역할을 만드는 것이 좋습니다.

전용 역할을 만들려면 먼저 saml_idp_service_provider 객체를 읽고 수정할 수 있는 권한을 가진 사용자로 Teleport에 로그인했는지 확인하세요. 기본 editor 역할은 이미 이 권한을 가지고 있지만, 더 맞춤화된 구성을 사용하는 경우 다음 내용을 포함하여 sp-manager.yaml이라는 역할을 생성합니다:

kind: role
metadata:
  name: sp-manager
spec:
  allow:
    rules:
    - resources:
      - saml_idp_service_provider
      verbs:
      - list
      - create
      - read
      - update
      - delete
version: v7

tctl로 역할을 생성합니다:

tctl create sp-manager.yaml
역할 'saml-idp-service-provider-manager'가 생성되었습니다.

다음으로, 사용자에게 역할을 추가합니다.

sp-manager 역할을 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?},sp-manager"
  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 섹션에 sp-manager을 추가합니다.

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

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - sp-manager
    
  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 섹션에 sp-manager을 추가합니다.

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

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - sp-manager
    
  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 섹션에 sp-manager을 추가합니다.

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

    여기에 예시가 있습니다:

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

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

다음 단계

Teleport 원문 보기