AWS에서 Teleport 단일 인스턴스 배포
이 가이드는 참조 starter-cluster Terraform 코드와 함께 사용하여 결과 Teleport 배포를 관리하는 방법을 설명합니다. 이 모듈은 다음 구성 요소를 배포합니다: 또한 ACM이 활성화된 경우 다음 구성 요소도 선택적으로 배포합니다:
이 가이드는 참조 starter-cluster Terraform 코드와 함께 사용하여 결과 Teleport 배포를 관리하는 방법을 설명합니다.
이 모듈은 다음 구성 요소를 배포합니다:
- Teleport Auth Service, Proxy Service 및 SSH Service 구성 요소를 실행하는 하나의 AWS EC2 인스턴스
- Teleport 백엔드 데이터베이스 및 감사 이벤트를 저장하기 위한 Amazon DynamoDB 테이블
- Teleport 세션 녹화를 저장하기 위한 AWS S3 버킷
- DynamoDB 및 S3를 사용하기 위한 EC2 인스턴스에 권한을 부여하는 최소한의 AWS IAM 역할
- EC2 인스턴스에 대한 인바운드 트래픽을 제한하는 AWS 보안 그룹
- 설치 중에 제어하고 선택하는 Amazon Route 53의 서브도메인을 가리키는 Amazon Route 53 DNS 레코드
또한 ACM이 활성화된 경우 다음 구성 요소도 선택적으로 배포합니다:
- 설치 중에 제어하고 선택하는 Amazon Route 53의 서브도메인에 대한 Amazon ACM 인증서
- 들어오는 트래픽을 보호하기 위해 위의 ACM 인증서를 사용하는 AWS Application Load Balancer
자세한 내용은 아래에 제공됩니다.
사전 요구사항#
이 가이드는 인프라가 AWS GovCloud에 호스팅되지 않고 에어갭 AWS 환경(EKS Anywhere)에 있지 않다고 가정합니다. 그런 경우라면 배포 계획 지원을 위해 Teleport 팀에 연락하세요.
이 가이드에는 다음도 필요합니다:
-
시스템에 설치된 Terraform. 지침은 Terraform 설치를 방문하세요.
$ which terraform /usr/local/bin/terraform $ terraform version Terraform v1.5.6 -
aws명령줄 도구. Ubuntu/Debian/Fedora/CentOS 및 macOS Homebrew에서awscli패키지로 사용 가능합니다.Fedora/CentOS:
yum -y install awscliUbuntu/Debian:
apt-get -y install awsclimacOS (Homebrew 사용):
brew install awscli가능한 경우 패키지를 통한 설치가 항상 더 좋습니다. 배포에 사용 가능한 패키지를 찾을 수 없는 경우 https://aws.amazon.com/cli/에서 도구를 다운로드할 수도 있습니다.
-
~/.aws/credentials에서 사용 가능한 자격 증명으로 AWS CLI 접근이 구성되어 있다고 가정합니다:$ cat ~/.aws/credentials # [default] # aws_access_key_id = (=aws.aws_access_key=) # aws_secret_access_key = (=aws.aws_secret_access_key=) -
~/.aws/config에 기본 리전이 설정되어 있어야 합니다:$ cat ~/.aws/config # [default] # region = us-west-2결과적으로
aws ec2 describe-instances와 같은 명령을 실행하여 실행 중인 EC2 인스턴스를 나열할 수 있어야 합니다. -
Route 53 영역. Terraform 모듈은 이 영역에 Teleport 클러스터에 대한 DNS 레코드를 생성합니다.
-
AWS에서 생성된 키 쌍.
다음 AWS 서비스에 대한 관리자 수준 권한이 필요합니다:
- EC2, S3, Route 53, DynamoDB, Elastic Load Balancing, IAM, SSM Parameter Store
Terraform 코드 가져오기#
먼저 Teleport 리포지토리를 클론합니다:
$ git clone https://github.com/gravitational/teleport -b branch/v(=teleport.major_version=)
완료되면 Terraform 코드가 있는 디렉터리로 변경하고 terraform init을 실행합니다:
$ cd teleport/examples/aws/terraform/starter-cluster
$ terraform init
변수 설정#
region#
$ export TF_VAR_region=""
cluster_name#
$ export TF_VAR_cluster_name="teleport-example"
내부 Teleport 클러스터 이름으로 고유해야 하며 공백, 점(.) 또는 기타 특수 문자를 포함하지 않아야 합니다. 생성 후에 변경할 수 없으므로 신중하게 선택하세요.
ami_name#
$ export TF_VAR_ami_name="teleport-ent-(=teleport.version=)-x86_64"
팁: Teleport AMI 나열
OSS AMI:
$ aws --region ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-oss-(=teleport.version=)-*'Enterprise AMI:
$ aws --region ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-ent-(=teleport.version=)-*'
key_name#
$ export TF_VAR_key_name="exampleuser"
license_path#
$ export TF_VAR_license_path="/home/user/license.pem"
(Teleport Community Edition 사용자는 touch /tmp/license.pem을 실행하고 '/tmp/license.pem' 경로를 제공할 수 있습니다.)
route53_zone#
$ export TF_VAR_route53_zone="example.com"
route53_domain#
$ export TF_VAR_route53_domain="teleport.example.com"
웹 접근을 위한 Teleport 클러스터 호스트 IP를 가리키는 A 레코드로 설정할 서브도메인.
add_wildcard_route53_record#
$ export TF_VAR_add_wildcard_route53_record="true"
enable_mongodb_listener#
$ export TF_VAR_enable_mongodb_listener="false"
enable_mysql_listener#
$ export TF_VAR_enable_mysql_listener="false"
enable_postgres_listener#
$ export TF_VAR_enable_postgres_listener="false"
s3_bucket_name#
$ export TF_VAR_s3_bucket_name="teleport-example"
S3 버킷 이름은 전역적으로 고유해야 합니다.
cluster_instance_type#
$ export TF_VAR_cluster_instance_type="t3.micro"
테스트에는 micro 인스턴스로 충분하지만 더 많은 사용자를 지원해야 하는 경우 더 큰 인스턴스를 사용하세요.
email#
$ export TF_VAR_email="support@example.com"
use_letsencrypt#
$ export TF_VAR_use_letsencrypt="false"
"true" 문자열로 설정하면 Terraform은 Let's Encrypt를 사용하여 공개 웹 UI 인증서를 프로비저닝합니다.
use_acm#
$ export TF_VAR_use_acm="true"
"true" 문자열로 설정하면 Terraform은 AWS ACM을 사용하여 공개 웹 UI 인증서를 프로비저닝합니다. ACM이 활성화되면 Let's Encrypt가 자동으로 비활성화됩니다.
가능하면 ACM을 사용하는 것을 권장합니다. Teleport 클러스터에 대한 인증서 관리를 단순화하기 때문입니다.
use_tls_routing#
$ export TF_VAR_use_tls_routing="true"
true로 설정하면 Teleport는 TLS 라우팅을 사용하여 모든 트래픽을 단일 포트로 다중화합니다.
이 starter-cluster 배포를 사용할 때 ACM이 활성화된 경우 TLS 라우팅도 자동으로 활성화됩니다.
teleport_auth_type#
$ export TF_VAR_teleport_auth_type="local"
기본 인증 유형을 변경하는 데 사용할 수 있습니다.
- Teleport Community Edition은
local또는github지원 - Teleport Enterprise Edition은
local,github,oidc, 또는saml지원 - Teleport Enterprise FIPS 배포는
github,oidc, 또는saml사용 필요
참조 배포 기본값#
인스턴스#
참조 배포는 클러스터에 하나의 인스턴스를 프로비저닝합니다.
클러스터 상태 데이터베이스 스토리지#
DynamoDB를 사용하여 클러스터 상태 데이터베이스를 저장하도록 설정됩니다. 테이블 이름은 cluster_name과 동일합니다.
감사 이벤트 스토리지#
DynamoDB를 사용하여 클러스터 감사 로그를 저장합니다. 테이블 이름은 cluster_name 뒤에 -events가 붙습니다.
녹화된 세션 스토리지#
s3://teleport-example/records와 같이 s3_bucket_name 버킷의 records 디렉터리에 저장합니다.
팁
S3는 규제 환경에 유용한 Amazon S3 Object Lock을 제공합니다.
클러스터 도메인#
route53_domain 변수에서 참조하는 Route 53에 정의된 도메인에서 사용 가능합니다.
TLS 라우팅 사용 시: 포트 443에서 모든 Teleport SSH, 터널, Kubernetes 및 데이터베이스 트래픽을 처리합니다.
TLS 라우팅 미사용 시:
- SSH 인터페이스: 포트 3023
- 역방향 터널 리스너: 포트 3024
- Kubernetes 리스너: 포트 3026
- MongoDB (활성화된 경우): 포트 27017
- MySQL (활성화된 경우): 포트 3036
- Postgres (활성화된 경우): 포트 5432
Terraform으로 배포#
위에 설명된 모든 변수를 설정하고 내보낸 후 terraform plan을 실행하여 구성을 유효성 검사합니다:
$ terraform plan
# ...
# Plan: 30 to add, 0 to change, 0 to destroy.
terraform apply를 실행합니다:
$ terraform apply
# ...
# Enter a value: yes
여기에 yes를 입력하면 Terraform 배포가 시작됩니다. 완전히 배포하는 데 약 5분이 걸립니다.
Terraform 배포 제거#
terraform destroy를 실행하여 실행 중인 배포를 종료합니다.
Terraform 설정 후 클러스터에 접근#
Terraform 설정이 완료되면 Teleport 클러스터의 웹 UI URL이 cluster_web_address Terraform 출력에 설정됩니다:
$ terraform output -raw cluster_web_address
https://teleport.example.com
Teleport 클러스터에 관리자 사용자 추가#
-
SSH를 통해 Teleport 클러스터 호스트에 연결합니다:
$ ssh -i $(terraform output -raw key_name).pem ec2-user@$(terraform output -raw instance_ip_public) -
tctl명령으로 관리자 사용자를 생성합니다:Teleport Community Edition:
# Teleport 클러스터 호스트에서 $ sudo tctl users add teleport-admin --roles=editor,access --logins=root,ec2-userCommercial:
$ sudo tctl users add teleport-admin --roles=editor,access,reviewer --logins=root,ec2-user -
링크를 클릭하여 Teleport 웹 UI를 실행하고 사용자 설정을 완료합니다.
Teleport 서비스 재시작/확인#
systemd 서비스 이름은 Let's Encrypt(teleport.service)와 ACM(teleport-acm.service) 간에 다릅니다.
ACM 사용 시 (use_acm이 "true"로 설정됨):
$ systemctl status teleport-acm.service
Let's Encrypt 사용 시 (use_acm이 "false"로 설정됨):
$ systemctl status teleport.service
Teleport 클러스터에 에이전트 추가#
새 리소스를 클러스터에 빠르게 추가하는 가장 쉬운 방법은 Teleport 웹 UI의 "Enroll New Resource" 마법사를 사용하는 것입니다.
새 노드/EC2 서버를 추가하려면:
문제 해결#
AWS 할당량#
AWS 서비스 할당량 제한에 도달하면 Terraform 배포에서 오류가 발생할 수 있습니다. AWS Service Quotas 콘솔에서 현재 할당량을 확인하세요.
