Infograb logo
SAML IdP 속성 매핑

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

  • name: 아웃고잉 속성의 이름. 필수. 이름은 속성 매핑 전반에 걸쳐 고유해야 합니다.
  • value: 프레디케이트 표현식을 사용하여 정의된 값으로, 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 클라이언트 도구 버전 >= 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 명령어를 실행할 수도 있습니다.
  • 서비스 공급자 리소스를 생성할 권한이 있는 Teleport 사용자. editor 역할이 이 권한을 가지고 있습니다.
  • SAML을 처음 사용하는 경우, 진행하기 전에 SAML IdP 참조를 검토하는 것이 좋습니다.

프레디케이트 표현식

속성 값은 프레디케이트 표현식을 사용하여 작성됩니다.

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

그런 다음 SSO 요청 중에 SAML 단언 서비스는 엔터티 설명자에서 표현식을 추출하여 인증된 사용자 컨텍스트와 함께 프레디케이트 표현식 평가기로 전달합니다.

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

평가 컨텍스트

다음 사용자 속성이 Teleport IdP와 서비스 공급자 간에 매핑을 위해 사용 가능합니다:

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

올바른 지원되는 프레디케이트 표현식을 주어진 경우, 요청된 속성이 Teleport에 존재하는 한 속성이 매핑됩니다.
존재하지 않는 값으로 포인팅된 속성 매핑은 SAML 단언에 포함되지 않습니다.

프레디케이트 표현식 구문

속성 매핑을 위한 프레디케이트 표현식은 위에 나열된 평가 컨텍스트를 사용하여 액세스할 수 있는 사용자 속성에 대해 평가됩니다.

지원되는 함수와 메서드는 아래에 나열되어 있으며, 사용 구문과 결과는 다음 참조 사용자 사양 파일에 대해 평가됩니다:

# 참조 사용자 사양 파일
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에서 작동합니다.

표현식결과
user.spec.roles.add("staging-ssh")access, editor, dev-ssh, staging-ssh

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

표현식결과
set().add("prod-ssh") 또는 set("prod-ssh")prod-ssh

remove

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

표현식결과
user.spec.roles.remove("editor", "access")dev-ssh

contains

일치하는 표현식에 대한 불리언 값을 반환합니다. ifelse와 같은 도우미 함수에 사용됩니다.
user.spec.rolesuser.spec.traits.groups에서 작동합니다.

표현식결과
user.spec.traits.groups.contains("okta-admin")true

도우미 함수

strings.upper

문자열을 대문자로 변환합니다.

표현식결과
strings.upper(user.spec.traits.firstname)FOO

strings.lower

문자열을 소문자로 변환합니다.

표현식결과
strings.lower(user.spec.traits.lastname)bar

strings.replaceall

모든 일치하는 문자열을 바꿉니다.

표현식결과
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

일치하는 문자에서 문자열을 나눕니다.

표현식결과
strings.split(user.spec.traits.groups, "-")okta, admin, dev, sso, rdp

ifelse

조건적으로 값을 반환합니다. contains와 같은 메서드와 함께 사용됩니다.

서명: ifelse(condition, "조건이 true일 경우 반환할 값", "조건이 false일 경우 반환할 값")

표현식결과
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의 값을 결합합니다.

표현식결과
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 원문 보기