인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
AWS에서 Teleport 단일 인스턴스 배포
이 가이드는 우리의 참고 스타터 클러스터 Terraform 코드와 함께 제공되며, 결과적으로 생성된 Teleport 배포를 관리하는 방법을 설명합니다.
이 모듈은 다음 구성 요소를 배포합니다:
- Teleport Auth 서비스, Proxy 서비스 및 SSH 서비스 구성 요소를 실행하는 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 애플리케이션 로드 밸런서
자세한 내용은 아래에 제공됩니다.
Tip
Teleport Enterprise Cloud는 이 설정을 자동으로 처리하므로 즉시 인프라에 대한 안전한 액세스를 제공할 수 있습니다.
Teleport Enterprise Cloud의 무료 평가판으로 시작하세요.
필수 조건
우리의 코드는 Terraform 0.13+가 필요합니다. 여기에서 Terraform을 다운로드할 수 있습니다. 우리는 terraform
이 설치되어 있고 경로에 사용 가능하다고 가정합니다.
which terraform/usr/local/bin/terraformterraform versionTerraform 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 CLI 접근을 ~/.aws/credentials
에 있는 자격 증명으로 구성했다고 가정합니다:
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_id
와 aws_secret_access_key
가 참조하는 AWS IAM 사용자에게 추가 권한을 부여해야 합니다.
일반적으로 Terraform을 실행하는 모든 사용자가 다음 AWS 서비스에 대한 관리자를 위한 권한을 가지고 있다고 가정합니다:
Terraform 배포 자체는 Teleport 인스턴스에서 사용할 수 있는 새로운 IAM 역할을 생성하며, AWS 서비스에 대해 적절하게 제한된 권한 범위를 가집니다. 그러나 초기 클러스터 설정은 높은 수준의 AWS 권한을 가진 사용자가 수행해야 합니다.
Terraform 코드 가져오기
먼저, 시스템에서 사용할 수 있는 Terraform 코드를 얻기 위해 Teleport 리포를 클론해야 합니다:
git clone https://github.com/gravitational/teleport -b branch/v17'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-clusterterraform 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_variable
은 test_variable
이 됩니다.
우리는 Teleport 리포의 examples/aws/terraform/starter-cluster
섹션에 있는 README.md 파일에서 변수 목록과 그것들이 하는 일의 최신 목록을 유지하고 있지만, 여기에서 예제 목록을 살펴보겠습니다.
결정해야 할 사항:
지역
export TF_VAR_region="us-west-2"
실행할 AWS 지역입니다. README에서 자세히 설명된 지원되는 목록에서 선택하세요. 이는 DynamoDB 암호화 at rest를 지원하는 지역입니다.
cluster_name
export TF_VAR_cluster_name="teleport-example"
이것은 사용할 내부 Teleport 클러스터 이름입니다. 이것은 고유해야 하며, 공백, 점 (.) 또는 다른 특수 문자를 포함해서는 안 됩니다. 일부 AWS 서비스는 이름에 점을 사용할 수 없으므로 도메인 이름으로 설정해서는 안 됩니다. 이는 클러스터의 웹 UI에 표시되며, 클러스터를 처음부터 재구성하지 않고는 생성 후 변경할 수 없으므로 신중하게 선택해야 합니다. 좋은 예는 teleport-<회사 이름>
과 같은 것일 수 있습니다.
ami_name
export TF_VAR_ami_name="teleport-ent-17.0.0-dev-x86_64"
Teleport (Gravitational)은 새 버전의 Teleport를 릴리스할 때 OSS, Enterprise 및 Enterprise FIPS 140-2 AMI를 자동으로 구축하고 게시합니다. AMI 이름은 다음 형식을 따릅니다: teleport-<형식>-<버전>-<아키텍처>
여기서 <형식>
은 oss
또는 ent
(Enterprise)이고, <버전>
은 Teleport의 버전, 예를 들어 17.0.0-dev
이며, <아키텍처>
는 x86_64
또는 arm64
입니다.
FIPS 140-2 호환 AMI(기본적으로 FIPS 140-2 모드에서 Teleport를 배포)는 <아키텍처>
다음에 -fips
접미사가 있습니다, 예: teleport-ent-17.0.0-dev-x86_64-fips
.
이 AMI를 게시하는 AWS 계정 ID는 146628656107
입니다. 아래의 예제 awscli
명령으로 사용 가능한 AMI를 나열할 수 있습니다. 출력은 기본적으로 JSON 형식입니다.
Teleport AMI 목록
OSS AMIs
aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-oss-17.0.0-dev-*'
Enterprise AMIs
aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-ent-17.0.0-dev-*'
Enterprise FIPS 140-2 AMIs
aws --region us-west-2 ec2 describe-images --owners 146628656107 --filters 'Name=name,Values=teleport-ent-17.0.0-dev-*-fips-*'
key_name
export TF_VAR_key_name="exampleuser"
EC2 인스턴스를 배포할 때 사용할 AWS 키페어 이름입니다. 이는 region
변수에 지정한 지역에 존재해야 하며, 배포된 EC2 인스턴스에 연결하기 위해 이 키페어의 복사본이 필요합니다. 접근할 수 없는 키페어를 사용하지 마십시오.
license_path
Teleport Auth 서비스는 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 커뮤니티 에디션 사용자는 로컬에서 touch /tmp/license.pem
을 실행하여 빈 파일을 생성한 다음, 여기에서 '/tmp/license.pem' 경로를 제공할 수 있습니다. 라이센스 파일은 Teleport 커뮤니티 에디션 설치에 사용되지 않습니다.)
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
의 하위 도메인이어야 합니다.
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"
Teleport MySQL 리스너 포트에 연결되는 네트워크 로드 밸런서에서 포트 3036
이 활성화됩니다. TLS 라우팅을 사용하지 않는 경우 MySQL 연결에 필요합니다.
enable_postgres_listener
export TF_VAR_enable_postgres_listener="false"
Teleport PostgreSQL 리스너 포트에 연결되는 네트워크 로드 밸런서에서 포트 5432
이 활성화됩니다. 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
인스턴스는 테스트에 적합하지만, 이 서버가 몇 명 이상의 사용자를 지원해야 하는 경우 더 큰 인스턴스를 사용해야 합니다.
export TF_VAR_email="support@example.com"
Let's Encrypt는 모든 등록된 인증서에 대해 알림 및 유용한 정보를 전송할 수 있는 이메일 주소를 요구합니다. 우리는 테크팀이 Teleport를 배포할 수 있는 접근을 갖는 일반 운영/지원 이메일 주소를 권장합니다.
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 애플리케이션 로드 밸런서를 사용하여 Teleport 클러스터의 웹 UI에 대한 연결을 로드 밸런싱하며 SSL 종료는 로드 밸런서에서 처리됩니다.
Terraform이 인증서를 생성하지 않고 기존 ACM 인증서를 사용하려면 terraform apply
전에 다음 명령을 실행하여 Terraform이 사용하도록 설정할 수 있습니다:
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 클러스터에서 사용하는 기본 인증 유형을 변경하는 데 사용될 수 있습니다. 이는 SAML, OIDC 또는 GitHub 커넥터가 DynamoDB에 구성되어 있는 경우 AMI 업그레이드 간에 기본 인증 유형을 유지하는 데 유용합니다.
기본값은 local
입니다.
- Teleport Community Edition은
local
또는github
을 지원합니다. - Teleport Enterprise Edition은
local
,github
,oidc
, 또는saml
을 지원합니다. - Teleport Enterprise FIPS 배포는 로컬 인증이 비활성화되므로
github
,oidc
, 또는saml
을 사용해야 합니다.
자세한 내용은 Teleport 인증 참조를 참조하십시오.
참조 배포 기본값
인스턴스
우리의 참조 배포는 클러스터용으로 하나의 인스턴스를 배포합니다.
ACM을 사용하는 경우 ACM 인증서로 구성된 애플리케이션 로드 밸런서가 Teleport 인스턴스에 대한 안전한 연결을 제공합니다.
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 버킷에 저장합니다, 이 버킷은 s3_bucket_name
변수에 구성되어 있으며, records
디렉토리 아래에 위치합니다.
우리의 예에서는 이것이 s3://teleport-example/records
가 됩니다.
팁
S3는 Amazon S3 객체 잠금을 제공합니다, 이는 규제된 환경에서 Teleport를 배포하는 고객에게 유용합니다. 객체 잠금 구성은 이 가이드의 범위를 벗어납니다.
클러스터 도메인
참조 Terraform 배포는 Teleport 클러스터를 Route 53에 정의된 도메인에서 사용할 수 있도록 설정하며, route53_domain
변수로 참조됩니다. 우리의 예에서는 이것이 teleport.example.com
이 됩니다.
Teleport의 웹 인터페이스는 Teleport 클러스터 호스트의 443 포트에서 사용할 수 있습니다.
ACM을 사용할 때, 이는 AWS 애플리케이션 로드 밸런서에 대한 A 레코드로 별칭이 됩니다.
Let's Encrypt를 사용할 때, 이는 인스턴스의 공용 IP를 가리키는 A 레코드입니다.
use_tls_routing
가 true
로 설정된 경우, 모든 Teleport SSH, 터널, Kubernetes 및 데이터베이스 트래픽은 route53_domain
에 설정된 동일한 호스트 이름의 443 포트를 통해 흐릅니다.
use_tls_routing
가 false
로 설정된 경우:
- Teleport Proxy 서비스의 SSH 인터페이스는 클러스터의 호스트 이름의 3023 포트를 통해 사용할 수 있습니다.
이는
tsh
클라이언트로 연결할 때 사용되는 기본 포트이며, 추가 구성이 필요하지 않습니다. - Teleport Proxy 서비스의 역 터널 리스너는 클러스터의 호스트 이름의 3024 포트를 통해 사용할 수 있습니다. 이는 신뢰할 수 있는 클러스터와 역 터널을 통해 연결된 노드가 클러스터에 접근할 수 있게 합니다.
- Teleport Proxy 서비스의 Kubernetes 리스너는 클러스터의 호스트 이름의 3026 포트를 통해 사용할 수 있습니다. 이는 Kubernetes 클라이언트가 Teleport 클러스터를 통해 Kubernetes 클러스터에 접근할 수 있게 합니다.
- MongoDB 리스너 포트가 활성화된 경우, 이는 클러스터의 호스트 이름의 27017 포트를 통해 사용할 수 있습니다. 이는 클라이언트가 Teleport 클러스터에 등록된 MongoDB 데이터베이스에 연결할 수 있게 합니다.
- MySQL 리스너 포트가 활성화된 경우, 이는 클러스터의 호스트 이름의 3036 포트를 통해 사용할 수 있습니다. 이는 클라이언트가 Teleport 클러스터에 등록된 MySQL 데이터베이스에 연결할 수 있게 합니다.
- Postgres 리스너 포트가 활성화된 경우, 이는 클러스터의 호스트 이름의 5432 포트를 통해 사용할 수 있습니다. 이는 클라이언트가 Teleport 클러스터에 등록된 Postgres 데이터베이스에 연결할 수 있게 합니다.
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 설정이 완료되면 cluster_web_address
Terraform 출력에 Teleport 클러스터의 웹 UI URL이 설정됩니다.
배포 후 terraform output -raw cluster_web_address
를 실행하여 이를 확인할 수 있습니다:
terraform output -raw cluster_web_addresshttps://teleport.example.com
Teleport 클러스터에 관리자 사용자 추가하기
Teleport 클러스터에 사용자를 추가하려면 SSH를 통해 Teleport 클러스터 호스트에 연결하고 tctl
명령을 실행해야 합니다.
-
키 이름과 서버 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입니다.
계속 연결하시겠습니까 (yes/no/[fingerprint])? yes
경고: '1.2.3.4' (ECDSA)이 알려진 호스트 목록에 영구적으로 추가되었습니다.
마지막 로그인: 화 3월 3 18:57:12 2020 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 ~]$
-
tctl
명령을 사용하여 Teleport에 대한 관리자 사용자 생성:
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 프록시를 가리키는지 확인하십시오.
- 링크를 클릭하여 Teleport 웹 UI를 시작하고 사용자 설정을 완료합니다. WebAuthn 호환 하드웨어 키(예: Yubikey, 패스키 또는 Touch ID)를 사용하거나 Google Authenticator 또는 Authy와 같은 TOTP 호환 앱으로 QR 코드를 스캔할 수 있습니다.
이 페이지에서
teleport-admin
사용자의 비밀번호도 설정하게 됩니다.
이 사용자가 성공적으로 구성되면 Teleport 웹 UI에 로그인해야 합니다.
클러스터에 tsh로 로그인하기
사용자를 프로비저닝한 후, Teleport 명령줄 도구 (tsh
)를 사용하여 Teleport 클러스터에 로그인할 수 있습니다.
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-adminTeleport 사용자 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-adminTeleport 사용자 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"
로 설정되어 있는 경우 ACM을 사용하고 있는 것입니다.
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 서비스에 대한 자세한 로그를 보려면 journalctl
명령을 사용하세요:
journalctl -u teleport-acm.service
use_acm
변수가 "false"
로 설정되어 있는 경우 Let's Encrypt를 사용하고 있는 것입니다.
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 서비스에 대한 자세한 로그를 보려면 journalctl
명령을 사용하세요:
journalctl -u teleport.service
Teleport 클러스터에 에이전트 추가하기
새로운 리소스를 클러스터에 빠르게 조인하는 가장 쉬운 방법은 Teleport 웹 UI의 "새 리소스 등록" 마법사를 사용하는 것입니다.
고객들은 AWS 내에서 다양한 워크로드를 실행하며, 작업 방식에 따라 Teleport를 서버에 통합하는 수많은 수동 방법이 있습니다. 설치 가이드를 참조하는 것을 권장합니다.
"SSH로 접속할 수 있는" 새로운 노드/EC2 서버를 추가하려면 다음을 수행해야 합니다:
- 서버에 Teleport 바이너리 설치
- Teleport 실행 - 우리는 systemd 사용을 권장합니다
- /etc/teleport.yaml에서 올바른 설정을 지정
- Teleport 클러스터에 노드 추가
문제 해결
AWS 할당량
배포한 Teleport 서비스가 기본 서비스 할당량을 초과하는 경우, AWS 지원 센터에 할당량 증가를 요청할 수 있습니다. 자세한 내용은 Amazon의 AWS 서비스 할당량 문서를 참조하십시오.
예를 들어, Teleport 클러스터 상태의 백엔드로 DynamoDB를 사용할 때, 읽기/쓰기 할당량 증가를 요청해야 할 수 있습니다.