Home
home

4장 실습 - Amazon EKS Secure Access - Teleport 구성하기

1. 기본 환경 배포

이번 실습은 IAM 사용자 계정을 통해 관리 콘솔에 접근하고 액세스 키를 활용해 awscli 도구를 사용합니다.
해당 작업을 수행하지 않았다면 아래 토글을 확장해 작업을 선행하고 본격적인 실습에 들어갑니다.
IAM 사용자 생성 및 액세스 키 생성

1.1. Terraform을 통한 기본 인프라 배포

Terraform을 통한 기본 인프라 배포에 앞서 SSH 키 페어, IAM User Access Key ID, IAM User Secret Access Key를 미리 확인하고 메모해 둡니다.
Terraform으로 기본 인프라 배포
cd cnaee_class_tf/ch4
Bash
복사
# 실습 디렉터리 경로 진입
export TF_VAR_KeyName=[각자 ssh keypair] export TF_VAR_MyIamUserAccessKeyID=[각자 iam 사용자의 access key id] export TF_VAR_MyIamUserSecretAccessKey=[각자 iam 사용자의 secret access key] export TF_VAR_SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32
Bash
복사
# Terraform 환경 변수 저장
terraform init terraform plan terraform apply -auto-approve -var="create_eks_bastion_2=false"
Bash
복사
# Terraform 배포
Note: 
create_eks_bastion_2 변수를 false로 지정해서 myeks_bastion_2를 생성하지 않습니다.
Terraform을 통한 기본 인프라 배포가 완료되면 관리 콘솔에서 생성된 인프라들을 확인합니다.
Note: 
AWS 관리 콘솔에 로그인 할 땐 IAM 사용자 계정으로 진행합니다.

1.2. 기본 정보 확인 및 설정

Terraform 배포가 완료 후 출력되는 Output 정보에서 bastion_1_ip의 퍼블릭 IP를 확인합니다.
해당 IP로 EKS 관리용 인스턴스(myeks-bastion-1)에 SSH로 접속하고 아래 명령어를 통해 정보를 확인합니다.
Note:
myeks-bastion-1의 OS 변경으로 SSH 접근에 대한 계정을 ubuntu로 지정합니다.
(ssh -i ~/.ssh/XXXX.pem ubuntu@X.X.X.X)
기본 설정 및 확인
aws eks update-kubeconfig \ --region $AWS_DEFAULT_REGION \ --name $CLUSTER_NAME
Shell
복사
# EKS 클러스터 인증 정보 업데이트
kubens default
Bash
복사
# kubens default 설정
echo $AWS_DEFAULT_REGION echo $CLUSTER_NAME echo $VPCID echo $PublicSubnet1,$PublicSubnet2,$PublicSubnet3 echo $PrivateSubnet1,$PrivateSubnet2,$PrivateSubnet3
Bash
복사
# 변수 호출 종합
eksctl get cluster
Bash
복사
# eksctl을 통한 eks cluster 정보 확인
eksctl get nodegroup \ --cluster $CLUSTER_NAME \ --name ${CLUSTER_NAME}-node-group
Bash
복사
# eksctl을 통한 노드 그룹 정보 확인
kubectl get node -owide
Bash
복사
# kubectl을 통한 노드 정보 확인
IAM_USER=$(aws iam get-user --query 'User.UserName' --output text) echo "export IAM_USER=$IAM_USER" >> /etc/profile echo $IAM_USER
Bash
복사
# 각자의 IAM User 이름 변수 선언
Note:
실습에 사용할 IAM User 이름이 가이드에 따르면 admin이겠지만, 다른 이름이라면 해당 이름으로 선언됩니다.
PublicN1=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2a -o jsonpath={.items[0].status.addresses[0].address}) PublicN2=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2b -o jsonpath={.items[0].status.addresses[0].address}) PublicN3=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2c -o jsonpath={.items[0].status.addresses[0].address}) echo "export PublicN1=$PublicN1" >> /etc/profile echo "export PublicN2=$PublicN2" >> /etc/profile echo "export PublicN3=$PublicN3" >> /etc/profile echo $PublicN1, $PublicN2, $PublicN3
Bash
복사
# 노드 IP 변수 선언
for node in $PublicN1 $PublicN2 $PublicN3; \ do \ ssh -i ~/.ssh/kp_node.pem -o StrictHostKeyChecking=no ec2-user@$node hostname; \ done
Bash
복사
# 노드에 ssh 접근 확인

2. Teleport 설치 및 설정

Teleport를 설치해서 접근 제어 솔루션을 적용하고 접근을 설정합니다.

2.1. Teleport 설치

Teleport 클러스터 설치
TELEPORT_EDITION="oss" TELEPORT_VERSION="17.2.1"
Bash
복사
# Teleport Edition 및 Version 변수 선언
curl https://cdn.teleport.dev/install-v17.2.1.sh \ | bash -s ${TELEPORT_VERSION?} ${TELEPORT_EDITION?}
Bash
복사
# Teleport 설치 스크립트 실행
teleport version
Bash
복사
# Teleport Version 확인 (설치 확인)
Route 53의 Hosted Zone 설정
MyDomain=[각자 도메인 주소]; echo $MyDomain echo "export MyDomain=$MyDomain" >> /etc/profile
Bash
복사
# 각자 도메인 주소를 변수 선언
HostedZoneID=$(aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}" --query "HostedZones[0].Id" --output text | sed 's|/hostedzone/||'); echo $HostedZoneID echo "export HostedZoneID=$HostedZoneID" >> /etc/profile
Bash
복사
# Hosted Zone ID 변수 선언
BastionPublicIP=$(curl -s ipinfo.io/ip); echo $BastionPublicIP echo "export BastionPublicIP=$BastionPublicIP" >> /etc/profile
Bash
복사
# Bastion_1 Public IP 변수 선언
aws route53 list-resource-record-sets \ --hosted-zone-id $HostedZoneID \ --query "ResourceRecordSets[*].[Name,Type]" \ --output table
Bash
복사
# Hosted Zone 레코드 정보 확인
aws route53 change-resource-record-sets --hosted-zone-id $HostedZoneID --change-batch " { \"Comment\": \"Add A record for teleport\", \"Changes\": [ { \"Action\": \"CREATE\", \"ResourceRecordSet\": { \"Name\": \"teleport.${MyDomain}\", \"Type\": \"A\", \"TTL\": 300, \"ResourceRecords\": [ { \"Value\": \"${BastionPublicIP}\" } ] } } ] }"
Bash
복사
# A 레코드 추가 - teleport.${MyDomain}
aws route53 change-resource-record-sets --hosted-zone-id $HostedZoneID --change-batch " { \"Comment\": \"Add A record for *.teleport\", \"Changes\": [ { \"Action\": \"CREATE\", \"ResourceRecordSet\": { \"Name\": \"*.teleport.${MyDomain}\", \"Type\": \"A\", \"TTL\": 300, \"ResourceRecords\": [ { \"Value\": \"${BastionPublicIP}\" } ] } } ] }"
Bash
복사
# A 레코드 추가 - *.teleport.${MyDomain}
도메인
용도
teleport.${MyDomain}
사용자 및 서비스에서 프록시 서비스로 향하는 트래픽
*.teleport.${MyDomain}
Teleport에 등록된 웹 애플리케이션에 대한 트래픽으로 Teleport는 클러스터 도메인 이름의 하위 도메인을 각 애플리케이션에 발급
aws route53 list-resource-record-sets \ --hosted-zone-id $HostedZoneID \ --query "ResourceRecordSets[*].[Name,Type]" \ --output table
Bash
복사
# Hosted Zone 레코드 정보 확인
Let’s Encrypt를 사용한 Teleport 구성
퍼블릭 환경에서 Teleport Proxy가 실행될 때 Let’s Encrypt를 통해 TLS 인증서를 자동 요청
이때 클러스터 이름을 등록된 퍼블릭 도메인 주소로 입력
MAIL=[각자 메일 주소]
Bash
복사
# 각자 메일 주소를 변수 선언
teleport configure -o file \ --acme \ --acme-email=${MAIL} \ --cluster-name=teleport.${MyDomain}
Shell
복사
# /etc/teleport.yaml 파일 생성
cat /etc/teleport.yaml | yh
Bash
복사
# teleport.yaml 파일 확인
Start Teleport
systemctl status teleport
Bash
복사
# Teleport 상태 확인
systemctl enable teleport systemctl start teleport systemctl status teleport
Bash
복사
# Teleport 활성화 & 시작 & 상태 확인
ss -tulnp | grep teleport
Bash
복사
# Teleport tcp 포트 확인
Teleport Port
용도
443
Teleport Proxy Service
3022
Teleport SSH Service
3025
Teleport Auth Service
Bastion Host - 보안 그룹 설정
HOSTSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=${CLUSTER_NAME}-eks-sec-group --query "SecurityGroups[*].[GroupId]" --output text); echo $HOSTSGID echo "export HOSTSGID=$HOSTSGID" >> /etc/profile
Bash
복사
# Bastion Host의 보안 그룹 ID 변수 선언
aws ec2 authorize-security-group-ingress \ --group-id $HOSTSGID \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress \ --group-id $HOSTSGID \ --protocol tcp \ --port 3022 \ --cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress \ --group-id $HOSTSGID \ --protocol tcp \ --port 3025 \ --cidr 0.0.0.0/0
Bash
복사
# Bastion Host의 보안 그룹에 Teleport 포트 허용(모든 Source IP)
보안 그룹을 통해 TCP 443 포트를 허용한 후 https://teleport.${MyDomain}으로 접속합니다.
Teleport Log 확인
ls /var/lib/teleport
Bash
복사
# Teleport data 디렉터리 확인
tree /var/lib/teleport/log/
Bash
복사
# Teleport Log 관련 확인 (tree)
Let’s Encrypt 인증서 확인
tree /var/lib/teleport/acme/
Bash
복사
# Teleport acme 관련 확인 (tree)
cat /var/lib/teleport/acme/teleport.${MyDomain}
Bash
복사
# Let’s Encrypt 인증서 파일 확인
openssl x509 -in /var/lib/teleport/acme/teleport.${MyDomain} -text -noout
Bash
복사
# Let’s Encrypt 인증서 내용 확인

2.2. Teleport 설정

Teleport 사용자 생성
tctl users ls
Shell
복사
# Teleport 사용자 리스트
tctl users add tele_admin \ --roles=editor,access,auditor \ --logins=root,ec2-user,ubuntu \ --ttl=2h
Bash
복사
# tele_admin 사용자 생성(관리자)
Note:
Teleport 사용자를 생성하면 Invite Link가 생성되는데 기본적으로 1시간동안 유효합니다.
생성된 Invite Link로 접속해서 보안 설정을 진행합니다.
Note:
Teleport의 사용자는 ID/PW 인증과 함께 MFA로 OTP 인증을 수행합니다. 각자 스마트폰에 OTP 인증 앱을 설치해 주세요. (Ex. Google Authenticator)
Teleport SSH에 워커 노드 등록
tctl nodes ls
Bash
복사
# Teleport 등록 노드 리스트
tctl nodes add --roles=node --ttl=1h --token=mysecrettoken123
Bash
복사
# Teleport SSH Node Token 생성
tctl tokens ls
Bash
복사
# Teleport 등록 Token 리스트
ssh -i ~/.ssh/kp_node.pem ec2-user@$PublicN1
Bash
복사
# 노드1에 Teleport 설치
sudo su -
Bash
복사
curl https://cdn.teleport.dev/install-v17.2.1.sh | bash -s 17.2.1 teleport configure \ --roles=node \ --token="mysecrettoken123" \ --auth-server=192.168.1.100:3025 -o file sed -i "s/nodename: .*/nodename: eks-n1/" /etc/teleport.yaml systemctl enable --now teleport systemctl start teleport systemctl status teleport
Bash
복사
ssh -i ~/.ssh/kp_node.pem ec2-user@$PublicN2
Bash
복사
# 노드2에 Teleport 설치
sudo su -
Bash
복사
curl https://cdn.teleport.dev/install-v17.2.1.sh | bash -s 17.2.1 teleport configure \ --roles=node \ --token="mysecrettoken123" \ --auth-server=192.168.1.100:3025 -o file sed -i "s/nodename: .*/nodename: eks-n2/" /etc/teleport.yaml systemctl enable --now teleport systemctl start teleport systemctl status teleport
Bash
복사
ssh -i ~/.ssh/kp_node.pem ec2-user@$PublicN3
Bash
복사
# 노드3에 Teleport 설치
sudo su -
Bash
복사
curl https://cdn.teleport.dev/install-v17.2.1.sh | bash -s 17.2.1 teleport configure \ --roles=node \ --token="mysecrettoken123" \ --auth-server=192.168.1.100:3025 -o file sed -i "s/nodename: .*/nodename: eks-n3/" /etc/teleport.yaml systemctl enable --now teleport systemctl start teleport systemctl status teleport
Bash
복사
tctl nodes ls
Bash
복사
# Teleport 등록 노드 리스트
Node Group - 보안 그룹 설정
NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=${CLUSTER_NAME}-node-group-sg --query "SecurityGroups[*].[GroupId]" --output text); echo $NGSGID echo "export NGSGID=$NGSGID" >> /etc/profile
Bash
복사
# Node Group의 보안 그룹 ID 변수 선언
aws ec2 authorize-security-group-ingress \ --group-id $NGSGID \ --protocol tcp \ --port 3022 \ --cidr 192.168.1.100/32
Bash
복사
# Node Group의 보안 그룹에 3022 포트 허용(Teleport Proxy 대상)

2.3. TSH SSH 접근 및 확인

https://goteleport.com/docs/connect-your-client/tsh/#installing-tsh에서 설치 방법을 확인할 수 있습니다.
[사용자 PC - MAC OS] TSH 설치
curl -O https://cdn.teleport.dev/teleport-17.2.1.pkg
Bash
복사
# teleport 패키지 다운로드
sudo installer -pkg teleport-17.2.1.pkg -target / rm teleport-17.2.1.pkg
Bash
복사
# teleport 패키지 설치
tsh version
Bash
복사
# tsh 버전 확인
[사용자 PC - Windows OS] TSH 설치
1.
https://cdn.teleport.dev/teleport-v17.2.1-windows-amd64-bin.zip를 적절한 경로에 다운로드 받습니다.
2.
다운로드 받은 파일을 압축 해제 합니다.
3.
해당 경로에 대해 환경 변수를 수정하여 추가합니다.
내 PC → (마우스 우측) 속성 → 고급 시스템 설정 → 환경 변수 → 시스템 환경 변수 편집 → 경로 추가
4.
임의의 경로에서 tsh 버전을 확인합니다.
샘플 작업 - PowerShell 관리자 모드에서 진행
mkdir d:\teleport-v17.2.1 cd d:\teleport-v17.2.1
Bash
복사
# 설치할 경로 생성 및 이동
curl.exe -O https://cdn.teleport.dev/teleport-v17.2.1-windows-amd64-bin.zip
Bash
복사
# Teleport windows 버전 다운로드
Expand-Archive -Path teleport-v17.2.1-windows-amd64-bin.zip -DestinationPath .
Bash
복사
# Teleport 패키치 압축 해제
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";D:\teleport-v17.2.1", [EnvironmentVariableTarget]::Machine)
Bash
복사
# 환경 변수 추가
tsh version
Bash
복사
# tsh 버전 확인
[사용자 PC] TSH 로그인 후 노드 접근
tsh login --proxy=teleport.ongja2.click --user=tele_admin
Bash
복사
# tsh login (tele_admin)
tsh status
Bash
복사
# tsh login 상태 확인
tsh clusters
Bash
복사
# tsh login한 클러스터 정보 확인
tsh ls
Bash
복사
# tsh ssh node 리스트 확인
tsh ssh ec2-user@eks-n1
Bash
복사
# tsh ssh 대상 서버 접근
tsh ssh ec2-user@eks-n2
Bash
복사
tsh ssh ec2-user@eks-n3
Bash
복사
[사용자 PC] TSH 기타 기능 확인
tsh latency ssh ec2-user@eks-n1
Bash
복사
# 대상 Teleport SSH 노드에 대한 지연 시간 확인
tsh recordings ls
Bash
복사
# session recording 리스트 확인
tsh play [recording_id]
Bash
복사
# session recording 대상 플레이
tsh ssh root@eks-n2
Bash
복사
# [신규 터미널] Teleport SSH 노드 접근
tsh sessions ls
Bash
복사
# tsh Active Session 리스트 확인
tsh join -m observer [session_id]
Bash
복사
# tsh session join (observer 모드: default)
tsh join -m peer [session_id]
Bash
복사
# tsh session join (peer 모드)

3. EKS 클러스터 - Teleport 등록 및 설정

Teleport에 EKS 클러스터를 등록하고 설정합니다.

3.1. Teleport에 EKS 클러스터 등록 및 확인

EKS 클러스터 등록을 위한 Teleport 토큰 생성
tctl nodes add --roles=kube --ttl=2h --token=mykubernetestoken123
Bash
복사
# Teleport Kubernetes Node Token 생성
tctl tokens ls
Bash
복사
# Teleport 등록 Token 리스트
Teleport Kube Agent 설치 (Helm) 및 확인
KUBECONFIG=$PWD/.kube/config; echo $KUBECONFIG KUBETOKEN=mykubernetestoken123; echo $KUBETOKEN PROXY_ADDR=teleport.${MyDomain}:443; echo $PROXY_ADDR
Bash
복사
# Teleport Agent 설치를 위한 변수 선언
helm repo add teleport https://charts.releases.teleport.dev helm repo update
Bash
복사
# helm repo 추가 (Teleport)
helm install teleport-agent teleport/teleport-kube-agent \ --version 17.2.1 \ --set kubeClusterName=${CLUSTER_NAME} \ --set proxyAddr=${PROXY_ADDR} \ --set authToken=${KUBETOKEN} \ --set labels.env=${CLUSTER_NAME} \ --create-namespace \ --namespace=teleport-agent
Bash
복사
# helm install (teleport-agent)
kubectl get statefulset -n teleport-agent
Bash
복사
# Teleport Agent Statefulset 확인
kubectl get pod -n teleport-agent
Bash
복사
# Teleport Agent 파드 확인
kubectl get pod -n teleport-agent -o yaml
Bash
복사
# Teleport Agent 파드 설정 정보 확인
kubectl get configmap teleport-agent -n teleport-agent -o yaml
Bash
복사
# Teleport Agent의 ConfigMap 확인
kubectl get secret teleport-kube-agent-join-token \ -n teleport-agent \ -o yaml
Bash
복사
# Teleport Agent의 Secret 확인
kubectl get secret teleport-kube-agent-join-token \ -n teleport-agent \ -o jsonpath="{.data.auth-token}" | base64 --decode
Bash
복사
# auth-token을 디코딩
[사용자 PC - MAC OS] kubectl 설치
brew install kubernetes-cli@1.30
Bash
복사
# brew를 통한 kubectl 설치
kubectl version --client
Bash
복사
# kubectl 버전 확인
[사용자 PC - Windows OS] kubectl 설치
1.
https://dl.k8s.io/release/v1.30.0/bin/windows/amd64/kubectl.exe를 적절한 경로에 다운로드 받습니다.
2.
해당 경로에 대해 환경 변수를 수정하여 추가합니다.
내 PC → (마우스 우측) 속성 → 고급 시스템 설정 → 환경 변수 → 시스템 환경 변수 편집 → 경로 추가
3.
임의의 경로에서 kubectl 버전을 확인합니다.
샘플 작업 - PowerShell 관리자 모드에서 진행
mkdir d:\kubectl-v1.30.0 cd d:\kubectl-v1.30.0
Bash
복사
# 설치할 경로 생성 및 이동
curl.exe -LO https://dl.k8s.io/release/v1.30.0/bin/windows/amd64/kubectl.exe
Bash
복사
# Teleport windows 버전 다운로드
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";D:\kubectl-v1.30.0", [EnvironmentVariableTarget]::Machine)
Bash
복사
# 환경 변수 추가
kubectl version --client
Bash
복사
# kubectl 버전 확인
[사용자 PC] TSH로 EKS 클러스터 접근 후 확인
tsh kube ls
Bash
복사
# Teleport에 등록된 Kubernetes 클러스터 확인
mkdir tele-kube && cd tele-kube touch tele-kubeconfig
Bash
복사
# Teleport 용도의 tele-kubeconfig 파일 생성
export KUBECONFIG=$PWD/tele-kubeconfig
Bash
복사
# KUBECONFIG 변수에 대상 파일 지정(임시)
Note:
임시 테스트로 export KUBECONFIG에 의해 현재 터미널에서만 유효합니다.
tsh kube login myeks
Bash
복사
# 대상 EKS 클러스터에 tsh kube login
tsh kube ls
Bash
복사
# Teleport에 등록된 Kubernetes 클러스터 확인
cat tele-kubeconfig
Bash
복사
# Teleport용 tele-kubeconfig 확인
kubectl get node
Bash
복사
# 노드 정보 확인
tsh status
Bash
복사
# tsh 상태 확인

3.2. Teleport에 사용자와 역할 정의

신규 Teleport 사용자 생성
tctl users add tele_viewer \ --roles=access \ --logins=root,ec2-user,ubuntu \ --ttl=2h
Bash
복사
# tele_viewer 사용자 생성(게스트)
tctl users ls
Shell
복사
# Teleport 사용자 리스트
Teleport Kubernetes Role 생성
cat << EOF > tele-kube-admin.yaml kind: role metadata: name: tele-kube-admin version: v7 spec: allow: kubernetes_labels: '*': '*' kubernetes_groups: - system:masters kubernetes_users: - '{{internal.kubernetes_users}}' kubernetes_resources: - kind: '*' namespace: '*' name: '*' verbs: ['*'] deny: {} EOF
Bash
복사
# tele-kube-admin.yaml 파일 생성
tctl create -f tele-kube-admin.yaml
Bash
복사
# tele-kube-admin role 생성
tctl get roles/tele-kube-admin
Bash
복사
# tele-kube-admin role 확인
cat <<EoF> pod-viewer-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pod-viewer-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch"] EoF kubectl apply -f pod-viewer-role.yaml
Bash
복사
# pod-viewer-role ClusterRole 생성
kubectl create clusterrolebinding pod-viewer-role-binding \ --clusterrole=pod-viewer-role \ --group=pod-viewer
Bash
복사
# pod-viewer-role-binding ClusterRoleBinding 생성(pod-viewer group)
cat << EOF > tele-kube-guest.yaml kind: role metadata: name: tele-kube-guest version: v7 spec: allow: kubernetes_labels: '*': '*' kubernetes_groups: - pod-viewer kubernetes_users: - '{{internal.kubernetes_users}}' kubernetes_resources: - kind: '*' namespace: '*' name: '*' verbs: ['*'] deny: {} EOF
Bash
복사
# tele-kube-guest.yaml 파일 생성
tctl create -f tele-kube-guest.yaml
Bash
복사
# tele-kube-guest role 생성
tctl get roles/tele-kube-guest
Bash
복사
# tele-kube-guest role 확인
Teleport 사용자에 Kubernetes Role 추가
tctl users update tele_admin \ --set-roles=editor,access,auditor,tele-kube-admin
Bash
복사
# tele_admin의 role 수정
tctl users update tele_viewer \ --set-roles=access,tele-kube-guest
Bash
복사
# tele_viewer의 role 수정
[사용자 PC] Teleport 사용자(tele_admin)에서 확인
tsh logout
Bash
복사
# tsh logout
tsh login --proxy=teleport.ongja2.click --user=tele_admin
Bash
복사
# tsh login (tele_admin)
tsh kube ls
Bash
복사
# Teleport에 등록된 Kubernetes 클러스터 확인
tsh kube login myeks tsh kube ls
Bash
복사
# 대상 EKS 클러스터에 tsh kube login 후 리스트 확인
아래 kubectl 명령을 수행할 때마다 Teleport Audit Log를 확인합니다.
kubectl get node -v=6
Bash
복사
# kubectl get node 확인
kubectl auth can-i get pods --all-namespaces kubectl auth can-i create pods --all-namespaces kubectl auth can-i delete pods --all-namespaces
Bash
복사
# kubectl get/create/delete pods 권한 여부 확인
curl -O https://raw.githubusercontent.com/cloudneta/cnaeelab/refs/heads/master/_data/mario.yaml cat mario.yaml kubectl apply -f mario.yaml
Bash
복사
# 디플로이먼트 & 서비스 생성
kubectl delete -f mario.yaml
Bash
복사
# 디플로이먼트 & 서비스 삭제
[사용자 PC] Teleport 사용자(tele_viewer)에서 확인
tsh logout
Bash
복사
# tsh logout
tsh login --proxy=teleport.ongja2.click --user=tele_viewer
Bash
복사
# tsh login (tele_viewer)
tsh kube login myeks tsh kube ls
Bash
복사
# 대상 EKS 클러스터에 tsh kube login 후 리스트
kubectl get node -v=6
Bash
복사
# kubectl get node 확인
kubectl auth can-i get pods --all-namespaces kubectl auth can-i create pods --all-namespaces kubectl auth can-i delete pods --all-namespaces
Bash
복사
# kubectl get/create/delete pods 권한 여부 확인

4. 실습 환경 삭제

4장 Amazon EKS Secure Access - Teleport 실습 환경 삭제와 Terraform 삭제 작업 모두를 진행합니다.

4.1. 실습 자원 삭제

[사용자 PC] TSH Logout
tsh logout tsh status
Bash
복사
# tsh logout & status
[Bastion-1] Teleport Agent 삭제
helm uninstall teleport-agent -n teleport-agent
Bash
복사
# helm teleport-agent 삭제
[Bastion-1] Route 53 A 레코드 삭제
aws route53 change-resource-record-sets --hosted-zone-id $HostedZoneID --change-batch " { \"Comment\": \"Add A record for teleport\", \"Changes\": [ { \"Action\": \"DELETE\", \"ResourceRecordSet\": { \"Name\": \"teleport.${MyDomain}\", \"Type\": \"A\", \"TTL\": 300, \"ResourceRecords\": [ { \"Value\": \"${BastionPublicIP}\" } ] } } ] }" aws route53 change-resource-record-sets --hosted-zone-id $HostedZoneID --change-batch " { \"Comment\": \"Add A record for *.teleport\", \"Changes\": [ { \"Action\": \"DELETE\", \"ResourceRecordSet\": { \"Name\": \"*.teleport.${MyDomain}\", \"Type\": \"A\", \"TTL\": 300, \"ResourceRecords\": [ { \"Value\": \"${BastionPublicIP}\" } ] } } ] }"
Bash
복사
# A 레코드 삭제 (teleport.${MyDomain} & *.teleport.${MyDomain})
Note:
각자 스마트폰에서 OTP 앱에 등록된 대상을 삭제해 주세요.

4.2. Terraform 자원 삭제

[사용자 PC] Terraform 자원 삭제
terraform destroy -auto-approve
Bash
복사
# terraform 자원 삭제
Warning:
Terraform 삭제 동안 터미널을 유지하고 Terraform 삭제가 완료되면 정상적으로 자원 삭제 되었는지 꼭 확인을 합니다.
여기까지 4장의 두 번째 실습인 Amazon EKS Secure Access - Teleport 실습을 마칩니다.
수고하셨습니다 :)