Infograb logo
AWS에서 Teleport 단일 인스턴스 배포

이 가이드는 우리의 참조 스타터 클러스터 Terraform 코드와 함께 사용되며, 결과로 얻을 수 있는 Teleport 배포를 관리하는 방법을 설명합니다.

이 모듈은 다음 구성 요소를 배포합니다:

  • Teleport Auth Service, Proxy Service 및 SSH Service 구성 요소가 실행되는 AWS EC2 인스턴스 1개
  • Teleport 백엔드 데이터베이스 및 감사 이벤트를 저장하기 위한 AWS DynamoDB 테이블
  • Teleport 세션 녹화를 저장하기 위한 AWS S3 버킷
  • EC2 인스턴스가 DynamoDB 및 S3를 사용할 수 있도록 권한을 부여하는 최소한의 AWS IAM 역할
  • EC2 인스턴스로의 수신 트래픽을 제한하는 AWS 보안 그룹
  • 설치 중에 제어하고 선택한 하위 도메인을 가리키는 AWS Route 53 DNS 레코드

ACM이 활성화된 경우 다음 구성 요소도 선택적으로 배포됩니다:

  • 설치 중에 제어하고 선택한 AWS Route 53의 하위 도메인용 AWS ACM 인증서
  • 들어오는 트래픽을 보호하기 위해 위의 ACM 인증서를 사용하는 AWS Application Load Balancer

자세한 내용은 아래에서 제공됩니다.

Teleport Enterprise Cloud가 이 설정을 자동으로 처리하므로, 귀하는 즉시 안전한 인프라 접근을 제공할 수 있습니다.

무료 체험으로 Teleport Enterprise Cloud를 시작하세요.

필수 사항

우리의 코드는 Terraform 0.13+를 필요로 합니다. 여기에서 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 awscli

Ubuntu/Debian: apt-get -y install awscli

macOS (Homebrew 사용시): brew install awscli

가능하면 패키지를 통해 설치하는 것이 항상 바람직합니다. 배포판에 사용할 수 있는 패키지를 찾을 수 없는 경우 https://aws.amazon.com/cli/에서 도구를 다운로드할 수도 있습니다.

~/.aws/credentials에서 사용 가능한 자격 증명으로 AWS CLI 액세스를 구성했다고 가정합니다:

cat ~/.aws/credentials

[default]

aws_access_key_id = abcd1234-this-is-an-example

aws_secret_access_key = zyxw9876-this-is-an-example

또한 ~/.aws/config에서 기본 지역이 설정되어 있어야 합니다:

cat ~/.aws/config

[default]

region = us-west-2

그 결과, aws ec2 describe-instances와 같은 명령을 실행하여 실행 중인 EC2 인스턴스를 나열할 수 있어야 합니다. "access denied", "403 Forbidden" 또는 유사한 메시지가 표시되면 aws_access_key_idaws_secret_access_key가 참조하는 AWS IAM 사용자에게 추가 권한을 부여해야 합니다.

일반적인 규칙으로, Terraform을 실행하는 모든 사용자가 다음 AWS 서비스에 대한 관리자 수준의 권한을 가지고 있다고 가정합니다:

Terraform 배포 자체는 Teleport 인스턴스에서 AWS 서비스에 대해 적절히 제한된 권한 범위를 가진 새로운 IAM 역할을 생성합니다. 그러나 초기 클러스터 설정은 높은 수준의 AWS 권한을 가진 사용자에 의해 수행되어야 합니다.

Terraform 코드 가져오기

우선, Terraform 코드를 사용하기 위해 Teleport repo를 클론해야 합니다:

git clone https://github.com/gravitational/teleport -b branch/v16

'teleport'로 클론 중...

원격: 개체 나열: 106, 완료.

원격: 개체 수 세기: 100% (106/106), 완료.

원격: 개체 압축: 100% (95/95), 완료.

원격: 총 61144 (델타 33), 재사용된 35 (델타 11), 팩 재사용: 61038

개체 수신: 100% (61144/61144), 85.17 MiB | 4.66 MiB/s, 완료.

델타 해결: 100% (39141/39141), 완료.

작업이 완료된 후, Terraform 코드가 체크아웃된 디렉토리로 이동하고 terraform init을 실행합니다:

cd teleport/examples/aws/terraform/starter-cluster
terraform init

백엔드 초기화 중...
제공자 플러그인 초기화 중...- 사용 가능한 제공자 플러그인 확인 중...- hashicorp/aws v5.31.0 설치 중...- hashicorp/aws v5.31.0 (HashiCorp에서 서명됨) 설치 완료
Terraform이 성공적으로 초기화되었습니다!
이제 Terraform 작업을 시작할 수 있습니다. 변경 사항을 보려면 "terraform plan"을 실행해 보세요. 모든 Terraform 명령이 이제 작동해야 합니다.
모듈 또는 Terraform의 백엔드 구성을 설정하거나 변경하는 경우 작업 디렉토리를 재초기화하기 위해 이 명령을 다시 실행하세요. 잊어버리면 다른 명령이 감지하고 필요한 경우 다시 실행하라고 안내합니다.

이렇게 하면 참조 코드를 사용하여 Teleport를 실행하는 데 필요한 적절한 Terraform 플러그인이 다운로드됩니다.

변수 설정

Terraform 모듈은 입력 값을 전달하기 위해 변수를 사용합니다. 이를 수행할 수 있는 방법은 여러 가지가 있습니다:

  • terraform apply에 대해 명령줄에서
  • vars.tf 파일을 편집하여
  • 환경 변수를 설정하여

이 가이드에서는 환경 변수를 광범위하게 사용할 것입니다. 이는 클러스터가 생성된 후 Teleport 명령을 실행할 때 구성 값에 대한 참조가 더 쉽게 되기 때문입니다.

설정된 모든 환경 변수는 TF_VAR_로 시작하며 Terraform에 의해 자동으로 처리되고 삭제됩니다. 따라서 TF_VAR_test_variabletest_variable로 변환됩니다.

우리는 Teleport repo에서 examples/aws/terraform/starter-cluster 섹션에 따라 변수 및 그 용도에 대한 최신 목록을 유지하지만 여기에서 예시 목록을 살펴보겠습니다.

결정해야 할 사항은 다음과 같습니다:

region

export TF_VAR_region="us-west-2"

실행할 AWS 지역입니다. README에서 자세히 설명된 지원 목록에서 선택해야 합니다. 이는 DynamoDB의 암호화 기능을 지원하는 지역입니다.

cluster_name

export TF_VAR_cluster_name="teleport-example"

사용할 내부 Teleport 클러스터 이름입니다. 고유해야 하며, 공백, 점(.) 또는 기타 특수 문자를 포함하지 않아야 합니다. 일부 AWS 서비스는 이름에 점을 사용할 수 없으므로 도메인 이름으로 설정해서는 안 됩니다. 이는 클러스터의 웹 UI에 표시되며 생성 후 변경할 수 없으므로 신중히 선택해야 합니다. 좋은 예는 teleport-<company-name>과 같은 것이 될 수 있습니다.

ami_name

export TF_VAR_ami_name="teleport-ent-16.2.0-x86_64"

Teleport(Gravitational)는 새로운 버전의 Teleport를 출시할 때 OSS, Enterprise 및 Enterprise FIPS 140-2 AMI를 자동으로 빌드하고 게시합니다. AMI 이름의 형식은 teleport-<type>-<version>-<arch>이며, 여기서 <type>oss 또는 ent (Enterprise), <version>은 Teleport의 버전 (예: 16.2.0), <arch>x86_64 또는 arm64입니다.

FIPS 140-2 호환 AMI(기본적으로 FIPS 140-2 모드에서 Teleport를 배포)는 <arch> 뒤에 -fips 접미사가 붙습니다 (예: teleport-ent-16.2.0-x86_64-fips).

이 AMI를 게시하는 AWS 계정 ID는 146628656107입니다. 아래 예시의 awscli 명령을 사용하여 사용 가능한 AMI를 나열할 수 있습니다. 출력은 기본적으로 JSON 형식입니다.

Teleport AMI 목록

OSS AMI

aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-oss-16.2.0-*'

Enterprise AMI

aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-ent-16.2.0-*'

Enterprise FIPS 140-2 AMI

aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-ent-16.2.0-*-fips-*'

key_name

export TF_VAR_key_name="exampleuser"

EC2 인스턴스 배포 시 사용할 AWS 키 페어 이름입니다. 이는 지정한 region 변수와 동일한 지역에 존재해야 하며, 배포된 EC2 인스턴스에 연결하기 위해 이 키 페어의 복사본이 필요합니다. 액세스할 수 없는 키 페어는 사용하지 마세요.

license_path

Teleport 인증 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이선스 파일을 읽습니다.

라이선스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오.
teleport.sh에서 시작하고 Teleport 계정 이름(예: my-company)을 입력하세요.
로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이 버튼을 클릭하면 새로운 라이선스 파일이 생성되고 이를 다운로드할 수 있습니다.

export TF_VAR_license_path="/home/user/license.pem"

이 라이센스는 AWS SSM에 업로드되며 Teleport 인스턴스에서 자동으로 다운로드되어 Teleport Enterprise 기능을 활성화합니다.

(Teleport Community Edition 사용자는 /tmp/license.pem 경로에 빈 파일을 생성하기 위해 로컬에서 touch /tmp/license.pem을 실행하고 여기에서 '/tmp/license.pem' 경로를 제공할 수 있습니다. 라이센스 파일은 Teleport Community Edition 인스턴스에서는 사용되지 않습니다.)

route53_zone

export TF_VAR_route53_zone="example.com"

우리의 Terraform 설정은 AWS Route 53에서 도메인을 사전 배포하도록 요구합니다 - 아래에서 설정한 route53_domain에 대한 DNS 레코드를 자동으로 추가합니다. 다음 명령을 사용하여 이 목록을 나열할 수 있습니다:

aws route53 list-hosted-zones --query "HostedZones[*].Name" --output json
[ "example.com.", "testing.net.", "subdomain.wow.org."]

적절한 도메인을 사용하되, 최종 점(.)은 포함하지 마세요.

route53_domain

export TF_VAR_route53_domain="teleport.example.com"

웹 액세스를 위해 Teleport 클러스터 호스트의 IP를 가리키는 A 레코드로 설정할 하위 도메인입니다. 이것은 사람들이 Teleport 클러스터에 연결하는 데 사용하는 공개 도메인이므로 신중하게 선택해야 합니다.

이는 위에서 route53_zone에서 선택한 도메인의 하위 도 domain이어야 합니다.

add_wildcard_route53_record

export TF_VAR_add_wildcard_route53_record="true"

Teleport Proxy Service의 공개 웹 주소 하위 도메인에 대해 Teleport Application Service를 활성화하는 데 사용됩니다. 공개 도메인에 대한 와일드카드 항목이 Route 53에 설정됩니다 (예: *.teleport.example.com), 이를 Teleport 로드 밸런서로 가리킵니다. ACM을 위해 이는 true로 설정할 경우 와일드카드 인증서가 포함됩니다. Let's Encrypt는 발급하는 인증서에 자동으로 와일드카드 하위 도메인을 포함합니다.

enable_mongodb_listener

export TF_VAR_enable_mongodb_listener="false"

true로 설정된 경우, Teleport MongoDB 리스너 포트에 연결하는 네트워크 로드 밸런서에서 포트 27017이 활성화됩니다. TLS 라우팅을 사용하지 않는 경우 MongoDB 연결에 필요합니다.

enable_mysql_listener

export TF_VAR_enable_mysql_listener="false"

포트 3036이 Teleport MySQL 리스너 포트에 연결하는 네트워크 로드 밸런서에서 활성화됩니다. TLS 라우팅을 사용하지 않는 경우 MySQL 연결에 필요합니다.

enable_postgres_listener

export TF_VAR_enable_postgres_listener="false"

포트 5432가 Teleport PostgreSQL 리스너 포트에 연결하는 네트워크 로드 밸런서에서 활성화됩니다. TLS 라우팅을 사용하지 않는 경우 PostgreSQL 연결에 필요합니다.

s3_bucket_name

export TF_VAR_s3_bucket_name="teleport-example"

Terraform 예제에서는 Teleport 세션 녹화를 안전하게 저장하기 위한 S3 버킷도 설정합니다. 이는 S3 호환 이름일 수 있으며, 위에서 설정된 동일한 지역에 생성됩니다.

S3 버킷 이름은 전 세계적으로 고유해야 하므로 S3 프로비저닝과 관련된 오류가 발생하면 더 고유한 버킷 이름을 선택하세요.

cluster_instance_type

export TF_VAR_cluster_instance_type="t3.micro"

이 변수는 이 Teleport 클러스터를 실행할 EC2 인스턴스의 유형을 설정합니다.

micro 인스턴스는 테스트에는 적합하지만, 이 서버가 몇 명 이상의 사용자를 지원해야 하는 경우 더 큰 인스턴스를 사용해야 합니다.

email

export TF_VAR_email="support@example.com"

Let's Encrypt는 모든 등록된 인증서에 대해 이메일 주소를 요구하며, 이를 통해 알림 및 유용한 정보를 보낼 수 있습니다. 배포 팀이 액세스할 수 있는 일반적인 ops/support 이메일 주소를 권장합니다.

use_letsencrypt

export TF_VAR_use_letsencrypt="false"

"true" 문자열로 설정된 경우, Terraform은 Let's Encrypt를 사용하여 Teleport 클러스터의 공개 웹 UI 인증서를 프로비저닝합니다 (route53_domain - 예를 들어 https://teleport.example.com)에서 지원되며, AWS 네트워크 로드 밸런서를 사용하여 Teleport 클러스터의 웹 UI에 대한 연결을 부하 분산하고 SSL 종료는 Teleport 자체에서 처리됩니다.

use_acm

export TF_VAR_use_acm="true"

"true" 문자열로 설정된 경우, Terraform은 AWS ACM을 사용하여 클러스터에 대한 공개 웹 UI 인증서를 프로비저닝합니다. 이는 AWS Application Load Balancer를 사용하여 Teleport 클러스터의 웹 UI에 대한 연결을 부하 분산하고 SSL 종료는 로드 밸런서에서 처리됩니다.

Terraform이 자동으로 인증서를 생성하도록 하려면, 기존 ACM 인증서를 사용할 수 있습니다. 이를 위해 terraform apply 계속하기 전에 다음 명령을 실행해야 합니다:

terraform import aws_acm_certificate.cert <certificate_arn>

가능한 경우 ACM을 사용하는 것이 좋습니다. 이렇게 하면 Teleport 클러스터에 대한 인증서 관리가 간소화됩니다. ACM이 활성화된 경우, use_letsencrypt 변수의 값에 관계없이 Let's Encrypt는 자동으로 비활성화됩니다.

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 클러스터에 사용되는 기본 인증 유형을 변경하는 데 사용할 수 있습니다. 이는 DynamoDB에서 SAML, OIDC 또는 GitHub 커넥터를 구성할 때 AMI 업그레이드 간의 기본 인증 유형을 유지하는 데 유용합니다. 기본값은 local입니다.

  • Teleport Community Edition은 local 또는 github를 지원합니다.
  • Teleport Enterprise Edition은 local, github, oidc 또는 saml을 지원합니다.
  • Teleport Enterprise FIPS 배포는 로컬 인증이 비활성화되므로 github, oidc 또는 saml을 사용해야 합니다.

자세한 내용은 Teleport 인증 참조를 참조하세요.

참조 배포 기본값

인스턴스

우리의 참조 배포는 클러스터에 대해 인스턴스 1개를 프로비저닝합니다.

ACM을 사용하는 경우, ACM 인증서로 안전한 연결을 제공하는 Application Load Balancer가 구성됩니다.

Let's Encrypt를 사용하는 경우, 로드 밸런서가 구성되지 않고 트래픽이 인스턴스로 직접 전달되며 Let's Encrypt에서 발급한 인증서로 보호됩니다.

클러스터 상태 데이터베이스 저장소

참조 Terraform 배포는 Teleport가 클러스터 상태 데이터베이스를 DynamoDB에 저장하도록 설정합니다. 클러스터 상태를 위한 테이블 이름은 위의 cluster_name 변수에 구성된 클러스터 이름과 동일합니다.

우리 예제에서 DynamoDB 테이블 이름은 teleport-example입니다.

Teleport가 DynamoDB와 함께 작동하는 방법에 대한 추가 정보는 저장소 백엔드 가이드에서 확인할 수 있습니다.

감사 이벤트 저장소

참조 Terraform 배포는 Teleport가 클러스터 감사 로그를 DynamoDB에 저장하도록 설정합니다. 감사 이벤트 저장소를 위한 테이블 이름은 위의 cluster_name 변수에 구성된 클러스터 이름과 동일하며, -events가 끝에 추가됩니다.

우리 예제에서 DynamoDB 테이블 이름은 teleport-example-events입니다.

Teleport가 DynamoDB와 함께 작동하는 방법에 대한 추가 정보는 저장소 백엔드 가이드에서 확인할 수 있습니다.

녹화된 세션 저장소

참조 Terraform 배포는 Teleport가 녹화된 세션 로그를 위에서 설정된 s3_bucket_name 변수와 동일한 S3 버킷에 records 디렉터리 아래에 저장하도록 설정합니다.

우리 예제에서 이는 s3://teleport-example/records가 됩니다.

S3는 규제 환경에서 Teleport를 배포하는 고객에게 유용한 Amazon S3 객체 잠금을 제공합니다. 객체 잠금 구성은 본 가이드의 범위를 초과합니다.

클러스터 도메인

참조 Terraform 배포는 Teleport 클러스터를 Route 53에서 정의된 도메인에 사용할 수 있도록 설정하며, 이는 route53_domain 변수에 의해 참조됩니다. 우리 예제에서는 teleport.example.com이 됩니다.

Teleport의 웹 인터페이스는 Teleport 클러스터 호스트의 포트 443에서 사용할 수 있습니다.

ACM을 사용하는 경우, 이는 AWS Application Load Balancer에 연결된 A 레코드입니다.

Let's Encrypt을 사용하는 경우, 이는 인스턴스의 공용 IP를 가리키는 A 레코드입니다.

use_tls_routingtrue로 설정하면 모든 Teleport SSH, 터널, Kubernetes 및 데이터베이스 트래픽이 route53_domain에서 설정된 동일한 호스트 이름의 포트 443을 통해 흐릅니다.

use_tls_routingfalse로 설정하면:

  • Teleport Proxy Service의 SSH 인터페이스는 클러스터의 호스트 이름에서 포트 3023을 통해 사용할 수 있습니다. 이는 tsh 클라이언트와 연결할 때 사용하는 기본 포트이며 추가 구성이 필요하지 않습니다.
  • Teleport Proxy Service의 역터널 리스너는 클러스터의 호스트 이름에서 포트 3024을 통해 사용할 수 있습니다. 이는 신뢰할 수 있는 클러스터와 역터널을 통해 연결된 노드가 클러스터에 접근할 수 있도록 합니다.
  • Teleport Proxy Service의 Kubernetes 리스너는 클러스터의 호스트 이름에서 포트 3026으로 사용할 수 있습니다. 이는 Kubernetes 클라이언트가 Teleport 클러스터를 통해 Kubernetes 클러스터에 접근할 수 있도록 합니다.
  • MongoDB 리스너 포트가 활성화된 경우, 클러스터의 호스트 이름에서 포트 27017으로 사용할 수 있습니다. 이를 통해 클라이언트는 Teleport 클러스터에 등록된 MongoDB 데이터베이스에 연결할 수 있습니다.
  • MySQL 리스너 포트가 활성화된 경우, 클러스터의 호스트 이름에서 포트 3036으로 사용할 수 있습니다. 이를 통해 클라이언트는 Teleport 클러스터에 등록된 MySQL 데이터베이스에 연결할 수 있습니다.
  • Postgres 리스너 포트가 활성화된 경우, 클러스터의 호스트 이름에서 포트 5432으로 사용할 수 있습니다. 이를 통해 클라이언트는 Teleport 클러스터에 등록된 PostgreSQL 데이터베이스에 연결할 수 있습니다.

Terraform을 사용한 배포

위에서 자세히 설명한 모든 변수의 값을 설정 및 내보낸 후, 구성을 검증하기 위해 terraform plan을 실행합니다.

terraform plan

계획을 생성하기 전에 Terraform 상태를 메모리에서 새로 고침중...

새로 고친 상태는 이 계획을 계산하는 데 사용될 것이지만,

로컬 또는 원격 상태 저장소에 지속되지는 않습니다.


data.template_file.monitor_user_data: 상태 새로 고침중...

data.aws_kms_alias.ssm: 상태 새로 고침중...

data.aws_caller_identity.current: 상태 새로 고침중...

data.aws_ami.base: 상태 새로 고침중...

data.aws_availability_zones.available: 상태 새로 고침중...

data.aws_route53_zone.proxy: 상태 새로 고침중...

data.aws_region.current: 상태 새로 고침중...


------------------------------------------------------------------------


아래에 생성된 실행 계획이 표시됩니다.

리소스 작업은 다음 기호로 표시됩니다:

+ 생성

<= 읽기(데이터 자원)


Terraform은 다음 작업을 수행합니다:

<출력 잘림>


계획: 30 추가, 0 변경, 0 파기.
출력 사항에 대한 변경: + cluster_name = "example-cluster" + cluster_web_address = "https://teleport.example.com" + instance_ip_public = (적용 후 확인) + key_name = "example"
이 작업을 수행하시겠습니까? Terraform은 위에 설명된 작업을 수행할 것입니다. 승인하려면 'yes'만 허용됩니다.
값을 입력하세요: yes
------------------------------------------------------------------------
참고: 출력 매개변수로 "-out"을 지정하지 않으므로 Terraform은"terraform apply"를 실행하는 경우 이러한 정확한 작업이 수행될 것이라고 보장할 수 없습니다.

좋습니다 (Terraform에서 오류가 발생하지 않았습니다), 이제 terraform apply를 실행할 수 있습니다:

terraform apply

<출력 잘림>


계획: 30 추가, 0 변경, 0 파기.


이 작업을 수행하시겠습니까?

Terraform은 위에 설명된 작업을 수행할 것입니다.

승인하려면 'yes'만 허용됩니다.


값을 입력하세요:

여기에서 yes를 입력하면 Terraform 배포가 시작됩니다. 전체 배포에는 약 5분이 소요됩니다.

Terraform 배포 제거/종료

어떤 이유로든 실행 중인 배포를 중지해야 하는 경우, terraform destroy를 실행할 수 있습니다.

Terraform 설정 후 클러스터에 액세스하기

Terraform 설정이 완료되면 Teleport 클러스터의 웹 UI에 대한 URL이 cluster_web_address Terraform 출력에 설정됩니다.

배포 후 이 값을 확인하려면 terraform output -raw cluster_web_address를 실행하세요:

terraform output -raw cluster_web_address
https://teleport.example.com

Teleport 클러스터에 관리자 사용자 추가하기

Teleport 클러스터에 사용자를 추가하려면 Teleport 클러스터 호스트에 SSH로 연결하고 tctl 명령을 실행해야 합니다.

  1. 키 이름과 서버 IP를 사용하여 Teleport 클러스터 호스트에 SSH로 접속하세요. 지정한 key_name 변수에서 지정한 AWS 키 페어가 현재 디렉토리에 사용 가능해야 하며, 또는 -i 파라미터를 업데이트하여 이를 지정하세요:

    ssh -i $(terraform output -raw key_name).pem ec2-user@$(terraform output -raw instance_ip_public)

    호스트 '1.2.3.4 (1.2.3.4)'의 진위는 확립할 수 없습니다.

    ECDSA 키 지문은 SHA256:vFPnCFliRsRQ1Dk+muIv2B1Owm96hXiihlOUsj5H3bg입니다.

    연결을 계속하시겠습니까 (예/아니오/[지문])? 예

    영구적으로 '1.2.3.4' (ECDSA)가 알려진 호스트 목록에 추가되었습니다.

    마지막 로그인: Tue Mar 3 18:57:12 2020 from 1.2.3.5


    __| __|_ )

    _| ( / Amazon Linux 2 AMI

    ___|\___|___|


    https://aws.amazon.com/amazon-linux-2/

    보안을 위해 필요한 1개 패키지, 제공 가능한 6개 중

    "sudo yum update"를 실행하여 모든 업데이트를 적용하세요.

    [ec2-user@ip-172-31-29-119 ~]$

  2. Teleport에 대한 관리자 사용자를 생성하려면 tctl 명령을 사용하세요:

    Teleport 클러스터 호스트에서

    sudo tctl users add teleport-admin --roles=editor,access --logins=root,ec2-user

    사용자 "teleport-admin"이 생성되었으나 비밀번호가 필요합니다. 사용자가 설정을 완료하도록 이 URL을 공유하세요. 링크는 1시간 유효합니다:

    https://teleport.example.com:443/web/newuser/6489ae886babf4232826076279bcb2fb


    참고: teleport.example.com:443이 사용자가 접근할 수 있는 Teleport 프록시를 가리키도록 하세요.

    Teleport 클러스터 호스트에서

    sudo tctl users add teleport-admin --roles=editor,access,reviewer --logins=root,ec2-user

    사용자 "teleport-admin"이 생성되었으나 비밀번호가 필요합니다. 사용자가 설정을 완료하도록 이 URL을 공유하세요. 링크는 1시간 유효합니다:

    https://teleport.example.com:443/web/newuser/6489ae886babf4232826076279bcb2fb


    참고: teleport.example.com:443이 사용자가 접근할 수 있는 Teleport 프록시를 가리키도록 하세요.

  3. 링크를 클릭하여 Teleport 웹 UI를 시작하고 사용자를 설정하세요. WebAuthn 호환 하드웨어 키(예: Yubikey, 패스키 또는 Touch ID)를 사용하거나 Google Authenticator 또는 Authy와 같은 TOTP 호환 앱으로 QR 코드를 스캔하는 방법을 선택할 수 있습니다. 이 페이지에서 'teleport-admin' 사용자의 비밀번호도 설정됩니다.

    사용자가 성공적으로 구성되면 Teleport 웹 UI에 로그인해야 합니다.

tsh를 통해 클러스터에 로그인하기

사용자를 프로비저닝한 후 Teleport 클러스터에 로그인하기 위해 Teleport 명령줄 도구(tsh)를 사용할 수 있습니다.

tsh 클라이언트를 포함하는 Teleport 패키지는 여기에서 다운로드할 수 있습니다.

  • 클라이언트는 Teleport Community Edition과 Teleport Enterprise 모두에 대해 동일합니다.

tsh로 로그인할 때, URL 앞에 https://는 필요하지 않습니다.

export PROXY_ADDRESS=$(terraform output -raw cluster_web_address | sed 's_https://__')
tsh login --proxy=${PROXY_ADDRESS} --user=teleport-admin

Teleport 사용자 teleport-admin의 비밀번호를 입력하세요:

보안 키를 터치하세요.

보안 키 터치 감지됨

> 프로필 URL: https://teleport.example.com:443

로그인한 사용자: teleport-admin

클러스터: example-cluster

역할: editor, access

로그인: root

유효 기간: 2023-10-06 22:07:11 -0400 AST [유효 기간 12시간]

확장: permit-agent-forwarding, permit-port-forwarding, permit-pty


tsh ls

노드 이름 주소 레이블

---------------------------- ----------------- ------

ip-172-31-11-69-ec2-internal 172.31.11.69:3022


tsh ssh root@ip-172-31-11-69-ec2-internal

[root@ip-172-31-11-69 ~]#

tsh로 로그인할 때, URL 앞에 https://는 필요하지 않습니다.

export PROXY_ADDRESS=$(terraform output -raw cluster_web_address | sed 's_https://__')
tsh login --proxy=${PROXY_ADDRESS} --user=teleport-admin

Teleport 사용자 teleport-admin의 비밀번호를 입력하세요:

보안 키를 터치하세요.

보안 키 터치 감지됨

> 프로필 URL: https://teleport.example.com:443

로그인한 사용자: teleport-admin

클러스터: example-cluster

역할: editor, access, reviewer

로그인: root

유효 기간: 2023-10-06 22:07:11 -0400 AST [유효 기간 12시간]

확장: permit-agent-forwarding, permit-port-forwarding, permit-pty


tsh ls

노드 이름 주소 레이블

---------------------------- ----------------- ------

ip-172-31-11-69-ec2-internal 172.31.11.69:3022


tsh ssh root@ip-172-31-11-69-ec2-internal

[root@ip-172-31-11-69 ~]#

Teleport 서비스 재시작/확인하기

systemd 서비스 이름은 Let's Encrypt(teleport.service)와 ACM(teleport-acm.service)간에 다릅니다.

use_acm 변수가 "true"로 설정된 경우입니다.

systemctl status teleport-acm.service
● teleport-acm.service - Teleport 서비스 (ACM) Loaded: loaded (/etc/systemd/system/teleport-acm.service; static; vendor preset: disabled) Active: active (running) since Thu 2023-09-21 20:35:32 UTC; 9분 전Main PID: 2483 (teleport) CGroup: /system.slice/teleport-acm.service └─2483 /usr/local/bin/teleport start --config=/etc/teleport.yaml --diag-addr=127.0.0.1:3000 --pid-file=/run/teleport/teleport.pid
Sep 21 20:43:12 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:12Z [AUDIT] INFO session.data addr.local:127.0.0.1:443 addr.remote:1.2.3.4:25362 cluster_name:teleport-example code:T2006I ei:2.147483646e+09 event:se...Sep 21 20:43:17 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:17Z [SESSION:N] INFO Stopping session session_id:ca17914c-e0d5-42c1-9407-fa7a5c2dc163...Sep 21 20:43:17 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:17Z [AUDIT] INFO session.end addr.remote:1.2.3.4:25362 cluster_name:teleport-example code:T2004I ei:28 enhanced_recording:false event:s...ver_hostname:ip

Teleport Proxy Service에 대한 자세한 로그를 보려면 journalctl 명령을 사용할 수 있습니다:

journalctl -u teleport-acm.service

use_acm 변수가 "false"로 설정된 경우입니다.

systemctl status teleport.service
● teleport.service - Teleport 서비스 Loaded: loaded (/etc/systemd/system/teleport.service; static; vendor preset: disabled) Active: active (running) since Thu 2023-09-21 20:35:32 UTC; 9분 전Main PID: 2483 (teleport) CGroup: /system.slice/teleport.service └─2483 /usr/local/bin/teleport start --config=/etc/teleport.yaml --diag-addr=127.0.0.1:3000 --pid-file=/run/teleport/teleport.pid
Sep 21 20:43:12 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:12Z [AUDIT] INFO session.data addr.local:127.0.0.1:443 addr.remote:1.2.3.4:25362 cluster_name:teleport-example code:T2006I ei:2.147483646e+09 event:se...Sep 21 20:43:17 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:17Z [SESSION:N] INFO Stopping session session_id:ca17914c-e0d5-42c1-9407-fa7a5c2dc163...Sep 21 20:43:17 ip-172-31-29-119.ec2.internal teleport[2483]: 2023-09-21T20:43:17Z [AUDIT] INFO session.end addr.remote:1.2.3.4:25362 cluster_name:teleport-example code:T2004I ei:28 enhanced_recording:false event:s...ver_hostname:ip

Teleport Proxy Service에 대한 자세한 로그를 보려면 journalctl 명령을 사용할 수 있습니다:

journalctl -u teleport.service

Teleport 클러스터에 에이전트 추가하기

새 리소스를 클러스터에 신속하게 추가하는 가장 쉬운 방법은 Teleport 웹 UI의 "신규 리소스 등록" 마법사를 사용하는 것입니다.

고객은 AWS 내에서 많은 작업을 실행하며, 작업 방식에 따라 Teleport를 서버에 통합하는 여러 수동 방법이 있습니다. 우리는 설치 가이드를 확인하는 것을 권장합니다.

"SSH로 들어갈" 수 있는 새로운 노드/EC2 서버를 추가하려면 다음을 수행해야 합니다:

문제 해결

AWS 한도

만약 Teleport 서비스의 배포가 기본 서비스 한도를 초과한다면, AWS 지원 센터에 한도 증가를 요청할 수 있습니다. 자세한 내용은 Amazon의 AWS 서비스 한도 문서를 참조하세요.

예를 들어, Teleport 클러스터 상태의 백엔드로 DynamoDB를 사용할 때, 읽기/쓰기 한도의 증가를 요청해야 할 수도 있습니다.

Teleport 원문 보기