인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
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
클라이언트 도구.tctl
및tsh
다운로드에 대한 지침은 설치 를 방문하십시오.
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl 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.roles
및 user.spec.traits.groups
에서 작동합니다.
Expression | Result |
---|---|
user.spec.roles.add("staging-ssh") | access, editor, dev-ssh, staging-ssh |
사용자 사양 파일에 없는 완전히 새 값을 추가할 수도 있습니다. 예시:
Expression | Result |
---|---|
set().add("prod-ssh") 또는 set("prod-ssh") | prod-ssh |
remove
값 제거. user.spec.roles
및 user.spec.traits.groups
에서 작동합니다.
Expression | Result |
---|---|
user.spec.roles.remove("editor", "access") | dev-ssh |
contains
일치하는 표현식에 대한 boolean 값을 반환합니다. ifelse
와 같은 헬퍼 함수에서 사용됩니다.
user.spec.roles
및 user.spec.traits.groups
에서 작동합니다.
Expression | Result |
---|---|
user.spec.traits.groups.contains("okta-admin") | true |
헬퍼 함수
strings.upper
문자를 대문자로 변환합니다.
Expression | Result |
---|---|
strings.upper(user.spec.traits.firstname) | FOO |
strings.lower
문자를 소문자로 변환합니다.
Expression | Result |
---|---|
strings.lower(user.spec.traits.lastname) | bar |
strings.replaceall
모든 일치하는 문자열을 대체합니다.
Expression | Result |
---|---|
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
일치하는 문자에서 문자열을 분할합니다.
Expression | Result |
---|---|
strings.split(user.spec.traits.groups, "-") | okta, admin, dev, sso, rdp |
ifelse
조건에 따라 값을 반환합니다. contains
와 같은 메서드와 함께 사용됩니다.
서명: ifelse(condition, "조건이 참일 때 반환할 값", "조건이 거짓일 때 반환할 값")
Expression | Result |
---|---|
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
의 값을 결합합니다.
Expression | Result |
---|---|
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)