Builder(공공데이터를 수집해 데이터셋으로 빌드하는 서버)의 운영 배포용 이미지와 compose 구성으로는 OIDC(Keycloak 같은 인증 서버에 로그인을 맡기는 표준 방식) 인증을 켤 수 없습니다. Studio(Builder 의 웹 화면)는 OIDC 토큰만 보내므로, 이 상태로는 Studio 를 운영 Builder 에 연결할 수 없습니다.
Problem
운영 배포는 API 키 인증만 지원하고 OIDC 를 켤 수 없습니다. Studio 는 Bearer 토큰(Keycloak 이 발급)만 보냅니다. 지금 구성으로는 Studio 가 운영 Builder 에 연결되지 못합니다.
Evidence
Dockerfile:51 은 ARG EXTRAS=publish 입니다. JWT 검증에 필요한 pyjwt 는 auth extra 에만 있습니다(pyproject.toml:63).
docker-compose.prod.app.yml:27-38 의 environment 에는 KPUBDATA_BUILDER_API_KEY, HOST, PORT, OUTPUT_DIR, ALLOWED_ORIGINS, CREDENTIAL_MASTER_KEY 여섯 개만 있습니다. OIDC_* 변수는 없습니다.
.env.app.example 에도 OIDC_* 변수가 없습니다. deploy.yml:45 가 사용하는 파일이 이 compose 입니다.
- OIDC 변수를 넘기는 compose 는 따로 있습니다(
infra/oci/docker-compose.yml:46-49). 이 파일은 운영 배포 경로와 맞지 않습니다.
- Studio 쪽에는
X-API-Key 를 보내는 경로가 없습니다(Studio 의 이슈를 참조합니다).
Impact: 실제 Builder 에 연결된 Studio 를 배포할 수 없습니다. "사용자가 자신의 provider 키를 직접 넣고(BYOK) 서버는 그 키를 저장하지 않는다"는 설명은 다중 사용자(OIDC) 모드에서만 성립합니다. 단일 사용자 모드는 CREDENTIAL_MASTER_KEY 로 키를 암호화해 저장합니다.
Blocks: Studio 를 실제 Builder 에 연동한 배포와 V5 검증(제품 전체를 처음부터 끝까지 실행하는 테스트)을 막습니다.
Evidence: 위에 적은 파일들입니다.
먼저 정할 것 (사람)
- 운영 인증 모드를 정합니다. 선택지는 OIDC 다중 사용자와 API 키 단일 사용자입니다. Studio 가 Bearer 토큰만 지원하므로 OIDC 다중 사용자가 권장됩니다.
- 토큰 종류를 정합니다. 선택지는 ID 토큰과 access 토큰입니다. Studio 는 Keycloak 의 access 토큰을 보냅니다.
Scope
- 배포 이미지에
auth extra 를 포함합니다(EXTRAS="publish auth").
- compose,
.env.app.example, deploy.yml 에 OIDC_ISSUER, OIDC_AUDIENCE, KPUBDATA_BUILDER_ADMIN_SUBJECTS, KPUBDATA_BUILDER_AUTH_FAILURE_LIMIT 를 추가합니다.
- 다중 사용자 프로필에서
CREDENTIAL_MASTER_KEY 와 provider 키 환경변수를 제거합니다.
- Keycloak 의 realm export(audience mapper 와
email_verified 포함)를 저장소에 추가합니다.
Acceptance Criteria
Required Verification
V3(실제 컴포넌트 사이의 통합 테스트)와 인증에 대한 부정 테스트(거부되어야 할 요청이 실제로 거부되는지 확인하는 테스트)가 필요합니다. 검증 수준은 POLICY.md 의 Verification Level 표를 따릅니다.
Dependencies
Blocked by: #990, #991. 다중 사용자 모드로 열면 이 두 결함이 바로 노출됩니다. #990 은 REQUIRE_OWN_PROVIDER_CREDENTIAL 설정에서도 키 없는 요청이 운영자의 환경 변수 키로 실행되는 문제이고, #991 은 POST /builds 가 다른 호출자의 run_id 를 받으면 그 호출자의 job 을 돌려주는 문제입니다.
Relates: #692 (프로필별 기동 스모크 테스트를 갖춘 Compose 묶음)
Notes
2026-10-04 에 세 저장소의 연동을 검토하면서 나온 항목입니다. main 의 커밋 7a3f78f 에서 다시 확인한 것만 적었습니다.
2026-10-07 최소 운영 설계 재검토
HEAD와 릴리스 산출물 구분
2026-10-07 에 커밋 1d93ceb 기준으로 확인한 내용입니다. Dockerfile 의 EXTRAS 는 이미 publish auth 이고, 운영용 compose 에 OIDC 변수가 있습니다. 따라서 위 본문은 과거 시점의 설명이며, 현재 main 의 코드 상태로 인용하지 않습니다. 사용자가 보고한 "v0.4.0 에서 OIDC 를 쓸 수 없다"는 문제는, 이 검토에서 해당 이미지를 받아 실행해 재현하지 않았습니다.
이 검토에서는 이 이슈를 완료 처리하거나 닫지 않습니다.
Builder(공공데이터를 수집해 데이터셋으로 빌드하는 서버)의 운영 배포용 이미지와 compose 구성으로는 OIDC(Keycloak 같은 인증 서버에 로그인을 맡기는 표준 방식) 인증을 켤 수 없습니다. Studio(Builder 의 웹 화면)는 OIDC 토큰만 보내므로, 이 상태로는 Studio 를 운영 Builder 에 연결할 수 없습니다.
Problem
운영 배포는 API 키 인증만 지원하고 OIDC 를 켤 수 없습니다. Studio 는 Bearer 토큰(Keycloak 이 발급)만 보냅니다. 지금 구성으로는 Studio 가 운영 Builder 에 연결되지 못합니다.
Evidence
Dockerfile:51은ARG EXTRAS=publish입니다. JWT 검증에 필요한pyjwt는authextra 에만 있습니다(pyproject.toml:63).docker-compose.prod.app.yml:27-38의environment에는KPUBDATA_BUILDER_API_KEY,HOST,PORT,OUTPUT_DIR,ALLOWED_ORIGINS,CREDENTIAL_MASTER_KEY여섯 개만 있습니다.OIDC_*변수는 없습니다..env.app.example에도OIDC_*변수가 없습니다.deploy.yml:45가 사용하는 파일이 이 compose 입니다.infra/oci/docker-compose.yml:46-49). 이 파일은 운영 배포 경로와 맞지 않습니다.X-API-Key를 보내는 경로가 없습니다(Studio 의 이슈를 참조합니다).Impact: 실제 Builder 에 연결된 Studio 를 배포할 수 없습니다. "사용자가 자신의 provider 키를 직접 넣고(BYOK) 서버는 그 키를 저장하지 않는다"는 설명은 다중 사용자(OIDC) 모드에서만 성립합니다. 단일 사용자 모드는
CREDENTIAL_MASTER_KEY로 키를 암호화해 저장합니다.Blocks: Studio 를 실제 Builder 에 연동한 배포와 V5 검증(제품 전체를 처음부터 끝까지 실행하는 테스트)을 막습니다.
Evidence: 위에 적은 파일들입니다.
먼저 정할 것 (사람)
Scope
authextra 를 포함합니다(EXTRAS="publish auth")..env.app.example,deploy.yml에OIDC_ISSUER,OIDC_AUDIENCE,KPUBDATA_BUILDER_ADMIN_SUBJECTS,KPUBDATA_BUILDER_AUTH_FAILURE_LIMIT를 추가합니다.CREDENTIAL_MASTER_KEY와 provider 키 환경변수를 제거합니다.email_verified포함)를 저장소에 추가합니다.Acceptance Criteria
import jwt가 성공합니다.GET /providers를 호출하면 200 이 돌아옵니다.Required Verification
V3(실제 컴포넌트 사이의 통합 테스트)와 인증에 대한 부정 테스트(거부되어야 할 요청이 실제로 거부되는지 확인하는 테스트)가 필요합니다. 검증 수준은 POLICY.md 의 Verification Level 표를 따릅니다.
Dependencies
Blocked by: #990, #991. 다중 사용자 모드로 열면 이 두 결함이 바로 노출됩니다. #990 은
REQUIRE_OWN_PROVIDER_CREDENTIAL설정에서도 키 없는 요청이 운영자의 환경 변수 키로 실행되는 문제이고, #991 은POST /builds가 다른 호출자의run_id를 받으면 그 호출자의 job 을 돌려주는 문제입니다.Relates: #692 (프로필별 기동 스모크 테스트를 갖춘 Compose 묶음)
Notes
2026-10-04 에 세 저장소의 연동을 검토하면서 나온 항목입니다.
main의 커밋7a3f78f에서 다시 확인한 것만 적었습니다.2026-10-07 최소 운영 설계 재검토
HEAD와 릴리스 산출물 구분
2026-10-07 에 커밋
1d93ceb기준으로 확인한 내용입니다.Dockerfile의EXTRAS는 이미publish auth이고, 운영용 compose 에 OIDC 변수가 있습니다. 따라서 위 본문은 과거 시점의 설명이며, 현재main의 코드 상태로 인용하지 않습니다. 사용자가 보고한 "v0.4.0 에서 OIDC 를 쓸 수 없다"는 문제는, 이 검토에서 해당 이미지를 받아 실행해 재현하지 않았습니다.import jwt, OIDC 토큰 검증, 소유권에 대한 스모크 테스트 결과를 기록합니다(feat: one-click Compose bundle with a per-profile start smoke test #692).docker-entrypoint.sh와 compose 에 있으며, OIDC 만 쓰는 컨테이너를 지원하는 이슈(fix(deploy): support OIDC-only containers without a mandatory administrator API key #1122)에서 추적합니다.main또는 특정 커밋(sha)이 성공한 것과 정식 릴리스의 검증을 구분합니다. 긴급 릴리스를 할지는 기존 정책에 따라 프로젝트 메인테이너가 판단합니다.이 검토에서는 이 이슈를 완료 처리하거나 닫지 않습니다.