A security architect is sequencing controls along the secure SDLC and wants each control mapped to the earliest stage where it can stop a problem cheaply, embodying the shift-left principle. They list four controls: push protection blocking a credential at push time, a CodeQL pull request scan flagging a SQL injection before merge, Dependency Review surfacing a vulnerable package on the pull request, and a security campaign driving remediation of alerts already in production. Which ordering correctly arranges these from the earliest, most preventive point in the lifecycle to the latest, most remedial?
- APush protection at push time, then Dependency Review and the CodeQL pull request scan together at pull request review, then a security campaign driving remediation in production Correct
- BDependency Review on the pull request, then push protection at push time, then a security campaign in production, then the CodeQL pull request scan during review
- CA security campaign in production first, then push protection at push time, then the CodeQL pull request scan, then Dependency Review on the pull request during review
- DThe CodeQL pull request scan first, then push protection at push time, then Dependency Review on the pull request, then a security campaign driving remediation in production
Why A is correct: Push protection acts earliest, stopping a secret before it ever lands; Dependency Review and the CodeQL scan act next at the pull request stage as pre-merge gates; and a security campaign is the latest, remedial step that chases down findings already shipped, which matches the shift-left progression.
Why B is wrong: This places Dependency Review and the CodeQL scan, which both act at pull request review, on either side of the campaign, mixing pre-merge gates with post-deployment remediation and putting push protection after a pre-merge check, so the lifecycle ordering is incoherent.
Why C is wrong: Leading with a security campaign puts the most remedial, post-deployment activity first, inverting the shift-left intent, and it also separates the two pull request gates that belong together at the review stage.
Why D is wrong: Push protection acts before any code review begins, so placing it after a pull request scan is wrong; the credential block is the earliest control and cannot sit between two pre-merge checks at review time.