이 가이드는 우리의 참조 스타터 클러스터 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/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/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_id
와 aws_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-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 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 형식입니다.
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
인스턴스는 테스트에는 적합하지만, 이 서버가 몇 명 이상의 사용자를 지원해야 하는 경우 더 큰 인스턴스를 사용해야 합니다.
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_routing
를 true
로 설정하면 모든 Teleport SSH, 터널, Kubernetes 및 데이터베이스 트래픽이 route53_domain
에서 설정된 동일한 호스트 이름의 포트 443을 통해 흐릅니다.
use_tls_routing
를 false
로 설정하면:
- 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_addresshttps://teleport.example.com
Teleport 클러스터에 관리자 사용자 추가하기
Teleport 클러스터에 사용자를 추가하려면 Teleport 클러스터 호스트에 SSH로 연결하고 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입니다.
연결을 계속하시겠습니까 (예/아니오/[지문])? 예
영구적으로 '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 ~]$
-
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 프록시를 가리키도록 하세요.
-
링크를 클릭하여 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-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"
로 설정된 경우입니다.
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 서버를 추가하려면 다음을 수행해야 합니다:
- 서버에 Teleport 바이너리 설치
- Teleport 실행 - systemd 사용을 권장
- /etc/teleport.yaml에서 올바른 설정 적용
- Teleport 클러스터에 노드 추가
문제 해결
AWS 한도
만약 Teleport 서비스의 배포가 기본 서비스 한도를 초과한다면, AWS 지원 센터에 한도 증가를 요청할 수 있습니다. 자세한 내용은 Amazon의 AWS 서비스 한도 문서를 참조하세요.
예를 들어, Teleport 클러스터 상태의 백엔드로 DynamoDB를 사용할 때, 읽기/쓰기 한도의 증가를 요청해야 할 수도 있습니다.