본문 바로가기
카테고리 없음

[계정/권한 관리] Teleport - 계정 별 서버 접근(ssh) 통제하기

by 이뫼장 2024. 1. 3.

이전글

2024.01.02 - [분류 전체보기] - [계정/권한 관리] Teleport - Server Resource(ssh 서버) 등록하기

 


 

이전 글에서 Teleport 관리서버(Auth+Proxy) 설치 및 설정 후 관리할 호스트서버 까지 등록하였다.

이제 등록한 호스트 서버를 계정(사용자)별로 접근 통제 하기 위한 방법을 알아보고자 한다.

 

 

Teleport의 접근통제

텔레포트는 역할에 따라 접근 통제를 수행한다.

즉, 역할을 정의하고 해당 역할에 따라 접근할 리소스를 지정하도록 되어있다.(RBAC)

여기서 '접근할 리소스'란 서버/k8s cluster/Application/DBMS 등이며, read/write/list 등의 접근 범위도 함께 지정한다.

 

 

본 글에서는 이전글에서 등록한 호스트의 ssh 접근을 통제 설정하는 방법에 대해 기술한다.

 

Teleport의 Role 구조

일반적인 role의 구조는 아래와 같다.

  • metadata : role의 정보를 설정
  • spec : role의 정책 설정
    • allow: 허용 정책
    • deny: 거부 정책, allow rule 보다 우선 순위가 높고 먼저 적용 된다. (동일한 리소스가 허용/거부 정책이 모두 설정되어 있을 경우 거부 정책으로 동작한다.)
    • options : max_ttl, forward_agent, ssh_file_copy, client_idle_timeout, max_sessions 등등 여러 옵션이 존재하며, 세션 연결 시 적용되는 정책이다. 
    • allow/deny 정책은 resource와 verb(행위)로 구성된다. 즉, "어떠한 리소스에 어떠한 행위를 허용/거부 한다"로 구성된다고 생각하면 된다.
  • version : role 버전 명시, v3~v7 까지 사용 가능하며, Moderated Sessions 기능을사용하려면 v5, v6을 사용해야 한다. 

자세한 사항은 docs를 참고하기 바란다.

 

User Role 추가하기

위에 설명했듯이 텔레포트는 역할로 접근을 통제하기 때문에 호스트의 ssh접근 통제도 접근이 가능한 역할을 정의하고 해당 역할을 신규 유저에게 부여해야 한다.

 

즉, 아래와 같은 시나리오로 접근을 제어한다. (SSH 접근)

  1. 기본적으로 서버의 모든 접근은 차단
  2. 특정 서버에 ssh 접근이 가능한 룰을 설정한다. 룰의 조건은 아래와 같다.
    • 특정서버는 Label로 구분한다. (node_labes)
    • 서버에 로그인 시 특정 ID만 접근 가능하게 한다. (logins)
  3. 위 룰을 서버에 접근이 필요한 유저(계정)에 부여한다.

 

신규 Role 추가하기

Teleport Drill-down 메뉴 Management → User Rules → Create Rule 클릭

 

기존 rule spec 삭제 하고 아래 rule spec 기입

kind: role
metadata:
  name: hellolcs_role
spec:
  allow:
    logins:
    - hellolcs2
    - hellolcs
    node_labels:
      dnb_app: '*hellolcs*'
  deny: {}
version: v7
  • name: 룰 이름
  • allow: 허용 정책 (아래 들여쓰기가 된 부분이 허용 정책의 실질적인 행위이다.)
    • logins : 해당 계정(ID)만 허용한다.
    • node_labes: 노드의 라벨 중에 설정된 라벨만 허용한다.
      • dnb_app: "*hellolcs*" : dnb_app 라벨 값에 hellolcs가 포함된 노드만 허용한다. 
      • Custom label의 설정 방법은 이전글의 Config 파일 수정에 있다.
  • deny : 차단 정책 (값이 없을 경우 default 이며, default는 모두 차단이다.)

 

User Roles 적용하기

User Role의 적용 방법은 간단하다. 

 

Users 메뉴에서 User를 등록하면서 Users Roles에서 새로 생성한 Role을 선택하면 된다. 

 

위에 처럼 User와 Role을 설정한다면, hellolcs2 계정은 hellolcs_role에 의해 dnb_app라벨에 hellolcs가 포함된 노드(서버)에만 접근이 가능하다. 

 

즉, 관리할 서버 Resource를 설치 후 설정 할 때 config 파일에 아래 구문이 포함된 서버에만 접근이 가능하다.

ssh_service:
  enabled: "yes"
  labels:                     
    dnb_app: hellolcs-test
    #또는 dnb_app: hellolcs-server
    #또는 dnb_app: test-hellolcs
    #또는 dnb_app: test-hellolcs-server

 

 

마치며...

여기까지 잘 따라 왔다면 Teleport를 관리서버 및 관리할 대상서버(Client)를 설치, 설정하고 계정 별로 서버를 접근통제 하는데 무리가 없을 것이다. 

 

Teleport를 통해 서버 직접 접속을 배제하고, 중앙화 하여 관리하므로 서버 관리에 많은 도움이 될 것으로 기대한다.