Infograb logo
워크로드 ID 및 AWS Roles Anywhere 구성
미리보기

Teleport 워크로드 ID는 현재 미리보기 단계에 있습니다. 이는 일부 기능이 누락될 수 있음을 의미합니다. 우리는 워크로드 ID의 미래를 형성하는 데 도움을 줄 디자인 파트너를 적극적으로 찾고 있으며, 여러분의 피드백을 듣고 싶습니다.

Teleport 워크로드 ID는 X.509 인증서에서 유연한 단기 ID를 발급합니다. AWS Roles Anywhere를 사용하면 이러한 인증서를 통해 AWS 서비스에 인증할 수 있습니다.

이는 기계가 장기 자격 증명 없이도 안전하게 AWS 서비스에 인증해야 할 때 유용할 수 있습니다. 기계는 우리의 위임된 조인 방법 중 하나를 사용하여 공유 비밀 없이 Teleport로 인증할 수 있기 때문입니다.

작동 원리

이 구현은 Teleport 애플리케이션 서비스를 사용하여 AWS API를 보호하는 것과 몇 가지 방법에서 다릅니다:

  • AWS 요청은 Teleport 프록시 서비스를 통해 프록시되지 않으므로 대기 시간이 줄어들지만, 이러한 요청은 Teleport의 감사 로그에 기록되지 않기 때문에 가시성이 감소합니다.
  • 워크로드 ID는 명령줄 도구는 물론 SDK를 포함한 모든 AWS 클라이언트와 함께 작동합니다.
  • AWS에 접근하기 위한 Teleport 애플리케이션 서비스 사용은 기계 ID와 함께 작동하지 않으며, 따라서 기계가 AWS에 인증해야 할 때 사용할 수 없습니다.

이 가이드는 주로 기계가 AWS에 접근하도록 허용하는 것을 목표로 하지만, tsh svid issue 명령을 사용하여 기계 ID 대신 사람 사용자가 AWS Roles Anywhere를 사용하여 인증할 수 있습니다.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • tbot은 이미 설치되어 있고, Teleport 워크로드 ID에 접근해야 할 작업이 실행될 호스트에서 구성되어 있어야 합니다. 자세한 내용은 배포 가이드를 참조하세요.

SPIFFE ID 구조 결정

Teleport 워크로드 ID 내에서 모든 ID는 SPIFFE ID를 사용하여 표현됩니다. 이는 ID가 나타내는 엔터티를 고유하게 식별하는 URI입니다. 스킴은 항상 spiffe://이며, 호스트는 Teleport 클러스터의 이름이 됩니다. 이 URI의 경로 구조는 사용자가 결정할 수 있습니다.

이 가이드의 목적을 위해, 우리는 spiffe://example.teleport.sh/svc/example-service SPIFFE ID에 AWS 접근 권한을 부여할 것입니다.

이미 Teleport 워크로드 ID를 배포한 경우, 이미 SPIFFE ID 구조가 구축되어 있을 것입니다. 아직 배포하지 않았다면, SPIFFE ID의 구조를 결정해야 합니다.

AWS Roles Anywhere와 Teleport 워크로드 ID만 사용하고 있다면, SPIFFE ID를 AWS 역할을 명시적으로 지정하도록 구조화할 수 있습니다. 그러나 일반적으로는 워크로드나 SPIFFE ID를 사용할 사람의 이름을 지정하는 것이 더 합리적입니다. 추가 조언은 모범 사례 가이드를 참조하세요.

1단계 / 4단계. AWS Roles Anywhere 구성

AWS Roles Anywhere를 처음으로 구성하는 것은 몇 가지 단계를 포함합니다. 이전에 Teleport 클러스터를 위해 AWS Roles Anywhere를 구성한 경우 일부 단계는 필요하지 않을 수 있습니다.

Roles Anywhere 신뢰 앵커 구성

이전의 Teleport 클러스터를 위해 AWS Roles Anywhere를 구성한 경우 이 단계는 건너뛸 수 있습니다.

먼저 Teleport 클러스터와 AWS Roles Anywhere 간의 신뢰를 설정해야 합니다. 이를 통해 AWS는 Teleport 클러스터에서 발급된 X.509 인증서를 검증할 수 있습니다. 이는 Teleport 클러스터의 SPIFFE 인증서 기관을 AWS Roles Anywhere의 신뢰 앵커로 구성함으로써 이루어집니다.

먼저 Teleport 클러스터의 SPIFFE CA를 얻어야 합니다:

$ tctl auth export --type tls-spiffe

이제 AWS 콘솔에서 "Roles Anywhere"로 이동하여 "신뢰 앵커 생성"을 클릭합니다. 설명적인 이름을 부여해야 하며, Teleport 클러스터의 이름에 "spiffe"를 덧붙여 사용하는 것이 좋습니다.

"External certificate bundle"을 선택한 후, tctl 명령에서 받은 출력을 텍스트 상자에 붙여넣습니다.

이제 "신뢰 앵커 생성" 버튼을 클릭할 수 있습니다.

역할 생성

다음으로, 워크로드가 가질 역할을 AWS에 생성해야 합니다. 기존 역할의 신뢰 정책을 수정할 수도 있습니다.

AWS IAM 콘솔의 "Roles" 섹션으로 이동하여 "역할 생성"을 클릭합니다.

"신뢰할 수 있는 엔터티 유형"에서 "사용자 지정 신뢰 정책"을 선택합니다.

이제 다음을 입력해야 합니다:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rolesanywhere.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession",
                "sts:SetSourceIdentity"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalTag/x509SAN/URI": "spiffe://example.teleport.sh/svc/example-service"
                },
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:rolesanywhere:us-east-1:12345789:trust-anchor/0000000-0000-0000-0000-000000000000"
                }
            }
        }
    ]
}

다음과 같이 교체하세요:

  • spiffe://example.teleport.sh/my-workload를 워크로드에 대해 선택한 SPIFFE ID로 교체합니다.
  • arn:aws:rolesanywhere:us-east-1:12345789:trust-anchor/0000000-0000-0000-0000-000000000000을 이전 단계에서 생성한 신뢰 앵커의 ARN으로 교체합니다.

"다음"을 클릭하여 "권한 추가" 페이지로 진행합니다. 이제 AWS에서 워크로드에 부여할 권한을 선택합니다.

"다음"을 클릭하여 "이름, 검토 및 생성" 페이지로 진행합니다. 역할에 설명적인 이름을 부여합니다. 예: "my-workload-roles-anywhere".

"역할 생성"을 클릭합니다.

Roles Anywhere 프로필 생성

마지막으로, Roles Anywhere 프로필을 생성해야 합니다.

AWS IAM 콘솔의 "Roles Anywhere" 섹션으로 돌아가 "프로필 생성"을 클릭합니다.

프로필에 설명적인 이름을 부여합니다. 예: "my-workload".

이전 단계에서 생성한 역할을 선택합니다.

"프로필 생성"을 클릭합니다.

2단계 / 4단계. Teleport RBAC 구성

이제 X.509 인증서가 우리가 선택한 SPIFFE ID를 포함하여 발급될 수 있도록 Teleport를 구성할 필요가 있습니다.

kind: role
version: v6
metadata:
  name: my-workload-roles-anywhere
spec:
  allow:
    spiffe:
      - path: /svc/example-service

다음과 같이 교체하세요:

  • my-workload-roles-anywhere를 역할에 대한 설명적인 이름으로 교체합니다.
  • /my-workload를 선택한 SPIFFE ID의 경로 부분으로 교체합니다.

이 SPIFFE ID를 사람이 발급할 의도를 가지고 있다면, 이제 이 역할을 그 사용자의 사용자에 할당해야 합니다:

$ tctl edit user/my-user
# 그리고 역할을 사용자의 역할 목록에 추가합니다.

이 SPIFFE ID를 기계가 발급할 의도를 가지고 있다면, 이제 이 역할을 봇에 할당해야 합니다:

$ tctl bots update my-bot --add-roles my-workload-roles-anywhere

3단계 / 4단계. 워크로드 ID 인증서 발급

tbot을 사용하는 기계의 경우

기계의 경우 tbot 서비스를 사용할 수 있으며, 이는 SPIFFE SVID를 배경 프로세스로 발급 및 갱신할 수 있습니다.

이미 배포된 tbot 서비스를 가져와 SPIFFE SVID를 발급하도록 구성 파일에 다음을 추가합니다:

outputs:
  - type: spiffe-svid
    destination:
      type: directory
      path: /opt/roles-anywhere-svid
    svid:
      path: /svc/example-service

새 구성을 적용하기 위해 tbot 서비스를 재시작하세요.

tsh을 사용하는 인간의 경우

인간의 경우, tsh CLI를 사용하여 사전 인증 세션을 통해 SPIFFE SVID를 발급 받을 수 있습니다.

SVID가 만료될 때마다 tsh 명령을 다시 호출해야 합니다. 기본적으로 SVID는 1시간의 TTL로 발급되지만, 최대 24시간까지 조정할 수 있습니다. 엔지니어가 근무 시작 시 한번 명령을 실행할 수 있도록 이 설정을 약 8시간으로 구성하는 것이 편리할 수 있습니다.

예를 들어, 8시간 TTL로 /svc/example-service용 SPIFFE SVID를 발급받으려면:

$ tsh svid issue --output /opt/roles-anywhere-svid --svid-ttl 8h /svc/example-service

4단계 / 4단계. AWS CLI 및 SDK를 사용하여 Roles Anywhere를 인증하는 데 구성

AWS가 인증을 위해 SVID를 사용하려면 AWS Roles Anywhere 자격 증명 도우미도 설치해야 합니다. 이는 AWS CLI와 SDK가 SVID를 임시 AWS 자격 증명으로 교환하는 데 사용할 작은 유틸리티입니다.

자격 증명 도우미의 최신 릴리스를 AWS Identity and Access Management Roles Anywhere에서 임시 보안 자격 증명 얻기 가이드에서 얻으세요.

이제 이 자격 증명 도우미를 활용하는 프로필을 구성해야 합니다.

다음 내용을 ~/.aws/config 파일에 추가하세요:

[profile use-roles-anywhere]
credential_process = ./aws_signing_helper credential-process --certificate /opt/roles-anywhere-svid/svid.pem --private-key /opt/roles-anywhere-svid/svid_key.pem --profile-arn $PROFILE_ARN --trust-anchor-arn $TRUST_ANCHOR_ARN --role-arn $ROLE_ARN

$PROFILE_ARN, $TRUST_ANCHOR_ARN, 및 $ROLE_ARN을 이전 단계에서 생성한 프로필, 신뢰 앵커, 역할의 ARN으로 교체하세요.

이제 AWS CLI와 함께 use-roles-anywhere 프로필을 사용할 수 있습니다. 예를 들면:

$ aws --profile use-roles-anywhere s3 ls

AWS SDK와 함께 사용할 때는 AWS_PROFILE 환경 변수를 설정하세요:

$ export AWS_PROFILE=use-roles-anywhere
$ ./my-app

다음 단계

Teleport 원문 보기