인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
AWS IAM 역할을 통한 서비스 연결
이 가이드는 IAM 참여 방법을 사용하여 AWS에서 실행 중일 때 비밀 정보를 공유하지 않고 Teleport 프로세스를 Teleport 클러스터에 조인하는 방법을 설명합니다.
사용 사례에 따라 사용할 수 있는 두 가지 다른 AWS 참여 방법이 있습니다:
- EC2 참여 방법: 이는 셀프 호스팅된 Teleport 배포에만 사용할 수 있습니다 (자세한 내용은 documentation 참조). EC2 인스턴스에서 실행 중인 Teleport 프로세스는 서명된 EC2 인스턴스 신원 문서를 요청하고 이를 Teleport Auth 서비스에 제출하여 인스턴스가 진짜인지 확인합니다. 이 방법은 셀프 호스팅된 Teleport 클러스터와 Teleport Auth 서비스에 대한 IAM 자격 증명이 필요합니다.
- AWS에서 서명되지 않은 토큰: AWS에서 실행 중인 Teleport 프로세스를 Teleport 조인 토큰 또는 Kubernetes에서 실행 중인 Teleport 프로세스에 대해 서명된 ServiceAccount 토큰을 사용하여 클러스터에 조인하도록 구성할 수 있습니다. 이러한 접근 방식은 클라우드에 구애받지 않는 접근 방식을 채택할 때 AWS 특정 API에 의존하지 않고 Teleport 프로세스를 클러스터에 조인할 수 있게 해줍니다.
작동 방식
IAM 참여 방법은 IAM 자격 증명에 접근할 수 있는 아무 Teleport 프로세스에서 사용할 수 있습니다. 여기에는 IAM 역할이 연결된 EC2 인스턴스와 같은 것이 포함됩니다. 특정 권한이나 IAM 정책이 필요하지 않으며, 연결된 정책이 없는 IAM 역할만으로도 충분합니다. Teleport Auth 서비스에는 IAM 자격 증명이 필요하지 않습니다.
Teleport 프로세스는 사전 서명된 sts:GetCallerIdentity
요청을 Teleport Auth 서비스에 보내면서 AWS 계정에서 실행 중임을 증명합니다. 서비스의 신원은 AWS 서비스 조인 토큰에서 구성된 허용 규칙과 일치해야 합니다.
Proxy 서비스가 레이어 7 로드 밸런서 또는 리버스 프록시 뒤에서 클러스터에 조인하는 지원은 Teleport 13.0+에서 가능합니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Teleport 서비스를 호스팅할 AWS EC2 인스턴스가 필요하며, Teleport 바이너리가 설치되어 있어야 합니다.
연결이 가능한지 확인하기 위해 tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl
명령어를 실행할 수 있는지 확인하십시오.
예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고 tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl
명령어를 실행할 수도 있습니다.
1/4단계. AWS IAM 자격 증명 설정
IAM 방법을 사용하여 Teleport 클러스터에 조인하는 모든 Teleport 프로세스는 sts:GetCallerIdentity
API를 호출하기 위해 AWS IAM 자격 증명이 필요합니다. 특정 IAM 정책이나 권한이 필요하지 않으며, 모든 IAM 사용자 또는 역할이 이 API를 호출할 수 있습니다.
EC2 인스턴스에서 Teleport를 실행하는 경우, 인스턴스에 임의의 IAM 역할을 연결하는 것만으로 충분합니다. EC2 대시보드에서 IAM 역할을 연결하려면 작업 > 보안 > IAM 역할 수$1
을 선택합니다. 역할에 연결된 IAM 정책이 필요하지 않습니다. 인스턴스가 어떠한 AWS 자격 증명도 필요하지 않다면, 연결된 정책이 없는 빈 역할을 생성하고 연결하는 것이 바람직합니다.
2/4단계. AWS 조인 토큰 생성
다음의 token.yaml
을 생성하여 AWS 계정과 Teleport 프로세스의 신원이 일치해야 하는 ARN을 지정하는 allow
규칙을 정의합니다.
# token.yaml
kind: token
version: v2
metadata:
# 이 토큰의 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해
# 귀하의 AWS 계정에서 실행되고 있음을 증명해야 합니다.
name: iam-token
spec:
# 필요한 최소 역할 집합을 사용하세요. (예: Node, App, Kube, DB, WindowsDesktop)
roles: [Node]
# 이 토큰에 허용된 조인 방법을 설정하세요.
join_method: iam
allow:
# Teleport 프로세스가 조인할 수 있는 AWS 계정을 지정하세요.
- aws_account: "111111111111"
# 여러 개의 allow 규칙이 지원됩니다.
- aws_account: "222222222222"
# aws_arn은 선택 사항이며, Teleport 프로세스의 IAM 역할을
# 제한하는 데 사용됩니다.
- aws_account: "333333333333"
aws_arn: "arn:aws:sts::333333333333:assumed-role/teleport-node-role/i-*"
토큰 이름 iam-token
은 단지 예시일 뿐이며, 사용할 수 있는 어떤 값으로도 설정할 수 있으며, 3단계에서 join_params.token_name
에 동일한 값을 사용하는 한 유효합니다.
허용 규칙의 선택적 aws_arn
필드는 와일드카드 문자를 지원합니다:
*
: 문자 조합과 일치?
: 단일 문자와 일치
토큰을 생성하려면 다음 명령을 실행합니다:
tctl create -f token.yaml
3/4단계. 서비스 구성
IAM 조인 방법은 SSH, 프록시, Kubernetes, 애플리케이션 또는 데이터베이스 서비스에서 실행되는 Teleport 프로세스에 사용할 수 있습니다.
사용자 정의 teleport.yaml
파일로 Teleport 서비스를 구성하세요. 다음 예제 구성과 같이 join_params
섹션에 Step 2에서 생성한 토큰과 일치하는 token_name
과 method: iam
을 사용하세요:
# /etc/teleport.yaml
version: v3
teleport:
join_params:
token_name: iam-token
method: iam
proxy_server: teleport.example.com:443
ssh_service:
enabled: yes
auth_service:
enabled: no
proxy_service:
enabled: no
teleport.proxy_server
필드에서 값을 Teleport 프록시 서비스 또는 Teleport Enterprise Cloud 테넌트의 호스트 및 웹 포트로 바꾸세요. 예: mytenant.teleport.sh:443
.
4/4단계. Teleport 프로세스 시작
당신의 Teleport 인스턴스 가 AWS에 인증하는 데 사용할 수 있는 자격 증명에 대한 액세스를 부여하십시오.
- 당신의 Teleport 인스턴스 를 EC2 인스턴스에서 실행 중인 경우, EC2 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다.
- 당신의 Teleport 인스턴스 를 Kubernetes에서 실행 중인 경우, IAM Roles for Service Accounts (IRSA)를 사용할 수 있습니다.
- 그렇지 않은 경우, 환경 변수를 사용해야 합니다.
Teleport는 EC2 인스턴스에서 실행 중일 때 이를 감지하고 인스턴스 메타데이터 서비스를 사용하여 자격 증명을 가져옵니다.
EC2 인스턴스는 EC2 인스턴스 프로필을 사용하도록 구성되어야 합니다. 자세한 내용은 인스턴스 프로필 사용을 참조하십시오.
AWS의 IAM Roles for Service Accounts (IRSA)를 참조하여 AWS에서 OIDC 공급자를 설정하고 포드의 서비스 계정이 해당 역할을 맡을 수 있도록 하는 AWS IAM 역할을 구성하십시오.
Teleport의 내장 AWS 클라이언트는 다음 환경 변수에서 자격 증명을 읽습니다:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
당신의 Teleport 인스턴스 를 시작할 때, 서비스는 /etc/default/teleport
경로에 있는 파일에서 환경 변수를 읽습니다. 이러한 자격 증명을 귀하의 조직에서 확보하십시오. /etc/default/teleport
에는 다음 내용을 포함해야 하며, 각 변수의 값을 교체하십시오:
AWS_ACCESS_KEY_ID=00000000000000000000
AWS_SECRET_ACCESS_KEY=0000000000000000000000000000000000000000
AWS_DEFAULT_REGION=<YOUR_REGION>
Teleport의 AWS 클라이언트는 다음 순서로 다양한 소스에서 자격 증명을 로드합니다:
- 환경 변수
- 공유된 자격 증명 파일
- 공유된 구성 파일 (Teleport는 항상 공유 구성을 활성화함)
- EC2 인스턴스 메타데이터 (자격 증명만 해당)
공유 자격 증명 파일 또는 공유 구성 파일을 통해 AWS 자격 증명을 제공할 수 있지만, 당신의 Teleport 인스턴스 를 선택한 프로필 이름에 할당된 AWS_PROFILE
환경 변수를 사용하여 실행해야 합니다.
위 지침에 설명되지 않은 특정 사용 사례가 있는 경우, AWS SDK for Go의 문서를 참조하여 자격 증명 로드 동작에 대한 자세한 설명을 확인하십시오.
호스트가 부팅될 때 your Teleport instance가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.
your Teleport instance를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
your Teleport instance를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 your Teleport instance의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
Teleport를 시작한 후, 서비스가 클러스터에 연결하고 조인할 수 있는지 확인하세요.