fix(deploy): let the production image and compose run OIDC - #1020
Merged
Merged
Conversation
yeongseon
reviewed
Oct 4, 2026
yeongseon
left a comment
Collaborator
There was a problem hiding this comment.
리뷰 (코멘트, 승인 아님 — R3).
결정에 동의합니다: OIDC 를 켤 수 있게 배관만 놓고, 켜지는 않습니다. 멀티유저는 #1014·#1008 과 env_keys 를 담은 kpubdata 릴리스(10월 정기 릴리스) 뒤에 켭니다. 빈 값이면 OIDC 가 꺼진 채라는 테스트가 있어 기존 배포에 영향이 없습니다.
- #1012 와
.env.app.example·docker-compose.prod.app.yml의 같은 자리를 고칩니다. 하나가 먼저 들어가면 다른 쪽은 리베이스가 필요합니다. - 본문이 남긴 두 가지 —
deploy.yml의.env렌더,docker.yml의 cubrid 변형 이미지에authextra — 는 워크플로 push 권한이 있는 계정이 따로 고쳐야 합니다.
yeongseon
approved these changes
Oct 4, 2026
yeongseon
left a comment
Collaborator
There was a problem hiding this comment.
승인합니다. 앞선 리뷰 코멘트 그대로입니다.
Refs #992 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eomdahyeon
force-pushed
the
fix/issue-992-oidc-deploy-plumbing
branch
from
October 4, 2026 14:42
95f2107 to
b906ae1
Compare
yeongseon
added a commit
that referenced
this pull request
Oct 5, 2026
Refs #992 ## 문제 #1020 이 기본 이미지의 `EXTRAS` 를 `publish auth` 로 바꿨지만, `docker.yml` 의 CUBRID 변형은 `EXTRAS=publish cubrid` 로 빌드한다. build-arg 는 Dockerfile 의 기본값에 더해지는 것이 아니라 통째로 덮어쓰므로, `:cubrid` 이미지에는 `pyjwt` 가 없고 `OIDC_ISSUER` 를 설정하면 기동을 거부한다. #1020 본문이 남긴 항목이고, 워크플로 파일이라 작성자 계정으로는 고칠 수 없었다. ## 변경 - `docker.yml`: `EXTRAS=publish auth cubrid`, 그리고 왜 기본 extra 를 다시 적어야 하는지 주석. - `tests/unit/test_prod_oidc_plumbing.py`: 워크플로의 모든 `EXTRAS=` 변형이 Dockerfile 기본값의 extra 를 전부 포함하는지. 기본값에 extra 가 추가되면 변형도 따라가야 한다. - CHANGELOG `[Unreleased]` Fixed. ## 하지 않은 것 — 그래서 `Refs` `deploy.yml` 이 OIDC 변수를 `.env` 로 렌더하는 부분은 손대지 않았다. 배포 대상이 정해지지 않았다. ## 검증 - 새 테스트 함수를 `python3` 로 직접 호출: 통과. `docker.yml` 변경을 되돌리면 `AssertionError` 로 실패한다 (확인함). - `ruff check`, `ruff format --check`, `check_english_comments.py` 통과. - **pytest 로는 돌리지 못했고, 이미지를 실제로 빌드하지도 않았다.** `:cubrid` 이미지는 `main` push 에서만 빌드되므로 이 PR 의 CI 는 `import jwt` 를 확인하지 못한다. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2 of 3 tasks
yeongseon
pushed a commit
that referenced
this pull request
Oct 6, 2026
…1057) ## 무엇을 #992 의 남은 항목 가운데 "OIDC 설정으로 `serve` 기동 → `/healthz` 200" 스모크를 더합니다. 테스트 파일 하나와 CHANGELOG 뿐이고, 서비스 코드는 바꾸지 않았습니다. ## 어떻게 `tests/unit/test_oidc_start_smoke.py` 가 실제 `serve` 명령을 별도 프로세스로 띄웁니다. 환경은 다중 사용자 프로필입니다. ``` OIDC_ISSUER, OIDC_AUDIENCE, KPUBDATA_BUILDER_ADMIN_SUBJECTS=<issuer>|<sub>, KPUBDATA_BUILDER_REQUIRE_OWN_PROVIDER_CREDENTIAL=true ``` `DEV_MODE`, `API_KEY`, `CREDENTIAL_MASTER_KEY` 는 테스트 실행 환경에 있더라도 빼고 띄웁니다. - 프로세스가 뜨고 `GET /healthz` → 200 `{"status": "ok"}` - 토큰 없이 `/providers`, `/builds`, `/version` → 401 `unauthorized` - 검증할 수 없는 토큰 → 401 또는 503 `auth_unavailable` (통과시키지 않음) - 부정: `OIDC_AUDIENCE` 가 없거나 `ADMIN_SUBJECTS` 가 없으면 "refusing to start" 로 종료 kpubdata 0.9.0 pin(#1050) 덕에 가능해졌습니다 — `REQUIRE_OWN_PROVIDER_CREDENTIAL` 이 켜져 있으면 `serve` 는 `env_keys` 를 모르는 kpubdata 에서 기동을 거부합니다(#990). ## 한계 - IdP 에 닿지 않습니다(`idp.invalid`). **서비스가 뜨고 닫혀 있다**는 것만 보이고, 로그인이 된다는 것은 보이지 않습니다. 수용 기준의 "실 Keycloak 토큰으로 `GET /providers` 200" 은 실제 realm 이 정해진 뒤의 일입니다. - 컨테이너나 compose 를 띄우지 않습니다. 이미지·compose 의 변수 전달은 `test_prod_oidc_plumbing.py` 가 파일로 확인합니다. - 손으로 띄웠을 때 본 것: 토큰이 없을 때의 401 문구가 OIDC 배포에서도 `api key not configured` 입니다. 동작은 맞고 문구만 어색합니다. 이 PR 에서는 건드리지 않았습니다. ## #992 수용 기준 대조 - [x] 배포 이미지에서 `import jwt` — #1020, #1033 - [x] OIDC 변수가 있는 프로필이 CI 에서 기동 스모크를 통과 — **이 PR** (프로세스 기동 기준. 컨테이너 기동은 아님) - [ ] 실 Keycloak 토큰으로 `GET /providers` 200 — 배포 대상·realm 결정 필요 ## 검증 - 새 파일 5건 통과 (약 5초), `ruff`, `mypy` 통과 - 전체 단위 스위트는 로컬에서 돌리지 않았습니다(테스트 추가만). CI 에 맡깁니다. Refs #992 (닫지 않습니다) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Eomdahyeon <213566566+Eomdahyeon@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #992
결정
이슈가 "먼저 정할 것 (사람)"으로 둔 두 가지:
docs/deploy.md에 적었다.변경 내용
Dockerfile: 기본EXTRAS를publish→publish auth. 기본 이미지에pyjwt가 들어간다.docker-compose.prod.app.yml:OIDC_ISSUER,OIDC_AUDIENCE,OIDC_ALLOWED_HD/SUBJECTS/EMAILS,KPUBDATA_BUILDER_ADMIN_SUBJECTS,KPUBDATA_BUILDER_AUTH_FAILURE_LIMIT를.env에서 넘긴다(기본 빈 값)..env.app.example: OIDC 블록과, 멀티유저에서는CREDENTIAL_MASTER_KEY·프로바이더 키 환경변수를 두지 않는다는 안내.[Unreleased]Fixed.하지 않은 것 — 그래서
Refsdeploy.yml이.env를 렌더하는 부분. OIDC 변수를 secrets 에서 넣으려면 워크플로를 고쳐야 하는데 이 계정은 워크플로 파일을 push 할 수 없다. 지금은 VM 의.env에 직접 적어야 한다.docker.yml의 cubrid 변형 이미지(EXTRAS=publish cubrid)에는auth가 들어가지 않는다 — 같은 이유.email_verified) 를 저장소에 추가하는 것. 실제 realm 없이 만들어 넣을 수 없었다. 설정 단계는 docs(auth): state that the bearer token Builder accepts is an access token #1019 가 문서로 적는다.검증
tests/unit/test_prod_oidc_plumbing.py: 기본 이미지의 EXTRAS 에auth/ compose 가 일곱 변수를${VAR:-}로 전달 / 빈 값이면 OIDC 가 꺼진 채(oidc_enabled() is False,multi_user_mode() is False) /.env.app.example에 변수 전부.import jwt를 확인하지는 못했다(로컬에 docker 없음) — 이 PR 의docker build and scan이 빌드는 확인한다.review:R3— 작성자가 아닌 사람의 승인이 필요하다.🤖 Generated with Claude Code