본문 바로가기
IT&Tech

API 인증프로세스 Istio Ingress Gateway, OAuth2-Proxy and Keycloak

by walter 2022. 1. 20.

소개 

Istio Ingress Gateway, OAuth2-proxy, Keycloak을 이용하여 모든 서비스를 요청하기전, 인증처리 프로세스를 추가할수 있습니다.

 

예를 들어 Kubernetes Dashboard같은 경우 AWS IAM유저를 등록을 통해서 접근하는데요 

보안적으로나 관리면서 많이 불편하며, 유연하지 못한 방법입니다.

아래와 같은  방법을 통해서 외부 Provider즉 Github, LDAP등 OIDC를 이용하여 Keycloak + OAuth2-proxy를 통한 인증 프로세스 접근에 대해서 소개합니다. 

 

준비물 

Kubernetes 환경

Istio 설치

Keycloak 설치

 

Keyclock 

MSA 인증서비스로 레드햇이 만든 인증 & 권한을 부여해주는 오픈소스입니다.

국제적인 인증, 인가 표준(OIDC, SAML, OAuth 2.0 등) 을 모두 제공하며, single-sign-on 구현에 최적화된 오픈소스입니다. 

자세한 내용은 추후 다르고자 합니다. 

 

아래 링크를 통해서 다운로드 또는 kubernetes는 helm를 통해서 설치하면 좋습니다.

https://www.keycloak.org/downloads   

 

OAuth2-Proxy

https://oauth2-proxy.github.io/oauth2-proxy/docs/

OAuth2인증을 하는데 OAuth클라이언트를 실행하는 오픈소스 reverse proxy 솔류션입니다. 

요청시 인증여부에 따라서 OAuth 서버(Keycloak)에게 사용자 인증 요청을 처리 할 수 있습니다. 

Keycloak에서 엑세스 토큰을 받아 서버에 저장(또는 Redis)합니다. 

 

OAuth2-Proxy는 Ingress Gateway와 Keyclock 사이의 인증흐름을 관리합니다. 

 

인증 메세지 프로세스   ( istio gateway <-> OAuth2-proxy <-> Keyclock)

 

1. 사용자 특정 도메인 서비스 요청합니다 즉 (도메인에 연결되어있는  istio ingress gateway 주소로 요청합니다. )

ex) https://api.walter.kr 

2. Ingress gateway는 인증을 위해서 OAuth2-Proxy로 요청합니다. 

3. OAuth2-Proxy는 인증여부를 체크하며,  상태값을 내부 store(redis)등에서 저장합니다. 

4. OAuth2-Proxy는 Keycloak의 /auth로 redirect 요청합니다. 

5. 브라우저는 /auth ingress-gateway에 전달합니다. 

6. Ingress gateway는 Keycloak 인증서버에 요청합니다. 

7. Keycloak을 통해서 생성한 로그인 화면을 브라우저에 제공합니다. 

8. 브라우저에서 로그인화면의 정보를 입력한후 Keyclock의 /authenticate로 전송 요청합니다. 

9. Ingress gateway는 사용자 인증자격을 확인 & 인증코드 생성을 위해 Keyclock 인증서버로 요청합니다. 

10. 성공적인 인증이 완료후, URL 쿼리 매개변수로 인증코드를 포함하여 OAuth2-proxy서버에 /callback 요청합니다. 

11. 브라우저는 Ingress gateway의  /callback 엔드포인트를 요청합니다. 

12. Ingress gateway는 OAuth2-proxy에게 /callback 전달합니다. 

13. OAuth2-proxy는 인증코드를 사용하여 Keyclock인증서버에 /token 호출합니다. 

14. Keyclock은 토큰 유효성 검사를 체크하며, 액세스 토큰, ID 토큰 및 새로 고침 토큰으로 다시 응답합니다.

15. OAuth2-proxy는 토큰을 저장소(redis)에 저장합니다. 

16. OAuth2-proxy는 사용자가 요청한 redirect-url에 쿠키정보를 토함하여 요청합니다. 

17. 브라우저는 redirect-url을  요청을 보냅니다. 이번에는 요청에 OAuth2-Proxy에서 보낸 쿠키가 포함된 쿠키 헤더가 포함됩니다. 요청이 수신 게이트웨이로 전송됩니다.

18. Ingress Gateway는 요청이 제대로 인증되었는지 확인하기 위해 OAuth2-Proxy에 요청합니다. 

19. OAuth2-Proxy는 "X-Auth-Request-Access-Token" 헤더에 액세스 토큰이 포함된 HTTP 200 OK 응답으로 응답합니다.

20. Ingress Gateway는  "X-Auth-Request-Access-Token" 헤더와 함께  업스트림 서비스로 요청을 전달합니다.

21. 서비스 정상 처리 

인증 흐름 프로세스&amp;nbsp;

 

추후 구현관련 내용 추가 예정입니다.  to be 

 

 

참고

https://istio.io/latest/docs/ops/common-problems/injection/

https://oauth2-proxy.github.io/oauth2-proxy/docs/

https://www.keycloak.org/downloads

https://medium.com/@senthilrch/api-access-control-using-istio-ingress-gateway-44be659a087e