Aller au contenu principal
Articlesupply chain security

GitHub Actions OIDC: Secure Cloud Deployments

Replace long-lived cloud secrets with GitHub Actions OIDC while constraining claims, permissions, environments, reusable workflows, and incident response.

IsMalicious TeamIsMalicious Team
3 min read
Cover Image for GitHub Actions OIDC: Secure Cloud Deployments
Signal
Context
Action

Long-lived cloud credentials stored in CI secrets are difficult to rotate and valuable to steal. GitHub Actions OIDC replaces them with short-lived federation: a job proves its workflow identity and receives temporary cloud access.

OIDC removes one secret-management problem, but it does not remove trust design. A broad role that accepts any repository or branch can turn a compromised workflow into a cloud breach.

How the Federation Flow Works

The GitHub OIDC documentation describes a workflow requesting a signed OIDC token from GitHub and presenting it to a cloud provider. The provider validates claims and issues short-lived credentials.

Important claims commonly include:

  • issuer;
  • audience;
  • subject;
  • repository and repository owner;
  • branch, tag or environment context;
  • workflow reference;
  • run identifiers.

Provider capabilities differ. Design the trust policy around immutable, specific claims whenever possible.

Constrain the Trust Relationship

Avoid a subject condition that permits every branch or repository in an organization. Bind high-privilege roles to:

  • one repository or stable repository identifier;
  • protected production environment;
  • approved branch or release tag;
  • reviewed workflow or reusable workflow;
  • expected audience;
  • organization and ownership constraints.

Create separate cloud roles for build, preview, staging and production. Each role should have the minimum resource permissions and session duration.

Protect the Workflow That Requests the Token

An attacker does not need to steal a cloud key if they can modify the workflow allowed to request credentials.

Controls include:

  • branch protection and required review;
  • CODEOWNERS for workflow files;
  • pinned third-party actions;
  • minimal GitHub token permissions;
  • no privileged credentials in untrusted pull-request jobs;
  • environment approvals for production;
  • isolated, ephemeral self-hosted runners;
  • restricted reusable workflows.

Grant id-token write only to the job that performs federation. It allows token creation; it does not itself grant cloud permissions, but it becomes valuable when a provider trusts the claims.

Validate Claims and Test Failure

Log the claims used by the provider without exposing reusable sensitive tokens. Test that feature branches, forks, other repositories and modified workflows cannot assume the role.

Create negative tests:

  1. unapproved branch requests production role;
  2. forked pull request requests any cloud role;
  3. wrong audience is presented;
  4. different workflow calls the reusable deployment job;
  5. expired token is replayed.

Security depends as much on rejected paths as the successful deployment.

Runtime and Network Guardrails

Temporary credentials can still cause damage during their lifetime. Apply cloud-side least privilege, resource policies, network boundaries, anomaly detection and audit logging. Restrict CI egress where practical and monitor unexpected domains or IPs contacted before federation.

If a malicious dependency runs in the same job, it may request or steal the short-lived token. Separate dependency installation, build and deploy jobs. Follow the broader GitHub Actions supply-chain defense.

Incident Response

If federation is abused, disable or tighten the provider trust policy, stop the workflow and revoke active cloud sessions where supported. Preserve GitHub run logs, token claims, cloud audit events, commits, action versions and runner evidence.

Search for every role session with the same repository, workflow, subject and source infrastructure. Rotate any remaining long-lived secrets; OIDC migrations often leave legacy keys behind.

Metrics

Track long-lived cloud secrets remaining in CI, federated roles, trust policies with broad wildcards, jobs granted id-token, production deployments through approved environments, denied assumption attempts and time to trace a cloud session to a workflow run.

Conclusion

GitHub Actions OIDC replaces stored credentials with short-lived, attributable workload identity. Its safety depends on precise claims, protected workflows and least-privilege cloud roles. Pair federation with non-human identity governance so every machine identity has an owner, scope and auditable lifecycle.

FAQ

Frequently asked questions

Why use OIDC in GitHub Actions?
OIDC lets a workflow exchange a short-lived identity token for temporary cloud credentials, avoiding stored long-lived cloud keys in repository secrets.
Can a broad OIDC trust policy be dangerous?
Yes. If trust is not constrained by repository, branch, environment, workflow, audience, and other claims, an unintended workflow may obtain powerful cloud access.
Should every workflow receive the id-token permission?
No. Grant id-token write only to jobs that need federation, and keep all other token and cloud permissions at the minimum required scope.
Read next

Protect Your Infrastructure

Check any IP or domain against our threat intelligence database with indexed records.

Try the IP / Domain Checker