속성 매핑은 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.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl 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.roles
및 user.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.roles
및 user.spec.traits.groups
에서 작동합니다.
표현식 | 결과 |
---|---|
user.spec.roles.remove("editor", "access") | dev-ssh |
contains
일치하는 표현식에 대한 불리언 값을 반환합니다. ifelse
와 같은 도우미 함수에 사용됩니다.
user.spec.roles
및 user.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.groups
와 user.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.ymlUser: 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)