Docs
Referencesince cloud@2026-09-10

Identities for CI and servers

Create an identity bound to one environment, and give it a way to prove itself.

Your CI logs in like a person does, with no key to steal. The roster of what it logs in as lives under Machine Identities then All Identities.

The list

Each row names the identity and the project and environment it is bound to. Beside that sit the role it holds and the state of its credentials.

Creating one asks for a name, then for the project and environment it should reach and the role it should hold.

An identity is bound to one environment when it is created and the binding never moves. A request naming any other environment is refused.

Two built-in roles can be given to an identity:

RoleWhat it holds
Secrets Readersecret:read, secret:reveal, dynamic:generate
Secrets Writerthose, plus secret:write and secret:delete

A custom role assignable to a machine is how you withhold one of those, such as minting on demand.

Machines never take a seat. An identity costs nothing and no plan counts them, so wiring fifty pipelines costs what wiring one costs.

One identity

Opening an identity shows what it may do and how it proves itself. Four ways to give it a credential sit behind one dialog.

TabWhat it is
TokenA pck_ string you copy once, with an expiry you choose
OIDC trustAn issuer plus one exactly matched subject, holding no secret
AWS workloadAn account id plus a role's immutable id, holding no secret
Host keypairA one-time enrollment secret for a server that can prove nothing else

A trust is a rule rather than a secret, so adding one hands nothing over. A token and a keypair enrollment both hand something over once, which is why both ask you to confirm it is you.

Every token a trust exchanges lives 15 minutes. How a machine logs in has the exchange itself.

Revoking

What you revokeWhat stops
One credentialThat credential. The identity can be given another
The identityEverything it holds, at once
A cloned keypairThe keypair and every credential it minted, revoked for you the moment a second host presents it

What each action needs

ActionNeedsConfirm it is youRecorded as
Open the rostermachine:readNonot recorded
Create an identitymachine:create at the chosen project and environmentYesidentity.create
Issue a tokenmachine:issue at its bindingYescredential.issue
Add an OIDC trustmachine:issue at its bindingNocredential.issue
Add an AWS trustmachine:issue at its bindingNocredential.issue
Enroll a host keypairmachine:issue at its bindingYescredential.issue
Revoke one credentialmachine:revoke at its bindingNocredential.revoke
Revoke the identitymachine:revoke at its bindingNoidentity.revoke

Issuing a credential cannot widen what an identity may do. The role is set when the identity is created, which is why machine:issue and machine:create are separate permissions.

Two more entries land on their own without anybody clicking. credential.drifted says a trust stopped matching the tokens arriving under it. credential.cloned says one host keypair authenticated from two places, which locks the credential.

Next: connect a platform.