Infograb logo
SAML 아이덴티티 제공자 참조

이 페이지는 Teleport에서 사용할 수 있는 SAML 아이덴티티 제공자에 대한 세부정보를 제공합니다.

SAML 아이덴티티 제공자란?

SAML 아이덴티티 제공자는 Teleport 사용자가 SAML Single Sign-On을 지원하는 Teleport 내부 및 외부의 외부 애플리케이션에 인증 및 권한 부여를 할 수 있도록 합니다.

기본 정의

다음 정의는 OASIS의 SAML 사양 문서에서 재구성되고 요약된 것입니다. 문서의 하단에서 참조할 수 있습니다.

Assertions

아이덴티티 제공자가 만든 하나 이상의 진술을 제공하는 정보 패키지입니다. Assertions는 일반적으로 주제에 대해 이루어지며, Teleport의 경우 이는 Teleport 사용자에 해당합니다. 이는 "사용자 bob은 역할 editor, access에 속합니다."와 같이 사용자에 대한 사실의 진술로 볼 수 있습니다.

Service Provider

서비스 제공자는 주제에 대한 assertions를 사용하여 액세스를 제어하고 맞춤형 서비스를 제공합니다. 이들은 이러한 assertions를 위해 아이덴티티 제공자에 의존합니다. Teleport의 경우 서비스 제공자는 SAML Single Sign-On을 허용하는 Slack, Vercel 등의 애플리케이션입니다.

Identity Provider

주제에 대한 assertions를 만드는 서비스입니다.

Service/identity provider initiated SSO

로그인 프로세스는 서비스 제공자 또는 아이덴티티 제공자 중 하나에 의해 시작될 수 있습니다. 이들 각각을 트리거하는 프로세스는 미세하게 다릅니다. 서비스 제공자는 서비스 제공자 주도 SSO를 위한 SSO 프로세스를 시작할 책임이 있습니다. 아이덴티티 제공자는 아이덴티티 제공자 주도 SSO를 위한 프로세스를 시작할 책임이 있습니다.

Endpoints

Metadata URL

https://<proxy-address>/enterprise/saml-idp/metadata

이는 아이덴티티 제공자의 XML 메타데이터를 검색할 수 있는 URL입니다. 서비스 제공자는 이 파일에서 정보가 필요하여 서비스 제공자와 아이덴티티 제공자 간의 신뢰를 설정합니다.

Single Sign-On Service URL

https://<proxy-address>/enterprise/saml-idp/sso

이는 서비스 제공자가 아이덴티티 제공자와 assertions를 교환하는 데 사용할 URL입니다. 이 URL은 다음 바인딩을 지원합니다:

  • HTTP-Redirect
  • HTTP-POST

Identity provider initiated SSO URL

https://<proxy-address>/enterprise/saml-idp/login/<sp-name>

이 URL은 아이덴티티 제공자 주도 SSO를 촉진합니다. sp-name은 특정 서비스 제공자 객체의 metadata.name과 일치합니다.

Teleport SAML 서비스 제공자 객체

아래는 서비스 제공자 객체입니다. 이러한 객체는 Teleport에 추가되어야 Teleport가 외부 서비스 제공자를 신뢰할 수 있습니다.

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

Assertions

현재 Teleport의 SAML 아이덴티티 제공자가 제공하는 assertions는 아래와 같습니다.

친숙한 이름전체 이름설명형식
uidurn:oid:0.9.2342.19200300.100.1.1Teleport의 사용자 IDurn:oasis:names:tc:SAML:2.0:attrname-format:uri
eduPersonAffiliationurn:oid:1.3.6.1.4.1.5923.1.1.1.1사용자의 Teleport 역할urn:oasis:names:tc:SAML:2.0:attrname-format:uri

SAML 아이덴티티 제공자 액세스 비활성화

역할 수준

역할 수준에서 SAML 아이덴티티 제공자에 대한 액세스를 비활성화하려면 사용자가 다음 role 옵션으로 역할을 할당하십시오:

...
options:
    ...
    idp:
      saml:
        enabled: false
    ...

사용자가 아이덴티티 제공자에 대한 액세스를 비활성화하는 역할에 배정되면, 다른 역할이 액세스를 허용하더라도 접근이 거부됩니다.

클러스터 수준

클러스터 수준에서 아이덴티티 제공자에 대한 액세스를 비활성화하려면 다음 설정으로 cluster_auth_preference 객체를 생성하거나 업데이트하십시오:

kind: cluster_auth_preference
metadata:
  name: cluster-auth-preference
spec:
  ...
  idp:
    saml:
      enabled: false
  ...
version: v2

이 설정은 모든 사용자의 SAML 아이덴티티 제공자에 대한 액세스를 비활성화합니다. 역할 수준 권한에 관계없이 모두 적용됩니다.

문제 해결

외부 애플리케이션에 로그인할 때 Bad Request

Teleport 서버가 Bad Request를 반환하면, 서비스 제공자 메타데이터가 Teleport에 제대로 추가되지 않았을 수 있으며, 결과적으로 Teleport는 서비스 제공자를 찾을 수 없습니다. 다음과 같이 Teleport 로그에서 로그 항목을 확인하여 검증할 수 있습니다:

2023-03-01T10:32:34-05:00 INFO [SAMLIDP] failed to validate request: cannot find service provider https://samltest.id/saml/sp: could not find service provider https://samltest.id/saml/sp pid:31036.1 saml@v0.4.12/identity_provider.go:232

외부 애플리케이션에 로그인할 때 Not Found

Teleport 서버가 Not Found를 반환하면, 사용자에게 속한 역할 중 SAML IdP 액세스가 명시적으로 비활성화되어 있지 않은지 확인하십시오. 각 사용자 역할의 options 섹션에서 idp 섹션의 saml 액세스가 비활성화되어 있는지 찾아보십시오. 또한 사용자의 역할이 saml_idp_service_provider 리소스에 대한 listread 작업을 허용하는지 확인하십시오.

...
spec:
  allow:
    ...
    rules:
    - resources:
      - saml_idp_service_provider
      verbs:
      - list
      - read
...
options:
    ...
    idp:
      saml:
        enabled: false
    ...

참고 문헌

Teleport 원문 보기