cloud engineering · devsecops

Pipelines that ship signed builds without a cloud key in sight.

Open the settings of most CI systems and you'll find a long-lived AWS access key or Azure client secret saved as a repository secret, then copied into other repositories. We replace that with OIDC federation first, then work outward to scanning, signing and policy.

platforms
cloud-engineering / devsecops 4 platforms
01 · PIPELINE 02 · TRUST 03 · CLOUD Pull request: code · Terraform · Dockerfile Pull request code · Terraform ·Dockerfile CI job: GitHub Actions · GitLab · Azure DevOps CI job GitHub Actions ·GitLab · Azure DevOps Scans and policy: SAST · secrets · IaC · OPA Scans and policy SAST · secrets · IaC ·OPA CI OIDC provider: token with repo and branch claims CI OIDC provider token with repo andbranch claims Cloud IAM federation: AWS IAM role · Entra · GCP WIF Cloud IAM federation AWS IAM role · Entra ·GCP WIF Dynamic secrets: HashiCorp Vault leases Dynamic secrets HashiCorp Vault leases Terraform apply: plan checked against policy Terraform apply plan checked againstpolicy Signed artifacts: SBOM · SLSA provenance Signed artifacts SBOM · SLSA provenance Target environment: dev · staging · prod Target environment dev · staging · prod
TerraformHashiCorp VaultMicrosoft Entra IDOkta
in short·15-second read

DevSecOps builds security checks into the delivery pipeline instead of adding them right before release.

Cohash designs CI/CD on GitHub Actions, GitLab or Azure DevOps that deploys to the cloud with short-lived OIDC tokens, scans code and dependencies, produces SBOMs, signs artifacts and records SLSA provenance. We map the controls to NIST SSDF (SP 800-218) so audit evidence comes from the pipeline itself.

you probably need this if
  • Cloud access keys sit in CI secrets and nobody knows which pipelines still use them.
  • A security scan runs once before release and its findings arrive too late to fix.
  • Auditors ask for an SBOM or proof of where a container image came from and the team has neither.
Ask an engineer facts checked 2026-10-20 · 7 sources
how it runs
  1. 01Pipeline review
  2. 02Remove standing credentials
  3. 03Add checks by risk
  4. 04Tune and hand over
you keep
  • Pipeline and credential inventory with risk ranking
  • OIDC trust configuration per cloud and environment
  • Reusable pipeline templates with scanning and signing built in
+ 3 more documents
who does it
DevSecOps engineerPlatform engineer (Kubernetes)CI/CD pipeline engineer Microsoft Certified: DevOps Engineer Expert AWS Certified DevOps Engineer – Professional
platforms
the story · devsecops

From the first call to a setup your own team can run.

Here's what usually prompts a call about your DevSecOps, what we do about it and in which order, and where you end up.

  1. chapter 01 · where it hurts

    Why teams reach out

    • Cloud access keys sit in CI secrets and nobody knows which pipelines still use them.
    • A security scan runs once before release and its findings arrive too late to fix.
    • Auditors ask for an SBOM or proof of where a container image came from and the team has neither.
  2. chapter 02 · what we change

    How we solve it

    • Keyless cloud deployment
    • Supply chain integrity
    • Code, secret and IaC scanning
    • Policy as code
    • Secrets that expire
  3. chapter 03 · how it runs

    Our approach

    • Pipeline review
    • Remove standing credentials
    • Add checks by risk
    • Tune and hand over
  4. chapter 04 · where you end up

    What changes

    • No pipeline holds a long-lived AWS key.
    • Each production image traces to a commit and a pipeline run, SBOM attached.
    • On new code the check blocks the few things that matter, and bypassing it stops being routine.
    • Pipeline and credential inventory with risk ranking
what we do

Where we spend the hours

5 areas of work, each one done by an engineer who has run it in production.

  1. We set up AWS IAM roles, Entra federated credentials and Google Cloud Workload Identity Federation to trust GitHub Actions, GitLab and Azure DevOps. Each trust policy checks the subject claim for repository, branch and environment. Checking only the organization isn't enough.

  2. An SBOM for every build, dependency and container scanning, signed artifacts and build provenance aligned to the SLSA Build track. SLSA 1.2 adds a Source track we can map your repository controls to.

  3. Run static analysis, secret scanning on push and Terraform scanning, and post findings as comments in the pull request. Let the fast checks block the merge. Put the slow ones on a schedule.

  4. Rules for Terraform plans and Kubernetes admission written as code, versioned and tested, so a public storage bucket fails the build rather than the audit.

  5. Where an application still needs a secret, HashiCorp Vault issues it dynamically with a short lease, and the pipeline never sees it in plain text.

capability 01 / 05in production

Keyless cloud deployment

We set up AWS IAM roles, Entra federated credentials and Google Cloud Workload Identity Federation to trust GitHub Actions, GitLab and Azure DevOps. Each trust policy checks the subject claim for repository, branch and environment. Checking only the organization isn't enough.

capability 02 / 05in production

Supply chain integrity

An SBOM for every build, dependency and container scanning, signed artifacts and build provenance aligned to the SLSA Build track. SLSA 1.2 adds a Source track we can map your repository controls to.

capability 03 / 05in production

Code, secret and IaC scanning

Run static analysis, secret scanning on push and Terraform scanning, and post findings as comments in the pull request. Let the fast checks block the merge. Put the slow ones on a schedule.

capability 04 / 05in production

Policy as code

Rules for Terraform plans and Kubernetes admission written as code, versioned and tested, so a public storage bucket fails the build rather than the audit.

capability 05 / 05in production

Secrets that expire

Where an application still needs a secret, HashiCorp Vault issues it dynamically with a short lease, and the pipeline never sees it in plain text.

typical situations

Situations we walk into

We pieced these together from DevSecOps situations that come up a lot. They're patterns. You won't find a specific client in them.

case file 01

Two hundred repositories sharing one AWS access key

composite · not a client story
  1. Beforethe situation

    A GitHub organization has about 200 repositories. One IAM user's access key, with broad permissions, is stored as an organization secret, and CloudTrail shows it called from runners nobody can tie to a repository.

  2. What we dothe work

    Use CloudTrail and workflow logs to list which repositories use the key. Create an IAM OIDC provider for GitHub and one role per repository and environment, with trust conditions on the sub claim. Move pipelines over in batches, then deactivate the key and delete it after a quiet week.

  3. Afterwhere you end up

    No pipeline holds a long-lived AWS key. Each repository can reach only its own environments, and credentials from any single job expire on their own shortly after it ends.

case file 02

A customer contract now requires SBOMs for every shipped image

composite · not a client story
  1. Beforethe situation

    A new customer contract requires an SBOM and provenance for each container image shipped. Images are built in GitLab CI, pushed to a registry and deployed to Kubernetes, and nothing records which commit or pipeline produced them.

  2. What we dothe work

    Generate an SBOM in the build job with a tool such as Syft, sign the image and attach provenance with Sigstore cosign, and store both next to the image in the registry. Add an admission policy that rejects unsigned images in production namespaces.

  3. Afterwhere you end up

    Each production image traces to a commit and a pipeline run, SBOM attached. An unsigned image is stopped at the cluster rather than turning up later in an audit finding.

case file 03

An IaC scanner that blocks every merge and gets bypassed

composite · not a client story
  1. Beforethe situation

    A team added a Terraform scanner to every pull request. It reports hundreds of findings on old modules, developers learned to ignore it, and an admin bypass on merges is now routine.

  2. What we dothe work

    Baseline the existing findings and fail only on new ones. Pick a short blocking list (public buckets, open security groups, unencrypted storage) and send the rest to a weekly report with owners. Write each blocking rule as tested policy code.

  3. Afterwhere you end up

    On new code the check blocks the few things that matter, and bypassing it stops being routine. Old findings get worked down from a tracked backlog, so nobody faces them all in one blocked merge.

case studies

DevSecOps case studies

All case studies
architecture

How a pipeline deploys to the cloud without stored keys

The CI job requests an OIDC token from its platform and the cloud exchanges it for a short-lived role only when the repository, branch and environment claims match. Scans, signing and policy checks run before deploy, and Vault issues any remaining secret with a short lease.

How a pipeline deploys to the cloud without stored keys The CI job requests an OIDC token from its platform and the cloud exchanges it for a short-lived role only when the repository, branch and environment claims match. Scans, signing and policy checks run before deploy, and Vault issues any remaining secret with a short lease. 01 · PIPELINE 02 · TRUST 03 · CLOUD trigger run checks request token OIDC token short-lived role sign and attest deploy leased secret Pull request code · Terraform ·Dockerfile CI job GitHub Actions · GitLab ·Azure DevOps Scans and policy SAST · secrets · IaC · OPA CI OIDC provider token with repo and branchclaims Cloud IAM federation AWS IAM role · Entra · GCPWIF Dynamic secrets HashiCorp Vault leases Terraform apply plan checked againstpolicy Signed artifacts SBOM · SLSA provenance Target environment dev · staging · prod
Read the diagram as text
  1. Pull request → CI job: trigger
  2. CI job → Scans and policy: run checks
  3. CI job → CI OIDC provider: request token
  4. CI OIDC provider → Cloud IAM federation: OIDC token
  5. Cloud IAM federation → Terraform apply: short-lived role
  6. CI job → Signed artifacts: sign and attest
  7. Terraform apply → Target environment: deploy
  8. Dynamic secrets → Target environment: leased secret
how it runs

A typical engagement

We don't start a step until the last one has produced something you can check.

  1. step 01

    Pipeline review

    We inventory pipelines, runners and every stored credential, and rank them by what they can reach.

  2. step 02

    Remove standing credentials

    OIDC trust set up per cloud and per environment, long-lived keys revoked once the new path is proven.

  3. step 03

    Add checks by risk

    Secret scanning and dependency checks go in first. Signing, provenance and policy as code follow.

  4. step 04

    Tune and hand over

    False positives cut down, reusable workflow templates published and your engineers trained to maintain them.

you keep

What you're left with

We write these for your DevSecOps setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • inventory01

    Pipeline and credential inventory with risk ranking

    yours to keep
  • document02

    OIDC trust configuration per cloud and environment

    yours to keep
  • code03

    Reusable pipeline templates with scanning and signing built in

    yours to keep
  • document04

    SBOM, signing and provenance setup

    yours to keep
  • tests05

    Policy-as-code rule set with tests

    yours to keep
  • inventory06

    NIST SSDF practice mapping for audit

    yours to keep
talent and delivery · devsecops

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
roles we staff
  • DevSecOps engineer
  • Platform engineer (Kubernetes)
  • CI/CD pipeline engineer
  • Cloud security engineer
  • Secrets management engineer (Vault)
01Will security checks slow our builds down?

Not much, if they're placed well. Secret scanning and dependency checks run in seconds on each pull request. Deeper scans run nightly or on release branches. We measure pipeline time before and after.

02Which SLSA level should we aim for?

Build L2 requires signed provenance from a hosted build platform, which most teams on hosted CI can reach. Build L3 requires a hardened build platform and usually more change. We start with L2 and decide on L3 per product.

03GitHub changed the OIDC subject claim format. Does that affect our cloud trust policies?

It can. Repositories created after 15 July 2026 use an immutable default subject that includes owner and repository IDs, and older repositories keep the previous format unless they opt in. Trust policies written against the old format need checking before anyone opts in or creates a new repository.

04Do you work with GitLab and Azure DevOps as well as GitHub?

Yes. GitLab CI issues ID tokens for OIDC and Azure DevOps supports workload identity federation for service connections, so the same keyless pattern applies. The configuration details differ.

05Do we need to replace the scanners we already license?

Usually not. We start from the tools you have, tune what blocks a merge, and fill gaps such as secret scanning or SBOM generation. Swapping scanners is rarely the cheapest fix for a noisy pipeline.

related

Often paired with

Projects on DevSecOps usually end up touching one of these, so they're worth a look.

sources 7 sources linked last checked 2026-10-20 content fingerprint e88871b3
  1. 01GitHub Docs: OpenID Connect referencedocs.github.com ↗
  2. 02GitHub Docs: OpenID Connect conceptsdocs.github.com ↗
  3. 03GitLab Docs: OIDC authentication using ID tokensdocs.gitlab.com ↗
  4. 04Microsoft Learn: Azure DevOps workload identity federationlearn.microsoft.com ↗
  5. 05SLSA specification v1.2slsa.dev ↗
  6. 06SLSA v1.1: Security levelsslsa.dev ↗
  7. 07NIST SP 800-218: Secure Software Development Frameworkcsrc.nist.gov ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Tell us what you're running. We'll tell you what we'd do first.

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it