권한을 찾아서: Github Team을 이용하여 Kubernetes 계정 인증하기 (2)

유희철
유희철
Sep 7, 2018 · 9 min read

이전 포스트에 이어서 이번 포스트에서는 Guard를 적용하여 어떻게 인증Auth 문제를 해결하였는지에 대해 소개합니다.

“A person holding a black iPhone in their hand” by Oliur Rahman on Unsplash

어떻게 하면 팀원들이 괴로워하지 않으면서 보안도 챙길 수 있을까요?

고통이라는 건 중요하다고 생각합니다. 어떤 일을 반복할 때 고통이 느껴진다면 그 태스크가 제대로 수행되는데에 있어서 큰 장애물 또는 방해요소가 있다라고 정의할 수 있을 것 같네요.

이전 포스트에 적었던 것 처럼 managed Kubernetes(이하 k8s) service 를 사용하지 않고 직접 k8s 클러스터를 운영할 경우에는 Auth 관련 기능을 이용하기가 굉장히 까다롭기 때문에 인증처리를 제대로 하지 않게 될 확률도 높아지게 됩니다.

자 그렇다면 문제를 조금 쉽게 바꿔봅시다. 여러분들이 회사 또는 팀에서 Github 을 사용하고 개발자들이 각각 Github 계정을 가지고 있다고 한다면 각 팀원들이 특정 팀에 속할 수 있겠죠. 예를 들면 A 와 B 개발자는 ops 라는 팀에 들어갈 수 있구요. B 와 C 개발자는 back-end 라는 팀에 들어갈 수 있습니다. 그러면 Github 팀 별로 각각 k8s에 대한권한을 부여할 수는 없을까요?

정리해보면 Github라는 플랫폼을 통해서 우리 팀원으로서 Sign-in 을 할 수 있고(Authentication, 이하 Authn), 각 팀에 맞는 접근 권한을 가질 수는(Authorization, 이하 Authz) 없을까요?

네, 가능합니다! 여러 방법이 있는데 그 중에서 Guard를 이용한 방법을 공유해 보겠습니다. 그리고 이미 여러분이 kops를 사용해서 클러스터를 구성했다는 가정 하에 kops에 대한 자세한 설명은 생략 하도록 하겠습니다.

먼저 우리가 사용하려는 클러스터는 kops 를 이용해서 구성되어 있었는데 혹시나 Guard에서 kops를 위한 문서가 있었으나, 해당 페이지만 읽어서는 이해가 어렵고 기본적인 install 문서도 읽어야만 이해할 수 있습니다.

위에 언급한 문서를 읽어보면 kops가 설치된 머신에 Guard CLI 를 설치하도록 안내하고 있습니다. Linux 또는 macOS 등 사용하는 OS에 맞는 CLI 를 설치하신 후 PKI 관련 파일들을 생성하도록 안내하고 있습니다.

문서만 보고 그대로 따라하실 경우 조금 헷갈릴 수 있는데 모든 명령어를 그대로 입력해야 하는 것 아니고요. 제가 조금 더 정제된 과정을 하나씩 설명을 해드리겠습니다.

우선 $ guard init ca 를 실행해서 CA 인정서를 생성 한 후에 $ guard init server --ips=100.64.10.96 을 실행하여 서버용 인증서를 만듭니다. 여기서 주의해야 하는 부분은 일반적인 install 페이지에서 보여주는 IP와 kops 용 install 페이지에서 보여주는 IP가 다릅니다. 우리는 kops 를 사용하고 있으니 kops 용 페이지를 보면서 해당 IP를 입력합시다.

IP가 다른 이유는 kops 에서 내부적으로 Pods 에 할당하는 가상 IP의 대역이 기본적으로 100.64.x.x 으로 설정되기 때문입니다. 이 부분은 $ kops edit cluster 명령어를 통해서 확인해보실 수 있습니다. 혹시라도 기존에 이미 동작 중인 pod 이나 service 에서 100.64.10.96 IP를 사용 중이라면 충돌이 날 수 있으니 주의 및 확인 할 수 있는 방법이 kops 용 인스톨 페이지에서 언급되고 있습니다.

🎉 이제 서버용 인증서 설정이 완료되었습니다. 🎉

이제는 클라이언트용 인증서를 생성해야 하는데 우리는 Github을 통해서 인증 할 것 이기 때문에 $ guard init client your-org -o github 이라고 입력 해줍니다. 여기서 your-org 를 인증할 때 사용하고자 하는 org 네임으로 변경해 주셔야겠죠 예: Rainist

자 이렇게 모든 인증서certificates~/.guard/pki 폴더에 준비 되었습니다.

ls ~/.guard/pki 를 입력해서 6개 파일your-org@github.crt|key, ca.crt|key, server.crt|key 이 생성 되었을테고요.

아직 네 가지 작업이 남았습니다.

  1. 만들어둔 인증서를 이용하여 서버를 띄우는 것
  2. k8s 가 webhook 인증방식을 사용할 수 있도록 kops 의 설정 변경
  3. kubectl config~/.kube/config 변경하여 유저 인증Authn 하기
  4. ClusterRole 또는 Role 을 사용하여 권한 관리Authz 하기

먼저 서버를 띄우기 위해 아래의 절차를 거치고요.

kops 의 설정을 변경하기 위해 kops edit cluster 명령어를 입력하여 아래 내용을 추가 합니다.

이제 이 설정된 부분이 적용되기 위해서는 k8s의 master nodes를 재시작해야 합니다.

kops 명령어를 이용해서 update 및 master node group에 대한 rolling-update를 진행하시면 클러스터에서 이제 Github 팀을 이용한 인증을 진행할 준비를 마쳤습니다.

이 부분 (kops rolling-update) 에 익숙하지 않은 상태에서 프로덕션용 클러스터를 대상으로 진행할 경우 만약 롤링 업데이트 과정에서 문제가 발생해 낭패를 보실 수 있으니 꼭 사용법을 충분히 숙지하신 후, 연습용 클러스터에서 미리 수행해 보시고 작업하시는 것을 권장합니다.

이제 kubectl 의 config 파일을 수정하여 Github Team 을 이용하여 Authn을 할 차례입니다.

kops 로 클러스터를 처음 만들었을 때 ~/.kube/config 를 제공 받으셨을 테고 이 파일에는 모든 권한을 가진 admin 용 credentials 가 포함 되어 있습니다. 해당 파일은 필요할테니 반드시 잘 보관해 두시고 이 파일을 기반으로 아래와 같이 수정하시면 Github Team 에 설정된 팀원으로 인증을 할 수 있습니다.

  • users > username은 임의로 적어셔도 상관은 없으나 contexts > contextuser 와 동일해야 합니다.
  • tokenhttps://github.com/settings/tokens/new 에 접속한 후 admin:org >read:org 만 체크하신 후 Token description에 이 토큰이 무슨 용도인지 알 수 있도록 적당히 적어주신 후에 Generate Token 을 눌러서 발급을 받은 토큰을 {github-token} 항목에 적어주시면 되고 나중에는 Github을 통해 해당 토큰을 다시 볼 수 있는 방법이 없으니 잘 보관을 해두시거나 잃어버렸을 경우는 당황할 필요 없이 기존 토큰을 삭제하고 새 토큰을 발급받아서 사용하시면 됩니다. (그리고 새 토큰을 위의 config 파일에도 업데이트 해주셔야겠죠)

이제 kubectl cluster-info 를 입력했을 때 에러 메세지가 없으면 Github Organization을 이용해서 Authn를 구현하였습니다.

이제 마지막으로 인증된 유저의 권한을 관리해줘야 하는데요. (Authn은 되었지만 기본적으로는 권한이 거의 없다시피 하기 때문에 지금 당장으로써는 사용할 수 있는 기능이 거의 없습니다.)

이제 Authz를 다뤄 볼 시간이죠!

이 내용은 k8s의 RBAC도 언급해야 하는 등 내용이 생각보다 길어질 것 같아서 다음 글에서 이어 진행하도록 하겠습니다!

Banksalad Tech

돈관리 앱 뱅크샐러드 Tech 팀입니다.

Thanks to Sunghyun Hwang and Sunghoon Kang

유희철

Written by

유희철

DevOps Engineer @ Rainist. Creator of Keytty.

Banksalad Tech

돈관리 앱 뱅크샐러드 Tech 팀입니다.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade