Infograb logo
액세스 제어 시작하기

Teleport에서는 모든 로컬, SSO, 또는 로봇 사용자가 하나 또는 여러 개의 역할을 부여받을 수 있습니다.
역할은 데이터베이스, SSH 서버, Kubernetes 클러스터, Windows 데스크톱 및 웹 앱에 대한 액세스를 제어합니다.

로컬 사용자 및 사전 설정된 역할로 시작하고, SSO 사용자에게 역할을 할당한 후, 자체 역할을 생성하는 것으로 마무리합니다.

필수 조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. 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를 운영 환경에서 실행할 때 보안 사고를 피하기 위해 다음의 모범 사례를 준수해야 합니다:

  • 필요하지 않는 한 운영 환경에서 sudo 사용을 피하십시오.
  • 새로운 비루트 사용자를 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하십시오.
  • 필요하지 않은 한 비루트 사용자로 Teleport의 서비스를 실행하십시오. SSH 서비스만 루트 액세스를 요구합니다. Teleport가 < 1024 (예: 443 )로 번호 매겨진 포트에서 수신 대기하도록 하려면 루트 권한(또는 CAP_NET_BIND_SERVICE 권한)이 필요합니다.
  • 최소 권한 원칙을 따르십시오. 더 제한적인 역할로도 충분할 때 사용자에게 허용적인 역할을 부여하지 마십시오. 예를 들어, 클러스터 리소스에 액세스하고 편집할 수 있는 권한을 부여하는 내장된 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에 대해 최소한의 필수 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 상승된 권한을 부여하십시오.
  • 새로운 데이터베이스나 애플리케이션과 같은 Teleport 리소스를 등록할 때 초대 토큰을 파일에 저장해야 합니다. 명령줄에 직접 토큰을 입력하면 악성 사용자가 손상된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 관행이 문서에서 사용된 예제에 반드시 반영되는 것은 아닙니다. 문서의 예제는 주로 데모 및 개발 환경을 위한 것입니다.

1/3단계. 사전 설정된 역할이 있는 로컬 사용자 추가하기

Teleport는 여러 개의 사전 설정된 역할을 제공합니다:

역할설명엔터프라이즈 전용
access클러스터 리소스에 대한 액세스를 허용합니다.
editor클러스터 구성 설정을 편집할 수 있습니다.
auditor클러스터 이벤트, 감사 로그를 읽고 세션 기록을 재생할 수 있습니다.
requester사용자가 접근 요청을 생성할 수 있도록 허용합니다.
reviewer접근 요청을 검토할 수 있도록 허용합니다.
group-access모든 사용자 그룹에 대한 액세스를 허용합니다.
device-admin신뢰할 수 있는 장치를 관리하는 데 사용됩니다.
device-enroll사용자에게 장치 등록 권한을 부여하는 데 사용됩니다.
require-trusted-device리소스에 대한 접근을 위해 신뢰할 수 있는 장치가 필요합니다.
terraform-providerTeleport Terraform 제공자가 지원하는 모든 Teleport 리소스를 구성할 수 있도록 허용합니다.

로컬 사용자 Alice를 클러스터 editor 로 초대합니다:

tctl users add alice --roles=editor

로컬 사용자 Alice를 클러스터 editorreviewer 로 초대합니다:

tctl users add alice --roles=editor,reviewer

Alice가 가입하면 클러스터 구성 편집이 가능해집니다. tctl users ls 를 사용하여 사용자와 그들의 역할을 나열할 수 있습니다.

tctl users ls

User Roles


-------------------- --------------


alice editor


tctl users ls

User Roles

-------------------- --------------

alice editor, reviewer

사용자의 역할은 tctl users update 명령어를 사용하여 업데이트할 수 있습니다:

Alice가 다시 로그인하면 감사를 위한 로그를 볼 수 있습니다

tctl users update alice --set-roles=editor,auditor

Alice가 다시 로그인하면 감사를 위한 로그를 볼 수 있습니다

tctl users update alice --set-roles=editor,reviewer,auditor

Alice는 두 개 이상의 역할이 있기 때문에, 이러한 역할의 권한이 결합됩니다. 그녀는 시스템 관리자이자 감사자로 동시에 활동할 수 있습니다.

2/3단계. SSO 사용자를 역할에 매핑하기

다음으로, 사용자를 Teleport 역할에 매핑하는 인증 커넥터를 설정하는 지침을 따르십시오.

Teleport Enterprise

Teleport가 통합할 수 있는 SAML 또는 OIDC 애플리케이션을 생성한 후, 귀하의 애플리케이션 내 사용자를 Teleport 역할에 매핑하는 인증 커넥터를 생성합니다.

우리의 SAML Okta 가이드를 따라 SAML 애플리케이션을 생성합니다.

아래 파일을 okta.yaml 로 저장하고 acs 필드를 업데이트합니다.
Okta 그룹 okta-admin 의 모든 구성원은 내장 역할 admin 을 맡습니다.

kind: saml
version: v2
metadata:
  name: okta
spec:
  acs: https://tele.example.com/v1/webapi/saml/acs
  attributes_to_roles:
    - { name: "groups", value: "okta-admin", roles: ["access"] }
  entity_descriptor: |
    <?xml !!! XML 설명자의 모든 줄을 4칸으로 이동해야 하며, 그렇지 않으면 작동하지 않습니다

saml 리소스를 생성합니다:

tctl create okta.yaml

우리의 OIDC 가이드를 따라 OIDC 애플리케이션을 생성합니다.

아래 YAML을 oidc.yaml 이라는 파일에 복사하고 정보에 귀하의 OIDC 애플리케이션의 세부 정보를 포함하도록 편집합니다.

kind: oidc
metadata:
  name: oidc_connector
spec:
  claims_to_roles:
  - claim: groups
    roles:
    - access
    value: users
  - claim: groups
    roles:
    - editor
    value: admins
  client_id: <CLIENT-NAME>
  client_secret: <CLIENT-SECRET>
  issuer_url: https://idp.example.com/
  redirect_url: https://mytenant.teleport.sh:443/v1/webapi/oidc/callback
  max_age: 24h
  client_redirect_settings:
    # HTTPS 클라이언트 리디렉션 URL에 허용되는 호스트 이름 목록
    # 정규식 패턴일 수 있음
    allowed_https_hostnames:
      - remote.machine
      - '*.app.github.dev'
      - '^\d+-[a-zA-Z0-9]+\.foo.internal$'
    # HTTP 또는 HTTPS 클라이언트 리디렉션 URL에 허용되는 CIDR 목록
    insecure_allowed_cidr_ranges:
      - '192.168.1.0/24'
      - '2001:db8::/96'
version: v3

oidc 리소스를 생성합니다:

tctl create okta.yaml

Teleport Community Edition

아래 파일을 github.yaml 로 저장하고 필드를 업데이트하십시오. GitHub OAuth 2.0 Connector 앱을 설정해야 합니다. octocats 라는 GitHub 조직의 admin 팀에 소속된 모든 구성원은 내장 역할인 access 를 맡을 수 있습니다.

kind: github
version: v3
metadata:
  # `tsh --auth=github login` 과 함께 사용될 커넥터 이름
  name: github
spec:
  # GitHub OAuth 앱의 클라이언트 ID
  client_id: client-id
  # GitHub OAuth 앱의 클라이언트 비밀
  client_secret: client-secret
  # UI 로그인 화면에 표시될 이름
  display: GitHub
  # tele.example.com을 도메인 이름으로 변경
  redirect_url: https://tele.example.com:443/v1/webapi/github/callback
  # github 팀을 teleport 역할에 매핑
  teams_to_roles:
    - organization: octocats # GitHub 조직 이름
      team: admin # 해당 조직 내에 있는 GitHub 팀 이름
      # github admin 팀을 Teleport의 "access" 역할로 매핑
      roles: ["access"]

github 리소스를 생성하십시오:

tctl create github.yaml

3/3단계. 사용자 정의 역할 생성

인턴을 위한 사용자 정의 역할을 생성해 보겠습니다. 인턴은 readonly 사용자로서 테스트 또는 스테이징 SSH 서버에 접근할 수 있습니다. 일부 모니터링 웹 애플리케이션과 개발 Kubernetes 클러스터를 볼 수 있도록 하겠습니다.

이 역할을 interns.yaml 로 저장하십시오:

kind: role
version: v7
metadata:
  name: interns
spec:
  allow:
    # Logins은 SSH 로그인 주체를 구성합니다.
    logins: ['readonly']
    # 이 역할을 가진 사용자를 내장 Kubernetes 그룹 "view"에 할당합니다.
    kubernetes_groups: ["view"]
    # "staging" 또는 "test"로 레이블된 SSH 노드, Kubernetes 클러스터, 앱 또는 데이터베이스에 대한 접근을 허용합니다.
    node_labels:
      'env': ['staging', 'test']
    kubernetes_labels:
      'env': 'dev'
    kubernetes_resources:
      - kind: *
        namespace: "*"
        name: "*"
        verbs: ["*"]
    app_labels:
      'type': ['monitoring']
  # 거부 규칙은 항상 허용 규칙을 무시합니다.
  deny:
    # 모든 사용자에 대해 'prod'로 레이블된 Node, 데이터베이스, 앱 또는 Kubernetes 클러스터에 대한 접근을 거부합니다.
    node_labels:
      'env': 'prod'
    kubernetes_labels:
      'env': 'prod'
    kubernetes_resources:
      - kind: "namespace"
        name: "prod"
    db_labels:
      'env': 'prod'
    app_labels:
      'env': 'prod'

tctl create -f 명령을 사용하여 역할을 생성하십시오:

tctl create -f /tmp/interns.yaml

시스템의 모든 역할 목록 가져오기

tctl get roles --format text

다음 단계

Teleport 원문 보기