AWS Access

What the CloudFormation stack creates

One IAM role, and the GitHub identity provider only if you ask for it. Nothing else is created and nothing existing is modified.

Currentengine 9.0.0Verified 2026-08-30

The resources

ResourceCreated
One IAM roleAlways. Named per account, so it cannot collide across customers
The GitHub Actions OIDC identity providerOnly if you tick the box, because the account may already have one

That is the complete list. No bucket, no function, no log group, no network resource, no scheduled job. Nothing already in your account is altered.

Why the template never owns the identity provider unconditionally

The provider is an account-level singleton shared with every other GitHub Actions workflow you run.

A stack that creates it unconditionally fails against any account that already federates GitHub. Worse, a stack that owns it deletes somebody else's infrastructure when it is rolled back or removed. Both of those happened, which is why the provider is referenced by identifier rather than managed, and why the choice is yours.

What is attached to the role

Two AWS managed policies, SecurityAudit and ViewOnlyAccess, which are the scanner's documented baseline. Then four inline grants, one per collector, listing exactly the calls those collectors make. Then the denials.

See What the role can read and What is explicitly denied.

Parameters you set

The engagement expiry is the one that matters. It is stamped into the trust policy and into a deny rule, so it is enforced by AWS rather than remembered by anybody.

The role name and maximum session duration are parameters too, with defaults that the assessment workflow expects. Changing the role name is possible and has consequences: GovIntel derives the role identifier from your account number precisely because the name is fixed.