CircleCI
Jobs authenticate as the project they ran in.
Jobs authenticate as the project they ran in.
Identity proof
The token has to come from https://oidc.circleci.com/org/b9e4b4e1-0d3a-4a1e-9d2f-2f3a4b5c6d7e, and its oidc.circleci.com/project-id claim has to match the workload you named. We compare that claim byte for byte, with no wildcards.
oidc.circleci.com/project-id is matched rather than sub, which on this platform does not name the workload in a form you can pin.
Every token also has to name your workspace as its audience. Ask for this audience and no other. A token requested for two audiences fails every exchange.
Console fields
| Field | Example | Advanced | What it pins |
|---|---|---|---|
| Organization ID | b9e4b4e1-0d3a-4a1e-9d2f-2f3a4b5c6d7e | no | Organization Settings → Overview. |
| Project ID | c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f | no | Project Settings → Overview. |
The console also asks which project and environment this identity reaches and which role it gets, with the credential lifetime behind Advanced.
Trust
Built from the example answers above:
| What | Value |
|---|---|
| Issuer | https://oidc.circleci.com/org/b9e4b4e1-0d3a-4a1e-9d2f-2f3a4b5c6d7e |
| Claim compared | oidc.circleci.com/project-id |
| Subject | c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f |
| Identity name | circleci-1a2b3c4d5e6f |
We name the identity for you, so the form never asks for one.
Console snippet
steps:
- run:
name: Pull secrets
command: |
T=$(circleci run oidc get --claims '{"aud":"YOUR_WORKSPACE_ID"}')
C=$(T="$T" jq -n '{token:env.T}' | curl -sS "https://penv.cloud/api/v1/auth/oidc" \
-H 'content-type: application/json' --data-binary @- | jq -r .credential)
PENV_TOKEN="$C" penv pullThe snippet finishes with penv pull, which writes a file. We recommend penv run for a process; penv pull is for a host that needs a file on disk. Connect your CI has the wrapped step.
Related
- Machine identity
- Connect a Platform in the console
- CircleCI documentation: the subject is the value most often set wrong