AWS KMS에 Teleport 개인 키 저장
이 가이드는 AWS Key Management Service(KMS)를 사용하여 클러스터에서 발급하는 모든 인증서에 서명하는 데 사용되는 CA 개인 키 자료를 저장하고 처리하도록 Teleport 클러스터를 설정하는 방법을 보여줍니다.
이 가이드는 AWS Key Management Service(KMS)를 사용하여 클러스터에서 발급하는 모든 인증서에 서명하는 데 사용되는 CA 개인 키 자료를 저장하고 처리하도록 Teleport 클러스터를 설정하는 방법을 보여줍니다.
작동 방식#
Teleport는 첫 번째 Auth Service 인스턴스의 초기 시작 시 내부 인증 기관(CA)에 대한 개인 키 자료를 생성합니다. 이 CA는 Teleport 클러스터의 클라이언트와 호스트에 발급되는 모든 인증서에 서명하는 데 사용됩니다. AWS KMS를 사용하도록 구성된 경우 이 CA에 대한 모든 개인 키 자료는 AWS KMS 내에서 생성, 저장 및 서명에 사용됩니다. 실제 개인 키 대신 Teleport는 KMS 키의 ID만 저장합니다. 즉, 개인 키 자료는 절대 AWS KMS를 벗어나지 않습니다.
새 Teleport 클러스터를 시작하는 경우 구성 후 추가 개입 없이 초기 시작 시 모두 처리됩니다. 이미 소프트웨어 개인 키를 생성한 기존 Teleport 클러스터의 경우 CA 로테이션을 수행해야 합니다. 자세한 내용은 기존 클러스터 마이그레이션을 참조하세요.
사전 요구사항#
이 페이지에 문서화된 기능은 Teleport 15.0.0 이상에서 사용 가능합니다.
- Teleport Enterprise (자체 호스팅).
- AWS 계정.
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": "CreateSigningKeys",
"Effect": "Allow",
"Action": [
"kms:CreateKey",
"kms:TagResource"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/TeleportCluster": "teleport.example.com" description="Your Teleport cluster name"/>",
"aws:ResourceTag/TeleportCluster": "teleport.example.com" description="Your Teleport cluster name"/>"
}
}
},
{
"Sid": "CreateEncryptionKeys",
"Effect": "Allow",
"Action": [
"kms:CreateKey",
"kms:TagResource"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/TeleportClusterEncryption": "teleport.example.com" description="Your Teleport cluster name"/>",
"aws:ResourceTag/TeleportClusterEncryption": "teleport.example.com" description="Your Teleport cluster name"/>"
}
}
},
{
"Sid": "UseSigningKeys",
"Effect": "Allow",
"Action": [
"kms:GetPublicKey",
"kms:ScheduleKeyDeletion",
"kms:DescribeKey",
"kms:ListResourceTags",
"kms:Sign"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/TeleportCluster": "teleport.example.com" description="Your Teleport cluster name"/>"
}
}
},
{
"Sid": "UseEncryptionKeys",
"Effect": "Allow",
"Action": [
"kms:GetPublicKey",
"kms:ScheduleKeyDeletion",
"kms:DescribeKey",
"kms:ListResourceTags",
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/TeleportClusterEncryption": "teleport.example.com" description="Your Teleport cluster name"/>"
}
}
}
]
}
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 --policy-arn <policy ARN>
경고
이 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 Service가 KMS 키를 사용하도록 구성#
CA 키 매개변수는 클러스터의 Teleport Auth Service 인스턴스의 teleport.yaml 구성 파일에 정적으로 구성됩니다.
auth_service 섹션에 다음 ca_key_params 구성을 포함합니다. 를 AWS 계정 ID로, ""을 AWS 리전 이름으로 지정합니다:
# /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 Service를 시작한 후 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-d29476c15fec
awskms:arn:aws:kms:us-west-2:123456789012:key/fe8daacb-2457-4639-aa68-2bdc38a47a89
awskms:arn:aws:kms:us-west-2:123456789012:key/fb48f161-55ba-47da-9d4e-24ed4ef8cce4
awskms:arn:aws:kms:us-west-2:123456789012:key/7c2ae604-8b8c-425e-8d53-c4d3070cdb10
awskms: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-a56e669db75f
awskms:arn:aws:kms:us-west-2:123456789012:key/026e3c42-0c37-40d0-b9f4-bd1fa394b9a9
awskms: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-3f57a07eb9d5
awskms:arn:aws:kms:us-west-2:123456789012:key/5c99e6aa-deb1-45c0-865e-08847214b7ab
Teleport 사용자로 클러스터에 로그인하여 오류 없이 새 인증서에 서명할 수 있는지 확인합니다.
기존 클러스터 마이그레이션#
기존 Teleport 클러스터가 있는 경우 첫 번째 시작 시 이미 소프트웨어 CA 키를 생성했을 것입니다. 기존 CA 키는 모든 기존 사용자 및 호스트 인증서에 서명하는 데 사용되었으며 클러스터의 다른 모든 서비스에서 신뢰됩니다.
Teleport Auth Service가 AWS KMS에 새 키를 생성하고 나머지 클러스터에서 신뢰받으려면 모든 Teleport CA를 로테이션해야 합니다.
teleport start는 CA 로테이션이 필요한 경우 시작 시 경고를 출력합니다. Teleport 역할에서 cert_authority 리소스에 대해 update 동사가 허용된 사용자는 CA를 로테이션하도록 상기시키는 클러스터 알림도 볼 수 있습니다.
CA 로테이션은 수동 또는 반자동으로 수행할 수 있습니다. 인증서 로테이션에 관한 관리자 가이드를 참조하세요. tctl status 출력에 나열된 모든 CA를 로테이션해야 합니다.
