Infograb logo
AWS KMS

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

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

새로운 Teleport 클러스터를 시작하는 경우, 이는 구성 후 별도의 개입 없이 초기 시작 중에 모두 처리됩니다.
이미 개인 소프트웨어 키를 생성한 기존 Teleport 클러스터에는 CA 회전을 수행해야 합니다.
더 자세한 내용은 기존 클러스터 마이그레이션을 읽어 보십시오.

필수 조건

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

  • Teleport v17.0.0-dev Enterprise (셀프 호스팅).
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • AWS 계정.
호환성 경고

Teleport Cloud와 Teleport Open Source는 현재 HSM 또는 Key Management Services를 지원하지 않습니다.

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

당신의 Teleport Auth Service는 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 인스턴스가 인증할 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 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다.
  • the Teleport Auth Service 를 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

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처럼 서명을 생성할 수 있습니다.
이 역할은 높은 권한의 역할로 고려되어야 하며 가능한 한 제한되어야 합니다.

인스턴스 메타데이터 서비스(Instance Metadata Service)를 통해 Teleport Auth Service에 AWS 자격 증명을 제공하는 경우, 인스턴스에 접근할 수 있는 모든 사용자가 해당 자격 증명을 사용할 수 있다는 점에 유의해야 합니다.
다음 iptables 규칙을 사용하여 IMDS 접근을 루트 사용자만으로 제한하는 것이 좋습니다:

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

2/3단계. Auth 서비스에서 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에서 자동으로 생성되며 추가 단계는 필요하지 않습니다.

소프트웨어 키에서 AWS KMS 키로 기존 Teleport 클러스터를 마이그레이션하려면 계속 읽어보십시오. 기존 클러스터 마이그레이션.

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

aws_kms 구성을 사용하여 Auth 서비스를 시작한 후, AWS 콘솔에서 이러한 키를 확인하여 Teleport가 귀하의 계정에 AWS KMS 키를 생성했는지 확인할 수 있습니다.

tctl status 는 또한 모든 인증 기관 키에 대해 storage 방법으로 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 Auth 서비스가 AWS KMS에서 새로운 키를 생성하고 클러스터의 나머지 부분에서 이를 신뢰하도록 하려면, 모든 Teleport CA를 교체해야 합니다.

teleport start 는 시작 시 CA를 교체해야 하는 경우 경고를 인쇄합니다.
모든 Teleport 역할에서 cert_authority 리소스에 대해 update 동사를 허용받은 사용자도 CA를 교체하라는 클러스터 경고를 보게 됩니다.

CA 교체는 수동으로 또는 반자동으로 수행할 수 있습니다. 인증서 교체에 대한 관리 가이드를 참조하세요.
tctl status 출력에 나열된 모든 CA는 교체되어야 합니다.

Teleport 원문 보기