이 가이드는 하드웨어 보안 모듈(HSM)을 사용하여 개인 키를 저장하고 처리하기 위해 Teleport 인증 서비스를 설정하는 방법을 보여줍니다.
필수 조건
- Teleport v16.2.0 엔터프라이즈(자체 호스팅).
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다. - Teleport 인증 서버에 연결할 수 있는 HSM.
- HSM을 위한 PKCS#11 모듈.
Teleport Cloud와 Teleport Open Source는 현재 HSM을 지원하지 않습니다.
대부분의 PKCS#11 HSM이 지원되어야 하지만, Teleport 팀은 AWS CloudHSM, YubiHSM2 및 SoftHSM2로 테스트합니다.
1단계/5단계. HSM 설정
HSM을 설정하고 Teleport 인증 서버에서 접근할 수 있는지 확인해야 합니다. Teleport에서 사용할 고유한 HSM 사용자 또는 토큰을 생성해야 합니다.
-
Teleport 인증 서버를 실행할 VPC에서 CloudHSM 클러스터를 생성합니다. https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster.html
-
새로 생성된 클러스터가 "초기화되지 않음" 상태로 들어올 때까지 기다립니다.
-
AWS 콘솔 또는 AWS CLI를 사용하여 새 클러스터에 HSM을 추가합니다:
aws --region region cloudhsmv2 create-hsm --cluster-id cluster ID --availability-zone availability zone{ "Hsm": { "AvailabilityZone": "ca-central-1a", "ClusterId": "cluster-6uysmebmutd", "SubnetId": "subnet-0c535b67a117f7186", "HsmId": "hsm-ppzzfxbleki", "State": "CREATE_IN_PROGRESS" }} -
선택적으로 새 HSM의 신원과 진위를 확인합니다. https://docs.aws.amazon.com/cloudhsm/latest/userguide/verify-hsm-identity.html
-
HSM의 상태가
ACTIVE
가 될 때까지 기다립니다:aws --region region cloudhsmv2 describe-clusters --filters clusterIds=cluster ID \ --query 'Clusters[].Hsms[].State' -
클러스터를 초기화하려면 클러스터의 첫 번째 HSM에서 생성된 인증서 서명 요청(CSR)을 다운로드하고 서명해야 합니다. AWS 콘솔 또는 AWS CLI를 통해 CSR을 다운로드합니다:
aws --region region cloudhsmv2 describe-clusters --filters clusterIds=cluster ID \ --query 'Clusters[].Certificates.ClusterCsr' --output text \ > ClusterCsr.csr -
적절한 RSA 2048 또는 RSA 4096 키 및 자기 서명된 인증서를 선택하여 HSM CSR을 서명합니다. 프로덕션 클러스터의 경우 AWS는 안전한 오프사이트 및 오프라인 HSM을 추천합니다. 데모 또는 테스트 클러스터의 경우 다음
openssl
명령을 사용하여 키 및 자기 서명된 인증서를 생성할 수 있습니다:openssl genrsa -aes256 -out customerCA.key 2048openssl req -new -x509 -days 3652 -key customerCA.key -out customerCA.crt -
이전 단계에서 얻은 키와 자기 서명된 인증서를 사용하여 클러스터 CSR에 서명합니다. CSR을 서명하는 데모
openssl
명령은 다음과 같습니다:openssl x509 -req -days 3652 -in ClusterCsr.csr \ -CA customerCA.crt \ -CAkey customerCA.key \ -CAcreateserial \ -out CustomerHsmCertificate.crt -
서명된 인증서를 AWS 콘솔에 업로드하거나 다음 AWS CLI 명령으로 CloudHSM 클러스터를 초기화합니다:
aws --region region cloudhsmv2 initialize-cluster --cluster-id cluster ID \ --signed-cert file://CustomerHsmCertificate.crt \ --trust-anchor file://customerCA.crt{ "State": "INITIALIZE_IN_PROGRESS", "StateMessage": "Cluster is initializing. State will change to INITIALIZED upon completion."} -
클러스터를 생성할 때 클러스터와 동일한 이름을 가진 보안 그룹이 자동으로 생성됩니다. 이 보안 그룹을 Teleport 인증 서버를 실행할 EC2 인스턴스에 연결하여 인증 서버와 HSM 간의 트래픽을 허용합니다.
-
Auth Server EC2 인스턴스에서 CloudHSM Client SDK 5의 CloudHSM CLI를 설치합니다. https://docs.aws.amazon.com/cloudhsm/latest/userguide/gs_cloudhsm_cli-install.html
새로운 HSM의 IP 주소를 구성하여 CLI를 부트스트랩합니다:
sudo /opt/cloudhsm/bin/configure-cli -a HSM IP address -
6단계에서 얻은 자기 서명된 인증서(
customerCA.crt
)를 EC2 인스턴스에 복사하고/opt/cloudhsm/etc/customerCA.crt
에 저장합니다. -
CloudHSM CLI를 사용하여 새 관리자 사용자로 CloudHSM 클러스터를 활성화합니다.
$ sudo /opt/cloudhsm/bin/cloudhsm-cli interactive aws-cloudhsm > cluster activate Enter password: Confirm password: { "error_code": 0, "data": "Cluster activation successful" }
-
새로운 관리자 사용자로 CloudHSM CLI에 로그인하고 Teleport에서 사용할 Crypto User를 만듭니다. 이 새로운 비밀번호를 기억해 두세요, 나중에 Teleport가 PKCS#11 라이브러리에 인증하는 데 사용할 것입니다.
aws-cloudhsm > login --username admin --role admin Enter password: { "error_code": 0, "data": { "username": "admin", "role": "admin" } } aws-cloudhsm > user create --username teleport --role crypto-user Enter password: Confirm password: { "error_code": 0, "data": { "username": "teleport", "role": "crypto-user" } } aws-cloudhsm > quit
-
동일한 Auth Server EC2 인스턴스에 대해 Client SDK 5의 PKCS#11 라이브러리를 설치합니다. https://docs.aws.amazon.com/cloudhsm/latest/userguide/pkcs11-library-install.html
HSM IP 주소를 구성하여 PKCS#11 라이브러리를 부트스트랩합니다. 클러스터에 HSM이 하나만 있는 경우
--disable-key-availability-check
플래그를 포함해야 합니다.sudo /opt/cloudhsm/bin/configure-pkcs11 --disable-key-availability-check -a HSM IP address
-
YubiHSM2 SDK를 설치합니다.
-
yubihsm-connector
를 시작하여 디버그 로깅을 활성화합니다. 이는 YubiHSM2에 대한 연결을 용이하게 하기 위해 계속 실행해야 하는 백그라운드 프로세스입니다.yubihsm-connector -dDEBU[0000] preflight complete cert= config= key= pid=73502 seccomp=false serial= syslog=false timeout=0s version=3.0.3DEBU[0000] takeoff TLS=false listen="localhost:12345" pid=73502 -
yubihsm-shell
을 사용하여 Teleport에서 사용할 인증 키를 생성합니다.YubiHSM2는 슬롯 1에 공장 기본 인증 키를 가지고 있으며 비밀번호는
password
입니다. Yubico에서 권장하는 대로 이를 교체하고 삭제해야 합니다.Teleport에서 사용할 인증 키를 생성할 때 비밀번호는 최소 8자 이상이어야 합니다. 여기에서는 예제 비밀번호로
hunter22
를 사용합니다.$ yubihsm-shell Using default connector URL: http://localhost:12345 yubihsm> connect Session keepalive set up to run every 15 seconds yubihsm> session open 1 password Created session 0 # Teleport용 인증 키 생성 yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep hunter22 Stored Authentication key 0x85cf # 새 인증 키와 비밀번호로 세션을 열 수 있는지 확인합니다 yubihsm> session open 0x85cf hunter22 Created session 1 # 공장 기본 인증 키 삭제 yubihsm> delete 0 1 authentication-key
새 인증 키의 슬롯 번호를 기억하십시오. 위의 예에서 이 값은 16진수 값
0x85cf
입니다. 이는 나중에 Teleport 구성 파일에 포함해야 합니다. -
yubihsm_pkcs11.conf
파일을 생성하여yubihsm-connector
가 수신 대기하는 주소와 포트를 구성하고 디버그 로깅을 활성화합니다:# /etc/yubihsm_pkcs11.conf connector = https://127.0.0.1:12345 debug
-
환경 변수
YUBIHSM_PKCS11_CONF
를 구성 파일의 경로로 설정합니다. 이것은 PKCS#11 모듈에 의해 읽히며 Teleport 인증 서버의 환경에서 설정해야 합니다.export YUBIHSM_PKCS11_CONF=/etc/yubihsm_pkcs11.conf
2단계/5단계. Teleport 구성
CA 개인 키의 생성, 저장 및 서명에 HSM을 사용하도록 Teleport를 구성하기 위해 인증 서버의 /etc/teleport.yaml
파일에 ca_key_params
섹션을 포함합니다.
# /etc/teleport.yaml
teleport:
...
auth_service:
enabled: true
...
ca_key_params:
pkcs11:
# 이는 CloudHSM Client SDK 5의 PKCS#11 모듈의 기본 설치 위치입니다.
module_path: /opt/cloudhsm/lib/libcloudhsm_pkcs11.so
# token_label은 CloudHSM SDK 5의 경우 항상 "hsm1"이어야 합니다.
# SDK 버전 3을 사용하려면 이를 "cavium"으로 변경하십시오.
token_label: "hsm1"
# pin은 가이드에서 이전에 생성한 Crypto User의 사용자 이름과 비밀번호로 설정해야 합니다.
pin: "<CU_username>:<CU_password>"
# pin_path는 선택적으로 비밀번호를 파일에서 읽는 데 사용할 수 있습니다.
# pin_path: /path/to/pin_file
# /etc/teleport.yaml
teleport:
...
auth_service:
enabled: true
...
ca_key_params:
pkcs11:
# Yubico의 PKCS#11 모듈의 기본 설치 경로입니다.
module_path: /usr/local/lib/pkcs11/yubihsm_pkcs11.dylib
# slot_number는 YubiHSM2에 대해 항상 0으로 설정해야 합니다.
slot_number: 0
# pin은 인증 키의 (16진수) 슬롯 번호와 비밀번호가 연결된 것입니다.
pin: "85cfhunter22"
# pin_path는 선택적으로 비밀번호를 파일에서 읽는 데 사용할 수 있습니다.
# pin_path: /path/to/pin_file
3단계/5단계. Teleport Auth (재)시작
아직 시작되지 않은 새로운 Teleport Auth Service인 경우, 빈 백엔드를 가진 새로운 클러스터를 시작하면 HSM 키가 자동으로 생성되며 추가 작업이 필요하지 않습니다. 5단계로 건너뛰십시오. 그렇지 않으면 계속 읽으십시오.
기존 Teleport 클러스터에 HSM을 연결하는 경우, 구성 변경 사항을 적용하려면 인증 서버를 다시 시작하십시오. 새 CA 키는 다음 CA 교체 시 HSM에서 자동으로 생성됩니다. CA 교체가 완료될 때까지 Auth Service는 기존 소프트웨어 키로 새로운 인증서를 계속 서명합니다.
4단계/5단계. HSM을 사용한 인증서 교체
기존 Teleport 클러스터에 새 HSM을 추가하거나 HA Teleport 클러스터에 새 HSM 연결 인증 서비스를 추가하는 경우, 새로운 인증서를 발급하고 신뢰받기 위해 모든 인증 기관(CA)을 교체해야 합니다.
teleport start
가 시작 중 CA를 교체해야 한다는 경고를 출력합니다.
cert_authority
리소스의 update
동사가 허용된 모든 사용자는 CA를 교체하라는 클러스터 알림을 보게 됩니다.
CA 교체는 수동 또는 반자동으로 수행할 수 있으며, 인증서 교체에 관한 관리 가이드를 참조하세요.
tctl status
의 출력에 나열된 모든 CA는 교체해야 합니다.
5단계/5단계. Teleport가 HSM을 사용하고 있는지 확인
모든 준비가 완료되었습니다! Creating new HSM key pair
에 대한 Teleport 로그를 확인하여 기능이 작동 중인지 확인할 수 있습니다. 또한 HSM의 관리 도구를 사용하여 HSM에서 키가 생성되었는지 확인할 수 있습니다.