인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
액세스 제어 시작하기
Teleport에서는 모든 로컬, SSO, 또는 로봇 사용자가 하나 또는 여러 개의 역할을 부여받을 수 있습니다.
역할은 데이터베이스, SSH 서버, Kubernetes 클러스터, Windows 데스크톱 및 웹 앱에 대한 액세스를 제어합니다.
로컬 사용자 및 사전 설정된 역할로 시작하고, SSO 사용자에게 역할을 할당한 후, 자체 역할을 생성하는 것으로 마무리합니다.
필수 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. 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를 운영 환경에서 실행할 때 보안 사고를 피하기 위해 다음의 모범 사례를 준수해야 합니다:
- 필요하지 않는 한 운영 환경에서
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-provider | Teleport Terraform 제공자가 지원하는 모든 Teleport 리소스를 구성할 수 있도록 허용합니다. | ✔ |
로컬 사용자 Alice를 클러스터 editor
로 초대합니다:
tctl users add alice --roles=editor
로컬 사용자 Alice를 클러스터 editor
및 reviewer
로 초대합니다:
tctl users add alice --roles=editor,reviewer
Alice가 가입하면 클러스터 구성 편집이 가능해집니다. tctl users ls
를 사용하여 사용자와 그들의 역할을 나열할 수 있습니다.
tctl users lsUser Roles
-------------------- --------------
alice editor
tctl users lsUser 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