Infograb logo
헤드리스 WebAuthn

헤드리스 WebAuthn은 WebAuthn 장치에 접근할 수 없는 머신에서 WebAuthn으로 인증하는 안전한 방법을 제공합니다. 이를 통해 WebAuthn과 호환되지 않는 환경에서는 일반적으로 사용할 수 없는 WebAuthn 기능을 사용할 수 있습니다. 예를 들어:

  • 원격 개발 박스에서 WebAuthn으로 Teleport에 로그인
  • 원격 개발 박스에서 세션별 MFA를 사용하여 Teleport SSH 서비스에 연결
  • 한 Teleport SSH 서비스에서 다른 SSH 서비스로 세션별 MFA를 사용하여 tsh scp 수행
  • WebAuthn 호환 브라우저가 없는 머신에서 Teleport에 로그인
헤드리스 WebAuthn 지원

헤드리스 WebAuthn은 다음 tsh 명령만 지원합니다:

  • tsh ls
  • tsh ssh
  • tsh scp

향후 헤드리스 WebAuthn은 다른 tsh 명령으로 확장될 예정입니다.

필수 조건

  • WebAuthn이 구성된 Teleport 클러스터. 두 번째 요소: WebAuthn 가이드를 참조하십시오.
  • YubiKey와 같은 WebAuthn 하드웨어 장치.
  • 헤드리스 WebAuthn 활동을 위한 머신에 Linux, macOS 또는 Windows tsh 바이너리가 설치되어 있어야 합니다.
  • 헤드리스 WebAuthn 요청을 승인하는 데 사용되는 머신에 WebAuthn 지원이 있는 웹 브라우저 또는 tsh 바이너리가 설치되어 있어야 합니다.
  • 선택 사항: 원활한 헤드리스 WebAuthn 승인을 위한 Teleport Connect v13.3.1 이상.

1/3 단계. 구성

WebAuthn을 지원하는 Teleport 클러스터는 추가 구성 없이 자동으로 헤드리스 WebAuthn을 지원합니다.

헤드리스 WebAuthn을 Teleport 클러스터의 기본 인증 방법으로 설정하려면 클러스터 구성에 connector_name: headless 를 추가하십시오.

cap.yaml 파일을 생성하거나 tctl get cluster_auth_preference 를 사용하여 기존 구성을 가져옵니다:

kind: cluster_auth_preference
version: v2
metadata:
  name: cluster-auth-preference
spec:
  type: local
  second_factor: "on"
  webauthn:
    rp_id: example.com
  connector_name: headless # 기본적으로 헤드리스

구성을 업데이트합니다:

tctl create -f cap.yaml

클러스터 인증 기본 설정이 업데이트되었습니다

WebAuthn이 구성되면 헤드리스 WebAuthn가 자동으로 활성화됩니다. 클러스터에서 헤드리스 WebAuthn을 금지하려면 구성에 headless: false 를 추가하십시오.

cap.yaml 파일을 생성하거나 tctl get cluster_auth_preference 를 사용하여 기존 구성을 가져옵니다:

kind: cluster_auth_preference
version: v2
metadata:
  name: cluster-auth-preference
spec:
  type: local
  second_factor: "on"
  webauthn:
    rp_id: example.com
  headless: false # 헤드리스 WebAuthn 비활성화

구성을 업데이트합니다:

tctl create -f cap.yaml

클러스터 인증 기본 설정이 업데이트되었습니다

2/3단계. 헤드리스 WebAuthn 시작

--headless 플래그와 함께 헤드리스 tsh 명령을 실행합니다. 이렇게 하면 헤드리스 인증이 시작되며 URL과 tsh 명령이 출력됩니다.

tsh ls --headless --proxy=proxy.example.com --user=alice

로컬 웹 브라우저에서 헤드리스 인증을 완료합니다:

https://proxy.example.com:3080/web/headless/86172f78-af7c-5935-a7c1-ed06b94f17dc

또는 로컬 터미널에서 이 명령을 실행합니다:

tsh headless approve --user=alice --proxy=proxy.example.com 86172f78-af7c-5935-a7c1-ed06b94f17dc

3/3단계. 헤드리스 WebAuthn 승인

헤드리스 인증을 승인하려면 로컬 웹 브라우저에서 tsh 에서 출력된 URL을 클릭하거나 복사하여 붙여넣습니다. WebAuthn 확인으로 로그인을 승인하라는 메시지가 표시됩니다. 승인이 완료되면 초기 tsh --headless <command>가 로컬에서 로그인한 것처럼 계속 진행됩니다.

표준 로그인 세션과 달리 헤드리스 세션은 단일 tsh 요청의 수명 동안에만 사용할 수 있습니다. 즉, 각 tsh --headless 명령에 대해 헤드리스 WebAuthn 흐름을 거쳐야 합니다:

예제: SSH 서버 나열

tsh ls --headless --proxy=proxy.example.com --user=alice

로컬 웹 브라우저에서 헤드리스 인증을 완료합니다:

https://proxy.example.com:3080/web/headless/86172f78-af7c-5935-a7c1-ed06b94f17dc

또는 로컬 터미널에서 이 명령을 실행합니다:

tsh headless approve --user=alice --proxy=proxy.example.com 86172f78-af7c-5935-a7c1-ed06b94f17dc

# 사용자가 링크를 통해 승인

노드 이름 주소 레이블

--------- -------------- -----------

server01 127.0.0.1:3022 arch=x86_64

예제: SSH 세션 시작

tsh ssh --headless --proxy=proxy.example.com --user=alice alice@server01

로컬 웹 브라우저에서 헤드리스 인증을 완료합니다:

https://proxy.example.com:3080/web/headless/864cccd9-2425-46d9-a9f2-636387e66ebf

또는 로컬 터미널에서 이 명령을 실행합니다:

tsh headless approve --user=alice --proxy=proxy.example.com 864cccd9-2425-46d9-a9f2-636387e66ebf

# 사용자가 링크를 통해 승인하고 SSH 터미널이 시작됩니다

alice@server01 $

Teleport 사용자, --user 매개변수는 헤드리스 WebAuthn 활동을 요청하는 Teleport 사용자입니다. --user 매개변수나 환경 변수가 없으면 머신 터미널에서 OS 사용자가 사용됩니다.

로그인 사용자 이름, --login 매개변수 또는 login@호스트 이름은 tsh ssh 명령의 SSH 세션을 열 사용자입니다. SSH 세션에 대한 로그인 사용자 이름이 설정되지 않은 경우 OS 터미널 사용자 이름이 사용됩니다. Teleport 사용자는 해당 서버에 대한 로그인 사용자에 대한 액세스 권한이 있어야 하며, 그렇지 않으면 액세스 거부 메시지를 받게 됩니다. 사용자는 헤드리스 WebAuthn 활동이 승인된 후에도 동일한 액세스 권한이 로컬 터미널에서 실행하는 것처럼 부여되거나 거부되므로 액세스 거부 메시지를 받을 수 있습니다.

선택적: Teleport Connect

Teleport Connect v13.3.1+는 Headless WebAuthn 로그인을 승인하는 데에도 사용할 수 있습니다.
Teleport Connect는 Headless WebAuthn 로그인 시도를 자동으로 감지하고, 요청을 승인하거나 취소할 수 있도록 합니다.

Headless Confirmation

승인 프로세스를 완료하려면 MFA 키를 눌러야 합니다.

Headless WebAuthn Approval

이를 위해서는 v13.3.1+ Teleport Auth 서비스도 필요합니다.

문제 해결

"WARN: 헤드리스 로그인에 대한 시스템 메모리를 잠글 수 없습니다: ..."

헤드리스 WebAuthn을 사용할 때 tsh 는 개인 키와 인증서 데이터를 디스크(~/.tsh )에 기록하지 않습니다.
대신 tsh 는 요청 기간 동안 이러한 비밀을 메모리에 보관합니다. 또한, 다른 사용자가 공유된 기계에서 비밀을 도난당하지 않도록 프로세스 메모리를 잠그려고 합니다.

아래는 마주칠 수 있는 특정 경고 메시지와 그 해결 방법입니다:

"operation not permitted" 또는 "cannot allocate memory"

프로세스 메모리를 잠그려면 OS 사용자에게 필요한 메모리를 잠글 수 있는 권한이 있어야 합니다.
ulimit -l 을 사용하여 OS 사용자의 현재 한도를 확인하십시오.
필요한 메모리의 정확한 양은 시스템마다 다를 수 있으므로, ulimit -l unlimited 를 사용하거나 /etc/security/limits.conf<os_username> hard memlock unlimited 라인을 추가하여 ulimit를 무제한으로 업데이트하는 것을 권장합니다.

"메모리 잠금은 비리눅스 운영 체제에서 지원되지 않습니다"

mlockall 시스템 호출은 리눅스 운영 체제에서만 지원됩니다.
즉, 다른 운영 체제에서는 메모리 잠금을 시도할 때 항상 실패하고 경고 메시지가 출력됩니다.
공유 기계에서 최상의 보안 수준을 위해 헤드리스 WebAuthn은 리눅스 기계에서만 사용하는 것을 권장합니다.

mlock 비활성화

위의 솔루션이 환경에서 실현 가능하지 않은 경우, --mlock 플래그 또는 TELEPORT_MLOCK_MODE 환경 변수를 off 또는 best_effort 로 설정하여 메모리 잠금 요구 사항을 비활성화할 수도 있습니다.
공유 시스템에서 메모리 스왑 공격이 가능한 운영 환경에서는 권장하지 않습니다.

Teleport 원문 보기