oauth2-proxy 를 이용하면 특정 reverse proxy 경로에 접근할때 OAuth2 인증을 요청하게 되고 인증된 세션만 접근할 수 있도록 제한할 수 있다.
공식 문서의 왼쪽 그림과 같이 앞단에 nginx
를 하나 더 붙여서 구성할 수도 있는데
nginx 에서 다음과 같이 vhost private.oboki.net
로 분기시키고
server {
server_name private.oboki.net;
location / {
proxy_pass http://${OAUTH2-PROXY-HOST}:4180;
...
}
}
${OAUTH2-PROXY-HOST}:4180
에 이어서 oauth2-proxy
서비스를 붙여주려고 한다.
공식 도커 이미지와 google 인증을 활용해 구성을 이어가보면,
services:
proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:v7.4.0-amd64
ports:
- 4180:4180
command:
- --authenticated-emails-file=/allowed-emails
- --client-id=<Your Client ID>
- --client-secret=<Your Client Secret>
- --cookie-secret=MY-AWESOME-COOKIE-SECRET
- --cookie-secure=true
- --email-domain=google.com
- --http-address=http://0.0.0.0:4180
- --redirect-url=https://private.oboki.net/oauth2/callback
- --reverse-proxy=true
- --upstream=http://upstream
volumes:
- ./allowed-emails:/allowed-emails
upstream:
image: nginx:latest
https://private.oboki.net
로 접근했을 때 upstream 서비스로 포워딩시킬 수 있다.
다음과 같이 vserver 로 접근하면 서버가 추가적인 인증을 요구하게 되고
구글 계정으로 로그인하면 비로소 upstream 서비스에 도달할 수 있다.
<Your Client ID>
와 <Your Client Secret>
은 https://console.developers.google.com/apis/credentials 에서 다음과 같이 무료로 발급받을 수 있다.
앞서 설정한 url 들만 잘 입력해주면 수 분 내로 금방 활성화 된다.
사용자 유형을 내부로 설정하면 특정 사용자만 접근 가능하도록 Google Cloud 수준에서 제어가능하겠지만 Google Workspace 를 사용해야하고 authenticated-emails-file
파일을 이용해 프록시 수준에서 관리할 수도 있다.