Skip to main content

Argo CD 인증/인가


인증(Authn)

ConfigMap, Secret으로 계정 관리

SSO 설정이 부담스러운 매우 소규모 팀이나 개인 프로젝트에서는 ConfigMap, Secret으로 계정을 관리할 수 있습니다.

argo-cd-values.yaml
configs:
cm:
# `argocd-cm` ConfigMap

accounts.<user>: apiKey, login
accounts.<user>.enabled: "true"
  • apiKey: API 사용을 위한 토큰 생성을 허용합니다.
  • login: UI 로그인을 허용합니다.
argo-cd-values.yaml
configs:
secret:
# `argocd-secret` Secret

# 암호는 bcrypt, cost 10으로 해싱된 값을 설정합니다.
accounts.<user>.password: $2a$10$...
htpasswd -bnBC 10 '' '<password>' | tr -d ':\n' | sed 's/^$2y/$2a/'
info

암호는 argocd 커맨드로 생성하여 등록할 수도 있습니다.

argocd account update-password --account <user>

OIDC

argo-cd-values.yaml
configs:
cm:
# argo-cd의 외부 접속 주소입니다.
url: <argoCDURL>

oidc.config: |
name: <IdP>
issuer: <IdPURL>
clientID: <clientID>
clientSecret: $argo-cd-client-secret:oidc.<IdP>.clientSecret

# Optional
requestedScopes: ["openid", "profile", "email", "groups"]

# Optional
# https://connect2id.com/products/server/docs/guides/requesting-openid-claims#claims-parameter
requestedIDTokenClaims:
email:
essential: true
groups:
essential: true
values:
- <group>

# Optional
logoutURL: <logoutURL>?id_token_hint={{token}}&post_logout_redirect_uri={{logoutRedirectURL}}
  • callback 주소는: <argoCDURL>/auth/callback 입니다.
apiVersion: v1
kind: Secret
metadata:
name: argo-cd-client-secret
namespace: argo-cd
labels:
app.kubernetes.io/part-of: argocd # 이 label이 있어야 설정이 적용됩니다.
type: Opaque
stringData:
oidc.<IdP>.clientSecret: <clientSecret>

Keycloak

argo-cd-values.yaml
configs:
cm:
oidc.config: |
name: keycloak
issuer: <keycloakURL>/realms/<realm>
clientID: <clientID>
clientSecret: $argo-cd-client-secret:oidc.keycloak.clientSecret

Casdoor

argo-cd-values.yaml
configs:
cm:
oidc.config: |
name: casdoor
issuer: <casdoorURL>
clientID: <clientID>
clientSecret: $argo-cd-client-secret:oidc.casdoor.clientSecret

Dex

Example connectors

redirectURIargocd-cm<.data.url>/api/dex/callback으로 자동 설정 되기 때문에 따로 설정하지 않아도 됩니다.

argo-cd-values.yaml
configs:
cm:
# argo-cd의 외부 접속 주소입니다.
url: <argoCDURL>

dex.config: |
connectors:
- type: <type>
id: <id>
name: <name>
config:
<key>: <value>

Github

  • (User or Organization)Settings - Developer settings - OAuth Apps - New Oauth App
  • Homepage URL:
  • Authorization callback URL: https://<host>/api/dex/callback
argo-cd-values.yaml
configs:
cm:
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: <clientID>
clientSecret: $argo-cd-client-secret:dex.github.clientSecret
# 팀 이름은 name과 slug가 있습니다.
# name은 github에서 설정한 이름 그대로 사용하고, slug는 소문자와 `-`만으로 변환된 이름입니다.
# Ex) lol-iot:R&D -> lol-iot:r-d
teamNameField: both
orgs:
- name: <org>
# teams를 선언하지 않으면 모든 팀에 대한 접근을 허용합니다.
# teams:
# - <team>

인가(Authz)

Argo CD는 casbin RBAC를 사용하여 권한을 제어합니다.

argo-cd-values.yaml
configs:
rbac:
# https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/rbac.md
policy.csv: |
p, <role/user/group>, <resource>, <action>, <object>
p, <role/user/group>, <resource>, <action>, <appproject>/<object>

g, <role/user/group>, role:<role>

# role:readonly, role:admin
# https://github.com/argoproj/argo-cd/blob/master/assets/builtin-policy.csv
policy.default: "role:readonly"

# "sub" 외에 추가로 인식할 수 있는 값을 추가합니다. 기본 값은 "[groups]"입니다.
scopes: "[groups, preferred_username, email]"

# glob or regex
policy.matchMode: "glob"