이전글
2023.12.26 - [분류 전체보기] - [계정/권한 관리] Teleport 최초 설정 및 메뉴 설명
Teleport 서버 설치 후 Teleport를 통해 관리할 서버 리소스 등록하는 방법을 알아보고자 한다.
첫 글에서 말했듯이 필자는 Teleport를 통해 (서버 ssh 접속을 해야하는)사용자에게 접속 가능한 서버의 목록과 Console Tools를 제공하고자 하는 목적으로 Teleport를 운영하려 한다.
설치파일 다운로드 및 설치
인터넷 연결이 가능한 환경
인터넷이 되는 환경이라면 아래 명령어 한번으로 설치 까지 가능하다.
curl https://goteleport.com/static/install.sh | bash -s 14.3.0
- 텔레포트에서 공식적으로 제공하는 설치 스크립트이다.
- bash -s "버전"으로 스크립트 실행 시 버전을 argument로 입력하여 특정버전 설치가 가능하다.
인터넷 연결이 불가능한 환경(폐쇄망)
인터넷이 안되는 폐쇄망이라면 RPM을 직접 다운로드 후 설치해야 한다.
위 설치 스크립트를 다운받아 내용을 확인 시 설치하는 호스트의 OS 환경을 확인 후 wget, yum, dnf등의 명령어를 선택적으로 사용하여 설치한다.
다만, 설치파일(.rpm)은 버전에 무관하게 wget을 통해 다운로드 받으며 아래 구문으로 버전을 설정 후 다운로드 받는다
TELEPORT_FILENAME="teleport${TELEPORT_SUFFIX}-${TELEPORT_VERSION}-1.${ARCH_RPM}.rpm"
URL="https://get.gravitational.com/${TELEPORT_FILENAME}"
- ${TELEPORT_SUFFIX}, ${TELEPORT_VERSION}, ${ARCH_RPM}은 입력한 argument 및 OS 정보를 활용하여 입력된다.
필자의 경우 최신버전인 14.3.0으로 설치할 예정이며 설치할 호스트의 architecture는 x86_64이다. (최근 대부분의 시스템은 x86_64라고 보면 된다.)
다른 버전을 다운받고 싶다면 뒤에 버전만 바꾸면 된다.
해당 링크를 통해 인터넷이 되는 환경에서 RPM파일을 다운받은 후 서버에 업로드 하여 rpm 명령어를 통해 설치하면 된다.
rpm -ivh teleport-14.3.0-1.x86_64.rpm
호스트 추가를 위한 초대 토큰 발급
호스트 추가를 위해서는 인증(Auth)서버로 부터 Token을 발급 받아야 한다.
Token 발급 전 tsh를 통해 Teleport Cluster에 로그인을 해야 한다.
tsh는 Teleport Command Line Client로 Teleport 설치 시 tctl(Admin tool for the Teleport Access Platform)과 같이 설치 된다.
tsh login --user=hellolcs --proxy=111.111.111.111:3080 --insecure
- --user=hellolcs : 사전에 생성한 관리자 계정이다.
- --proxy=111.111.111.111:3080 :
- tsh는 Teleport Client로 Proxy서버를 통해 Cluster에 접근하게 해주는 tool이다.
- 111.111.111.111에 Proxy를 IP를 입력한다.
- 3080 : 초기에 Docker로 컨테이너를 실행할 때 expose(외부노출)한 Port로 Proxy서버에서 기본으로 사용하는 Port이다. DNF로 설치 하였다면 443으로 해주어야 한다.
- --insecure : 초기 설정에서 TLS Routing을 설정하지 않았기 때문에 insecure 옵션을 사용해야 한다.
아래 명령어를 통해 호스트를 등록 시킬 수 있는 Token을 발급 받을 수 있으며, 해당 Token은 5분 동안만 유효하다.
tctl tokens add --ttl=5m --type=node --auth-server=111.111.111.111:3025
- --ttl : 발급(추가)하는 token의 유효 시간이다. 해당 시간이후에 token은 폐기된다.
- --type : 추가되는 token의 타입이다. node,app,db,proxy,etc가 있다.
- --auth-server : token을 발급해주는 인증서버의 IP이다.
- Token 발급 결과 나오는 구문을 그대로 사용해도 실행된다.
- 다만, Systemd로 Teleport를 관리하기 위해서 config를 생성해서 관리할 예정이므로 위 구문은 사용하지 않는다
- token(빨간색), ca-pin(노란색)은 config 작성 시 사용할 예정이다.
Config 설정
Teleport를 rpm으로 설치 시 systemd에 자동으로 서비스가 등록된다.
필자는 해당 서비스를 활용하여 Teleport를 관리할 예정이다.
systemd로 Teleport를 실행 시 아래 경로에 있는 폴더 및 파일을 사용 한다.
- config file : /etc/teleport.yaml
- data path : /var/lib/teleport
rpm 설치 시 /etc/teleport.yaml 파일이 존재 하지 않기 때문에 수동으로 만들어 줘야 한다.
Config 파일 수동 생성
사전에 설정 파일 및 데이터, 로그 경로로 사용할 폴더를 사전에 생성 한다.
mkdir -p /appdata/teleport/config
mdkir -p /appdata/teleport/data
mkdir -p /applog/teleport
아래 명령어를 통해 Config 파일을 생성
teleport node configure --data-dir=/appdata/teleport/data \
--token=81fdb0a06e45335c4f6912494bb12bb4 \
--auth-server=10.106.110.183:3025 \
--ca-pin=sha256:1303ce0217e5d909a87f6d94de60eda359cc32b0f030289ff9fcecd9eca29696 \
--node-name=vm-teleport-client-001 \
--silent \
--output=/appdata/teleport/config/teleport.yaml
- data-dir : teleport node가 사용할 데이터 저장 장소로 사용할 경로이다. 환경에 맞게 적절히 변경 필요하다.
- token : 위에 Token 추가 시 발급된 Token 번호이다.
- auth-server : auth-server IP를 입력하면 된다. Port는 별도로 변경하지 않았다면 3025 이다.
- ca-pin : Token 발급 시 확인된 ca-pin을 입력하면 된다. Auth 서버에 node를 인증할때 ca-pin을 통해 신뢰성 검증을 수행한다.
- node-name : Teleport 관리서버에서 표현될 hostname 이다.
- output : 설정파일이 저장되는 경로이다.
output 경로(/appdata/teleport/config)에 가보면 파일이 생성되어 있다.
Config 파일 수정
일부 설정은 설정파일에서 직접 수정이 필요하므로 설정파일을 열어 수정한다.
vi /appdatta/teleport/config/teleport.yaml
version: v3
teleport:
nodename: vm-teleport-client-001
data_dir: /appdata/teleport/data
join_params:
token_name: 81fdb0a06e45335c4f6912494bb12bb4
method: token
auth_server: 10.106.110.183:3025
log:
output: stderr => /applog/teleport/teleport.log #수정
severity: INFO => ERROR (수정) #수정
format:
output: text
extra_fields: [level, timestamp, component, caller] #추가
ca_pin: sha256:1303ce0217e5d909a87f6d94de60eda359cc32b0f030289ff9fcecd9eca29696
diag_addr: ""
auth_service:
enabled: "no"
ssh_service:
enabled: "yes"
labels: #추가
dnb_app: hellolcs-test #추가, custom label이며, 추후 role 구성 시 사용한다.
pam: #추가, linux pam을 통해 로깅하기 위해 사용한다.
enabled: "yes" #추가
service_name: "system-auth" #추가
commands:
- name: hostname
command: [hostname]
period: 1m0s
proxy_service:
enabled: "no"
https_keypairs: []
https_keypairs_reload_interval: 0s
acme: {}
시작 스크립트 수정
Teleport의 systemd 실행 스크립트도 수정해야 한다.
vi /usr/lib/systemd/system/teleport.service
[Unit]
Description=Teleport Service
After=network.target
[Service]
Type=simple
Restart=on-failure
EnvironmentFile=-/etc/default/teleport
#아래 --config ${PATH 항목을 수정)
#ExecStart=/usr/local/bin/teleport start --config /etc/teleport.yaml --pid-file=/run/teleport.pid
ExecStart=/usr/local/bin/teleport start --config /appdata/teleport/config/teleport.yaml --pid-file=/run/teleport.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/teleport.pid
LimitNOFILE=524288
[Install]
WantedBy=multi-user.target
서비스 추가 및 시작
systemctl enable teleport
systemctl start teleport
systemctl status teleport
관리서버 확인
관리서버에서 drill-down 메뉴 중 Resources에 가서 확인하면 해당 서버가 추가 되어 있는 것을 확인할 수 있다.
마치며..
여기까지 진행했다면 Teleport Auth, Proxy 및 호스트 까지 등록되었을 것이다.
다음에는 등록한 호스트에 대해 유저별로 접근 통제하는 방법을 알아볼 예정이다.
다음글
2024.01.03 - [분류 전체보기] - [계정/권한 관리] Teleport - 계정 별 서버 접근(ssh) 통제하기