Infograb logo
SAML IdP 속성 매핑

속성 매핑은 Teleport SAML Identity Provider가 SAML 응답에서 사용자 정의 사용자 속성을 주장하도록 구성합니다.
Teleport SAML IdP는 속성 매핑을 위해 세 가지 구성 가능한 필드를 지원합니다:

  • name : 나가는 속성의 이름. 필수. 이름은 속성 매핑 간에 고유해야 합니다.
  • value : predicate 표현식을 사용하여 정의된 값으로, Teleport 사용자 이름, 역할 또는 특성을 참조할 수 있습니다. 필수.
  • name_format : SAML 속성 이름 형식. 선택 사항. 다음 형식이 지원됩니다:
    • unspecified : 값이 urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified 과 같습니다. 기본값으로 사용됩니다.
    • uri : 값이 urn:oasis:names:tc:SAML:2.0:attrname-format:uri 와 같습니다.
    • basic : 값이 urn:oasis:names:tc:SAML:2.0:attrname-format:basic 와 같습니다.

속성 매핑은 Teleport 웹 UI에서 SAML 애플리케이션을 추가할 때 구성할 수 있으며, tctl create 로 생성된 saml_idp_service_provider 리소스 사양이나 API를 통해서도 가능합니다.

kind: saml_idp_service_provider
metadata:
  name: example.com
spec:
  entity_id: https://example.com/saml/metadata
  acs_url: https://example.com/saml/metadata
  attribute_mapping:
    - name: username
      value: uid
    - name: firstname
      name_format: basic # 선택 사항이며, 값이 제공되지 않으면 기본값으로 unspecified 사용.
      value: user.spec.traits.firstname
    - name: groups
      name_format: urn:oasis:names:tc:SAML:2.0:attrname-format:basic # 선택 사항, 전체 urn 형식.
      value: user.spec.roles

전제 조건

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하여 무료 평가판을 이용해 보십시오.

  • tctl 관리자 도구 및 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치 를 방문하십시오.

  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • 서비스 제공자 리소스를 생성할 수 있는 권한이 있는 Teleport 사용자. 미리 설정된 editor 역할은 이 권한이 있습니다.
  • SAML이 처음이라면 진행하기 전에 SAML Identity Provider 참조를 검토하는 것이 좋습니다.

Predicate 표현식

속성 값은 predicate 표현식을 사용하여 작성됩니다.

속성 매핑으로 서비스 제공자가 생성되면, 내부적으로 속성 매핑 세부 정보(속성 이름, 이름 형식 및 해당 값)가 서비스 제공자 엔티티 설명자에 SAML 요청된 속성 요소로 포함됩니다.

그런 다음 SSO 요청 중에, SAML assertion 서비스는 엔티티 설명자에서 표현식을 추출하고 인증된 사용자 컨텍스트와 함께 predicate 표현식 평가기로 전달합니다.

표현식이 평가되면 결과 값이 요청된 속성 이름 아래 SAML 응답에 주장됩니다.

평가 컨텍스트

다음 사용자 속성을 Teleport IdP와 서비스 제공자 간에 매핑할 수 있습니다:

속성구문
사용자 이름uid 또는 user.metadata.name .
역할eduPersonAffiliation 또는 user.spec.roles .
특성user.spec.traits.firstname , user.spec.traits.groups 등.

올바르고 지원되는 predicate 표현식이 주어지면, 요청된 속성이 Teleport에 존재하는 한 속성이 매핑됩니다.
존재하지 않는 값을 가리키는 속성 매핑은 SAML assertion에 포함되지 않습니다.

속성 매핑을 위한 조건 표현식 구문

속성 매핑을 위한 조건 표현식은 위에 나열된 평가 컨텍스트를 통해 접근할 수 있는 사용자 속성에 대해 평가됩니다.

지원되는 함수 및 메서드는 아래에 나열되어 있으며, 사용 구문과 결과를 다음의 참조 사용자 사양 파일을 기준으로 평가합니다:

# 참조 사용자 사양 파일
kind: user
metadata:
  name: foobar
spec:
  roles:
    - access
    - editor
    - dev-ssh
  traits:
    firstname:
      - foo
    lastname:
      - BAR
    displayname:
      - foo bar
    email:
      - foobar@example.com
    groups:
      - okta-admin
      - dev-sso
      - dev-rdp

메서드

add

새로운 값 추가. user.spec.rolesuser.spec.traits.groups 에서 작동합니다.

ExpressionResult
user.spec.roles.add("staging-ssh")access, editor, dev-ssh, staging-ssh

사용자 사양 파일에 없는 완전히 새 값을 추가할 수도 있습니다. 예시:

ExpressionResult
set().add("prod-ssh") 또는 set("prod-ssh")prod-ssh

remove

값 제거. user.spec.rolesuser.spec.traits.groups 에서 작동합니다.

ExpressionResult
user.spec.roles.remove("editor", "access")dev-ssh

contains

일치하는 표현식에 대한 boolean 값을 반환합니다. ifelse 와 같은 헬퍼 함수에서 사용됩니다. user.spec.rolesuser.spec.traits.groups 에서 작동합니다.

ExpressionResult
user.spec.traits.groups.contains("okta-admin")true

헬퍼 함수

strings.upper

문자를 대문자로 변환합니다.

ExpressionResult
strings.upper(user.spec.traits.firstname)FOO

strings.lower

문자를 소문자로 변환합니다.

ExpressionResult
strings.lower(user.spec.traits.lastname)bar

strings.replaceall

모든 일치하는 문자열을 대체합니다.

ExpressionResult
strings.replaceall(user.spec.traits.groups, "-", "+")okta+admin, dev+sso, dev+rdp
strings.replaceall(user.spec.traits.groups, "admin", "dev")okta-dev, dev-sso, dev-rdp

strings.split

일치하는 문자에서 문자열을 분할합니다.

ExpressionResult
strings.split(user.spec.traits.groups, "-")okta, admin, dev, sso, rdp

ifelse

조건에 따라 값을 반환합니다. contains 와 같은 메서드와 함께 사용됩니다.

서명: ifelse(condition, "조건이 참일 때 반환할 값", "조건이 거짓일 때 반환할 값")

ExpressionResult
ifelse(user.spec.traits.groups.contains("okta-admin"), user.spec.traits.groups.add("new group"), user.spec.traits.groups)okta-admin, dev-sso, dev-rdp, new group

union

user.spec.traits.groupsuser.spec.roles 의 값을 결합합니다.

ExpressionResult
union(user.spec.traits.groups, user.spec.roles)okta-admin, dev-sso, dev-rdp, access, editor, dev-ssh
union(user.spec.traits.groups.remove("okta-admin"), user.spec.roles)dev-sso, dev-rdp, access, editor, dev-ssh

속성 매핑 테스트

test-attribute-mapping 명령

속성 매핑은 tctl idp saml test-attribute-mapping 명령을 사용하여 테스트할 수 있습니다.
test-attribute-mapping 명령은 세 가지 인수를 받습니다.

  • --users : 사용자 이름 또는 사용자 사양이 포함된 파일의 이름. 필수.
  • --sp : 속성 매핑이 포함된 서비스 제공자 사양이 있는 파일의 이름. 필수.
  • --format : yaml 또는 json . 선택 사항. 플래그가 제공되지 않으면 기본적으로 텍스트 출력이 됩니다.

예시: 사용자 이름과 서비스 제공자 사양 파일로 테스트:

사용자 이름과 서비스 제공자 파일로 테스트

tctl idp saml test-attribute-mapping --user user1 --sp sp.yml
User: user1Attribute Name Attribute Value-------------- -----------------------------firstname foolastname barroles access, editor, dev-sshgroups okta-admin, dev-sso, dev-rdp

사용자 사양 파일과 서비스 제공자 사양 파일로 테스트:

tctl idp saml test-attribute-mapping --user user.yml --sp sp.yml

선택한 형식으로 결과 인쇄.

tctl idp saml test-attribute-mapping --user user.yml --sp sp.yml --format (json/yaml)
Teleport 원문 보기