From c6171f73df8b30abc574c7794427234731a07b34 Mon Sep 17 00:00:00 2001 From: kaffa Date: Sat, 11 Jul 2026 13:04:58 +0900 Subject: [PATCH] =?UTF-8?q?n8n:=20OIDC=20SSO=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EB=AF=B8=EB=85=B8=EC=B6=9C=20=EB=B2=84=EA=B7=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D,=20envFrom=20=EB=88=84=EB=9D=BD=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EB=B0=8F=20Helm=20=EB=93=9C=EB=A6=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?=EC=9C=84=ED=97=98=20=EB=AC=B8=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-07-11-n8n-oidc-secret-not-wired.md | 46 +++++++++++++++++++ services/n8n.md | 9 +++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 history/2026-07-11-n8n-oidc-secret-not-wired.md diff --git a/history/2026-07-11-n8n-oidc-secret-not-wired.md b/history/2026-07-11-n8n-oidc-secret-not-wired.md new file mode 100644 index 0000000..c2c0592 --- /dev/null +++ b/history/2026-07-11-n8n-oidc-secret-not-wired.md @@ -0,0 +1,46 @@ +--- +title: n8n OIDC SSO 버튼 미노출 (envFrom 누락) +updated: 2026-07-11 +tags: [history, incident, n8n, oidc] +--- + +## 증상 + +`https://n8n.inouter.com` 접속 시 HTTP 200으로 페이지는 뜨지만 "Sign in with SSO" 버튼 없이 로컬 이메일/비밀번호 폼만 표시됨. `/assets/oidc-frontend-hook.js` 요청 시 404. + +[[2026-07-11-pgpool-stale-primary-n8n-outage|pgpool 장애]] 복구 직후 사용자가 "빈 화면만 나온다"고 보고 — 재현해보니 실제로는 정상 로드되었고(pgpool 복구 직후라 캐시/타이밍 이슈로 추정), 대신 이 SSO 버그를 발견. + +## 원인 + +n8n 로그: `[OIDC Hook] Missing configuration: OIDC_CLIENT_ID, OIDC_CLIENT_SECRET. OIDC disabled.` + +`OIDC_CLIENT_ID`/`OIDC_CLIENT_SECRET`은 `n8n-oidc-secret` Secret에 존재하지만, n8n Deployment의 `envFrom`은 `n8n-app-config`(ConfigMap) + `n8n-app-secret`(Secret, DB 비밀번호만 포함)만 참조 — `n8n-oidc-secret`이 어디에도 연결되어 있지 않았음. + +[[../services/n8n#배포-구조-—-helm--수동-패치-혼재-주의|n8n.md]] 참조 — OIDC 관련 리소스는 Helm chart values 외부에서 수동으로 추가된 구조라 `helm get values`로는 안 보임. 최초 OIDC 세팅 시([[../services/n8n]] 작성일 2026-04-16 추정) `n8n-oidc-secret`을 만들고 hooks ConfigMap/volume은 연결했지만 envFrom 배선을 빠뜨린 것으로 보임 — 즉 **OIDC SSO가 처음부터 한 번도 정상 동작한 적이 없었을 가능성**. + +## 조치 + +```bash +kubectl -n n8n patch deployment n8n --type=json -p='[{"op": "add", "path": "/spec/template/spec/containers/0/envFrom/-", "value": {"secretRef": {"name": "n8n-oidc-secret"}}}]' +``` + +재기동 후 로그 확인: +``` +[OIDC Hook] Initializing OIDC authentication... +[OIDC Hook] OIDC routes registered: + - GET /auth/oidc/login + - GET /auth/oidc/callback + - GET /assets/oidc-frontend-hook.js +``` + +브라우저에서 "Sign in with SSO" 버튼 노출 확인 완료. (kubectl patch만 적용 — Helm 값에는 반영 안 됨, 위 드리프트 위험 참조) + +## TODO + +- [ ] 실제 Gitea OIDC 로그인 플로우 end-to-end 테스트 (버튼만 확인했고 로그인 자체는 미검증) +- [ ] helm upgrade 시 이 patch가 유지되는지 확인 절차 필요 — 가능하면 `main.extraEnvFrom` 같은 chart 지원 값으로 이전 검토, 안 되면 최소한 upgrade 후 체크리스트에 추가 + +## 관련 + +- [[../services/n8n]] +- [[2026-07-11-pgpool-stale-primary-n8n-outage]] diff --git a/services/n8n.md b/services/n8n.md index 6cbdebf..7cd3388 100644 --- a/services/n8n.md +++ b/services/n8n.md @@ -1,6 +1,6 @@ --- title: n8n -updated: 2026-04-16 +updated: 2026-07-11 tags: [services, n8n, oidc, gitea] --- @@ -42,6 +42,13 @@ EXTERNAL_FRONTEND_HOOKS_URLS=/assets/oidc-frontend-hook.js - confidential client: yes - Gitea admin → Settings → Applications 에서 관리 +### 배포 구조 — Helm + 수동 패치 혼재 (주의) + +n8n은 Helm release(`n8n-2.0.1`, chart 자체는 OIDC 애드온 미지원)로 설치되어 있으나, OIDC 관련 리소스(`n8n-oidc-secret`, `n8n-oidc-hooks` ConfigMap, `n8n-app-config`의 OIDC 관련 키, hooks volume mount, `envFrom` 항목)는 설치 후 `kubectl apply`/`kubectl patch`로 **Helm 값 외부에서 수동 추가**됨. `helm get values n8n`에는 이 내용이 전혀 안 보임. + +- **드리프트 위험**: `helm upgrade`를 values 변경 없이 재실행하면 Deployment가 chart 템플릿대로 재렌더링되면서 수동 patch (`envFrom`의 `n8n-oidc-secret` secretRef 등)가 **되돌아갈 수 있음**. OIDC 관련 변경 후에는 반드시 `kubectl -n n8n get deployment n8n -o yaml`로 envFrom/volumeMounts 유지 여부 확인할 것. +- `envFrom` 순서(2026-07-11 기준): `configMapRef n8n-app-config` → `secretRef n8n-app-secret` → `secretRef n8n-oidc-secret` + ### 동작 1. n8n 로그인 페이지에 "Sign in with SSO" 버튼 표시