-
ArgoCD와 Keycloak OIDC 연동하기K8S 2022. 11. 25. 14:14
개요
1. Keycloak 대시보드에서 argocd client를 생성한다.
2. client scope를 생성한다.
3. ArgoCDAdmin이라는 그룹을 만들고, 사용할 user를 group에 join시킨다.
4. argocd-secret에 oidc client secret 값 base64 인코딩하여 추가한다.
5. argocd-cm에 oidc.config를 추가한다.
6. argocd-rbac-cm configmap에 생성한 group명을 추가한다.
환경
argo-cd v2.2.5
1. Keycloak 대시보드에서 argocd client를 생성한다.
현 예시에서는 default realm인 Master realm에서 작업한다.
예시에서는 Root URL, valid redirect url 등을 설정했지만 나의 경우 설정하지 않았다.
이후 credential 탭에서 client secret을 지정해준다.
client secret은 이후 argocd에서 관리하는 secret에 넣어줄 값이므로 미리 복사해놓자.
2. client scope를 생성한다.
access 토큰에 groups claim을 추가해서 client의 권한을 제어할 것이다.
groups claim을 만들기 위해서 먼저 client scope를 만들어야 한다.
groups라는 이름으로 client scope를 만든다.
client scope를 생성할때 protocol mapper도 함께 생성해서 추가한다.
protocol mapper를 추가하면 client가 groups scope에 있을 때, access token에 groups claim을 넣어준다.
방금 만든 groups라는 client scope를 default client scope에 넣을지 default client scope에 넣을지 결정한다.
default client scope는 client 생성시 자동으로 client scope를 추가해주므로, groups client scope를 default client scope에 추가한다.
3. ArgoCDAdmin이라는 그룹을 만들고, 사용할 user를 group에 join시킨다.
4. argocd-secret에 oidc client secret 값 base64 인코딩하여 추가한다.
apiVersion: v1 kind: Secret metadata: name: argocd-secret data: ... # client secret oidc.keycloak.clientSecret: ODMwODM5NTgtOGVjNi00N2IwLWE0MTEtYThjNTUzODFmYmQy ...
5. argocd-cm에 oidc.config를 추가한다.
apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm data: url: https://argocd.example.com # oidc config 추가 oidc.config: | name: Keycloak issuer: https://keycloak.example.com/realms/master # keycloak 주소 및 정확한 realm 입력 clientID: argocd # keycloak에서 생성한 client 이름 clientSecret: $oidc.keycloak.clientSecret # 변경X requestedScopes: ["openid", "profile", "email", "groups"] # 위에서 생성한 groups claim을 포함한다.
6. argocd-rbac-cm configmap에 생성한 group명을 추가한다.
apiVersion: v1 kind: ConfigMap metadata: name: argocd-rbac-cm data: policy.csv: | # keycloak에서 생성한 group에게 admin 권한을 준다. g, ArgoCDAdmins, role:admin
<유저를 ArgoCDAdmins 그룹에 추가하기 전>
<유저를 ArgoCDAdmins 그룹에 추가한 후>
해당 doc를 참고해서 했습니다.
반응형'K8S' 카테고리의 다른 글
Operator-sdk 사용시 multiple controller 구조로 변경 (0) 2022.12.05 K8S에서 NFS 서버 없이 동적 프로비저닝 사용하기 (0) 2022.12.02 Cert-manager와 Traefik IngressRoute을 이용한 nginx https 배포 (0) 2022.10.25 Ingress traefik을 이용한 nginx http 배포 (0) 2022.10.25 Keycloak을 이용한 K8S 사용자 분리 (0) 2022.09.04