fix(security): replace ETL Basic auth with fail-closed JWT mode - #287
Draft
seonghobae wants to merge 3 commits into
Draft
fix(security): replace ETL Basic auth with fail-closed JWT mode#287seonghobae wants to merge 3 commits into
seonghobae wants to merge 3 commits into
Conversation
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Purpose
Replace the directly reachable ETL service's historical HTTP Basic boundary with independently enforced OAuth 2.0 Resource Server JWT authentication. The repository default is credential-free
deny: workload APIs remain unavailable until a deployment explicitly selects JWT mode and supplies issuer and audience authority.Exact current identity
develop@d6c6665163eabe1b5eca80556c6963bafd6b2625;test/etl-service-auth-mode-106add;1e855bd9f5bf4fc946f7aa58623b67ccf0d0d0e0;761a7d06d7773aa3b62c0b1748c81c70983bb1e4and exact protected develop;No history was rewritten. Checks, reviews, approvals, and synthetic merge evidence from #280 or predecessor heads do not transfer.
Hosted RED evidence
CI
31529757696reached the real Spring Security filter chain on macOS, Ubuntu, and Windows. Normal production/test compilation succeeded and ETL ran 286 tests with exactly one failure and zero errors/skips: valid historical Basic credentials reached/api/security-contract, returning200where the acquisition-ready boundary required401. Dependency Review, SBOM, SAST, and Security Scan were terminal-success on that RED head.GREEN boundary
denymode permits only actuator health/info and returns401for/api/**;jwtmode requires nonblank deployment-owned issuer and audience properties;subas the principal name;docs/security/etl-service-jwt.md.Machine-readable contract dependency
PR #278 truthfully documents the protected Basic mechanism and Semgrep correctly blocks it. Do not suppress or falsify that result. After this runtime boundary integrates, rebuild #278 on protected develop and replace the Basic OpenAPI scheme with bearer JWT semantics so runtime, contract, and SAST evidence move together.
Current verification state
Fresh exact-current-head CI, Dependency Review, CycloneDX SBOM, SAST Semgrep, and Security Scan were triggered by the GREEN head. Pending or predecessor-head results are not accepted as passing.
Keep Draft until the unchanged exact head has terminal-success applicable checks, non-vacuous applicable owned-production coverage, zero valid unresolved findings, and qualifying independent formal review where live governance requires it. After exact unique-work preservation is proven, stale predecessor #280 remains superseded.
Closes #161 only after protected integration.