Administrator guide
Administrators manage Cloud Certainty StateCraft from Administration in the portal
(PortalUrl): connections, grants, roles, settings (including voice and assist), usage, execution
records, the audit log, and the licence. Everything is stored in the stack's DynamoDB table in your
account, and every change is written to the audit log.
Administration has the pages Connections, Grants, Roles, Settings, Usage, Executions, Audit log and Licence and about.
Roles
| Role | Can |
|---|---|
| User | Use the state machines their grants allow: view, see data, run and deploy, as granted. Own drafts, saved inputs and bulk jobs |
| Administrator | Every permission on every state machine of every connection (still bounded by each connection's access level and the plan), plus Administration: connections, grants, roles, settings, usage, execution records, audit log, licence. Administrators see everyone's bulk jobs, and can change and delete anyone's drafts and saved inputs |
- Everyone who signs in without a role entry is a User, and sees no state machines until a grant applies to them.
- Roles and grants match the user's email or groups. The email must be trusted: asserted by
your SAML IdP, verified by your OIDC IdP (
email_verified), or marked verified in the Cognito user pool (Identity providers). - In Administration › Roles, under Grant a role, choose User or Group, enter the email or the group name exactly as your IdP sends it (group names are case-sensitive), choose Administrator or User, and save. A role for a user wins over a role for one of their groups, so you can make a group administrators and keep one member a User. A change applies on the user's next request.
- You can't remove your own Administrator role. Grant it to at least one more person or group.
The bootstrap admin
BootstrapAdminEmail (a stack parameter) is the bootstrap admin. The first person who signs in
with that email is bound to it by their immutable user ID (the Cognito sub) and is always an
Administrator, which prevents lock-out. The Roles page shows the entry as set by the stack. The
binding is recorded in the audit log (bootstrap.bind). Someone else who later signs in with the
same email address but a different user ID is not the bootstrap admin.
Recovering the bootstrap admin
Reset the binding when the bootstrap admin's user ID changes (the user was recreated, the IdP issues
a new subject, or you switched IdentityProvider). Either:
- Use a different person: update the stack and change
BootstrapAdminEmail. The first sign-in with the new email takes over the binding. - Keep the same email: update the stack with
BootstrapAdminEmailset to another address you can sign in with, and sign in with it once. Then set it back and sign in with the original email, which takes the binding over again.
If another Administrator can still sign in, they can simply grant the Administrator role to the person by email under Administration › Roles.
Connections
A connection is one IAM role StateCraft assumes in one AWS account, with the Regions it covers and an access level (Administration › Connections).
| Connection | Role | Set by |
|---|---|---|
Local (local) | The hub stack's role /statecraft/<NamePrefix>-local-<Region>, in the hub account | The stack: LocalAccessLevel and LocalRegions (empty means the stack's Region). It can't be changed or deleted in the portal |
| Spoke | A role created by the spoke role template (spoke-role.yaml) in another account, /statecraft/<RoleName> (statecraft-spoke by default). It trusts only the hub's API and bulk job worker roles, and only with your external ID | The spoke stack's AccessLevel, and the Regions you choose here |
Access levels
The access level of a connection's role is the ceiling for everyone, administrators included. Grants can narrow it per user or group but never widen it.
| Access level | StateCraft may | Permissions it allows |
|---|---|---|
Read | List and read state machines, their definitions, versions, aliases, tags and metrics, executions, event histories, Map Runs, and the CloudWatch Logs of Express workflows | view, data |
Operate (default) | Read plus start, stop and redrive executions, run TestState, change running Map Runs, and bulk jobs | plus run |
Full | Operate plus create, update and delete state machines, publish and delete versions, create, change and delete aliases, and change tags, logging and tracing | plus deploy |
Whatever the level, the role passes only the execution roles in its stack's PassRoleArns
parameter to Step Functions (and only to Step Functions; StateCraft's own roles never), and uses
customer managed KMS keys only through Step Functions, limited to the keys in
StateMachineKmsKeyArns when you list them (parameter reference).
Use Read for production accounts where people should look but not touch, Operate where on-call
engineers need to stop and redrive, and Full only where teams deploy through StateCraft.
Add a connection
- Deploy the spoke role in the account
(installation guide). How to connect
another AWS account at the bottom of the page shows the steps, the template URL and an AWS CLI
command. Set
TrustedPrincipalto the hub stack'sSpokeTrustedPrincipaloutput (both role ARNs, comma-separated) and choose anExternalIdsecret of 16 or more characters. - Choose Add connection and enter:
- Id: a short name used in links, for example
production. It can't be changed later. - Name and AWS account id.
- Access level: the same as the spoke stack's
AccessLevel. - Role ARN: the spoke stack's
RoleArnoutput,arn:aws:iam::<account>:role/statecraft/<RoleName>. It must be in that account and under the/statecraft/path. - External ID: the same secret you gave the spoke stack. It is stored and never shown again; when you edit the connection, leave it empty to keep it.
- Regions to show.
- Id: a short name used in links, for example
- Save connection, then choose Test. The test assumes the role and, for each Region, reports how many state machines it found, or the AWS error.
Each distinct AWS account counts against your plan's account limit, the hub account included (3 on Starter, 10 on Team, 50 on Business, unlimited on Enterprise). When the limit is reached, Add connection is disabled. Deleting a connection makes StateCraft stop using the role, and grants on it stop applying; the role stays in the account until you delete its stack.
Grants
A grant gives a user or a group permissions on the state machines whose names match some patterns, on a connection (or all) in some Regions (or all) (Administration › Grants). A new grant, or a change, applies on the user's next request.
| Field | Values |
|---|---|
| Subject | A user (their sign-in email) or a group (the name as your IdP sends it in the groups claim) |
| Connection | One connection, or All connections (including ones you add later) |
| Regions | Some Regions, or All Regions |
| State machine patterns | One per line, up to 50, case-sensitive, for example orders-* or payments-??-prod. Letters, digits, _ and - besides the wildcards: * matches any run of characters and ? exactly one |
| Permissions | Any of the table below |
| Description | Optional, for your records |
| Permission | Allows | Implies | Needs |
|---|---|---|---|
view | See the state machine, its definition, versions, aliases, tags and metrics, and its executions, Map Runs and event histories, without inputs, outputs or error causes | ||
data | See execution inputs, outputs, error causes and the data in event histories; download them; compare outputs | view | |
run | Start, stop and redrive executions, run a state with TestState, change a running Map Run's concurrency and failure tolerance, save inputs, bulk jobs (Team and above) | data | the Operate or Full access level |
deploy | Create, update and delete the state machine, publish and delete versions, create, change and delete aliases (including canary weights), change tags, logging and tracing | run | the Full access level |
How grants combine
- A user's permissions on a state machine are the union of every grant that matches them, through their email or any of their groups, whose connection, Region and patterns match the machine, capped by the connection's access level and the plan.
- Child executions of a Distributed Map belong to the parent state machine: a grant on the parent covers them.
- A user with no matching grant gets "not found" for a state machine: StateCraft doesn't reveal that it exists. A state machine they can see but not use in that way answers "forbidden".
- Administrators have every permission everywhere, still bounded by each connection's access level and the plan.
- State machines whose names contain characters other than letters, digits,
_and-are shown to administrators only.
How grants are enforced
Grants are enforced twice. StateCraft checks them on every request, and every AWS call runs with temporary credentials (15 minutes) that a per-request session policy limits to the user's grants: Step Functions actions only on the state machines, versions, aliases, executions and Map Runs that match the user's patterns, and only the actions their permissions allow. Even if StateCraft's own check had a bug, AWS would refuse anything outside the grants.
Data without data. IAM can't separate an execution's metadata from its data, so for people
without data StateCraft asks Step Functions for metadata only and leaves inputs, outputs and causes
out of what it returns. For state machines encrypted with a customer managed key, AWS enforces it as
well: the session of a person without data has no permission to decrypt.
If someone's grants would make a session policy larger than AWS allows, StateCraft refuses the
request ("too many grants") rather than widening it. Combine grants: use groups, and patterns such
as orders-* instead of many single names.
Examples
| Goal | Grant |
|---|---|
| The payments team can run and redrive their workflows in production, but not deploy | group payments, connection production (Operate), all Regions, payments-*, run |
| Support can see which orders failed, without seeing order data | group support, all connections, all Regions, orders-*, view |
| Developers can deploy anything in the sandbox account | group developers, connection sandbox (Full), all Regions, *, deploy |
| An on-call engineer can see data of every workflow and stop and redrive them | user [email protected], connection production (Operate), all Regions, *, run |
| Data engineers can run the ETL workflows in two Regions | group data-engineers, connection data-lake (Operate), eu-west-1 and us-east-1, etl-* and ingest-*, run |
Settings
Administration › Settings:
| Setting | Default | Meaning |
|---|---|---|
| Allowed IP ranges (CIDR) | empty (any network) | Business and above. One IPv4 or IPv6 range per line. People outside these ranges can sign in but can't use StateCraft. A list that doesn't contain your own address is refused, so you can't lock yourself out |
| Voice | Amazon Transcribe | How speech becomes text (see Voice and assist): Amazon Transcribe, Browser speech service or Off |
| Voice language | en-US | The language Amazon Transcribe listens for: en-US, en-GB, en-AU, en-IN, de-DE, fr-FR or es-US. People can choose another one for their own sessions |
| Assist | off | Business and above. Lets people use assist in the designer (see Voice and assist) |
| Price per 1,000 state transitions (US dollars) | 0.025 | 0 to 10. Used for the cost of Standard executions. Set your Region's Step Functions price, or your negotiated price |
| Express price per million requests (US dollars) | 1.00 | Used for the cost of Express executions |
| Express price per GB-second (US dollars) | 0.00001667 | Used for the cost of Express executions |
Voice and assist
Voice
People can speak and type commands that build and change workflows and move around the portal (see the user guide). Typed commands are always available. For speech, choose one engine under Settings › Voice:
| Engine | Where audio goes | Needs |
|---|---|---|
| Amazon Transcribe (default) | From each person's browser straight to Amazon Transcribe streaming in the stack's Region, in your account, through a URL StateCraft signs for that person, valid for 5 minutes | Voice = Enabled on the stack (the default) |
| Browser speech service | To the browser's own speech recognition. In Chrome and Edge that is the browser vendor's web service, outside your AWS account. The portal tells people where their audio goes | A browser that supports the Web Speech API |
| Off | Nowhere: no microphone, typed commands only |
StateCraft never stores audio or transcripts. Each Transcribe session is counted under Usage, and its signing appears in CloudTrail with the person's email as the source identity. Amazon Transcribe may use content to improve AWS services unless your organisation has an AWS Organizations AI services opt-out policy. For microphone permissions, browser policies and the portal's Content Security Policy, see Voice in the installation guide.
Assist
Business and above. Assist sends a person's description of a workflow (and, for a change, the current definition) to Claude on Amazon Bedrock in your account and shows the proposal as a diff the person accepts or rejects; nothing is applied or deployed without them. To turn it on:
- Check the stack's
AssistModelId(Claude Opus 5.5 by default) andAssistRegion(the stack's Region by default), and that the model is available to your account there (Assist in the installation guide). - Turn on Settings › Assist.
Every request is counted under Usage and recorded in the audit log (assist.workflow, with the
first 500 characters of the description). Bedrock bills the tokens to your AWS account.
Usage
Administration › Usage shows what your teams did through StateCraft over the last 30 days, per day: executions started, stopped and redriven, deploys, TestState runs, bulk job items, voice sessions and assist requests. On Business and above, the same per user, for the 50 users who started the most executions.
Usage is kept for 400 days. It counts actions taken through StateCraft only; executions started by your applications don't appear here (the fleet view's metrics include them).
Executions
Administration › Executions lists, day by day, who started, stopped, redrove or re-ran which execution through StateCraft, with the connection, Region, state machine and whether it came from a bulk job. Step Functions itself doesn't record who started an execution; these records do, for your plan's history days (30 on Starter, 90 on Team, 365 on Business and 730 on Enterprise). The same person appears on the execution's page.
Audit log
Administration › Audit log lists events by UTC day, newest first, with the time, the actor, the action, the target and the source IP. Open an event for its details. Filter this page searches the events shown.
| Action | When |
|---|---|
bootstrap.bind | The bootstrap admin was bound to a user |
role.put, role.delete | A role was granted or removed |
connection.put, connection.delete | A connection was added, changed or deleted |
grant.put, grant.delete | A grant was added, changed or deleted |
settings.put | Settings were changed |
licence.refresh | An administrator checked the licence |
update.available | A new release was found |
statemachine.create, statemachine.update, statemachine.delete | A state machine was created, changed (with the SHA-256 of the definition) or deleted |
version.publish, version.delete | A version was published or deleted |
alias.put, alias.delete | An alias was created or changed (including its weights), or deleted |
execution.start, execution.stop, execution.redrive | An execution was started (with the name, version or alias, and the SHA-256 and size of the input), stopped or redriven |
maprun.update | A running Map Run's concurrency or failure tolerance was changed |
state.test | A state was run with TestState |
bulk.create | A bulk job was started |
draft.put, draft.delete | A draft was created, changed or deleted |
assist.workflow | Assist was asked for a workflow (the first 500 characters of the description) |
access.denied | A request was refused for a missing permission or an address outside the IP allowlist |
Events are kept for your plan's audit days: 30 on Starter, 90 on Team, 365 on Business and 3,650 on
Enterprise. Each event is also written to the API's CloudWatch log group,
/aws/lambda/<NamePrefix>-api, kept for the stack's LogRetentionDays, so you can forward it to your
SIEM.
For a full trail, CloudTrail in each account records every Step Functions, CloudWatch, CloudWatch
Logs and KMS call StateCraft makes with sourceIdentity set to the user's email and the role
session name sc-<email>. Calls made by a bulk job carry the job owner's email.
Licence and about
Administration › Licence and about shows your licence, your plan and the installed version.
Licence
StateCraft reads your AWS Marketplace licence from AWS License Manager in the hub account. The page shows the status, the plan, the entitlements, when the licence is valid until and when it was last checked. Check licence now reads it again (StateCraft otherwise rechecks every 10 minutes).
| Status | Meaning |
|---|---|
| Active | The licence is valid |
| Grace period | License Manager is unreachable, or an active licence disappeared (for example while you move between plans). The last active plan keeps working for 72 hours |
| Expired | The grace period ended without an active licence |
| No licence | The account has no StateCraft licence |
Without a valid licence every page except this one says a licence is required. Nothing is deleted; subscribing again unlocks StateCraft. Your state machines and executions are not affected: they run in Step Functions whether StateCraft is licensed or not.
Plan
What your plan includes lists the limits and features of your plan:
| Starter | Team | Business | Enterprise | |
|---|---|---|---|---|
| AWS accounts | 3 | 10 | 50 | unlimited |
| Drafts per user | 25 | 250 | 1,000 | unlimited |
| Saved inputs per user | 50 | 500 | 2,000 | unlimited |
| Versions kept per draft | 5 | 25 | 50 | 100 |
| Execution records and bulk jobs kept | 30 days | 90 days | 365 days | 730 days |
| Audit log kept | 30 days | 90 days | 365 days | 3,650 days |
| Executions per bulk job | no bulk jobs | 100 | 250 | 500 |
| Fleet view, execution explorer, search, starting, stopping and redriving executions, the designer with TestState and deploy, voice and typed commands, private drafts and saved inputs, daily usage, grants, execution records, audit log, IAM Identity Center and Cognito sign-in | yes | yes | yes | yes |
| Shared drafts and saved inputs, bulk jobs, SAML and OIDC sign-in | yes | yes | yes | |
| IP allowlist, usage by user, assist | yes | yes |
Features your plan doesn't include show a plan badge, and StateCraft refuses them. To change plan, see Changing plan.
Version and updates
The version card shows the installed version and, when update checks are on (UpdateChecks), the
latest release, its summary and release notes, whether it is a security release, the oldest supported
version, and How to upgrade with the template URL and an AWS CLI command. A banner on the
Administration pages announces a newer release once. See Upgrading.
Something unclear or missing? Email [email protected].