For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append .md to any kestra.io/docs/* URL for plain Markdown.

Kestra Enterprise supports Role-Based Access Control (RBAC) to manage access to tenants, namespaces, flows, and resources.

Kestra has three types of entities:

  • Users: Represent a person. To add users to your Kestra instance, you can do one of the following:

    • Invite users to your instance or tenant from the UI
    • Sync users from an external identity provider using SCIM
    • Create users directly using Terraform
    • Automate user onboarding, offboarding, and group management from inside a flow using IAM tasks
  • Groups: Represent a collection of Users and Service Accounts. Groups are a useful mechanism for providing the same roles to multiple users or service accounts at once by binding a role to a group.

  • Service Accounts: Represent an application. They are treated as users when binding role assignments.

All these entities can be assigned to a role, which defines what resources the user, group, or service account can access. These entities do not belong to namespaces, but their permissions can be limited to specific namespaces via bindings on the IAM page.

The image below shows the relationship between Users, Groups, Service Accounts, Roles, and Bindings:

bindings

Roles and Bindings

A role is a collection of permissions that can be assigned to users, service accounts, or groups. Each permission is a combination of a resource (e.g., FLOW, EXECUTION, SECRET) and one or more actions (e.g., EXECUTE, VIEW, DELETE). A role alone grants nothing — it must be attached to a user, service account, or group via a binding on the IAM page.

Users, service accounts, and groups can hold any number of roles simultaneously. Bindings can be scoped to one or more namespaces — scoped access automatically extends to all child namespaces (for example, binding to prod also grants access to prod.engineering). You can configure a default role to assign it automatically to new users joining via SSO. Use Impersonate to verify a user’s effective permissions after assigning roles.

Impersonate

After assigning permissions to a user, Instance Owners can impersonate users to verify their access is correct. Impersonation switches your view to that user’s perspective and can be closed back to the Instance Owner view at any time.

Impersonate

Stop Impersonating User

Resources

A resource is a category of product entity or capability that can be controlled through RBAC. Each resource has its own set of allowed actions.

Core resources (namespace-scoped — bindings can restrict access to specific namespaces):

ResourceDescription
FLOWFlows, their revisions, graphs, and dependencies
EXECUTIONExecutions, their state, logs, outputs, and files
TRIGGERTriggers attached to flows
NAMESPACENamespaces and their files
KVSTOREKey-value store entries
SECRETSecrets stored in the namespace
CREDENTIALCredentials for external integrations (namespace-level and tenant-level)

Apps and features (tenant-scoped):

ResourceDescription
DASHBOARDCustom dashboards
BLUEPRINTCustom blueprints
APPApps and their executions
TESTSUITEUnit tests
ASSETData assets and lineage
MCP_SERVERMCP servers exposing flows as AI tools
COPILOTAI Copilot flow generation

Administration (tenant-scoped):

ResourceDescription
USERUsers in the tenant
GROUPGroups and their members
ROLERBAC roles
BINDINGRole-to-entity bindings
SERVICE_ACCOUNTService accounts
INVITATIONUser invitations
AUDITLOGAudit log entries
POLICYGovernance policies controlling flow and task behavior (namespace-scope and tenant-scope)
SYSTEM_SETTINGSInstance-level settings
TENANT_SETTINGSTenant-level settings

Actions

Each resource defines its own set of allowed actions. Not every action applies to every resource.

Common actions (available on most resources):

ActionMeaning
VIEWRead a single item’s details
LISTSearch or browse items
CREATECreate a new item
UPDATEModify an existing item
DELETERemove an item

Resource-specific actions:

ResourceAdditional actions
FLOWEXECUTE (trigger an execution), DISABLE, ENABLE, VALIDATE, EXPORT, IMPORT
EXECUTIONRESTART, KILL, REPLAY, PAUSE, RESUME, CHANGE_LABELS, ACCESS_LOGS, ACCESS_OUTPUTS, ACCESS_FILES, FOLLOW (live SSE stream), EXPORT, UNQUEUE, FORCE_RUN
TRIGGERUNLOCK, RESTART, DISABLE, ENABLE, EXPORT, BACKFILL
NAMESPACEMANAGE_FILES (all namespace file operations)
POLICYEXECUTE (dry-run evaluate a policy against its scope), EXPORT, IMPORT
APPEXECUTE, ACCESS_FILES, ACCESS_LOGS
TESTSUITEEXECUTE
AUDITLOGEXPORT
USERMANAGE_GROUP_MEMBERSHIP, IMPERSONATE
GROUPMANAGE_MEMBERS
COPILOTUSE (only action)
SYSTEM_SETTINGS— (VIEW and UPDATE only; no CREATE, DELETE, or LIST)
TENANT_SETTINGS— (VIEW and UPDATE only; no CREATE, DELETE, or LIST)

MCP server permissions

MCP_SERVER is a first-class RBAC resource that controls access to Kestra MCP servers. Supported actions are VIEW, LIST, CREATE, UPDATE, and DELETE.

Default role assignments:

RoleActions granted
AdminAll (VIEW, LIST, CREATE, UPDATE, DELETE)
Developer / EditorAll (VIEW, LIST, CREATE, UPDATE, DELETE)
Launcher— (not included)
ViewerVIEW, LIST

In addition to these permissions, access to a private MCP server is also flow-scoped: a user can connect to a private server only if they have FLOW: EXECUTE on at least one namespace that contains a flow with an McpToolTrigger pointing at that server.

Managed roles

Kestra ships five managed roles. Each role’s full permission set is visible under IAM → Roles. Instance Owners can create additional custom roles on top of these. Users can hold multiple roles.

RoleDescription
AdminAll actions on all resources.
DeveloperEverything Editor has, plus: full namespace management (including file management and plugin default import), secrets, credentials, and full blueprint CRUD. For engineers who also need platform-level access.
EditorFull flow and execution management (create, update, delete, execute, restart, kill, etc.), triggers, KV, dashboards, apps, test suites, assets, MCP servers, settings, and Copilot. No namespace file management, no secrets or credentials, blueprint read-only. No IAM resources.
LauncherExecute flows and monitor executions (EXECUTE, REPLAY, RESTART, CHANGE_LABELS, ACCESS_LOGS, ACCESS_OUTPUTS, ACCESS_FILES, FOLLOW, EXPORT). Read-only on triggers, KV, dashboards, and assets. No flow write access, no namespace management.
ViewerVIEW, LIST, and EXPORT on flows, executions, triggers, and namespaces. Can access execution logs, outputs, files, and live-follow executions. No execution state changes (no restart, kill, replay, etc.). No write access anywhere.

Instance Owner and Admin

Kestra provides two roles for managing your instance: Instance Owner and Admin.

  • Instance Owner is a user type with elevated privileges for global control.
  • Admin is a customizable role that grants full access to all resources (scoped to a tenant if multi-tenancy is enabled).
Summary

Key differences between Admin and Instance Owner:

FeatureAdmin (scoped to a tenant if enabled)Instance Owner
Access LevelBy default as all permissions, depends on the RoleManages tenants and IAM across all tenants
Tenant ManagementNoView, create, update, delete tenants across all tenants
User/Role/Group/Bindings ManagementHas the permission by defaultView, create, update, delete across all tenants
Flow/Execution ManagementHas the permission by defaultNo
Set Instance Owner privilegeNoYes

Instance Owner

Instance Owner is a powerful user type with instance-wide privileges. Use it sparingly — only for tasks that require it, such as creating tenants, troubleshooting, or helping a user.

Unlike tenant-scoped roles, Instance Owner operates across all tenants and does not require any Role or Binding. Instance Owners access instance-wide controls through the Instance Owner console, which covers tenant management, instance IAM, infrastructure, and governance.

For how to create Instance Owner users and manage the privilege, see Instance Owner.

Admin

Kestra has no Admin user type; Admin is a role with full permissions.

This role can be assigned to any user, service account, or group. This allows you to have different types of admins, grant admin permissions to a whole group, and revoke those permissions at any time without deleting any group or user.

When using multi-tenancy, Kestra assigns the Admin role to the user who created the tenant by default.

Creating a user with an Admin role

Through the UI

When launching Kestra for the first time with no prior CLI setup, you are prompted to set up Kestra through the Setup Page.

This creates the first user, automatically assigns the Admin role, and binds it.

Later, create a new user or select an existing user and assign the Admin role from the Access tab in IAM.

Through the CLI

To create a user with the Admin role from the CLI, use the --admin option:

kestra auths users create prod.admin@kestra.io TopSecret42 --admin
## schema:
kestra auths users create <username> <password> --admin

User lockout

Use the following configuration to change the lockout behavior after too many failed login attempts. By default, Kestra locks the user for the lock-duration period after a threshold number of failed attempts within the monitoring-window duration. The snippet below lists the default values — adjust them based on your preferences:

kestra:
security:
login:
failed-attempts:
threshold: 10
monitoring-window: PT5M
lock-duration: PT30M

The key attributes are:

  • threshold: Sets the number of allowed failed attempts before a user is locked out.
  • monitoring-window: Defines the period during which failed login attempts are counted before triggering a lock.
  • lock-duration: Defines how long the account remains locked.

With the configuration above, a user gets 10 failed login attempts in a 5-minute window before lockout. They must wait 30 minutes, be unlocked by an Admin, or reset their password using the Forgot Password link. An Instance Owner can also unlock a user manually from the user’s detail page.

Change password

Users can change their password from their profile, accessible via the user avatar in the bottom-left corner of the UI. “Forgot Password” settings can be configured in your Kestra configuration under basic-auth.password-reset. Settings to consider are the cooldown time between reset requests and how many requests can be made in a given time window.

kestra:
security:
basic-auth:
password-reset:
cooldown: PT5M # Minimum time required between two password reset emails for the same user
rate-limit:
max-requests: 10 # Maximum number of password reset requests allowed per client within the time window
window: PT1H # Time window during which password reset requests are counted for rate limiting

Reset a password as an Instance Owner

Users can reset their password via the Forgot Password link on the login page. An Instance Owner can also reset a user’s password from the User Edit page at Instance Owner → Instance IAM → Users.

Reset Password

Instance Owner Change Password

RBAC FAQ

Why is Admin a Role rather than User type?

The Admin role is a collection of permissions that can be assigned to users, service accounts, or groups. This lets you grant admin permissions to multiple users or groups, and revoke them at any time without deleting anything.

A user can start as Admin and later have that permission narrowed or removed. Multiple users can share the Admin role, or the same user can hold multiple roles with different scopes.

Users represent authentication (who you are); roles represent authorization (what you can do). Decoupling the two lets you grant permissions to multiple users or groups at once by attaching a single role to a group.

Why can't I edit an existing Binding?

A binding is immutable. If a binding no longer reflects the desired permissions, delete it and create a new one for the same user, service account, or group with different roles and/or namespaces. This prevents accidental changes to existing permissions.

What happens if you delete a Group?

All users and service accounts in that group lose the permissions granted by bindings attached to it. The users and service accounts themselves still exist.

Was this page helpful?