Operations/Keycloak

[Keycloak] ArgoCD Keycloak 연동

혬수 2025. 7. 3. 23:43

이번에는 ArgoCD 대시보드 진입시, Keycloak을 통해 접근하는 방식을 배워보도록 하자!

 

realm, role 등 Keycloak 관련 용어들 모르면 아래 게시글 참고!

https://dev-shim99.tistory.com/64

 

[Keycloak] Keycloak 개요

📌 Keycloak이란?오픈소스 ID & Access Management 솔루션OIDC 및 OAuth 2.0, SAML 2.0을 지원하여 많은 시스템에 SSO 및 중앙집중식 사용자 관리를 제공 관련 용어RealmKeycloak의 관리 영역 단위로, 사용자, 클

dev-shim99.tistory.com

 

 

일반적으로 같은 조직·유저 그룹을 공유하는 애플리케이션 단일 Realm에서 여러 Client로 관리하고,

완전 별도 조직이나 고객(테넌트)용이라면 애플리케이션별(또는 테넌트별) Realm 분리를 고려한다.

 

Grafana때 설정했던 것과 마찬가지로

필자의 경우, 같은 조직에서 여러 애플리케이션을 관리하는 것 고려하여, 단일 Realm에서 Client를 생성해서 진행하도록 하겠다!

 

📌 Client 생성

https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/keycloak/#creating-a-new-client-in-keycloak

 

해당 부분은 위 링크의 공식문서와 같으므로 참고하여 Client 생성하면 된다!

 

📌 argocd-secret에 client Secret추가

kubectl patch secret argocd-secret --patch='{"stringData": { "oidc.keycloak.clientSecret": "<REPLACE_WITH_CLIENT_SECRET>" }}'

 

참고로 client Secret은

Keycloak 대시보드 [Client] > 상단 탭 [Credentials] 에서 확인 가능하다.

 

 

📌 ArgoCD ConfigMap 수정

kubectl edit cm argocd-cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
data:
  url: https://<argocd-domain>
  oidc.config: |
    name: Keycloak
    issuer: https://<keycloak-domain>/realms/master
    clientID: <client_id>
    clientSecret: $oidc.keycloak.clientSecret
    requestedScopes: ["openid", "profile", "email", "groups", "offline_access"]

 

ArgoCD OIDC 설정 requestedScopesoffline_access scope 누락되는 경우 

  • Refresh Token이 Online Session에만 유효하도록 제한됨
  • Access Token 만료 시 Refresh Token 갱신 실패
  • Token refresh 실패 → 강제 로그아웃 발생

⇒ ✅ oidc.config.requestScopesoffline_access 추가 !!

 

 

📌 ArgoCD RBAC 수정

https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/

위의 내용 참고해서 ArgoCD RBAC을 수정하자!

kubectl edit cm argocd-rbac-cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
data:
  policy.csv: |
    p, role:viewer, *, *, *, allow
    p, role:viewer, *, delete, *, deny
    g, admin, role:admin
    g, viewer, role:viewer

ArgoCD는 Group이 존재해야 role mapping 가능하므로, Keycloak에서 Group 설정을 꼭 해주자!!!

필자의 경우, 기본 사용자를 viewer group으로 묶고, 특정 사용자를 admin으로 묶었다.

viewer 그룹의 경우 admin과 권한은 같되, 모든 리소스에 대해 delete 권한은 deny를 했다.

 

kubectl rollout restart deployment argocd-server

 

 

짜잔 ~ 설정 끝 🎉

우측 상단에 LOG IN VIA KEYCLOAK 버튼이 생긴 것을 볼 수 있다.