Running CI/CD Inside an Accredited Enclave for Federal Work
A federal or defense contractor's CI/CD pipeline has to answer a question most engineering teams never face: is the platform you're about to use even allowed to touch this data at all. Getting that wrong isn't a bug, it's a finding in your next assessment.
This runbook walks through the steps a contractor should take before assuming a standard GitHub Actions or GitLab CI setup is appropriate for controlled unclassified information or higher.
Vendors Covered in this Article
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
Step 1: are hosted runners allowed for this data at all?
A standard GitHub-hosted or GitLab-hosted shared runner processes your code on infrastructure outside your own accredited boundary, which is a non-starter for a lot of federal work involving controlled unclassified information. Before setting up any pipeline, confirm with your ISSO or compliance lead what data classification the project involves and whether that classification permits a hosted runner at all.
This is a compliance question, not an engineering preference, and it needs an answer before the first workflow file gets written, not after a pipeline's already been running for months.
Step 2: how do you build self-hosted runners inside your enclave?
When hosted runners aren't appropriate, both GitHub Actions and GitLab CI support self-hosted runners you can place entirely inside your own accredited environment, including AWS GovCloud or an equivalent enclave, so the actual build and test execution never leaves your authorization boundary. The CI platform's control plane, scheduling the job and reporting results, may still be a cloud service outside the boundary, but the code and data processing itself happens on infrastructure you control.
Work through this distinction carefully with your compliance team, since where the control plane sits versus where the actual processing happens are two different questions that can each need their own answer.
Step 3: treat your pipeline itself as part of the system boundary
A pipeline that builds and deploys a system handling controlled data is part of that system's authorization boundary, and it needs its own documented controls, not a blanket assumption that it's covered by the application's own ATO. Document who can trigger a pipeline run, how runner credentials are managed, and how build artifacts are stored and transmitted, since an assessor will ask about all three specifically.
Change failure rate1 is a useful internal metric here too, since a federal system where deployed changes frequently cause incidents suggests the pipeline's own controls, not just the application code, need a closer look.
Step 4: generate a software bill of materials as a build artifact
Federal guidance increasingly expects a software bill of materials documenting the components in a delivered system, and generating it manually after the fact is both slower and less reliable than producing it as an automated pipeline step on every build. Both GitHub Actions and GitLab CI can run SBOM generation tooling as part of the build process, attaching the resulting document to the build artifact automatically.
Treat a missing or stale SBOM the same way you'd treat a failed test: a build that doesn't produce a current one shouldn't be considered complete.
Step 5: keep the ATO package's evidence current, not just accurate at approval time
An authorization to operate reflects the system's controls at a point in time, and a pipeline that drifts from what was documented, a new integration added without updating the boundary documentation, say, quietly invalidates that picture without anyone deciding to. Review your pipeline's actual configuration against the ATO package on a fixed schedule, not just when a reassessment forces the question.
A pipeline is one of the more frequently changed parts of a federal system's infrastructure, which makes it one of the more likely places for documentation to drift out of sync with reality if nobody's specifically watching for it.
The runbook in order:
- Confirm whether hosted runners are allowed at all for the data classification involved, before assuming a standard setup is appropriate.
- Build self-hosted runners inside your own accredited enclave when hosted runners are not appropriate.
- Treat the pipeline itself as part of the system boundary, with its own documented controls.
- Generate a software bill of materials as a build artifact so it is tied to each delivered build.
- Keep the authorization package's evidence current as the pipeline changes, not only accurate on approval day.
Working with a subcontractor's own CI/CD setup
On a teamed contract, a subcontractor may bring its own CI/CD tooling and its own assumptions about what's permitted, which can create a mismatch if the prime contractor's boundary and the subcontractor's pipeline aren't clearly delineated. Settle explicitly, in writing, whose accredited environment a given piece of work runs in, rather than assuming it's obvious from the org chart.
This is worth resolving during contract kickoff rather than during an assessment, since untangling a boundary question after code has already been running for months is a much harder conversation to have cleanly. Put the agreed boundary in the subcontract itself, not just in an email thread that's easy to lose track of later, and revisit it whenever the contract's scope changes enough to shift where the actual processing happens, since a boundary that was correct at kickoff can quietly stop being accurate as the work evolves.
What Good Looks Like
Good looks like a documented answer to whether hosted runners are permitted for each project's data classification, self-hosted runners inside your accredited boundary where they're not, and an SBOM generated automatically on every build.
Building The Capability (5-Stage Skill Ladder)
How to Get Started
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
AWS GovCloud gives a contractor an accredited environment to place self-hosted runners in, keeping build and test execution inside the authorization boundary the work requires.
Vanta's continuous control monitoring can supplement, but doesn't replace, the specific federal authorization processes a contractor's ATO package requires.
Frequently Asked Questions
Can we use a hosted GitHub Actions or GitLab CI runner for unclassified public-facing code?
Often yes, but confirm this with your compliance lead rather than assuming based on the data classification of a different project. Even within one contract, some repositories may be eligible for hosted runners while others handling controlled data are not.
Does a self-hosted runner inside GovCloud fully resolve the compliance question?
It resolves where the processing happens, but not necessarily where the pipeline's control plane and metadata live. Confirm both pieces with your compliance team, since a self-hosted runner alone doesn't automatically mean every part of the pipeline stays inside your boundary.
How often should we regenerate a software bill of materials?
On every build that produces a deliverable artifact, not on a periodic schedule separate from your release cadence. An SBOM tied to a specific build is far more useful during an assessment than one generated at some earlier, disconnected point in time.
Sources
Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.
- Change failure rate by DORA performance cluster. DORA Accelerate State of DevOps 2024 (Google Cloud), cluster table via Octopus Deploy analysis, 2024.
Related Guides
SOC 2 for Federal and Defense Contractors: Where It Fits
SOC 2 versus CMMC and NIST 800-171 for federal and defense contractors, and how Vanta, Drata and Secureframe fit a path toward both.
Cursor vs GitHub Copilot for Federal and Defense Contractors
Data handling rules narrow the field for federal and defense contractors before features matter. What to check before Cursor or Copilot touches CUI.
AppSec Tooling Under CMMC: A Contractor's Checklist
A checklist for federal and defense contractors weighing Snyk against GitHub Advanced Security under CMMC and NIST 800-171 expectations.
Database Infrastructure for Federal and Defense Contractors
Federal and defense contractors face compliance requirements that narrow the database platform choice considerably. Here's the honest comparison.
CrowdStrike vs SentinelOne for Defense Contractors
For a defense contractor, the CrowdStrike vs SentinelOne choice is really about which platform your CMMC assessor can verify. A control by control look.
A Federal Contractor's Runbook for Feature Flag Adoption
Federal and defense contractors work inside authorization boundaries most SaaS teams skip. A step-by-step runbook for adopting LaunchDarkly or Split.