argoCD 에 GitHub OAuth 및 RBAC 구현하기

sang yun Lee·2024년 10월 17일
0

k8s

목록 보기
19/21

개요


ArgoCDSSO 로 로그인하게끔 하여 직접 아이디/비밀번호를 기억하지 않아도 되게끔 하였다. 그리고 GitHub 으로 RBAC 을 적용하여 그룹별로 접근권한을 달리해줄 수 있도록 하였다.

구현할 내용


  • GitHub SSO 로그인
  • 이메일별 권한 설정
  • 그룹별 권한 설정

구현 요구조건


ArgoCD 를 외부에 등록해놓아야 한다. (안해도 되는지를 모름..ㅎㅎ)
나는 아래 링크로 ArgoCD 를 외부에 공개해놓았다.

적용 방법


1. GitHub SSO 로그인 (이메일별 권한 설정)

  1. github 에 로그인한다.

  2. 아래 링크를 클릭한다.

  3. OAuth App 를 생성한다.
    아래와 같이 등록한다.
    Homepage URL : <host> <---- (이건 아무거나 해도 될 것 같음).
    Authorization callback URL : <host>/api/dex/callback

  4. 그 다음, Client ID, Client secrets 의 값을 보관해둔다.

  5. argoCDConfigMapargocd-cm 을 수정한다.

# $ kubectl edit cm argocd-cm
apiVersion: v1
kind: ConfigMap
data:
...
  dex.config: |
    connectors:
      - type: github
        id: github
        name: GitHub
        config:
          clientID: <이전에 저장해둔 clientID 값>
          clientSecret: <이전에 저장해둔 clientSecret 값>
  # url: <argoCD host 명>
  url: https://argocd.entto.shop
...

argocd-cmGitHub 상세 설정 설명은 아래에서 확인할 수 있다.
https://github.com/dexidp/website/blob/main/content/docs/connectors/github.md

  1. 아래 링크에서 자신의 email 명을 확인한다.
  1. argoCDConfigMapargocd-rbac-cm 을 수정한다.
    아래처럼 scopes, policy.csv 에 값을 추가한다.
apiVersion: v1
data:
...
  scopes: '[groups, email]'  # <--- 기본값은 [groups] 이다.
  policy.csv: |
    p, role:admin, applications, *, */*, allow
    p, role:admin, clusters, *, *, allow
    p, role:admin, projects, *, *, allow
    p, role:admin, repositories, *, *, allow
    p, role:admin, certificates, *, *, allow
    p, role:admin, gpgkeys, *, *, allow
    p, role:admin, accounts, *, *, allow
    g, sororiri@gmail.com, role:admin  <---------------- 자신의 이메일을 넣는다.
...

여기까지 하면 자동으로 ArgoCD 서버에 해당 설정이 반영이 된다.

  1. argoCDGitHub 로 로그인한다.
    나의 경우 최초 로그인할 때에는 로그인이 안되고 계속 로그인 페이지로 이동되었다. 한 6~7번 누르면 다음 페이지로 이동한다.

  2. 아래처럼 나오는데 수락한다.

  3. 그럼 정상적으로 접속이 되는 것을 확인할 수 있다.

2. 그룹별 권한 설정

  1. 아래 링크에서 조직(organization) 를 만든다.
  2. 조직에서 Team 을 만든다. (나는 Devops 라고 만들었다.)
  3. argoCDConfigMapargocd-cm 을 수정한다.
    기존에서 loadAllGroups: true 를 추가한다.
    loadAllGroups: true 을 추가하면 사용자의 그룹정보를 권한 설정(RBAC) 할 때에 사용할 수 있게 된다.
# $ kubectl edit cm argocd-cm
apiVersion: v1
kind: ConfigMap
data:
...
  dex.config: |
    connectors:
      - type: github
        id: github
        name: GitHub
        config:
        ...
          loadAllGroups: true <----- 새로 추가한다.
        ...
...

만약 특정 그룹만 로그인을 허용하게 하고 싶다면 dex.config 에 orgs 를 추가한다.

  1. argoCDConfigMapargocd-rbac-cm 을 수정한다.
    만약 특정 조직의 팀에 role:admin 을 추가하고 싶다면,
    아래처럼 policy.csvg, <조직명>:<팀명>, role:admin 을 추가한다.
apiVersion: v1
data:
...
  policy.csv: |
    ...
    p, role:admin, accounts, *, *, allow
    ...
    # g, <조직명>:<팀명>, role:admin
    g, memomou:Devops, role:admin
...
  1. 원하는 유저를 자신의 팀에 추가한다.

  2. 해당 유저가 ArgoCD 에 로그인하여 정상적으로 동작하는 지 확인한다.

디버깅 방법


SSO 로그인 이 안되는 경우, 아래처럼 dex-server 파드 를 디버깅하여 원인을 분석할 수 있다.
dex-serverargoCDSSO 인증 에 관여하는 서버이다.

  1. dex-server 의 파드명을 확인한다.
$ kubectl get po -n argocd | grep dex
> argocd-dex-server-7df65fb4f4-qt9ps
  1. dex-server 의 로그를 확인한다. 해당 로그들을 보고
    로그인을 시도한 유저의 email, group 등을 확인할 수 있으며 로그인 에러가 왜 발생했는 지를 알 수 있다.
$ kubectl logs -n argocd -f argocd-dex-server-7df65fb4f4-qt9ps
> ...
time="2024-10-17T20:49:20Z" level=info msg="login successful: connector \"github\", username=\"2sangyun\", preferred_username=\"SangYunLeee\", email=\"sororiri@gmail.com\", groups=[\"memomou\" \"memomou:Devops\"]"
...

이상으로 적용 방법 공유를 마칩니다.

참조


0개의 댓글