Authentik으로 홈서버 SSO 구현하기 (5) – Proxy

개요

홈서버에서 사용하는 대부분의 애플리케이션들은 앞선 글에서 소개했던 OAuth/OpenID, SAML로 모두 해결할 수 있습니다.

그러나, 이런 류의 인증방식을 지원하지 않는 것들도 굉장히 많죠. 예를 들어, 토렌트 자동화에 쓰이는 Sonarr, Radarr 같은 것들이나, Plex의 서드파티 플러그인 tautulli같은 것이 대표적입니다..

*arr 시리즈만 해도 종류가 4~5가지가 넘어가는데, 이들을 하나하나 로그인해가면서 사용하는 건 너무 귀찮습니다.

Remember me를 체크해서 아이디 비밀번호를 저장할 수도 있지만, 이것도 토큰 유효기간 끝나면 풀려버리죠.

이런 류의 프로그램을 Authentik으로 인증하는 방법을 진행해 보겠습니다.

작동 방식

Proxy Provider를 구성하고 나면 LDAP때와 마찬가지로 Outpost 컨테이너가 실행됩니다.

이번 방식에서는, 리버스 프록시로 개별 서비스에 직접 접근하지 않고, Authentik으로 인증을 진행할 모든 서비스의 리버스 프록시는 이 Outpost 컨테이너로 보내게 됩니다.

a.example.com, b.example.com, c.example.com… 모두 10.10.10.10:9000 으로 보내지고,

Outpost컨테이너는 사전에 정의된 ID/PW를 함께 담아 개별 서비스로 다시 보내주는 방식으로 작동하게 됩니다.

아래 개별 서비스로 예시를 들어보겠습니다.

Sonarr와 연동하기

이하 Radarr, Lidarr, Prowlarr 등 *arr 형제는 모두 같은 방식으로 진행합니다.

리버스 프록시 연결

내부 주소는 sonarr 주소가 아니라 {Authentik 내부 IP:9000}으로 설정하셔야 합니다.

위에서 설명했듯, Outpost 컨테이너로 가야 하기 때문입니다.

특성 정의하기

이 방식의 인증을 사용할 때는, 로그인할 ID와 PW를 Authentik에서 사용자(혹은 그룹)의 특성에 직접 정의해주어야 합니다.

해당 특성을 가진 사용자가 프록시를 통해 접근하면 보유한 ID와 PW를 토큰처럼 사용해서 인증을 통과하는 방식입니다.

저는 아래처럼 arr_user라는 이름의 그룹을 하나 생성하고, 그룹 특성으로 arr_user와 arr_password라는 특성을 정의했습니다.

이제 다른 사용자를 이 그룹에 추가해주면, 해당 사용자는 이 특성을 사용할 수 있게 됩니다.

애플리케이션, Provider 생성하기

애플리케이션 – 공급자 – Proxy Provider를 순차적으로 클릭합니다.

  • 이름 : 식별 가능한 선에서 자유롭게
  • 인증 플로우 : default-authentication-flow
  • 인가 플로우 : default-provider-authorization-implicit-consent
  • 탭 선택 : ‘프록시
  • 외부 호스트 : 리버스 프록시로 연결한 주소
  • 내부 호스트 : 내부 네트워크 IP:PORT
  • 인증서 : 아무거나
  • Authorization header 가로채기 (체크)
  • HTTP-Basic 인증 전송 (체크)
  • HTTP-Basic 사용자명 키 : arr_user
  • HTTP-Basic 비밀번호 키 : arr_password

애플리케이션 – 애플리케이션으로 이동해서 애플리케이션도 하나 생성해 줍니다.

Proxy Outpost 생성

애플리케이션 – Outposts – 생성을 클릭해 Proxy Outpost를 하나 생성해 줍니다.

애플리케이션 목록에 방금 생성한 sonarr를 포함해 주면 됩니다.

Outpost를 생성하면 LDAP때와 마찬가지로 알아서 필요한 컨테이너를 생성하고 스스로 구성합니다.

컨테이너 구성이 끝나기 전까지는 Outpost 사용 불가 상태이지만,

구성이 끝나면 사용 가능 상태로 전환됩니다.

Sonarr 설정

Settings – General – Security에서 Authentication항목을 Basic (Browser Popup)으로 설정합니다.

Forms (Login Page)로 설정할 경우 Proxy Provider로 통과하지 못합니다.

이후 sonarr.fentanest.com으로 접속하면 Authentik 로그인 화면으로 리다이렉트 되고, Authentik 로그인에 성공하면 Sonarr로그인을 자동으로 수행하는 것을 확인할 수 있습니다.

이제 Radarr, Lidarr 등을 계속해서 추가하기 위해선, Provider와 애플리케이션을 생성한 뒤, Proxy Outpost에 새로 생성한 애플리케이션을 추가하기만 하면 됩니다.

Transmission과 연동하기

토렌트 클라이언트 중 많이 쓰이는 Transmission이 HTTP-Basic Authentication을 사용하기 때문에, Authentik의 Proxy를 이용해서 통합할 수 있습니다.

리버스 프록시 연결

예시 글에서는 tcsample.fentanest.com을 사용합니다. 연결되는 내부 주소는 {Authentik 내부 IP:9000}으로 설정했습니다.

특성 정의하기

Transmission을 사용할 그룹을 생성하고 특성에 tc_user와 tc_pass를 정의합니다. Transmission Web Interface의 ID와 비밀번호를 각각 입력해 줍니다.

애플리케이션, Provider 생성하기

애플리케이션 – 공급자 – Proxy Provider를 순차적으로 클릭합니다.

  • 이름 : 식별 가능한 선에서 자유롭게
  • 인증 플로우 : default-authentication-flow
  • 인가 플로우 :default-provider-authorization-implicit-consent
  • 탭 선택 : ‘프록시
  • 외부 호스트 : 리버스 프록시로 연결한 주소
  • 내부 호스트 : 내부 네트워크 IP:PORT
  • 인증서 : 아무거나
  • Authorization header 가로채기 (체크)
  • HTTP-Basic 인증 전송 (체크)
  • HTTP-Basic 사용자명 키 : tc_user
  • HTTP-Basic 비밀번호 키 : tc_pass

해당 공급자를 사용할 애플리케이션을 같이 생성하겠습니다.

Proxy Outpost 추가

애플리케이션 – Outposts에서 위에서 생성된 Outpost를 클릭해 방금 추가한 transmission 애플리케이션도 추가해 줍니다.

이후, tcsample.fentanest.com으로 접속하면 Authentik로그인 화면이 나타나고, Transmssion으로 잘 이동되는 것을 확인할 수 있습니다.

문제 해결(Trouble-Shooting)

포트가 이미 사용중일 경우

제 경우 Portainer에서 사용하는 포트와 Outpost가 사용하려는 포트가 겹쳐서 컨테이너가 자동으로 실행되지 못했습니다.

이 경우 컨테이너 속성에 들어가 포트를 변경해주면 됩니다.

포트를 변경했다면, 리버스 프록시에서 IP:9000으로 설정했던 부분을 맞게 수정해주시면 됩니다.


관련 글

Authentik으로 홈서버 SSO 구현하기 (1) – 설치

Authentik으로 홈서버 SSO 구현하기 (2) – LDAP

Authentik으로 홈서버 SSO 구현하기 (3) – OAuth/OpenID

Authentik으로 홈서버 SSO 구현하기 (4) – SAML

Authentik으로 홈서버 SSO 구현하기 (6) – 회원 가입, 초대 코드, 소셜 로그인

Authentik으로 홈서버 SSO 구현하기 (7) – 시놀로지 회원 가입(계정 자동 생성) 구현하기

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤