사용자 관리
사용자 관리 (User Management)
Argo CD를 설치하면 시스템에 대한 전체 접근 권한을 가진 내장 admin 사용자가 생성됩니다. admin 사용자는 초기 설정에만 사용하고, 이후에는 로컬 사용자로 전환하거나 SSO 통합을 구성하는 것을 권장합니다. 이 문서는 로컬 사용자/계정과 SSO(Dex, OIDC) 구성 방법을 다룹니다.
출처: 문서
본문
개요
Argo CD를 설치하면 시스템에 대한 전체 접근 권한을 가진 내장 admin 사용자가 하나 있습니다. admin 사용자는 초기 구성에만 사용하고, 이후에는 로컬 사용자로 전환하거나 SSO 통합을 구성하는 것을 권장합니다.
로컬 사용자/계정
로컬 사용자/계정 기능은 두 가지 주요 사용 사례를 제공합니다:
- Argo CD 관리 자동화를 위한 인증 토큰. 제한된 권한을 가진 API 계정을 구성하고 인증 토큰을 생성할 수 있습니다. 이런 토큰은 애플리케이션, 프로젝트 등을 자동으로 생성하는 데 사용할 수 있습니다.
- SSO 통합이 과하다고 여겨질 수 있는 아주 작은 팀을 위한 추가 사용자. 로컬 사용자는 그룹, 로그인 이력 같은 고급 기능을 제공하지 않습니다. 따라서 이런 기능이 필요하다면 SSO를 사용하는 것을 강력히 권장합니다.
참고: 로컬 사용자를 만들 때 각 사용자에 대해 추가 RBAC 규칙을 설정해야 합니다. 그렇지 않으면 argocd-rbac-cm ConfigMap의 policy.default 필드로 지정된 기본 정책으로 돌아갑니다.
로컬 계정 사용자 이름의 최대 길이는 32입니다.
새 사용자 생성
새 사용자는 argocd-cm ConfigMap에 정의해야 합니다:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
# add an additional local user with apiKey and login capabilities
# apiKey - allows generating API keys
# login - allows to login using UI
accounts.alice: apiKey, login
# disables user. User is enabled by default
accounts.alice.enabled: "false"
각 사용자는 두 가지 기능을 가질 수 있습니다:
- apiKey — API 접근을 위한 인증 토큰 생성을 허용합니다.
- login — UI를 사용한 로그인을 허용합니다.
사용자 삭제
사용자를 삭제하려면 argocd-cm ConfigMap에 정의된 해당 항목을 제거해야 합니다.
예시:
kubectl patch -n argocd cm argocd-cm --type='json' -p='[{"op": "remove", "path": "/data/accounts.alice"}]'
argocd-secret 시크릿의 비밀번호 항목도 제거하는 것을 권장합니다.
예시:
kubectl patch -n argocd secrets argocd-secret --type='json' -p='[{"op": "remove", "path": "/data/accounts.alice.password"}]'
admin 사용자 비활성화
추가 사용자가 생성되면 admin 사용자를 비활성화하는 것을 권장합니다:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
admin.enabled: "false"
사용자 관리
Argo CD CLI는 사용자 비밀번호 설정과 토큰 생성에 필요한 명령어 세트를 제공합니다.
- 전체 사용자 목록 가져오기
argocd account list
- 특정 사용자 세부 정보 가져오기
argocd account get --account <username>
- 사용자 비밀번호 설정
# if you are managing users as the admin user, <current-user-password> should be the current admin password.
argocd account update-password \
--account <name> \
--current-password <current-user-password> \
--new-password <new-user-password>
- 인증 토큰 생성
# if flag --account is omitted then Argo CD generates token for current user
argocd account generate-token --account <username>
실패한 로그인 속도 제한
Argo CD는 비밀번호 무차별 대입(brute-force)을 방지하기 위해 너무 많이 실패하면 로그인 시도를 거부합니다. 스로틀링 설정을 제어할 수 있는 환경 변수는 다음과 같습니다:
ARGOCD_SESSION_FAILURE_MAX_FAIL_COUNT: Argo CD가 로그인 시도를 거부하기 시작하기 전까지 허용되는 최대 실패 로그인 횟수. 기본값: 5.ARGOCD_SESSION_FAILURE_WINDOW_SECONDS: 실패 창(failure window)의 초 수. 기본값: 300(5분). 0으로 설정하면 실패 창이 비활성화되고, 발생한 시간대와 무관하게 10회 연속 로그인 실패 후 로그인 시도가 거부됩니다.ARGOCD_SESSION_MAX_CACHE_SIZE: 캐시에 허용되는 최대 항목 수. 기본값: 1000.ARGOCD_MAX_CONCURRENT_LOGIN_REQUESTS_COUNT: 최대 동시 로그인 요청 수를 제한합니다. 0으로 설정하면 제한이 비활성화됩니다. 기본값: 50.
SSO
SSO를 구성하는 방법은 두 가지가 있습니다:
- 번들된 Dex OIDC 프로바이더 — 현재 프로바이더가 OIDC를 지원하지 않거나(예: SAML, LDAP), Dex의 커넥터 기능(예: GitHub 조직과 팀을 OIDC 그룹 클레임에 매핑하는 기능)을 활용하려면 이 옵션을 사용하세요. Dex는 OIDC도 직접 지원하며, 그룹을 IDToken에 포함할 수 없을 때 ID 제공자에서 사용자 정보를 가져올 수 있습니다.
- 기존 OIDC 프로바이더 — 이미 사용 중인 OIDC 프로바이더(예: Okta, OneLogin, Auth0, Microsoft, Keycloak, Google(G Suite))가 있다면 이것을 사용하세요. 이 경우 사용자, 그룹, 멤버십을 직접 관리합니다.
Dex
Argo CD는 인증을 외부 ID 제공자에 위임하기 위해 설치의 일부로 Dex를 임베드하고 번들로 포함합니다. 여러 유형의 ID 제공자(OIDC, SAML, LDAP, GitHub 등)가 지원됩니다. Argo CD의 SSO 구성은 argocd-cm ConfigMap에 Dex 커넥터 설정을 편집하는 것이 필요합니다.
이 문서는 GitHub(OAuth2)를 예시로 Argo CD SSO를 구성하는 방법을 설명하지만, 다른 ID 제공자에도 절차는 유사합니다.
1. ID 제공자에 애플리케이션 등록
GitHub에서 새로운 애플리케이션을 등록하세요. 콜백 주소는 Argo CD URL의 /api/dex/callback 엔드포인트여야 합니다(예: https://argocd.example.com/api/dex/callback).
앱을 등록하면 OAuth2 클라이언트 ID와 시크릿을 받게 됩니다. 이 값들을 Argo CD configmap에 입력합니다.
2. SSO용 Argo CD 구성
argocd-cm configmap을 편집하세요:
kubectl edit configmap argocd-cm -n argocd
url키에 Argo CD의 기본 URL을 입력합니다. 이 예시에서는https://argocd.example.com입니다.- (선택 사항): Argo CD가 여러 기본 URL로 접근 가능해야 한다면
additionalUrls키로 추가 기본 URL을 지정할 수 있습니다. dex.config키의connectors하위 필드에github커넥터를 추가하세요. 필드에 대한 설명은 Dex의 GitHub 커넥터 문서를 참조하세요. 최소 구성은 1단계에서 생성한 clientID, clientSecret을 채우는 것입니다.- 로그인을 하나 이상의 GitHub 조직으로 제한하고 싶을 것입니다.
connectors.config.orgs목록에 하나 이상의 GitHub 조직을 추가하세요. 그러면 조직의 모든 멤버가 Argo CD에 로그인하여 관리 작업을 수행할 수 있습니다.
data:
url: https://argocd.example.com
dex.config: |
connectors:
# GitHub example
- type: github
id: github
name: GitHub
config:
clientID: aabbccddeeff00112233
clientSecret: $dex.github.clientSecret # Alternatively $<some_K8S_secret>:dex.github.clientSecret
orgs:
- name: your-github-org
# GitHub enterprise example
- type: github
id: acme-github
name: Acme GitHub
config:
hostName: github.acme.example.com
clientID: abcdefghijklmnopqrst
clientSecret: $dex.acme.clientSecret # Alternatively $<some_K8S_secret>:dex.acme.clientSecret
orgs:
- name: your-github-org
저장하면 변경 사항이 자동으로 적용됩니다.
참고:
- dex 문서에 나온 대로
connectors.config에redirectURI를 설정할 필요가 없습니다. Argo CD는 OAuth2 커넥터에 맞는 올바른 외부 콜백 URL(예:https://argocd.example.com/api/dex/callback)과 일치하도록 자동으로 올바른redirectURI를 사용합니다. - 기본적으로
dex.acme.clientSecret같은Secret키는argocd-secret에서 조회됩니다. 다른 시크릿을 사용하려면(위 예시의some_K8S_secret) 그 시크릿에app.kubernetes.io/part-of: argocd라벨이 있어야 합니다.
DEX와 OIDC 구성
ArgoCD가 직접 인증하는 대신 Dex를 OIDC 인증에 사용할 수 있습니다. 이는 UserInfo 엔드포인트에서 정보를 가져오고 페더레이션 토큰을 가져오는 것 같은 별도의 기능 세트를 제공합니다.
구성:
argocd-cmConfigMap의dex.config안에 있는connectors하위 필드에OIDC커넥터를 추가하세요. 유용할 수 있는 다른 구성 옵션은 Dex의 OIDC 커넥트 문서를 참조하세요. 여기서는 최소 구성만 사용하겠습니다.- issuer URL은 Dex가 OIDC 제공자와 통신하는 곳이어야 합니다. 이 URL 아래에는 보통 제공자가 지원하는 정보를 담은
.well-known/openid-configuration이 있습니다. 예: https://accounts.google.com/.well-known/openid-configuration
data:
url: "https://argocd.example.com"
dex.config: |
connectors:
# OIDC
- type: oidc
id: oidc
name: OIDC
config:
issuer: https://example-OIDC-provider.example.com
clientID: aaaabbbbccccddddeee
clientSecret: $dex.oidc.clientSecret
참고: Argo CD의 OIDC 토큰 갱신(기존 OIDC 프로바이더의 refreshTokenThreshold 참조)은 Dex의 임베디드 웹 로그인 흐름에는 적용되지 않습니다. Dex가 발급한 ID 토큰이 만료되면 refreshTokenThreshold가 설정되어 있어도 사용자는 다시 로그인해야 합니다.
추가 ID 토큰 클레임 요청
기본적으로 Dex는 profile과 email 스코프만 검색합니다. 더 많은 클레임을 검색하려면 Dex 구성의 scopes 항목 아래에 추가하면 됩니다. Dex를 통한 그룹 클레임을 활성화하려면 insecureEnableGroups도 활성화해야 합니다. 그룹 정보는 현재 인증 시점에만 갱신되며, 더 동적으로 그룹 정보를 갱신하는 지원은 dexidp/dex#1065에서 추적할 수 있습니다.
data:
url: "https://argocd.example.com"
dex.config: |
connectors:
# OIDC
- type: oidc
id: oidc
name: OIDC
config:
issuer: https://example-OIDC-provider.example.com
clientID: aaaabbbbccccddddeee
clientSecret: $dex.oidc.clientSecret
insecureEnableGroups: true
scopes:
- profile
- email
- groups
경고: 그룹 정보는 인증 시점에만 갱신되므로, 그룹에서 계정을 추가하거나 제거해도 사용자가 다시 인증하기 전까지 멤버십이 바뀌지 않습니다. 조직의 필요에 따라 이는 보안 위험이 될 수 있으며, 인증 토큰의 수명을 변경하여 완화할 수 있습니다.
토큰에 없는 클레임 검색
IDP가 IDToken에서 특정 클레임을 지원하지 않거나 지원할 수 없을 때, UserInfo 엔드포인트를 사용해 별도로 검색할 수 있습니다. Dex는 getUserInfo 엔드포인트를 사용해 이 기능을 지원합니다. IDToken에서 지원되지 않는 가장 흔한 클레임은 groups 클레임이며, getUserInfo와 insecureEnableGroups 둘 다 true로 설정해야 합니다.
data:
url: "https://argocd.example.com"
dex.config: |
connectors:
# OIDC
- type: oidc
id: oidc
name: OIDC
config:
issuer: https://example-OIDC-provider.example.com
clientID: aaaabbbbccccddddeee
clientSecret: $dex.oidc.clientSecret
insecureEnableGroups: true
scopes:
- profile
- email
- groups
getUserInfo: true
기존 OIDC 프로바이더
인증을 기존 OIDC 프로바이더에 위임하도록 Argo CD를 구성하려면, argocd-cm ConfigMap의 oidc.config 키 아래에 OAuth2 구성을 추가하세요:
data:
url: https://argocd.example.com
oidc.config: |
name: Okta
issuer: https://dev-123456.oktapreview.com
clientID: aaaabbbbccccddddeee
clientSecret: $oidc.okta.clientSecret
# Optional list of allowed aud claims. If omitted or empty, defaults to the clientID value above (and the
# cliClientID, if that is also specified). If you specify a list and want the clientID to be allowed, you must
# explicitly include it in the list.
# Token verification will pass if any of the token's audiences matches any of the audiences in this list.
allowedAudiences:
- aaaabbbbccccddddeee
- qqqqwwwweeeerrrrttt
# Optional. If false, tokens without an audience will always fail validation. If true, tokens without an audience
# will always pass validation.
# Defaults to true for Argo CD < 2.6.0. Defaults to false for Argo CD >= 2.6.0.
skipAudienceCheckWhenTokenHasNoAudience: true
# Optional set of OIDC scopes to request. If omitted, defaults to: ["openid", "profile", "email", "groups"]
requestedScopes: ["openid", "profile", "email", "groups"]
# Optional set of OIDC claims to request on the ID token.
requestedIDTokenClaims: {"groups": {"essential": true}}
# Some OIDC providers require a separate clientID for different callback URLs.
# For example, if configuring Argo CD with self-hosted Dex, you will need a separate client ID
# for the 'localhost' (CLI) client to Dex. This field is optional. If omitted, the CLI will
# use the same clientID as the Argo CD server
cliClientID: vvvvwwwwxxxxyyyyzzzz
# PKCE is an OIDC extension to prevent authorization code interception attacks.
# Make sure the identity provider supports it and that it is activated for Argo CD OIDC client.
# Default is false.
enablePKCEAuthentication: true
# Optional. Argo CD uses this threshold to refresh an OIDC ID token before it expires, using the
# cached refresh token, so the session isn't interrupted. Must be shorter than the ID
# token's lifetime, or a new token will be requested on every request.
# Default is 0s.
refreshTokenThreshold: 30s
참고: 콜백 주소는 Argo CD URL의 /auth/callback 엔드포인트여야 합니다(예: https://argocd.example.com/auth/callback).
추가 ID 토큰 클레임 요청
모든 OIDC 프로바이더가 특별한 groups 스코프를 지원하는 것은 아닙니다. 예를 들어 Okta, OneLogin, Microsoft는 특별한 groups 스코프를 지원하며 기본 requestedScopes로 그룹 멤버십을 반환합니다.
다른 OIDC 프로바이더는 명시적으로 요청하면 그룹 멤버십이 있는 클레임을 반환할 수도 있습니다. 개별 클레임은 requestedIDTokenClaims로 요청할 수 있습니다. 자세한 내용은 OpenID Connect Claims Parameter를 참조하세요. Argo CD의 클레임 구성은 다음과 같습니다:
oidc.config: |
requestedIDTokenClaims:
email:
essential: true
groups:
essential: true
value: org:myorg
acr:
essential: true
values:
- urn:mace:incommon:iap:silver
- urn:mace:incommon:iap:bronze
간단한 경우에는 다음과 같을 수 있습니다:
oidc.config: |
requestedIDTokenClaims: {"groups": {"essential": true}}
토큰에 없을 때 그룹 클레임 검색
일부 OIDC 프로바이더는 requestedIDTokenClaims 설정으로 명시적으로 요청해도(예: Okta) ID 토큰에 사용자의 그룹 정보를 반환하지 않습니다. 대신 user info 엔드포인트에서 그룹을 제공합니다. 다음 구성으로 Argo CD는 로그인 중 user info 엔드포인트를 조회해 사용자의 그룹 정보를 가져옵니다:
oidc.config: |
enableUserInfoGroups: true
userInfoPath: /userinfo
userInfoURL: "https://users.example.com"
userInfoCacheExpiration: "5m"
참고: userInfoCacheExpiration 설정을 생략하거나 ID 토큰의 만료보다 크게 설정하면, argocd-server는 ID 토큰이 유효한 동안 그룹 정보를 캐시합니다!
OIDC 프로바이더용 커스텀 로그아웃 URL 구성
선택 사항으로, OIDC 프로바이더가 로그아웃 API를 노출하고 로그아웃 후 활성 세션을 무효화하기 위해 커스텀 로그아웃 URL을 구성하려면 다음과 같이 지정할 수 있습니다:
oidc.config: |
name: example-OIDC-provider
issuer: https://example-OIDC-provider.example.com
clientID: xxxxxxxxx
clientSecret: xxxxxxxxx
requestedScopes: ["openid", "profile", "email", "groups"]
requestedIDTokenClaims: {"groups": {"essential": true}}
logoutURL: https://example-OIDC-provider.example.com/logout?id_token_hint={{token}}
기본적으로 이렇게 하면 로그아웃 후 사용자가 OIDC 프로바이더의 로그인 페이지로 이동합니다. 로그아웃 후 사용자를 Argo CD로 다시 리다이렉트하려면 로그아웃 URL을 다음과 같이 지정할 수 있습니다:
...
logoutURL: https://example-OIDC-provider.example.com/logout?id_token_hint={{token}}&post_logout_redirect_uri={{logoutRedirectURL}}
logoutRedirectURL은 ArgoCD가 알아서 기본 ArgoCD url + Rootpath로 생성하므로 지정할 필요가 없습니다.
참고: post logout redirect URI는 ArgoCD용 OIDC 프로바이더의 클라이언트 설정에서 허용 목록(whitelist)에 추가해야 할 수 있습니다.
토큰 폐기와 세션 관리
Argo CD는 사용자가 로그아웃할 때 보안을 강화하기 위해 서버 사이드 토큰 폐기(revocation)를 구현합니다. 이는 Dex나 다른 OIDC 프로바이더를 사용하는 SSO 구성에서 특히 중요합니다.
토큰 폐기 동작 방식
사용자가 로그아웃하면(UI 또는 CLI의 argocd logout을 통해) Argo CD는:
- 서버의 토큰 무효화: 토큰이 Redis에 저장된 폐기 목록(revocation list)에 추가됩니다.
- 로컬 토큰 제거: 토큰이 로컬 구성에서 제거됩니다.
- OIDC 프로바이더로 리다이렉트(구성된 경우): SSO 세션을 종료하기 위해 사용자가 OIDC 프로바이더의 로그아웃 URL로 리다이렉트됩니다.
폐기된 토큰은 아직 만료되지 않았더라도 API 호출에 사용할 수 없습니다. 이로써 다음을 방지합니다:
- 로그아웃 후 무단 접근
- 토큰이 손상된 경우 토큰 재사용
- 토큰이 자동으로 무효화되지 않는 Dex SSO의 보안 허점
우아한 성능 저하(Graceful Degradation)
argocd logout 명령어는 서버에 접근할 수 없는 시나리오를 우아하게 처리합니다:
$ argocd logout my-argocd-server
WARN[0000] Failed to invalidate token on server: connection refused. Proceeding with local logout.
Logged out from 'my-argocd-server'
이를 통해 서버가 다운되어도 사용자가 로컬로 로그아웃할 수 있지만, 토큰은 자연스럽게 만료될 때까지 서버 측에서 폐기되지는 않습니다.
보안 모범 사례
- 수명이 짧은 토큰 사용: OIDC 프로바이더에서 합리적인 토큰 만료 시간을 구성하여 노출 창을 제한하세요.
- 로그아웃 URL 활성화: OIDC 프로바이더용
oidc.config에logoutURL을 구성하여 SSO 세션도 종료되도록 하세요. - 토큰 사용 모니터링: Argo CD의 감사 로깅을 사용해 토큰 생성 및 폐기 이벤트를 추적하세요.
OIDC 프로바이더와 통신하기 위한 커스텀 루트 CA 인증서 구성
OIDC 프로바이더가 잘 알려진 인증 기관 중 하나가 서명하지 않은 인증서로 설정되어 있다면, 통신 시 OIDC 프로바이더의 TLS 인증서 검증에 사용될 커스텀 인증서를 제공할 수 있습니다.
oidc.config에 PEM으로 인코딩된 루트 인증서가 담긴 rootCA를 추가하세요:
oidc.config: |
...
rootCA: |
-----BEGIN CERTIFICATE-----
... encoded certificate data here ...
-----END CERTIFICATE-----
SSO 추가 읽을거리
민감한 데이터와 SSO 클라이언트 시크릿
argocd-secret은 ArgoCD가 참조할 수 있는 민감한 데이터를 저장하는 데 사용할 수 있습니다. configmap에서 $로 시작하는 값은 다음과 같이 해석됩니다:
- 값의 형식이
$<secret>:a.key.in.k8s.secret이면, 이름이<secret>($제외)인 k8s 시크릿을 찾아 그 값을 읽습니다. - 그 외에는
argocd-secret이라는 k8s 시크릿의 키를 찾습니다.
예시
SSO clientSecret은 다음과 같은 매니페스트로 Kubernetes 시크릿에 저장할 수 있습니다.
argocd-secret:
apiVersion: v1
kind: Secret
metadata:
name: argocd-secret
namespace: argocd
labels:
app.kubernetes.io/name: argocd-secret
app.kubernetes.io/part-of: argocd
type: Opaque
data:
...
# The secret value must be base64 encoded **once**
# this value corresponds to: `printf "hello-world" | base64`
oidc.auth0.clientSecret: "aGVsbG8td29ybGQ="
...
argocd-cm:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
...
oidc.config: |
name: Auth0
clientID: aabbccddeeff00112233
# Reference key in argocd-secret
clientSecret: $oidc.auth0.clientSecret
...
대안
argocd-secret 대신 민감한 데이터를 다른 Kubernetes Secret에 저장하고 싶을 수 있습니다. configmap이나 secret의 값이 $로 시작할 때마다 ArgoCD는 Kubernetes Secret의 data 아래 키와 해당하는 키를 확인합니다. 형식은 $<k8s_secret_name>:<a_key_in_that_k8s_secret>입니다.
참고: 시크릿에는 app.kubernetes.io/part-of: argocd 라벨이 있어야 합니다.
예시
another-secret:
apiVersion: v1
kind: Secret
metadata:
name: another-secret
namespace: argocd
labels:
app.kubernetes.io/part-of: argocd
type: Opaque
data:
...
# Store client secret like below.
# Ensure the secret is base64 encoded
oidc.auth0.clientSecret: <client-secret-base64-encoded>
...
argocd-cm:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
...
oidc.config: |
name: Auth0
clientID: aabbccddeeff00112233
# Reference key in another-secret (and not argocd-secret)
clientSecret: $another-secret:oidc.auth0.clientSecret # Mind the ':'
...
OIDC 프로바이더 연결에서 인증서 검증 건너뛰기
기본적으로 API 서버가 OIDC 프로바이더(외부 프로바이더 또는 번들된 Dex 인스턴스)로 하는 모든 연결은 인증서 검증을 통과해야 합니다. 이러한 연결은 OIDC 프로바이더의 well-known 구성을 가져올 때, OIDC 프로바이더의 키를 가져올 때, 그리고 OIDC 로그인 흐름의 일부로 인가 코드를 교환하거나 ID 토큰을 검증할 때 발생합니다.
다음과 같은 경우 인증서 검증을 비활성화하는 것이 합리적일 수 있습니다:
- 번들된 Dex 인스턴스를 사용하면서 Argo CD 인스턴스에 자체 서명 인증서로 TLS가 구성되어 있고, OIDC 프로바이더 인증서 검증을 건너뛰는 위험을 이해하고 수용한다면.
- 외부 OIDC 프로바이더를 사용하면서 그 프로바이더가 유효하지 않은 인증서를 사용하고
oidcConfig.rootCA를 설정해 문제를 해결할 수 없고, OIDC 프로바이더 인증서 검증을 건너뛰는 위험을 이해하고 수용한다면.
둘 중 하나라도 해당된다면 argocd-cm ConfigMap에서 oidc.tls.insecure.skip.verify를 "true"로 설정하여 OIDC 프로바이더 인증서 검증을 비활성화할 수 있습니다.