이 가이드는 EC2 가입 방법을 사용하여 Teleport 프로세스를 AWS에서 비밀을 공유하지 않고 Teleport 클러스터에 가입하는 방법을 설명합니다.
EC2 가입 방법은 자체 호스팅된 Teleport 배포에서만 사용할 수 있습니다. 사용 사례에 따라 사용할 수 있는 다른 두 가지 AWS 가입 방법이 있습니다:
- IAM 가입 방법은 IAM 자격 증명에 접근할 수 있는 모든 Teleport 프로세스에서 사용할 수 있습니다. 예를 들어 IAM 역할이 연결된 EC2 인스턴스와 같은 환경에서 사용됩니다(자세한 내용은 문서 참조). 특정 권한이나 IAM 정책이 필요하지 않으며, 정책이 연결되지 않은 IAM 역할이면 충분합니다. Teleport Auth Service는 IAM 자격 증명이 필요하지 않습니다.
- AWS에 의해 서명되지 않은 토큰: AWS에서 실행되는 Teleport 프로세스를 Teleport 가입 토큰 또는 Kubernetes에서 실행되는 Teleport 프로세스를 위한 서명된 ServiceAccount 토큰을 통해 클러스터에 가입하도록 구성할 수 있습니다. 이러한 접근 방식은 클라우드 중립적인 접근 방식을 채택할 때 AWS 특정 API에 의존하고 싶지 않을 때 Teleport 프로세스를 클러스터에 가입할 수 있도록 합니다.
작동 방식
EC2 가입 방법은 EC2 인스턴스에서 실행되는 모든 Teleport 프로세스에서 사용할 수 있습니다. 하나의 EC2 인스턴스당 하나의 Teleport 프로세스만 EC2 가입 방법을 사용할 수 있습니다. 프로세스는 Teleport Auth Service에 EC2 인스턴스 ID 문서를 제시합니다.
한편, Teleport Auth Service는 ec2:DescribeInstances
권한이 있는 AWS IAM 자격 증명을 보유하여 ID 문서가 합법적인 EC2 인스턴스에 속하는지 확인합니다. 클러스터에 가입하는 Teleport 프로세스에는 IAM 자격 증명이 필요하지 않습니다.
전제 조건
-
자가 호스팅된 Teleport 클러스터가 실행 중입니다. 자가 호스팅된 Teleport Enterprise를 시작하려면, 판매팀에 문의하세요. 또한 Teleport Community Edition으로 데모 환경을 설정할 수 있습니다.
-
tctl
관리 도구와tsh
클라이언트 도구 버전 >= 16.2.0.tctl
및tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다. - Teleport 프로세스를 호스팅할 AWS EC2 인스턴스와 Teleport 바이너리가 설치되어 있어야 합니다. 호스트는 기존 데이터 디렉토리가 없어야 하며(
default: /var/lib/teleport
), 이전에 Teleport 클러스터에 가입한 인스턴스라면 데이터 디렉토리를 제거해야 합니다.
1단계/4. AWS IAM 자격 증명 설정
Teleport Auth Service는 EC2 인스턴스가 클러스터에 가입하려고 할 때 합법적이고 현재 실행 중인지 확인할 수 있도록 ec2:DescribeInstances
를 호출할 수 있는 권한이 필요합니다.
IAM 정책 만들기
계정에 teleport-DescribeInstances-policy
라는 이름의 AWS IAM 정책을 생성합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
}
IAM 정책 첨부
Teleport Auth Service가 EC2 인스턴스에서 실행 중이고 이미 "IAM 역할 for Amazon EC2"가 연결되어 있는 경우, 위의 teleport-DescribeInstances-policy
를 기존 역할에 추가하십시오. 인스턴스에 연결된 역할이 없는 경우, 위 정책이 포함된 IAM 역할을 생성하고 Teleport Auth Service가 실행 중인 EC2 인스턴스에 첨부해야 합니다.
AWS 외부에서 Teleport Auth Service를 실행하는 경우, IAM 사용자에게 teleport-DescribeInstances-policy
를 직접 첨부할 수 있습니다. Teleport에서 인증에 사용할 IAM 자격 증명을 제공하는 방법에 대한 자세한 내용은 자격 증명 지정을 참조하세요.
2단계/4. AWS 가입 토큰 만들기
AWS 계정에서 Teleport 클러스터에 가입할 수 있도록 특수 동적 토큰으로 Teleport Auth Service를 구성하십시오.
서비스는 AWS 계정에서 실행 중임을 증명하기 위해 허용 규칙이 정의된 서명된 EC2 인스턴스 ID 문서를 전송합니다.
다음과 같은 token.yaml
을 생성하여 AWS 계정과 EC2 인스턴스가 실행될 AWS 리전을 정의하는 allow
규칙을 설정합니다.
# token.yaml
kind: token
version: v2
metadata:
# 토큰 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해
# 귀하의 AWS 계정에서 실행되고 있음을 증명해야 합니다.
name: ec2-token
spec:
# 필요한 최소 역할 집합을 사용하세요 (예: Node, App, Kube, DB, WindowsDesktop)
roles: [Node]
# 이 토큰에 대해 허용되는 조인 방법을 설정하세요.
join_method: ec2
# aws_iid_ttl은 EC2 인스턴스가 시작된 후
# 클러스터에 조인할 수 있는 시간입니다. 짧은 TTL을 사용하여
# 도난당한 EC2 인스턴스 신원 문서가 귀하의
# 클러스터에 조인되는 위험을 줄이세요.
#
# EC2 조인 방법을 사용하여 첫 번째 Teleport 프로세스를 시작할 때,
# Teleport를 설정하고 구성할 시간을 가지기 위해
# 일시적으로 더 높은 `aws_iid_ttl` 값을 구성해야 할 수도 있습니다.
# 이 기능은 Teleport가 EC2 AMI에서 자동으로 시작되도록 설정되었을 때 가장 잘 작동합니다.
aws_iid_ttl: 5m
allow:
- aws_account: "111111111111" # 귀하의 AWS 계정 ID
aws_regions: # 필요한 최소 AWS 리전 집합을 사용하세요.
- us-west-1
- us-west-2
tctl create token.yaml
을 실행하여 토큰을 생성하십시오.
3단계/4. 서비스 구성
EC2 가입 방법은 SSH, 프록시, Kubernetes, 애플리케이션, 데이터베이스 또는 Windows 데스크톱 서비스에서 실행되는 Teleport 프로세스에 사용할 수 있습니다. Teleport 프로세스는 AWS EC2 인스턴스에서 직접 실행되어야 하며, AWS EC2 IMDSv2에 네트워크로 접근할 수 있어야 합니다(대부분의 EC2 인스턴스에서 기본으로 활성화됨).
사용자 정의 teleport.yaml
파일로 Teleport 프로세스를 구성하십시오. join_params
섹션을 사용하여 2단계에서 생성한 토큰 이름과 method: ec2
를 다음 예제 구성과 같이 매칭합니다:
# /etc/teleport.yaml
version: v3
teleport:
join_params:
token_name: ec2-token
method: ec2
proxy_server: https://teleport.example.com:443
ssh_service:
enabled: yes
auth_service:
enabled: no
proxy_service:
enabled: no
4단계/4. Teleport 프로세스 시작하기
Teleport 프로세스를 시작하기 전에 데이터 디렉토리(/var/lib/teleport
, 기본값)가 비어 있어야 합니다. 이 Teleport 프로세스가 이전에 다른 방법(예: 토큰 또는 IAM)으로 가입한 경우, 호스트 UUID가 예상 이름(<AWS Account number>-<instance id>
)과 일치하지 않아 가입이 허용되지 않습니다.
호스트에서 Teleport를 시작하고 클러스터에 연결하고 가입할 수 있는지 확인하십시오. 모든 설정이 완료되었습니다!
여러 AWS 계정에 대한 EC2 가입 방법 구성
Teleport 프로세스가 Teleport Auth Service가 실행되는 계정 외의 AWS 계정에서 EC2 인스턴스에서 가입할 수 있도록 하려면, Teleport는 해당 계정에서 IAM 역할을 가정하고 외부 계정에서 ec2:DescribeInstances
를 호출할 수 있는 권한이 있어야 합니다.
EC2 인스턴스가 실행될 각 AWS 계정에서:
-
1단계.1에서 만든
teleport-DescribeInstances-policy
를 생성합니다. -
Teleport Auth Service가 실행되는 계정에서 가정할 수 있는 IAM 역할
teleport-DescribeInstances-role
을 생성합니다.AWS IAM 콘솔로 이동하여 역할 만들기를 선택하고, "신뢰할 수 있는 엔티티 유형 선택"에서 "다른 AWS 계정"을 선택한 후 Teleport Auth Service가 실행되는 계정의 AWS 계정 ID를 입력합니다.
-
역할에
teleport-DescribeInstances-policy
를 첨부합니다.
Teleport Auth Service가 실행 중인 AWS 계정에서:
- 외부 계정마다
AssumeRole
문이 포함된teleport-AssumeRole-policy
라는 IAM 정책을 생성합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/teleport-DescribeInstances-role"
},
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::333333333333:role/teleport-DescribeInstances-role"
}
]
}
- 이
teleport-AssumeRole-policy
를 Teleport Auth Service가 자격 증명을 가진 IAM 역할에 첨부합니다(1단계.2 참조).
AWS 가입 토큰을 생성할 때, 외부 계정마다 허용 규칙을 포함하고 외부 teleport-DescribeInstances-role
의 AWS ARN을 지정합니다.
# token.yaml
kind: token
version: v2
metadata:
name: ec2-multiaccount-token
spec:
roles: [Node]
aws_iid_ttl: 5m
allow:
- aws_account: "222222222222"
aws_regions:
- us-west-1
- us-west-2
aws_role: "arn:aws:iam::222222222222:role/teleport-DescribeInstances-role"
- aws_account: "333333333333"
aws_regions:
- us-west-1
- us-west-2
aws_role: "arn:aws:iam::333333333333:role/teleport-DescribeInstances-role"