InfoGrab Docs

Login Rules 참조 문서

요약

이 페이지는 Login Rules를 구동하는 표현 언어에 대한 세부 정보를 제공합니다. 모든 Login Rule 명세는 traits_map 필드 또는 traits_expression 필드 중 하나를 포함해야 합니다. 두 필드 모두 사용자 traits를 변환하는 동일한 목적을 수행합니다.

이 페이지는 Login Rules를 구동하는 표현 언어에 대한 세부 정보를 제공합니다. 클러스터에 첫 번째 Login Rule을 추가하는 방법을 알아보려면 Login Rules 가이드를 참조하십시오.

YAML 명세#

kind: login_rule
version: v1
metadata:
  # name is a unique name for the Login Rule in the cluster.
  name: example

  # expires is optional and usually should not be set for deployed login
  # rules, but it can be useful to set an expiry a short time in the future
  # while testing new Login Rules to prevent potentially locking yourself out of
  # your teleport cluster.
  # expires: "2023-01-31T00:00:00-00:00"
spec:
  # priority can be used to order the evaluation of multiple Login Rules within
  # a cluster.
  #
  # Login Rules with lower numbered priorities will be applied first, followed
  # by rules with priorities in increasing order. In case of a tie, Login Rules
  # with the same priority will be ordered by a lexicographical sort of their
  # names.
  #
  # The default value is 0, the supported range is -2147483648 to 2147483647
  # (inclusive).
  priority: 0

  # If set, traits_map will determine the traits of all users who log in to the
  # cluster.
  #
  # This is a YAML map where the key must be a static string which will be the
  # final trait key, and the value is a list of predicate expressions which each
  # must evaluate to a set of strings. The final trait will be set to the union
  # of the resulting string sets of all predicate expressions for that trait
  # key.
  #
  # traits_map must contain the complete set of desired traits. Any external
  # traits not found here will not be included in the user's certificates.
  #
  # Exactly one of traits_map or traits_expression must be set.
  traits_map:
    groups:
      - external.groups
    logins:
      - strings.lower(external.username)

  # traits_expression is a string holding a single predicate expression which
  # must evaluate to a dict. This will set all user's traits during login.
  #
  # Exactly one of traits_map or traits_expression must be set.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

traits_map vs traits_expression#

모든 Login Rule 명세는 traits_map 필드 또는 traits_expression 필드 중 하나를 포함해야 합니다.

두 필드 모두 사용자 traits를 변환하는 동일한 목적을 수행합니다. 논리적 차이는 사용 사례에 맞는 구문에만 있으며, 모든 traits_map을 동등한 traits_expression으로 작성할 수 있습니다.

traits_map은 특별히 포함되지 않은 traits를 제거하는 반면, traits_expression 구문은 나머지를 변경하지 않고 특정 traits만 추가하거나 수정할 수 있습니다. traits_map 동작은 다른 traits를 모두 필터링하면서 소수의 필요한 traits만 유지하려는 경우 유용합니다. 우선순위가 낮은 Login Rules에서 traits를 설정하는 경우, 해당 traits는 계속 설정되려면 우선순위가 높은 traits_map에도 포함되어야 합니다. 예를 들어 다음 구성은 groups trait을 수정하지 않고 유지합니다.

  traits_map:
    groups:
      - external["groups"]

traits_map#

다음은 traits_map을 사용하여 아래 규칙을 구현하는 Login Rule 예시입니다:

  • groups: devs trait을 가진 모든 사용자는 추가 trait access: [staging]을 받아야 합니다.
  • groups: admins trait을 가진 모든 사용자는 추가 trait access: [staging, prod]을 받아야 합니다.
  • 모든 사용자는 소문자로 변환된 수신 username trait 값을 가진 logins trait을 받아야 합니다.
  • groups, logins, access 이외의 모든 traits는 필터링되어야 합니다.
kind: login_rule
version: v1
metadata:
  name: my_expression_rule
spec:
  priority: 0

  traits_map:
    # the groups trait will be copied unmodified. Do the same for all other
    # traits which should not be changed, any traits omitted here will *not* be
    # set for your users and will *not* be used for role mapping.
    groups:
      - external["groups"]

    # the logins traits will be set to the username trait converted to
    # lowercase.
    logins:
      - 'strings.lower(external.username)'

    # the access trait is determined conditionally based on the incoming groups trait.
    access:
      - 'ifelse(external.groups.contains("devs"), set("staging"), set())'
      - 'ifelse(external.groups.contains("admins"), set("staging", "prod"), set())'

traits_expression#

다음은 위 예시와 동일한 규칙을 구현하는 traits_expression 필드를 사용하는 Login Rule 예시입니다:

kind: login_rule
version: v1
metadata:
  name: my_expression_rule
spec:
  priority: 0

  traits_expression: |
    dict(
      pair("groups", external.groups),
      pair("logins", strings.lower(external.username)),
      pair("access",
        choose(
          option(external.groups.contains("devs"), set("staging")),
          option(external.groups.contains("admins"), set("staging", "prod")),
          option(true, set()),
        ),
      ),
    )

모든 traits 표현식은 완전한 출력 traits 집합으로 사용될 dict 유형의 값을 반환해야 합니다. 위에 표시된 것처럼 처음부터 dict를 구성하거나, 다음과 같이 external dict에 저장된 수신 traits를 수정할 수 있습니다:

kind: login_rule
version: v1
metadata:
  name: uppercase_logins
spec:
  priority: 0

  # This example expression will return all incoming traits unmodified except
  # for the "logins" trait which will be converted to lowercase.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

dict 유형#

설명#

dictstring 키에서 set 값으로 매핑하는 딕셔너리 유형입니다. Login Rule 표현식이 external.<trait> 또는 external[<trait>] 구문으로 입력 traits에 접근할 때, externaldict 유형의 값입니다. dict 유형의 값은 표현식 내에서 구성하고 접근할 수 있습니다. traits_expression 필드에 사용되는 표현식은 반드시 dict 유형의 값을 반환해야 합니다.

생성자#

시그니처#

func dict(pairs ...pair) dict

설명#

dict 생성자는 pairs 인수의 초기 키-값 쌍으로 채워진 새 dict를 반환합니다. 각 pairstringset를 보유해야 합니다.

인수#

인수 유형 설명
pairs ...pair dict를 초기화할 0개 이상의 키-값 쌍.

반환값#

유형 설명
dict dict.

예시#

표현식 결과
dict() {}
dict(pair("a", set("x", "y"))) {"a": ("x", "y")}

접근자#

구문 예시 설명
dict.key external.username "점" 접근자는 주어진 키에 대한 set을 반환하거나, 해당 키에 값이 없으면 빈 set을 반환합니다.
dict["key"] external["user-name"] 대괄호 접근자는 "점" 접근자와 동일하게 동작하지만, 파싱을 위해 반드시 인용해야 하는 특수 문자(-, ., 등 포함)를 포함하는 키를 지원합니다.

dict.add_values#

시그니처#

func (dict) add_values(key string, values ...string) dict

설명#

dict.add_values는 주어진 값이 dict[key]set에 추가된 dict의 복사본을 반환합니다. dict[key]에 이미 존재하는 set이 없으면 새로운 set이 생성됩니다.

인수#

인수 유형 설명
key string 새 값이 추가되어야 할 키.
values ...string dict[key]에 추가할 하나 이상의 문자열 값.

반환값#

유형 설명
dict keyvalues가 추가된 주어진 dict의 복사본.

예시#

표현식 결과
dict().add_values("logins", "ubuntu", "ec2-user") {"logins": ("ubuntu", "ec2-user")}
dict(pair("a", set("x"))).add_values("a", "y", "z") {"a": ("x", "y", "z")}

dict.remove#

시그니처#

func (dict) remove(keys ...string) dict

설명#

dict.remove는 주어진 키가 제거된 dict의 복사본을 반환합니다. dict에 없는 키는 영향을 주지 않습니다.

인수#

인수 유형 설명
keys ...string dict에서 제거할 하나 이상의 키.

반환값#

유형 설명
dict 주어진 키가 제거된 dict의 복사본.

예시#

표현식 결과
dict(pair("a", set("x"))).remove("a", "b") {}
dict(pair("a", set("x")), pair("b", set("c"))).remove("b") {"a": ("x")}

dict.put#

시그니처#

func (dict) put(key string, value set) dict

설명#

dict.putdict[key]value로 설정된 dict의 복사본을 반환합니다. 주어진 키에 이미 값이 있으면 덮어씁니다.

인수#

인수 유형 설명
key string 새 값을 설정할 키
value set 주어진 키에 설정할 문자열 집합

반환값#

유형 설명
dict dict[key]value로 설정된 주어진 dict의 복사본.

예시#

표현식 결과
dict(pair("a", set("x"))).put("a", set("y")) {"a": ("y")}
dict().put("b", set("z")) {"b": ("z")}

set 유형#

설명#

set은 고유한 문자열의 집합을 보유합니다.

생성자#

시그니처#

func set(values ...string) set

설명#

set 생성자는 주어진 values로 초기화된 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set을 초기화할 0개 이상의 문자열.

반환값#

유형 설명
set 주어진 값으로 초기화된 새 set.

예시#

표현식 결과
set() ()
set("a", "b", "a") ("a", "b")

set.contains#

시그니처#

func (set) contains(value) bool

설명#

set.contains는 set이 value와 정확히 일치하는 항목을 포함하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

인수#

인수 유형 설명
value string set에서 확인할 문자열.

반환값#

유형 설명
bool set이 value와 정확히 일치하는 항목을 포함하면 true, 그렇지 않으면 false.

예시#

표현식 결과
set("a", "b").contains("a") true
set("a", "b").contains("x") false

set.add#

시그니처#

func (set) add(values ...string) set

설명#

set.add는 새 values가 추가된 주어진 set의 복사본인 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set에 추가할 값.

반환값#

유형 설명
set values가 추가된 주어진 set의 복사본인 새 set.

예시#

표현식 결과
set("a", "b").add("b", "c") ("a", "b", "c")

set.remove#

시그니처#

func (set) remove(values ...string) set

설명#

set.remove는 모든 values가 제거된 주어진 set의 복사본인 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set에서 제거할 값.

반환값#

유형 설명
set values가 제거된 주어진 set의 복사본인 새 set.

예시#

표현식 결과
set("a", "b").remove("b", "c") ("a")

pair 유형#

설명#

pair는 임의의 유형의 두 값을 보유할 수 있습니다. 현재 유일한 용도는 dict 생성자에서 stringset 유형의 키-값 쌍을 보유하는 것입니다.

생성자#

시그니처#

func pair(first, second any) pair

설명#

pair 생성자는 firstsecond를 보유하는 새 pair를 반환합니다.

인수#

인수 유형 설명
first any 임의의 유형의 값.
second any 임의의 유형의 값.

반환값#

유형 설명
pair firstsecond를 보유하는 새 pair.

예시#

표현식 결과
pair("logins", set("root", "user")) {"logins", ("root", "user")}

option 유형#

설명#

optionchoose의 인수로만 사용됩니다. option이 선택될 수 있는 Boolean 조건과 해당 option이 실제로 선택된 경우 choose 표현식이 반환해야 하는 값을 보유합니다.

생성자#

시그니처#

func option(cond bool, value any) option

설명#

condvalue를 보유하는 새 option을 반환합니다.

인수#

인수 유형 설명
cond bool option이 선택될 수 있는 Boolean 조건.
value any option이 선택된 경우 choose가 반환해야 하는 값.

반환값#

유형 설명
option choose의 인수로 전달되어야 하는 option 유형.

예시#

choose의 예시를 참조하십시오.

헬퍼 함수#

strings.upper#

시그니처#

func strings.upper(input set) set

설명#

strings.upper는 주어진 문자열 집합을 대문자로 변환한 복사본을 반환합니다.

인수#

인수 유형 설명
input set 대문자로 변환할 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열이 대문자로 변환된 input의 복사본

예시#

표현식 결과
strings.upper(set("Alice")) ("ALICE")
strings.upper(set("AbCdE", "fGhIj)) ("ABCDE", "FGHIJ")

strings.lower#

시그니처#

func strings.lower(input set) set

설명#

strings.lower는 주어진 문자열 집합을 소문자로 변환한 복사본을 반환합니다.

인수#

인수 유형 설명
input set 소문자로 변환할 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열이 소문자로 변환된 input의 복사본

예시#

표현식 결과
strings.lower(set("Alice")) ("alice")
strings.lower(set("AbCdE", "fGhIj)) ("abcde", "fghij")

strings.replaceall#

시그니처#

func strings.replaceall(input set, match string, replacement string) set

설명#

strings.replaceall은 문자열 집합에 대한 부분 문자열 교체를 구현합니다. 반환값은 input의 각 요소에서 발견된 match의 각 부분 문자열 일치가 replacement로 교체된 input의 복사본입니다. 일치는 리터럴이며 정규 표현식을 지원하지 않습니다.

인수#

인수 유형 설명
input set 교체가 필요한 입력 문자열의 집합
match string 교체될 리터럴 부분 문자열
replacement string match의 모든 인스턴스를 교체할 리터럴 문자열

반환값#

유형 설명
set input의 각 요소에서 발견된 match의 각 인스턴스가 replacement로 교체된 input의 복사본.

예시#

표현식 결과
strings.replaceall(set("user-name"), "-", "_") ("user_name")
strings.replaceall(set("user-alice", "user-bob"), "user-", "") ("alice", "bob")

strings.split#

시그니처#

func strings.split(input set, separator string) set

설명#

strings.splitinput의 각 요소를 separator의 각 일치에서 분할하고 모든 분할된 문자열의 합집합을 포함하는 set을 반환합니다. 이는 IdP가 다중 값 클레임을 전달할 수 없을 때 유용할 수 있으며, 이 헬퍼 함수를 사용하는 Login Rule은 단일 클레임 값을 여러 값을 가진 Teleport trait으로 분할할 수 있습니다.

인수#

인수 유형 설명
input set 분할해야 할 입력 문자열의 집합
sep string 리터럴 문자열 구분자

반환값#

유형 설명
set 모든 분할된 문자열의 합집합

예시#

표현식 결과
strings.split(set("alice,bob,charlie"), ",") ("alice", "bob", "charlie")
strings.split(set("devs security"), " ") ("devs", "security")

email.local#

시그니처#

func email.local(input set) set

설명#

email.local은 입력 set의 각 이메일을 로컬 부분으로 매핑합니다.

인수#

인수 유형 설명
input set 입력 이메일의 집합

반환값#

유형 설명
set 각 이메일이 로컬 부분으로 변환된 input의 복사본.

예시#

표현식 결과
email.local(set("alice@example.com")) ("alice")
email.local(set("Alice <alice@example.com>")) ("alice")

regexp.replace#

시그니처#

func regexp.replace(input set, expression string, replacement string) set

설명#

regexp.replaceinput의 각 요소에서 expression의 모든 일치를 찾아 replacement로 교체합니다. 표현식과 일치하지 않는 값은 필터링됩니다. 교체는 expression의 캡처 그룹 확장을 지원합니다. $N은 N번째 캡처 그룹을 참조하는 데 사용되며, $1부터 시작합니다.

인수#

인수 유형 설명
input set 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열에서 expression의 모든 일치가 replacement로 교체된 input의 복사본.

예시#

표현식 결과
regexp.replace(set("team-devs"), "^team-(.*)$", "$1") ("devs")
regexp.replace(set("team-dev-security"), "^team-(.*)-(.*)$", "$1.$2") ("dev.security")

ifelse#

시그니처#

func ifelse(cond bool, valueIfTrue any, valueIfFalse any) any

설명#

ifelse는 순수 함수형 스타일로 고전적인 if-else 분기를 구현합니다. 첫 번째 인수가 true로 평가되면 두 번째 인수가 반환되고, 그렇지 않으면 세 번째 인수가 반환됩니다.

인수#

인수 유형 설명
cond bool 이어지는 두 인수 중 어느 것이 반환될지를 결정하는 Boolean 조건.
valueIfTrue any cond가 true이면 반환할 임의 유형의 값.
valueIfFalse any cond가 false이면 반환할 임의 유형의 값.

반환값#

유형 설명
any 두 번째 또는 세 번째 인수가 반환됩니다.

예시#

표현식 결과
ifelse(set("a", "b").contains("a"), set("x", "y"), set("z")) ("x", "y")
ifelse(set("a", "b").contains("c"), set("x", "y"), set("z")) ("z")

choose#

시그니처#

func choose(options ...option) any

설명#

choose는 switch 문의 함수형 스타일을 구현하여, 조건이 true로 평가되는 첫 번째 option 인수를 반환합니다.

런타임에 option을 선택할 수 없으면 오류를 반환하고 로그인이 성공하지 못합니다. 이 시나리오를 피하기 위해 기본 option을 구현하는 조건이 true로 하드코딩된 마지막 option을 추가하는 것을 권장합니다. 예를 들어 choose(..., option(true, set()))는 다른 option을 선택할 수 없는 경우 빈 set을 반환합니다.

인수#

인수 유형 설명
options ...option 하나 이상의 option.

반환값#

유형 설명
any 조건이 true로 평가되는 첫 번째 option 인수의 값으로, 임의의 유형일 수 있습니다.

예시#

표현식 결과
choose(option(false, set("x")), option(true, set("y")), option(true, set("z"))) ("y")
choose(option(set("a", "b").contains("a"), set("x")), option(true, set("y"))) ("x")

union#

시그니처#

func union(sets ...set) set

설명#

union은 주어진 set의 모든 요소의 합집합을 포함하는 새 set을 반환합니다.

인수#

인수 유형 설명
sets ...set 합집합을 구할 0개 이상의 set.

반환값#

유형 설명
set 주어진 모든 set의 합집합을 포함하는 새 set.

예시#

표현식 결과
union(set("a"), set("b")) ("a", "b")
union(set("a", "b"), set("b", "c")) ("a", "b", "c")

jsonpath#

시그니처#

func jsonpath(path string) set

설명#

jsonpath는 주어진 jsonpath 쿼리를 사용하여 사용자의 원본 IdP 클레임에서 보간된 새 set을 반환합니다. 이는 일부 사용자 정의 OIDC 솔루션에서 사용되는 전통적으로 매핑되지 않은 임의 JSON 클레임과 함께 사용하기 위한 것입니다.

자세한 내용은 이 가이드를 참조하십시오.

인수#

인수 유형 설명
path string jsonpath 쿼리.

반환값#

유형 설명
set 보간된 값을 포함하는 새 set.

예시#

아래 예시는 주어진 IdP 클레임 객체에서 동작합니다.

{
  // normal claim - string list
  "a": ["1", "2", "3"],
  // unmapped claim - arbitrary object
  "b": {
    "c": "d"
  }
}
표현식 결과
jsonpath("$.a") ("1", "2", "3")
jsonpath("$.b.*") ("d")
jsonpath("$.*.*") ("1", "2", "3", "d")

Login Rules 참조 문서

원문 보기
요약

이 페이지는 Login Rules를 구동하는 표현 언어에 대한 세부 정보를 제공합니다. 모든 Login Rule 명세는 traits_map 필드 또는 traits_expression 필드 중 하나를 포함해야 합니다. 두 필드 모두 사용자 traits를 변환하는 동일한 목적을 수행합니다.

이 페이지는 Login Rules를 구동하는 표현 언어에 대한 세부 정보를 제공합니다. 클러스터에 첫 번째 Login Rule을 추가하는 방법을 알아보려면 Login Rules 가이드를 참조하십시오.

YAML 명세#

kind: login_rule
version: v1
metadata:
  # name is a unique name for the Login Rule in the cluster.
  name: example

  # expires is optional and usually should not be set for deployed login
  # rules, but it can be useful to set an expiry a short time in the future
  # while testing new Login Rules to prevent potentially locking yourself out of
  # your teleport cluster.
  # expires: "2023-01-31T00:00:00-00:00"
spec:
  # priority can be used to order the evaluation of multiple Login Rules within
  # a cluster.
  #
  # Login Rules with lower numbered priorities will be applied first, followed
  # by rules with priorities in increasing order. In case of a tie, Login Rules
  # with the same priority will be ordered by a lexicographical sort of their
  # names.
  #
  # The default value is 0, the supported range is -2147483648 to 2147483647
  # (inclusive).
  priority: 0

  # If set, traits_map will determine the traits of all users who log in to the
  # cluster.
  #
  # This is a YAML map where the key must be a static string which will be the
  # final trait key, and the value is a list of predicate expressions which each
  # must evaluate to a set of strings. The final trait will be set to the union
  # of the resulting string sets of all predicate expressions for that trait
  # key.
  #
  # traits_map must contain the complete set of desired traits. Any external
  # traits not found here will not be included in the user's certificates.
  #
  # Exactly one of traits_map or traits_expression must be set.
  traits_map:
    groups:
      - external.groups
    logins:
      - strings.lower(external.username)

  # traits_expression is a string holding a single predicate expression which
  # must evaluate to a dict. This will set all user's traits during login.
  #
  # Exactly one of traits_map or traits_expression must be set.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

traits_map vs traits_expression#

모든 Login Rule 명세는 traits_map 필드 또는 traits_expression 필드 중 하나를 포함해야 합니다.

두 필드 모두 사용자 traits를 변환하는 동일한 목적을 수행합니다. 논리적 차이는 사용 사례에 맞는 구문에만 있으며, 모든 traits_map을 동등한 traits_expression으로 작성할 수 있습니다.

traits_map은 특별히 포함되지 않은 traits를 제거하는 반면, traits_expression 구문은 나머지를 변경하지 않고 특정 traits만 추가하거나 수정할 수 있습니다. traits_map 동작은 다른 traits를 모두 필터링하면서 소수의 필요한 traits만 유지하려는 경우 유용합니다. 우선순위가 낮은 Login Rules에서 traits를 설정하는 경우, 해당 traits는 계속 설정되려면 우선순위가 높은 traits_map에도 포함되어야 합니다. 예를 들어 다음 구성은 groups trait을 수정하지 않고 유지합니다.

  traits_map:
    groups:
      - external["groups"]

traits_map#

다음은 traits_map을 사용하여 아래 규칙을 구현하는 Login Rule 예시입니다:

  • groups: devs trait을 가진 모든 사용자는 추가 trait access: [staging]을 받아야 합니다.
  • groups: admins trait을 가진 모든 사용자는 추가 trait access: [staging, prod]을 받아야 합니다.
  • 모든 사용자는 소문자로 변환된 수신 username trait 값을 가진 logins trait을 받아야 합니다.
  • groups, logins, access 이외의 모든 traits는 필터링되어야 합니다.
kind: login_rule
version: v1
metadata:
  name: my_expression_rule
spec:
  priority: 0

  traits_map:
    # the groups trait will be copied unmodified. Do the same for all other
    # traits which should not be changed, any traits omitted here will *not* be
    # set for your users and will *not* be used for role mapping.
    groups:
      - external["groups"]

    # the logins traits will be set to the username trait converted to
    # lowercase.
    logins:
      - 'strings.lower(external.username)'

    # the access trait is determined conditionally based on the incoming groups trait.
    access:
      - 'ifelse(external.groups.contains("devs"), set("staging"), set())'
      - 'ifelse(external.groups.contains("admins"), set("staging", "prod"), set())'

traits_expression#

다음은 위 예시와 동일한 규칙을 구현하는 traits_expression 필드를 사용하는 Login Rule 예시입니다:

kind: login_rule
version: v1
metadata:
  name: my_expression_rule
spec:
  priority: 0

  traits_expression: |
    dict(
      pair("groups", external.groups),
      pair("logins", strings.lower(external.username)),
      pair("access",
        choose(
          option(external.groups.contains("devs"), set("staging")),
          option(external.groups.contains("admins"), set("staging", "prod")),
          option(true, set()),
        ),
      ),
    )

모든 traits 표현식은 완전한 출력 traits 집합으로 사용될 dict 유형의 값을 반환해야 합니다. 위에 표시된 것처럼 처음부터 dict를 구성하거나, 다음과 같이 external dict에 저장된 수신 traits를 수정할 수 있습니다:

kind: login_rule
version: v1
metadata:
  name: uppercase_logins
spec:
  priority: 0

  # This example expression will return all incoming traits unmodified except
  # for the "logins" trait which will be converted to lowercase.
  traits_expression: |
    external.put("logins", strings.lower(external.logins))

dict 유형#

설명#

dictstring 키에서 set 값으로 매핑하는 딕셔너리 유형입니다. Login Rule 표현식이 external.<trait> 또는 external[<trait>] 구문으로 입력 traits에 접근할 때, externaldict 유형의 값입니다. dict 유형의 값은 표현식 내에서 구성하고 접근할 수 있습니다. traits_expression 필드에 사용되는 표현식은 반드시 dict 유형의 값을 반환해야 합니다.

생성자#

시그니처#

func dict(pairs ...pair) dict

설명#

dict 생성자는 pairs 인수의 초기 키-값 쌍으로 채워진 새 dict를 반환합니다. 각 pairstringset를 보유해야 합니다.

인수#

인수 유형 설명
pairs ...pair dict를 초기화할 0개 이상의 키-값 쌍.

반환값#

유형 설명
dict dict.

예시#

표현식 결과
dict() {}
dict(pair("a", set("x", "y"))) {"a": ("x", "y")}

접근자#

구문 예시 설명
dict.key external.username "점" 접근자는 주어진 키에 대한 set을 반환하거나, 해당 키에 값이 없으면 빈 set을 반환합니다.
dict["key"] external["user-name"] 대괄호 접근자는 "점" 접근자와 동일하게 동작하지만, 파싱을 위해 반드시 인용해야 하는 특수 문자(-, ., 등 포함)를 포함하는 키를 지원합니다.

dict.add_values#

시그니처#

func (dict) add_values(key string, values ...string) dict

설명#

dict.add_values는 주어진 값이 dict[key]set에 추가된 dict의 복사본을 반환합니다. dict[key]에 이미 존재하는 set이 없으면 새로운 set이 생성됩니다.

인수#

인수 유형 설명
key string 새 값이 추가되어야 할 키.
values ...string dict[key]에 추가할 하나 이상의 문자열 값.

반환값#

유형 설명
dict keyvalues가 추가된 주어진 dict의 복사본.

예시#

표현식 결과
dict().add_values("logins", "ubuntu", "ec2-user") {"logins": ("ubuntu", "ec2-user")}
dict(pair("a", set("x"))).add_values("a", "y", "z") {"a": ("x", "y", "z")}

dict.remove#

시그니처#

func (dict) remove(keys ...string) dict

설명#

dict.remove는 주어진 키가 제거된 dict의 복사본을 반환합니다. dict에 없는 키는 영향을 주지 않습니다.

인수#

인수 유형 설명
keys ...string dict에서 제거할 하나 이상의 키.

반환값#

유형 설명
dict 주어진 키가 제거된 dict의 복사본.

예시#

표현식 결과
dict(pair("a", set("x"))).remove("a", "b") {}
dict(pair("a", set("x")), pair("b", set("c"))).remove("b") {"a": ("x")}

dict.put#

시그니처#

func (dict) put(key string, value set) dict

설명#

dict.putdict[key]value로 설정된 dict의 복사본을 반환합니다. 주어진 키에 이미 값이 있으면 덮어씁니다.

인수#

인수 유형 설명
key string 새 값을 설정할 키
value set 주어진 키에 설정할 문자열 집합

반환값#

유형 설명
dict dict[key]value로 설정된 주어진 dict의 복사본.

예시#

표현식 결과
dict(pair("a", set("x"))).put("a", set("y")) {"a": ("y")}
dict().put("b", set("z")) {"b": ("z")}

set 유형#

설명#

set은 고유한 문자열의 집합을 보유합니다.

생성자#

시그니처#

func set(values ...string) set

설명#

set 생성자는 주어진 values로 초기화된 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set을 초기화할 0개 이상의 문자열.

반환값#

유형 설명
set 주어진 값으로 초기화된 새 set.

예시#

표현식 결과
set() ()
set("a", "b", "a") ("a", "b")

set.contains#

시그니처#

func (set) contains(value) bool

설명#

set.contains는 set이 value와 정확히 일치하는 항목을 포함하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

인수#

인수 유형 설명
value string set에서 확인할 문자열.

반환값#

유형 설명
bool set이 value와 정확히 일치하는 항목을 포함하면 true, 그렇지 않으면 false.

예시#

표현식 결과
set("a", "b").contains("a") true
set("a", "b").contains("x") false

set.add#

시그니처#

func (set) add(values ...string) set

설명#

set.add는 새 values가 추가된 주어진 set의 복사본인 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set에 추가할 값.

반환값#

유형 설명
set values가 추가된 주어진 set의 복사본인 새 set.

예시#

표현식 결과
set("a", "b").add("b", "c") ("a", "b", "c")

set.remove#

시그니처#

func (set) remove(values ...string) set

설명#

set.remove는 모든 values가 제거된 주어진 set의 복사본인 새 set을 반환합니다.

인수#

인수 유형 설명
values ...string set에서 제거할 값.

반환값#

유형 설명
set values가 제거된 주어진 set의 복사본인 새 set.

예시#

표현식 결과
set("a", "b").remove("b", "c") ("a")

pair 유형#

설명#

pair는 임의의 유형의 두 값을 보유할 수 있습니다. 현재 유일한 용도는 dict 생성자에서 stringset 유형의 키-값 쌍을 보유하는 것입니다.

생성자#

시그니처#

func pair(first, second any) pair

설명#

pair 생성자는 firstsecond를 보유하는 새 pair를 반환합니다.

인수#

인수 유형 설명
first any 임의의 유형의 값.
second any 임의의 유형의 값.

반환값#

유형 설명
pair firstsecond를 보유하는 새 pair.

예시#

표현식 결과
pair("logins", set("root", "user")) {"logins", ("root", "user")}

option 유형#

설명#

optionchoose의 인수로만 사용됩니다. option이 선택될 수 있는 Boolean 조건과 해당 option이 실제로 선택된 경우 choose 표현식이 반환해야 하는 값을 보유합니다.

생성자#

시그니처#

func option(cond bool, value any) option

설명#

condvalue를 보유하는 새 option을 반환합니다.

인수#

인수 유형 설명
cond bool option이 선택될 수 있는 Boolean 조건.
value any option이 선택된 경우 choose가 반환해야 하는 값.

반환값#

유형 설명
option choose의 인수로 전달되어야 하는 option 유형.

예시#

choose의 예시를 참조하십시오.

헬퍼 함수#

strings.upper#

시그니처#

func strings.upper(input set) set

설명#

strings.upper는 주어진 문자열 집합을 대문자로 변환한 복사본을 반환합니다.

인수#

인수 유형 설명
input set 대문자로 변환할 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열이 대문자로 변환된 input의 복사본

예시#

표현식 결과
strings.upper(set("Alice")) ("ALICE")
strings.upper(set("AbCdE", "fGhIj)) ("ABCDE", "FGHIJ")

strings.lower#

시그니처#

func strings.lower(input set) set

설명#

strings.lower는 주어진 문자열 집합을 소문자로 변환한 복사본을 반환합니다.

인수#

인수 유형 설명
input set 소문자로 변환할 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열이 소문자로 변환된 input의 복사본

예시#

표현식 결과
strings.lower(set("Alice")) ("alice")
strings.lower(set("AbCdE", "fGhIj)) ("abcde", "fghij")

strings.replaceall#

시그니처#

func strings.replaceall(input set, match string, replacement string) set

설명#

strings.replaceall은 문자열 집합에 대한 부분 문자열 교체를 구현합니다. 반환값은 input의 각 요소에서 발견된 match의 각 부분 문자열 일치가 replacement로 교체된 input의 복사본입니다. 일치는 리터럴이며 정규 표현식을 지원하지 않습니다.

인수#

인수 유형 설명
input set 교체가 필요한 입력 문자열의 집합
match string 교체될 리터럴 부분 문자열
replacement string match의 모든 인스턴스를 교체할 리터럴 문자열

반환값#

유형 설명
set input의 각 요소에서 발견된 match의 각 인스턴스가 replacement로 교체된 input의 복사본.

예시#

표현식 결과
strings.replaceall(set("user-name"), "-", "_") ("user_name")
strings.replaceall(set("user-alice", "user-bob"), "user-", "") ("alice", "bob")

strings.split#

시그니처#

func strings.split(input set, separator string) set

설명#

strings.splitinput의 각 요소를 separator의 각 일치에서 분할하고 모든 분할된 문자열의 합집합을 포함하는 set을 반환합니다. 이는 IdP가 다중 값 클레임을 전달할 수 없을 때 유용할 수 있으며, 이 헬퍼 함수를 사용하는 Login Rule은 단일 클레임 값을 여러 값을 가진 Teleport trait으로 분할할 수 있습니다.

인수#

인수 유형 설명
input set 분할해야 할 입력 문자열의 집합
sep string 리터럴 문자열 구분자

반환값#

유형 설명
set 모든 분할된 문자열의 합집합

예시#

표현식 결과
strings.split(set("alice,bob,charlie"), ",") ("alice", "bob", "charlie")
strings.split(set("devs security"), " ") ("devs", "security")

email.local#

시그니처#

func email.local(input set) set

설명#

email.local은 입력 set의 각 이메일을 로컬 부분으로 매핑합니다.

인수#

인수 유형 설명
input set 입력 이메일의 집합

반환값#

유형 설명
set 각 이메일이 로컬 부분으로 변환된 input의 복사본.

예시#

표현식 결과
email.local(set("alice@example.com")) ("alice")
email.local(set("Alice <alice@example.com>")) ("alice")

regexp.replace#

시그니처#

func regexp.replace(input set, expression string, replacement string) set

설명#

regexp.replaceinput의 각 요소에서 expression의 모든 일치를 찾아 replacement로 교체합니다. 표현식과 일치하지 않는 값은 필터링됩니다. 교체는 expression의 캡처 그룹 확장을 지원합니다. $N은 N번째 캡처 그룹을 참조하는 데 사용되며, $1부터 시작합니다.

인수#

인수 유형 설명
input set 입력 문자열의 집합

반환값#

유형 설명
set 각 문자열에서 expression의 모든 일치가 replacement로 교체된 input의 복사본.

예시#

표현식 결과
regexp.replace(set("team-devs"), "^team-(.*)$", "$1") ("devs")
regexp.replace(set("team-dev-security"), "^team-(.*)-(.*)$", "$1.$2") ("dev.security")

ifelse#

시그니처#

func ifelse(cond bool, valueIfTrue any, valueIfFalse any) any

설명#

ifelse는 순수 함수형 스타일로 고전적인 if-else 분기를 구현합니다. 첫 번째 인수가 true로 평가되면 두 번째 인수가 반환되고, 그렇지 않으면 세 번째 인수가 반환됩니다.

인수#

인수 유형 설명
cond bool 이어지는 두 인수 중 어느 것이 반환될지를 결정하는 Boolean 조건.
valueIfTrue any cond가 true이면 반환할 임의 유형의 값.
valueIfFalse any cond가 false이면 반환할 임의 유형의 값.

반환값#

유형 설명
any 두 번째 또는 세 번째 인수가 반환됩니다.

예시#

표현식 결과
ifelse(set("a", "b").contains("a"), set("x", "y"), set("z")) ("x", "y")
ifelse(set("a", "b").contains("c"), set("x", "y"), set("z")) ("z")

choose#

시그니처#

func choose(options ...option) any

설명#

choose는 switch 문의 함수형 스타일을 구현하여, 조건이 true로 평가되는 첫 번째 option 인수를 반환합니다.

런타임에 option을 선택할 수 없으면 오류를 반환하고 로그인이 성공하지 못합니다. 이 시나리오를 피하기 위해 기본 option을 구현하는 조건이 true로 하드코딩된 마지막 option을 추가하는 것을 권장합니다. 예를 들어 choose(..., option(true, set()))는 다른 option을 선택할 수 없는 경우 빈 set을 반환합니다.

인수#

인수 유형 설명
options ...option 하나 이상의 option.

반환값#

유형 설명
any 조건이 true로 평가되는 첫 번째 option 인수의 값으로, 임의의 유형일 수 있습니다.

예시#

표현식 결과
choose(option(false, set("x")), option(true, set("y")), option(true, set("z"))) ("y")
choose(option(set("a", "b").contains("a"), set("x")), option(true, set("y"))) ("x")

union#

시그니처#

func union(sets ...set) set

설명#

union은 주어진 set의 모든 요소의 합집합을 포함하는 새 set을 반환합니다.

인수#

인수 유형 설명
sets ...set 합집합을 구할 0개 이상의 set.

반환값#

유형 설명
set 주어진 모든 set의 합집합을 포함하는 새 set.

예시#

표현식 결과
union(set("a"), set("b")) ("a", "b")
union(set("a", "b"), set("b", "c")) ("a", "b", "c")

jsonpath#

시그니처#

func jsonpath(path string) set

설명#

jsonpath는 주어진 jsonpath 쿼리를 사용하여 사용자의 원본 IdP 클레임에서 보간된 새 set을 반환합니다. 이는 일부 사용자 정의 OIDC 솔루션에서 사용되는 전통적으로 매핑되지 않은 임의 JSON 클레임과 함께 사용하기 위한 것입니다.

자세한 내용은 이 가이드를 참조하십시오.

인수#

인수 유형 설명
path string jsonpath 쿼리.

반환값#

유형 설명
set 보간된 값을 포함하는 새 set.

예시#

아래 예시는 주어진 IdP 클레임 객체에서 동작합니다.

{
  // normal claim - string list
  "a": ["1", "2", "3"],
  // unmapped claim - arbitrary object
  "b": {
    "c": "d"
  }
}
표현식 결과
jsonpath("$.a") ("1", "2", "3")
jsonpath("$.b.*") ("d")
jsonpath("$.*.*") ("1", "2", "3", "d")