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 실습을 마칩니다.
수고하셨습니다 :)