Infograb logo
HSM 지원

이 가이드는 하드웨어 보안 모듈 (HSM)을 사용하여 개인 키를 저장하고 처리하도록 Teleport Auth Service를 설정하는 방법을 보여줍니다.

전제 조건

  • Teleport v17.0.0-dev 엔터프라이즈 (자체 호스팅).
  • 연결이 가능한지 확인하기 위해 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 명령어를 실행할 수도 있습니다.
  • Teleport auth 서버에서 접근 가능한 HSM.
  • HSM을 위한 PKCS#11 모듈.
호환성 경고

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

대부분의 PKCS#11 HSM이 지원되어야 하지만, Teleport 팀은 AWS CloudHSM, YubiHSM2, SoftHSM2로 테스트합니다.

1/5단계. HSM 설정

HSM을 설정하고 Teleport Auth Server에서 접근할 수 있도록 해야 합니다. Teleport가 사용할 수 있는 고유한 HSM 사용자 또는 토큰을 생성해야 합니다.

  1. Teleport Auth Server를 실행할 VPC에서 CloudHSM 클러스터를 생성하세요. https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster.html

  2. 새로 생성된 클러스터가 "Uninitialized" 상태가 될 때까지 기다립니다.

  3. 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" }}
  4. 새 HSM의 신원과 진위를 선택적으로 확인합니다. https://docs.aws.amazon.com/cloudhsm/latest/userguide/verify-hsm-identity.html

  5. HSM 상태가 ACTIVE 가 될 때까지 기다립니다:

    aws --region region cloudhsmv2 describe-clusters --filters clusterIds=cluster ID \ --query 'Clusters[].Hsms[].State'
  6. 클러스터를 초기화하려면, 클러스터의 첫 번째 HSM에서 생성된 인증서 서명 요청 (CSR)을 다운로드하고 서명해야 합니다. AWS 콘솔 또는 AWS CLI를 통해 CSR을 다운로드합니다:

    aws --region region cloudhsmv2 describe-clusters --filters clusterIds=cluster ID \ --query 'Clusters[].Certificates.ClusterCsr' --output text \ > ClusterCsr.csr
  7. 적절한 RSA 2048 또는 RSA 4096 키와 자기 서명 인증서를 선택하여 HSM CSR에 서명합니다. 운영 클러스터의 경우 AWS는 안전한 오프사이트 및 오프라인 HSM을 권장합니다. 데모 또는 테스트 클러스터의 경우 다음 openssl 명령으로 키와 자기 서명 인증서를 생성할 수 있습니다:

    openssl genrsa -aes256 -out customerCA.key 2048
    openssl req -new -x509 -days 3652 -key customerCA.key -out customerCA.crt
  8. 이전 단계에서 얻은 키와 자기 서명 인증서를 사용하여 클러스터 CSR에 서명합니다. CSR에 서명하기 위한 데모 openssl 명령은 다음과 같습니다:

    openssl x509 -req -days 3652 -in ClusterCsr.csr \ -CA customerCA.crt \ -CAkey customerCA.key \ -CAcreateserial \ -out CustomerHsmCertificate.crt
  9. 서명된 인증서를 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": "클러스터가 초기화 중입니다. 완료 후 상태는 INITIALIZED로 변경됩니다."}
  10. 클러스터 생성 시 자동으로 동일한 이름의 보안 그룹이 생성됩니다. 이 보안 그룹을 EC2 인스턴스에 연결하여 Auth Server와 HSM 간의 트래픽을 허용합니다.

  11. 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
  12. 6단계에서 생성된 자기 서명 인증서 (customerCA.crt )를 EC2 인스턴스로 복사하고 /opt/cloudhsm/etc/customerCA.crt 에 저장합니다.

  13. CloudHSM CLI를 사용하여 새 비밀번호로 관리 사용자를 생성하여 CloudHSM 클러스터를 활성화합니다:

    $ sudo /opt/cloudhsm/bin/cloudhsm-cli interactive
    aws-cloudhsm > cluster activate
    Enter password:
    Confirm password:
    {
      "error_code": 0,
      "data": "클러스터 활성화 성공"
    }
    
  14. 새 관리 사용자로 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
    
  15. 동일한 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
  1. YubiHSM2 SDK를 설치합니다.

  2. 디버그 로깅이 활성화된 yubihsm-connector 를 시작합니다. 이는 YubiHSM2에 대한 연결을 용이하게 하기 위해 계속 실행해야 하는 배경 프로세스입니다.

    yubihsm-connector -d
    DEBU[0000] 프리플라이트가 완료되었습니다. cert= config= key= pid=73502 seccomp=false serial= syslog=false timeout=0s version=3.0.3DEBU[0000] 이륙 TLS=false listen="localhost:12345" pid=73502
  3. yubihsm-shell 을 사용하여 Teleport에서 사용할 새로운 인증 키를 생성합니다. 필요한 기능.

    YubiHSM2에는 슬롯 1에 password 라는 비밀번호로 공장 기본 인증 키가 제공됩니다. 가능한 한 빨리 이 키를 교체하거나 비밀번호를 변경하는 것이 좋습니다.

    Teleport에서 사용할 인증 키를 생성할 때 비밀번호는 최소 8자 이상이어야 합니다.

    $ yubihsm-shell
    기본 연결 URL 사용: http://localhost:12345
    yubihsm> connect
    세션 유지 관리를 15초마다 실행하도록 설정했습니다.
    yubihsm> session open 1
    Enter password:
    세션 0을 생성했습니다.
    
    # Teleport용 인증 키 생성
    yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:sign-pss:sign-ecdsa:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep:sign-ecdsa
    Enter password:
    인증 키 0x85cf 저장됨
    
    # 새로운 인증 키와 비밀번호로 세션을 열 수 있는지 확인합니다.
    yubihsm> session open 0x85cf
    Enter password:
    세션 1이 생성되었습니다.
    
    # 공장 기본 인증 키의 비밀번호를 변경합니다.
    # 이 비밀번호를 안전하게 저장하십시오.
    yubihsm> change authkey 0 1 authentication-key
    Enter password:
    

    새로운 인증 키의 슬롯 번호를 기록해 두세요. 위의 예에서는 16진수 값 0x85cf 입니다. 이는 나중에 Teleport 구성 파일에 포함되어야 합니다.

  4. yubihsm_pkcs11.conf 파일을 생성하여 yubihsm-connector 가 수신 대기하는 주소와 포트를 구성하고 디버그 로깅을 활성화합니다:

    # /etc/yubihsm_pkcs11.conf
    connector = https://127.0.0.1:12345
    debug
    
  5. 환경 변수 YUBIHSM_PKCS11_CONF 를 구성 파일의 경로로 설정합니다. 이는 PKCS#11 모듈이 읽을 것이며 Teleport auth 서버의 환경에서 설정되어야 합니다.

    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 클라이언트 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을 읽는 데 사용할 수 있습니다.
      # 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: "85cfpassword"
      # pin_path는 선택적으로 파일에서 pin을 읽는 데 사용할 수 있습니다.
      # pin_path: /path/to/pin_file

3/5단계. Teleport Auth (재)시작

이것이 아직 시작되지 않은 새로운 Teleport Auth Service라면, 빈 백엔드로 새로운 클러스터를 시작하면 HSM 키가 자동으로 시작 시 생성되고 추가 작업이 필요하지 않습니다. 5단계로 건너뛰십시오.
그렇지 않으면 계속 읽으십시오.

기존 Teleport 클러스터에 HSM을 연결하는 경우, 구성 변경 사항을 적용하려면 인증 서버를 다시 시작하십시오.
다음 CA 회전 동안 HSM에서 새로운 CA 키가 자동으로 생성됩니다.
CA 회전이 완료될 때까지 Auth Service는 기존 소프트웨어 키로 새로운 인증서를 계속 서명합니다.

4/5단계. HSM을 사용하는 인증서 회전

기존 Teleport 클러스터에 새로운 HSM을 추가하거나 HA Teleport 클러스터에 새로운 HSM 연결 Auth Service를 추가할 때는 모든 인증 기관을 회전하여 새로운 인증서를 발급하고 신뢰할 수 있도록 해야 합니다.

teleport start 는 시작 중에 회전해야 하는 CA가 있을 경우 경고를 출력합니다.
cert_authority 리소스에 대한 update 동사가 허용된 모든 사용자는 CA를 회전하라는 클러스터 경고를 받을 것입니다.

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

5/5단계. Teleport가 HSM을 사용하고 있는지 확인하기

모든 준비가 완료되었습니다! HSM 키가 사용되고 있는지 확인할 수 있는 몇 가지 방법이 있습니다:

  1. tctl status 는 모든 인증서 관리 키에 대해 PKCS#11 HSMstorage 방법으로 표시합니다.
  2. Teleport Auth 서비스 로그에는 새 HSM 키 쌍 생성 이 포함됩니다.
  3. HSM의 관리자 도구에서 새로 생성된 키가 표시되어야 합니다.
Teleport 원문 보기