AWS Access

The GitHub OIDC trust relationship

Access is federated through GitHub OIDC and pinned to one repository and one branch, so no AWS access key is created or stored anywhere.

Currentengine 9.0.0Verified 2026-08-30

The role you create trusts a web identity, not a user and not an access key. There is no credential to store, rotate, leak or forget.

How an assessment obtains access

  1. The assessment run requests a short-lived OIDC token from GitHub.
  2. It presents that token to AWS STS, asking to assume your role.
  3. AWS validates the token against the identity provider in your account, and checks

the token's claims against your role's trust policy.

  1. If every claim matches, STS returns temporary credentials valid for at most one

hour.

No part of this involves a secret shared between you and GovIntel.

The two claims that are pinned

The trust policy checks two things about the token.

The subject — which repository and which branch the run came from:

repo:<owner>/<repo>:ref:refs/heads/main

A token from any other repository, or from a branch other than the one named, fails the condition and the role is not assumed. The exact owner and repository name are written into your own trust policy when the stack is created, so you can read them in your IAM console at any time.

The audience — who the token was minted for:

sts.amazonaws.com

This is what stops a token issued for some other purpose being replayed against your account.

What else the trust policy enforces

ConstraintEffect
Session name patternSessions must be named govintel-*, so your CloudTrail can attribute every action
Maximum session durationOne hour
Engagement expiryAfter the date you set, the role denies everything
Web identity onlyA direct sts:AssumeRole from an IAM user or role is refused