Skip to main content

Actions

Every Role rule names exactly one action. Actions are matched by exact name: wildcards such as * and playbook:* aren't supported.

Actions on resources​

ActionResourceTargetAllows
readEvery typeNoneOpening and listing resources, and the records that belong to them
createEvery type except check, person and viewNoneCreating resources. The Scope must select whole types
updateEvery type except check, person and viewNoneChanging resources. The Scope must select whole types
deleteEvery type except check, person and viewNoneDeleting resources. The Scope must select whole types
playbook:runPlaybookOptional: config, component or checkRunning a playbook, with no target or on a target in the rule's target Scope
playbook:approvePlaybookOptional: config, component or checkApproving a run that needs approval
playbook:cancelPlaybookOptional: config, component or checkCancelling a run
mcp:runPlaybookNoneRunning a playbook through MCP. A playbook only appears as an MCP tool to subjects with it
invoke:<plugin>:<operation>ConfigNoneInvoking a plugin operation on a config
connection:useConnectionNoneActing with a connection's credentials, and testing the connection

The types are those of Scopes. Checks are only written by Mission Control itself, and people are managed with person:manage. Views are defined as Kubernetes resources, so Mission Control has no create or update for them.

read on connections, and create, update and delete on every type, need a Scope that selects the whole type.

These actions govern the Mission Control UI and API. Applying Mission Control resources with kubectl is controlled by your cluster's Kubernetes RBAC instead.

Actions without a resource​

A rule with one of these actions omits resource and target. These rules never apply through a RoleBinding with a constraint.

ActionAllows
person:manageInviting, disabling, re-enabling and deleting accounts, and changing their properties, name or email
access:reviewAsking what any subject may do, on the Subjects page under Settings or through /rbac/subject-access-reviews and /rbac/subject-access-search
mcp:useUsing Mission Control's MCP server at all. Each MCP tool still checks what it touches
property:manageReading private properties, and creating, changing and deleting any property
event:readReading the event queue, and the recent events playbooks and notifications have handled
job:readReading all job history
kubernetes-proxy:readKubernetes API requests through Mission Control's proxy, as the Kubernetes user mission-control-reader
kubernetes-proxy:writeKubernetes API requests through Mission Control's proxy, as the Kubernetes user mission-control-writer
Admin-level actions

person:manage and job:read are as privileged as admin. An invite that names teams grants whatever those teams' bindings grant, and changing a person's email moves bindings from one person to another. Job details and errors mention resources the holder may not otherwise be able to read.

  • access:review grants reading nothing. A search only returns resources the reviewer may read, and reviewing access across a type also takes read on that type.
  • Properties whose names start with public. are readable by any signed-in subject without a rule.
  • event:read and job:read are all or nothing. A job history row about a resource is listed with job:read, even when the subject can't read the resource.

Kubernetes proxy​

The Kubernetes proxy reaches only the cluster Mission Control runs in. It authenticates as Mission Control's own service account, and impersonates mission-control-writer when the subject has kubernetes-proxy:write, otherwise mission-control-reader when it has kubernetes-proxy:read. Otherwise the request is refused. The cluster's RBAC decides what each Kubernetes user may do.

Every proxy request is checked as the subject making it, so a token's limit and a deny binding apply to the next request. Downloading a kubeconfig needs either action, and its credential is an personal access token bound to the shipped kubernetes-proxy Role.

What each operation checks​

An operation can make more than one check, and each check needs its own matching rule. For example, running playbook P on config X needs two rules: playbook:run with P in its resource Scope and X in its target Scope, and read with X in its resource Scope. To find P in the UI, you also need read on P.

In the table, "P, then X" means the first check is made on P and the second on X.

OperationCheckResourceTarget
Run playbook P with no resourceplaybook:runPNone
Run playbook P on resource Xplaybook:run, then readP, then XX, then none
Run playbook P through MCPmcp:run, then the checks of the runPNone
Approve or cancel run Rplaybook:approve or playbook:cancel, then read if R had a resourceR's playbook, then R's resourceR's resource, then none
Invoke a plugin operation on config Cinvoke:<plugin>:<operation>, then readC, then CNone
Open resource XreadXNone
Open view V, or read its rows or panelsreadVNone
Connect to the MCP servermcp:useNoneNone
Review what a subject may doaccess:reviewNoneNone
Read private properties, or create, change or delete a propertyproperty:manageNoneNone
Read the event queue or recent eventsevent:readNoneNone
Read job historyjob:readNoneNone
Send a request through the Kubernetes proxykubernetes-proxy:write, else kubernetes-proxy:readNoneNone
Download a kubeconfigkubernetes-proxy:write or kubernetes-proxy:readNoneNone
Use connection C, for example to send a notificationconnection:useCNone
Test connection Cconnection:useCNone
Create, change or delete a resource of type Tcreate, update or deleteEvery resource of TNone

Starting an operation is checked as the person who starts it. Everything a playbook run then does is checked as the playbook, and a notification is checked as itself when it's sent. A plugin acts as the person who invoked it, but its connection lookups are checked as the plugin. See Permissions for automation.

Approving or cancelling a run checks read on its resource for the same reason running it does: the run, its parameters and its results are only readable with that resource.