Kubernetes Authentication Webhook
Webhook 기반 Kubernetes Authentication 기법을 분석한다.
1. Kubernetes Authentication Webhook
Kubernetes는 Webhook 기반의 인증 기법을 제공한다. Webhook 기반의 인증 기법은 다양한 형태의 외부 인증 서버와 연동할 수 있다는 장점을 갖고 있다. [Figure 1]은 Webhook 기반의 Kubernetes 인증 기법을 나타내고 있다. Kubernetes Client (kubectl)은 외부 인증 서버에게 인증과정을 통해서 Token을 얻어온다. Token을 얻은 Kubernetes Client는 Token을 Authorization: Bearer $TOKEN Header를 통해서 Kuberenetes API Server에 전달한다. Token을 전달받은 Kubernetes API Server는 외부의 인증 서버에게 Token 정보가 포함된 TokenReview Object를 전달하여 인증받는다.
|
|
Kubernetes API Server에게 외부의 인증 서버를 설정하는 방법은 “–authentication-token-webhook-config-file” Option을 통해서 Webhook Config 파일을 전달하면 된다. Webhook Config 파일은 kubeconfig 파일 형태와 동일하지만 설정 내용은 다르다. [Text 1]은 Webhook Config를 나타내고 있다. Cluster 항목에는 외부의 인증 서버 관련 정보가 저장되고, User 항목에는 Kubernetes API Server가 외부 인증 서버와 통신할때 이용하는 인증서 정보가 저장되어 있다.
|
|
Kubernetes API Server는 외부의 인증 서버에게 Token을 전달하기 위해서 내부적으로 TokenReview Object를 생성하고 TokenReview Object의 Spec에 Token을 저장한다. 이후 Kubernetes API Server는 생성한 TokenReview Object는 외부의 인증 서버에게 전달한다. [Text 2]는 Kubernetes API Server가 외부의 인증 서버에게 전달하는 TokenReview Object를 나타내고 있다.
|
|
|
|
TokenReview Object를 전달받은 외부의 인증 서버는 Token이 유효하면, 인증되었다는 정보와 Token이 인증하는 User의 이름 및 User가 소속되어 있는 Group 정보를 TokenReview Object의 Status에 저장하고 Kubernetes API Server에 전달한다. Token이 유효하지 않다면 인증되지 않았다는 정보를 TokenReview Object의 Status에 저장하고 Kubernetes API Server에 전달한다. [Text 3]은 Token이 유효할 경우 외부 인증 서버가 설정하는 TokenReview Object의 Status를 나타내고, [Text 4]는 Token이 유효하지 않을 경우 외부 인증 서버가 설정하는 TokenReview Object의 Status를 나타낸다.