Introduction
Formal’s permission system is built on the Open Policy Agent (OPA), allowing you to restrict user access to specific applications through Rego policies. By defining granular permissions, you can ensure users have access only to the applications necessary for their roles and responsibilities. These permissions are enforced against our API endpoints.Default permissions
Upon account creation, Formal operates under an allow-by-default model. Meaning, by default, if no permission blocks an endpoint for a given user, then the endpoint is allowed.Permission Model
Unlike other software products, Formal does not have the traditional concept of Roles. Instead, users can leverage Permissions to create role based access control (RBAC) using your organization’s Groups (which can be SCIM provisioned from your IDP into Formal).User experience when blocked
The Formal APIs will return HTTP 403 error status codes if a user is blocked on a particular endpoint. Users who are interacting with the Formal APIs through the Formal console will experience “Forbidden” toasts or dialogs.
List of inputs
You can block or allow requests based on the following user and application inputs:User inputs
input.user.idinput.user.nameinput.user.first_nameinput.user.last_nameinput.user.emailinput.user.groupsinput.user.ip_address
Application inputs
input.app.nameinput.app.command.nameinput.app.command.type
List of command types
Here is a table listing all command types that can be used. If the API call contains the operation, then it is categorized as the corresponding type.| Type | Operations |
|---|---|
| read | Get, List |
| create | Create |
| update | Update |
| delete | Delete |
| login | Login |
List of applications
API endpoints are segmented into Applications. Here is a table listing all applications that can be configured for access permissions:Public API
Public API
These applications have public API endpoints accessible via API keys or the web console.
| Name | Description |
|---|---|
| Connector | Manage Connector proxy instances and listeners. |
| Graph | View Formal’s data graph. |
| Group | Manage user groups for role-based access control. |
| IntegrationBI | Manage BI tool integrations (Metabase, Looker, Fivetran). |
| IntegrationCloud | Manage cloud provider integrations (AWS, GCP, Azure). |
| IntegrationDataCatalog | Manage data catalog integrations (Datahub). |
| IntegrationMDM | Manage Mobile Device Management integrations. |
| IntegrationsLog | Manage log forwarding (Splunk, Datadog, S3). |
| Inventory | Manage discovered schemas, tables, and columns. |
| Logs | View and manage audit logs and retention settings. |
| Permissions | Manage OPA permissions for this API. |
| Policies | Manage data access policies (masking, blocking, alerts). |
| PolicyDataLoader | Manage external data loaders for policy context. |
| Resource | Manage datastores and APIs proxied by Formal. |
| Satellite | Manage Satellite deployments for data discovery. |
| ScenarioMonitoring | Manage real-time alerts and monitoring rules. |
| Sessions | View and replay user session recordings. |
| Sidecar | Legacy Connector management (use Connector instead). |
| Space | Manage Spaces for organizing resources by team or project. |
| User | Manage users, invitations, and account settings. |
| Workflow | Manage automated workflows across Formal. |
Web Console Only
Web Console Only
These applications are only accessible through the Formal web console and do not have public API documentation.
For web console only applications, we recommend restricting access at the application level rather than by individual command types, since the available commands are not publicly documented.
| Name | Description |
|---|---|
| Access | View and manage personal access tokens. |
| DSPM | Manage DSPM jobs and tasks. |
| Dashboard | View dashboard home page statistics. |
| Desktop | Approve personal desktop app logins. |
| Developer | Manage developer API keys. |
| DirectorySync | Configure SCIM directory sync with identity providers. |
| Slack | Configure Slack notifications and alerts. |
| Sso | Configure SAML Single Sign-On. |
| Version | View latest connector and satellite versions. |
Example: Single Application
Below is an example of a Rego policy that grants access to the Sessions application exclusively for users in the admin group.Example: Granular Access Control
- Broad read access: Everyone can view most data using
readcommand types. - Self-service access: Everyone can manage their own credentials in the Access app.
- Administrative access: Users in
security-adminshave unrestricted access to all apps. - Team-specific access: Users in the
engineersgroup can access developer-focused tools.
default allow = false is set, any request that does not match at least one of these allow rules is blocked. Formal returns a 403 Forbidden error for these requests.