Infograb logo
AWS KMS

이 가이드는 AWS 키 관리 서비스(AWS KMS)를 사용하여 클러스터에서 발급한 모든 인증서에 서명하는 데 사용되는 CA 비공개 키 자료를 저장하고 처리하기 위해 Teleport 클러스터를 설정하는 방법을 보여줍니다.

Teleport는 첫 번째 인증 서비스 인스턴스의 초기 시작 중에 내부 인증 기관(CA)에 대한 비공개 키 자료를 생성합니다. 이 CA는 Teleport 클러스터의 클라이언트와 호스트에 발급된 모든 인증서를 서명하는 데 사용됩니다. AWS KMS를 사용하도록 구성하면 이러한 CA에 대한 모든 비공개 키 자료는 AWS KMS 내에서 생성, 저장 및 서명에 사용됩니다. 실제 비공개 키 대신 Teleport는 KMS 키의 ID만 저장합니다. 요약하자면, 비공개 키 자료는 절대 AWS KMS를 떠나지 않습니다.

새 Teleport 클러스터를 시작하는 경우 이러한 모든 작업은 초기 시작 중에 처리되며 구성 후에 특별한 작업이 필요하지 않습니다. 소프트웨어 비공개 키를 이미 생성한 기존 Teleport 클러스터의 경우 CA 회전을 수행해야 합니다. 더 알아보려면 기존 클러스터를 마이그레이션하는 방법을 읽어보세요.

전제 조건

이 페이지에 문서화된 기능은 Teleport 15.0.0 이상에서 사용할 수 있습니다.

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 가입하기 무료 체험판을 이용해 보세요.

  • tctl 관리 도구 및 tsh 클라이언트 도구 버전 >= 16.2.0.

    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 명령어를 실행할 수도 있습니다.

  • AWS 계정이 필요합니다.

1단계/3. AWS IAM 권한 구성

귀하의 Teleport 인증 서비스는 AWS 계정에서 KMS 키를 생성, 서명, 나열 및 삭제할 권한이 필요합니다.

다음 AWS IAM 정책을 귀하의 계정에 생성하십시오.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListKeys",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateKeys",
            "Effect": "Allow",
            "Action": [
                "kms:CreateKey",
                "kms:TagResource"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/TeleportCluster": "teleport.example.com",
                    "aws:ResourceTag/TeleportCluster": "teleport.example.com"
                }
            }
        },
        {
            "Sid": "UseKeys",
            "Effect": "Allow",
            "Action": [
                "kms:GetPublicKey",
                "kms:ScheduleKeyDeletion",
                "kms:DescribeKey",
                "kms:ListResourceTags",
                "kms:Sign"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/TeleportCluster": "teleport.example.com"
                }
            }
        }
    ]
}

정책은 AWS 콘솔이나 AWS CLI를 통해 생성할 수 있습니다.

aws iam create-policy --policy-name TeleportKMS --policy-document file://policy.json
{ "Policy": { "PolicyName": "TeleportKMS", "PolicyId": "XXXXXXXXXXXXXXXXXXXXX", "Arn": "arn:aws:iam::123456789012:policy/TeleportKMS", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2024-01-29T23:05:06+00:00", "UpdateDate": "2024-01-29T23:05:06+00:00" }}

정책을 귀하의 Auth Service 인스턴스가 AWS 계정에 인증할 IAM 역할에 연결하십시오. 정책을 AWS 콘솔 또는 AWS CLI를 통해 연결할 수 있습니다.

aws iam attach-role-policy --role-name <IAM role> --policy-arn <policy ARN>

the Teleport Auth Service에 AWS에 인증하는 데 사용할 수 있는 자격 증명에 대한 액세스를 부여합니다.

the Teleport Auth Service를 EC2 인스턴스에서 실행하는 경우 EC2 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다. 그렇지 않은 경우 환경 변수를 사용해야 합니다:

Teleport는 EC2 인스턴스에서 실행될 때 이를 감지하고 인스턴스 메타데이터 서비스를 사용하여 자격 증명을 가져옵니다.

EC2 인스턴스는 EC2 인스턴스 프로파일을 사용하도록 구성되어 있어야 합니다. 자세한 내용은 인스턴스 프로파일 사용하기를 참조하세요.

Teleport의 내장 AWS 클라이언트는 다음 환경 변수에서 자격 증명을 읽습니다:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION

the Teleport Auth Service를 시작하면 서비스는 /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 자격 증명을 제공할 수 있지만, the Teleport Auth Service를 실행할 때 AWS_PROFILE 환경 변수를 선택한 프로파일의 이름으로 지정해야 합니다.

위의 지침이 고려하지 않은 특정 사용 사례가 있는 경우, 자격 증명 로딩 동작에 대한 자세한 설명을 보려면 AWS SDK for Go의 문서를 참조하십시오.

Warning

이 IAM 역할에 접근할 수 있는 사용자는 Teleport CA인 것처럼 서명을 생성할 수 있습니다. 이는 매우 높은 권한의 역할로 고려되어야 하며 가능한 한 많은 제한이 필요합니다.

인스턴스 메타데이터 서비스를 통해 Teleport 인증 서비스에 AWS 자격 증명을 제공하는 경우 인스턴스에 접근할 수 있는 모든 사용자가 해당 자격 증명을 사용할 수 있도록 하십시오. 다음 iptables 규칙을 사용하여 IMDS 접근을 루트 사용자만 보이도록 제한할 수 있습니다:

$ iptables -A OUTPUT -m owner ! --uid-owner 0 -d 169.254.169.254 -j REJECT

2단계/3. Auth Service를 KMS 키 사용하도록 구성

CA 키 매개변수는 클러스터 내의 Teleport Auth Service 인스턴스의 teleport.yaml 구성 파일에 정적으로 구성됩니다.

다음 ca_key_params 구성을 auth_service 섹션에 포함하십시오.

# /etc/teleport.yaml
# ...
auth_service:
  # ...
  ca_key_params:
    aws_kms:
      account: "AWS account"
      region: "AWS region"

새 Teleport 클러스터의 첫 시작 전에 이 구성을 수행하는 경우 초기 CA 키가 AWS KMS에서 자동으로 생성되며 추가 단계가 필요하지 않습니다. 기존 Teleport 클러스터를 소프트웨어 키에서 AWS KMS 키로 마이그레이션하려면 계속해서 기존 클러스터 마이그레이션을 읽어보세요.

3단계/3. 모든 것이 작동하는지 확인

aws_kms 구성으로 Auth Service를 시작한 후, AWS 콘솔에서 귀하의 계정에 AWS KMS 키가 생성되었는지 확인할 수 있습니다. 다음 tctl 명령을 실행하여 각 키의 ARN을 찾을 수도 있습니다.

tctl get cert_authorities --with-secrets --format json | jq -r '.[].spec.active_keys.tls[0].key | select(.) | @base64d'
awskms:arn:aws:kms:us-west-2:123456789012:key/dd0f77e2-a1b7-4ecd-ba83-d29476c15fecawskms:arn:aws:kms:us-west-2:123456789012:key/fe8daacb-2457-4639-aa68-2bdc38a47a89awskms:arn:aws:kms:us-west-2:123456789012:key/fb48f161-55ba-47da-9d4e-24ed4ef8cce4awskms:arn:aws:kms:us-west-2:123456789012:key/7c2ae604-8b8c-425e-8d53-c4d3070cdb10awskms:arn:aws:kms:us-west-2:123456789012:key/d8a4196f-6864-421a-911f-16d69473135c
tctl get cert_authorities --with-secrets --format json | jq -r '.[].spec.active_keys.ssh[0].private_key | select(.) | @base64d'
awskms:arn:aws:kms:us-west-2:123456789012:key/dd8b4a02-5602-4d34-8773-a56e669db75fawskms:arn:aws:kms:us-west-2:123456789012:key/026e3c42-0c37-40d0-b9f4-bd1fa394b9a9awskms:arn:aws:kms:us-west-2:123456789012:key/ffa93061-0979-4ff1-b0af-d9a5dda6d894
tctl get cert_authorities --with-secrets --format json | jq -r '.[].spec.active_keys.jwt[0].private_key | select(.) | @base64d'
awskms:arn:aws:kms:us-west-2:123456789012:key/d4e63a5d-ed81-46c4-ad72-3f57a07eb9d5awskms:arn:aws:kms:us-west-2:123456789012:key/5c99e6aa-deb1-45c0-865e-08847214b7ab

Teleport 사용자로 클러스터에 로그인하여 새 인증서가 에러 없이 서명될 수 있는지 확인하십시오.

기존 클러스터 마이그레이션

기존 Teleport 클러스터는 첫 시작 중에 이미 소프트웨어 CA 키를 생성했을 것입니다. 이러한 기존 CA 키는 모든 기존 사용자 및 호스트 인증서에 서명하는 데 사용되었으며, 클러스터의 다른 서비스에서 신뢰됩니다.

Teleport 인증 서비스가 AWS KMS에서 새 키를 생성하고 나머지 클러스터에서 이를 신뢰하도록 하려면 모든 Teleport CA를 회전해야 합니다.

teleport start는 시작 중에 CA 회전이 필요한 경우 경고를 출력합니다. cert_authority 리소스에 대한 update 동작이 허용된 사용자는 CA를 회전하라는 클러스터 알림을 보게 됩니다.

CA 회전은 수동 또는 반자동으로 수행할 수 있습니다. 인증서 회전 에 대한 관리 가이드를 참조하십시오. tctl status 출력에 나열된 모든 CA는 회전해야 합니다.

Teleport 원문 보기