Use Access Rules to assign access to resources based on user attributes (ABAC), enabling Joiner-Mover-Leaver (JML) workflows
Data fabric layer
The Data fabric is composed of an access graph, where Opal tracks and exposes all direct and indirect access paths. Opal’s integration catalog lets you easily connect to your HR, identity, cloud, data, SaaS, and custom systems. Custom connections provide the flexibility to combine and connect additional systems.Remote systems connect to the data fabric layer through a robust Bidirectional sync, which propagates all access changes to and from your end systems. Okta, AWS, and Azure also support real-time syncs, so access stays up-to-date.See individual integrations guides—e.g., AWS and GCP—for details on capabilities.
Additional data sources
Additionally enrich your user data by syncing attributes from User directories and systems of record, such as Okta.
On-call schedules
Sync Opal groups with On-call schedules pulled from services such as PagerDuty and Opsgenie.
Orchestration tools
To scale and configure your Opal deployment, you can:
Set up Terraform to programmatically manage your Opal configuration and orchestrate your configuration
Connect to Opal’s MCP server to allow your AI agents to interact with Opal
SIEM and logging tools
Opal’s integrations with SIEM providers and logging tools allow you to stream Opal events directly to your logging providers, such as DataDog and SumoLogic. Set up events streaming to get started.
ITSM tools
Opal can connect to your ticketing providers–Jira, Linear, or ServiceNow—to propagate access using tickets, create audit tickets, and link requests to existing tickets in Opal.
Deploy Opal
Deploy Opal with your preferred method:
Use Opal Cloud to quickly connect to Opal’s cloud instance
Set up self-hosted Opal on AWS EKS or GKE using Helm or KOTS to configure deployments
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Opal Security Docs","colors":{"primary":"#0C7997","light":"#EDFCFC","dark":"#074055"},"logo":{"light":"https://mintcdn.com/opalsecurity/FBbZyeMPZrA69UcV/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=FBbZyeMPZrA69UcV\u0026q=85\u0026s=93a4bd75f157f9f0ab43cdf4d715b5cd","dark":"https://mintcdn.com/opalsecurity/FBbZyeMPZrA69UcV/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=FBbZyeMPZrA69UcV\u0026q=85\u0026s=1774b545e4f1c5cad647f5194f7b26d9"},"favicon":{"light":"https://mintcdn.com/opalsecurity/DRAwGKUXMxLRQouh/logo/icon-opal-black.svg?fit=max\u0026auto=format\u0026n=DRAwGKUXMxLRQouh\u0026q=85\u0026s=9c8bd1204b6b5b83542c2ab5be549858","dark":"https://mintcdn.com/opalsecurity/DRAwGKUXMxLRQouh/logo/icon-opal-white.svg?fit=max\u0026auto=format\u0026n=DRAwGKUXMxLRQouh\u0026q=85\u0026s=73b53b4ceab6ae0b00e30b2042a6020a"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"integrations":{"ga4":{"measurementId":"G-1PPPM1WF6D"}},"errors":{"404":{"redirect":false,"title":"Page can't be found","description":"Sorry! This page might have been moved, or the link might be broken. Go back to our documentation via https://docs.opal.dev/docs/welcome."}},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"opalsecurity","hasAudioNarration":false,"actualSubdomain":"opalsecurity","customDomains":["docs.opal.dev"],"gitSource":{"type":"github","owner":"opalsecurity","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af7bc9ca5d707e66c231413","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":218},{"language":"default","tag":"Opal API","count":213},{"language":"default","tag":"Documentation","count":104},{"language":"default","tag":"Integrations","count":103},{"language":"default","tag":"Entitlement Management","count":69},{"language":"default","tag":"resources","count":34},{"language":"default","tag":"groups","count":32},{"language":"default","tag":"Getting Started","count":25},{"language":"default","tag":"Access Management","count":22},{"language":"default","tag":"Infrastructure","count":22}]},"assistantConfig":{"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"deflection":{"enabled":true,"email":"support@opal.dev","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"docs/opal-architecture","slug":"/docs/opal-architecture","pageMetadata":{"title":"Opal architecture","description":"Learn about components in Opal's identity management platform.","href":"/docs/opal-architecture"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn about components in Opal’s identity management platform.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,hr:`hr`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,OptimizedImage}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Use this guide for an overview of Opal’s architecture and system components.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=ac9430e1f0744689178d112874021bbd`,alt:``,\"data-og-width\":`2162`,width:`2162`,\"data-og-height\":`1618`,height:`1618`,\"data-path\":`images/docs/architecture-diagram.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=280\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=8e67548ea7bd82b984ecfd861d11e95f 280w, https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=560\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=4220e904d848093401ad683f05040f4d 560w, https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=840\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=30520fe3a4d5dc78d102b030d1ccb212 840w, https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=94da6f5ed5334e30733705bd08a1ff1d 1100w, https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=8d712530ff7e2361954fb22b86dfb085 1650w, https://mintcdn.com/opalsecurity/vBw8FkddwxmzMybH/images/docs/architecture-diagram.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vBw8FkddwxmzMybH\u0026q=85\u0026s=52e2f9dc96cfef2873d62c1ec914078d 2500w`}),`\n`,_jsx(Heading,{level:`3`,id:`end-user-experience`,children:`End user experience`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`End users`}),` request access to your resources using Opal’s `,_jsx(_components.a,{href:`/docs/end-user-faq`,children:`web UI`}),`, `,_jsx(_components.a,{href:`/integrations/slack`,children:`Slack`}),`, `,_jsx(_components.a,{href:`/integrations/microsoft-teams`,children:`Microsoft Teams`}),`, `,_jsx(_components.a,{href:`/integrations/google-chat`,children:`Google Chat`}),`, or the `,_jsx(_components.a,{href:`/docs/opal-cli`,children:`Opal CLI`}),`. AI agents can request access using Opal’s `,_jsx(_components.a,{href:`/docs/mcp/overview`,children:`MCP server`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`orchestration-layer`,children:`Orchestration layer`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Orchestration layer`}),`, admins can:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Configure `,_jsx(_components.a,{href:`/docs/configure-reviewers`,children:`approval workflows`}),` to customize how resources are requested and approved`]}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.a,{href:`/docs/least-privilege-posture-management`,children:`Risk Center`}),` to view insights on anomalous access and proactively remediate vulnerabilities`]}),`\n`,_jsxs(_components.li,{children:[`Create `,_jsx(_components.a,{href:`/docs/access-campaigns`,children:`user access reviews`}),` to streamline compliance`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.a,{href:`/docs/access-rules`,children:`Access Rules`}),` to assign access to resources based on user attributes (ABAC), enabling Joiner-Mover-Leaver (JML) workflows`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`data-fabric-layer`,children:`Data fabric layer`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Data fabric`}),` is composed of an access graph, where Opal tracks and exposes all direct and indirect access paths. Opal’s integration catalog lets you easily connect to your `,_jsx(_components.a,{href:`/docs/set-up-connections`,children:`HR, identity, cloud, data, SaaS, and custom systems`}),`. Custom connections provide the flexibility to combine and connect additional systems.`]}),`\n`,_jsxs(_components.p,{children:[`Remote systems connect to the data fabric layer through a robust `,_jsx(_components.strong,{children:`Bidirectional sync`}),`, which propagates all access changes to and from your end systems. Okta, AWS, and Azure also support real-time syncs, so access stays up-to-date.`]}),`\n`,_jsxs(_components.p,{children:[`See individual integrations guides—e.g., `,_jsx(_components.a,{href:`/integrations/setting-up-your-aws-organization-in-opal`,children:`AWS`}),` and `,_jsx(_components.a,{href:`/integrations/google-cloud-platform`,children:`GCP`}),`—for details on capabilities.`]}),`\n`,_jsx(Heading,{level:`4`,id:`additional-data-sources`,children:`Additional data sources`}),`\n`,_jsxs(_components.p,{children:[`Additionally enrich your user data by syncing attributes from `,_jsx(_components.strong,{children:`User directories`}),` and systems of record, such as Okta.`]}),`\n`,_jsx(Heading,{level:`4`,id:`on-call-schedules`,children:`On-call schedules`}),`\n`,_jsxs(_components.p,{children:[`Sync Opal groups with `,_jsx(_components.strong,{children:`On-call schedules`}),` pulled from services such as `,_jsx(_components.a,{href:`/integrations/pagerduty-oncall`,children:`PagerDuty`}),` and `,_jsx(_components.a,{href:`/integrations/opsgenie`,children:`Opsgenie`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`orchestration-tools`,children:`Orchestration tools`}),`\n`,_jsx(_components.p,{children:`To scale and configure your Opal deployment, you can:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/docs/use-terraform-with-opal`,children:`Set up Terraform`}),` to programmatically manage your Opal configuration and orchestrate your configuration`]}),`\n`,_jsxs(_components.li,{children:[`Use Opal’s `,_jsx(_components.a,{href:`/reference/`,children:`REST API`}),` to connect to Opal objects`]}),`\n`,_jsxs(_components.li,{children:[`Connect to Opal’s `,_jsx(_components.a,{href:`/docs/mcp/overview`,children:`MCP server`}),` to allow your AI agents to interact with Opal`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`siem-and-logging-tools`,children:`SIEM and logging tools`}),`\n`,_jsxs(_components.p,{children:[`Opal’s integrations with SIEM providers and logging tools allow you to stream Opal events directly to your logging providers, such as DataDog and SumoLogic. Set up `,_jsx(_components.a,{href:`/docs/events-streaming`,children:`events streaming`}),` to get started.`]}),`\n`,_jsx(Heading,{level:`3`,id:`itsm-tools`,children:`ITSM tools`}),`\n`,_jsxs(_components.p,{children:[`Opal can connect to your `,_jsx(_components.a,{href:`/docs/ticket-propagation`,children:`ticketing providers`}),`–Jira, Linear, or ServiceNow—to propagate access using tickets, create audit tickets, and link requests to existing tickets in Opal.`]}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-opal`,children:`Deploy Opal`}),`\n`,_jsx(_components.p,{children:`Deploy Opal with your preferred method:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.a,{href:`/docs/set-up-cloud`,children:`Opal Cloud`}),` to quickly connect to Opal’s cloud instance`]}),`\n`,_jsxs(_components.li,{children:[`Set up self-hosted Opal on `,_jsx(_components.a,{href:`/docs/self-host-opal-aws-guide`,children:`AWS EKS`}),` or `,_jsx(_components.a,{href:`/docs/self-host-opal-gke-guide`,children:`GKE`}),` using `,_jsx(_components.a,{href:`/docs/install-opal-using-helm`,children:`Helm`}),` or KOTS to configure deployments`]}),`\n`,_jsxs(_components.li,{children:[`Configure `,_jsx(_components.a,{href:`/docs/setup-an-airgapped-opal-environment`,children:`airgapped deployments`}),` for self-hosted Opal`]}),`\n`]}),`\n`,_jsx(_components.hr,{})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Opal architecture","description":"Learn about components in Opal's identity management platform.","href":"/docs/opal-architecture"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"End user experience","slug":"end-user-experience","depth":3,"children":[]},{"title":"Orchestration layer","slug":"orchestration-layer","depth":3,"children":[]},{"title":"Data fabric layer","slug":"data-fabric-layer","depth":3,"children":[]},{"title":"Additional data sources","slug":"additional-data-sources","depth":4,"children":[]},{"title":"On-call schedules","slug":"on-call-schedules","depth":4,"children":[]},{"title":"Orchestration tools","slug":"orchestration-tools","depth":3,"children":[]},{"title":"SIEM and logging tools","slug":"siem-and-logging-tools","depth":3,"children":[]},{"title":"ITSM tools","slug":"itsm-tools","depth":3,"children":[]},{"title":"Deploy Opal","slug":"deploy-opal","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/opalsecurity/d0e14c3cf9bbd682/changelog-scraper.js"],"subdomain":"opalsecurity","siteName":"Opal Security Docs","title":"Opal architecture - Opal Security Docs","contextualStarterQuestions":[{"_id":"6ae929fee5cdd9b6bd9863cf","deploymentId":"68ddaa9a3f8b7de5bc3a7b47","questionText":"What can admins configure in Opal?","status":"active","generatedBy":"contextual","path":"docs/opal-architecture","createdAt":"2026-11-03T00:25:34.015Z","updatedAt":"2026-11-03T00:25:34.015Z","__v":0},{"_id":"6ae929fee5cdd9b6bd9863cd","deploymentId":"68ddaa9a3f8b7de5bc3a7b47","questionText":"What are Opal's main components?","status":"active","generatedBy":"contextual","path":"docs/opal-architecture","createdAt":"2026-11-03T00:25:34.015Z","updatedAt":"2026-11-03T00:25:34.015Z","__v":0},{"_id":"6ae929fee5cdd9b6bd9863ce","deploymentId":"68ddaa9a3f8b7de5bc3a7b47","questionText":"How do end users request access?","status":"active","generatedBy":"contextual","path":"docs/opal-architecture","createdAt":"2026-11-03T00:25:34.015Z","updatedAt":"2026-11-03T00:25:34.015Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T00:25:21.530Z","gitLastModified":"2026-11-03T00:24:59.000Z","originalFileLocation":"docs/opal-architecture.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn about components in Opal\u0026#x27;s identity management platform.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Opal Security Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Opal architecture - Opal Security Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn about components in Opal\u0026#x27;s identity management platform.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Opal Security Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.opal.dev/docs/opal-architecture\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://opalsecurity.mintlify.site/_mintlify/api/og/v2?division=Welcome\u0026amp;title=Opal+architecture\u0026amp;description=Learn+about+components+in+Opal%27s+identity+management+platform.\u0026amp;theme=156eb1ba223f12a303f95077\u0026amp;signature=225c7cc2e05661391c5b11941167bef12a3d01d464b9d6e8ffbcd7eb6822c078\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Opal architecture - Opal Security Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn about components in Opal\u0026#x27;s identity management platform.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://opalsecurity.mintlify.site/_mintlify/api/og/v2?division=Welcome\u0026amp;title=Opal+architecture\u0026amp;description=Learn+about+components+in+Opal%27s+identity+management+platform.\u0026amp;theme=156eb1ba223f12a303f95077\u0026amp;signature=225c7cc2e05661391c5b11941167bef12a3d01d464b9d6e8ffbcd7eb6822c078\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/opalsecurity/t501z2uOx-XXqevB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Opal Security Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0C7997\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.opal.dev/docs/opal-architecture\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/opal-architecture.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.opal.dev/#organization\",\"name\":\"Opal Security Docs\",\"url\":\"https://docs.opal.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/opalsecurity/FBbZyeMPZrA69UcV/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=FBbZyeMPZrA69UcV\u0026q=85\u0026s=93a4bd75f157f9f0ab43cdf4d715b5cd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.opal.dev#website\",\"name\":\"Opal Security Docs\",\"url\":\"https://docs.opal.dev\",\"publisher\":{\"@id\":\"https://docs.opal.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.opal.dev/docs/opal-architecture#webpage\",\"url\":\"https://docs.opal.dev/docs/opal-architecture\",\"name\":\"Opal architecture\",\"description\":\"Learn about components in Opal's identity management platform.\",\"dateModified\":\"2026-11-03T00:24:59.000Z\",\"isPartOf\":{\"@id\":\"https://docs.opal.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.opal.dev/docs/opal-architecture#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.opal.dev/docs/opal-architecture#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Welcome\",\"item\":\"https://docs.opal.dev/docs/welcome\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Opal architecture\",\"item\":\"https://docs.opal.dev/docs/opal-architecture\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.opal.dev/docs/opal-architecture#article\",\"headline\":\"Opal architecture\",\"name\":\"Opal architecture\",\"description\":\"Learn about components in Opal's identity management platform.\",\"url\":\"https://docs.opal.dev/docs/opal-architecture\",\"mainEntityOfPage\":{\"@id\":\"https://docs.opal.dev/docs/opal-architecture#webpage\"},\"dateModified\":\"2026-11-03T00:24:59.000Z\",\"publisher\":{\"@id\":\"https://docs.opal.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.opal.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Opal Security Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Opal Security Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/opal-architecture.md","siteName":"Opal Security Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Welcome","icon":"leaf","pages":[{"title":"Quickstart","mode":"wide","href":"/docs/welcome"},{"title":"Overview","href":"/docs/opal-overview"},{"title":"Concepts","description":"Learn about fundamental concepts and objects in Opal.","href":"/docs/opal-101"},{"title":"Opal architecture","href":"/docs/opal-architecture"},{"group":"Best practices","pages":[{"title":"Best practices for access requests","description":"Learn about best practices for organizing and configuring resources.","href":"/docs/best-practices-for-access-requests"},{"title":"Best practices for access reviews","href":"/docs/best-practices-for-user-access-reviews"}]}]},{"group":"End user","icon":"book-open","pages":[{"title":"Access Request FAQs","sidebarTitle":"How to request access","href":"/docs/end-user-faq"},{"title":"Tips on searching","href":"/docs/tips-on-searching"},{"title":"Complete Access Reviews","sidebarTitle":"How to complete access reviews","href":"/docs/complete-access-reviews"}]},{"group":"Getting Started","icon":"rocket","pages":[{"title":"Set up Cloud","href":"/docs/set-up-cloud"},{"group":"Set up Self-Hosted","pages":[{"title":"Set up Self-Hosted","href":"/docs/self-host-overview"},{"title":"Self-Hosted on AWS EKS","href":"/docs/self-host-opal-aws-guide"},{"title":"Self-Hosted on GKE","href":"/docs/self-host-opal-gke-guide"},{"title":"Disaster recovery guide","href":"/docs/disaster-recovery-guide"},{"title":"Update your Opal installation","href":"/docs/update-self-hosted-opal"},{"title":"Install Opal using Helm","href":"/docs/install-opal-using-helm"},{"title":"Set up an Airgapped Opal Environment","href":"/docs/setup-an-airgapped-opal-environment"},{"title":"Configure Async Exports Storage (Self-Hosted)","href":"/docs/configure-async-exports-storage"},{"title":"Kubernetes Components and Health Monitoring","href":"/docs/kubernetes-components-and-health-monitoring-guide"}]},{"group":"Connect Identity or HR Providers","pages":[{"title":"Connect Identity or HR Providers","sidebarTitle":"Overview","href":"/docs/connect-your-identity-provider-idp"},{"title":"Add your first IDP/HR provider","href":"/docs/add-your-first-idphr-provider"},{"title":"Add additional IDP/HR providers","href":"/docs/add-additional-idphr-providers"},{"title":"Import user secondary emails","href":"/docs/importing-user-secondary-email"}]},{"title":"Connect Productivity Tools","sidebarTitle":"Connect Productivity Tools","href":"/docs/connect-your-productivity-tools"},{"group":"Connect Apps and Infrastructure","pages":[{"title":"Connect Apps and Infrastructure","sidebarTitle":"Overview","href":"/docs/set-up-connections"},{"title":"Import and configure resources","href":"/docs/import-and-configure-resources-and-groups"},{"title":"Opal's server IP ranges","href":"/docs/ip-ranges"}]},{"group":"Configure SSO and MFA","pages":[{"title":"Configure SSO and MFA","sidebarTitle":"Overview","href":"/docs/configure-sso-and-mfa"},{"group":"SSO with SAML","pages":[{"title":"SSO with SAML","href":"/docs/sso-with-saml"},{"title":"Google SAML Setup","href":"/docs/google-saml-setup"},{"title":"Okta SAML Setup","href":"/docs/okta-saml-setup"}]},{"title":"Okta Multifactor Authentication","href":"/docs/okta-multifactor-authentication"},{"title":"Okta SCIM: Provision Opal Users","href":"/docs/okta-scim-integration"},{"title":"OIDC Provider Setup for Opal Actions","href":"/docs/oidc-provider-setup-for-opal-actions"}]}]},{"group":"Access Management","icon":"shield","pages":[{"group":"Manage end-user catalog","pages":[{"title":"Curate end-user catalog","href":"/docs/curate-catalog"},{"title":"Bundles","href":"/docs/bundles"},{"title":"Configure reviewers","href":"/docs/configure-reviewers"},{"title":"Escalate if no response","href":"/docs/escalate-if-no-response"},{"title":"Request on behalf rules","href":"/docs/request-on-behalf"},{"title":"Delegate reviews","href":"/docs/delegate-reviews"}]},{"title":"Configuration templates","href":"/docs/configuration-templates"},{"title":"Manage access with ticketing","href":"/docs/ticket-propagation"},{"title":"Access Rules","href":"/docs/access-rules"},{"title":"Risk Center","href":"/docs/least-privilege-posture-management"},{"group":"Manage groups in Opal","pages":[{"title":"Overview","href":"/docs/manage-groups-in-opal"},{"title":"Manage break-glass access","href":"/docs/manage-breakglass-access"},{"title":"Nested groups","href":"/docs/nested-groups"},{"title":"Group aliasing","href":"/docs/okta-group-aliasing"},{"title":"Linked groups","href":"/docs/linked-groups"},{"title":"Group leaders","href":"/docs/group-projects"}]},{"title":"Notifications","href":"/docs/notifications"},{"title":"Special roles in Opal","href":"/docs/roles-in-opal"},{"title":"Owner Permissions","href":"/docs/owner-permissions"},{"title":"Custom Opal roles","href":"/docs/custom-opal-roles"},{"title":"User provisioning","href":"/docs/user-provisioning"},{"title":"Access Comparison","sidebarTitle":"Access Comparison","tag":"NEW","href":"/docs/access-comparison"}]},{"group":"AI Agent Governance","icon":"cpu","pages":[{"title":"Agent Inventory","href":"/docs/agent-inventory"},{"title":"OpenAI and ChatGPT","href":"/docs/openai-chatgpt-setup"},{"title":"Anthropic Setup","href":"/docs/anthropic-agent-setup"}]},{"group":"OpalScript","icon":"scroll","tag":"NEW","pages":[{"title":"Use OpalScript to automate access workflows","sidebarTitle":"Overview","href":"/docs/opalscript-overview"},{"title":"Work with scripts in the OpalScript editor","sidebarTitle":"Using the editor","href":"/docs/opalscript-editor"},{"title":"Write OpalScript with AI","sidebarTitle":"Write with AI","href":"/docs/opalscript-ai-assistant"},{"title":"Utility Modules for OpalScript","sidebarTitle":"Utility Modules","href":"/docs/opalscript-utilitymodules"},{"group":"Request Review Scripts","pages":[{"title":"Start automating workflows around requests","sidebarTitle":"Request Review","href":"/docs/requestreview-getstarted"},{"title":"Request Review Example Scripts","sidebarTitle":"Examples","href":"/docs/requestreview-examples"}]},{"title":"Control who can cover a request with delegation conditions","sidebarTitle":"Delegation Conditions","href":"/docs/opalscript-delegation-conditions"},{"title":"Choose a request configuration with OpalScript","sidebarTitle":"Request Configuration Conditions","href":"/docs/opalscript-request-configuration-conditions"},{"title":"Give Paladin extra context with context provider scripts","sidebarTitle":"Paladin Context","tag":"BETA","href":"/docs/opalscript-context-provider"},{"title":"Manage OpalScripts with Terraform","sidebarTitle":"Terraform","href":"/docs/opalscript-terraform"},{"title":"OpalScript Reference","sidebarTitle":"Reference","href":"/docs/opalscript-reference"}]},{"group":"Paladin","icon":"bot","tag":"NEW","pages":[{"title":"Use Paladin to scale your security function","sidebarTitle":"Overview","href":"/docs/paladin/overview"},{"title":"Review access requests with Paladin","sidebarTitle":"Access Requests","href":"/docs/paladin/access-request"},{"title":"Review access campaigns with Paladin Insights","sidebarTitle":"Access Reviews","href":"/docs/paladin/access-reviews"},{"title":"Model providers","sidebarTitle":"Model Providers","href":"/docs/paladin/model-providers"},{"group":"AI Gateways","tag":"BETA","pages":[{"title":"Connect an AI gateway","sidebarTitle":"Overview","href":"/docs/paladin/ai-gateway"},{"title":"Connect Cloudflare AI Gateway","sidebarTitle":"Cloudflare AI Gateway","href":"/docs/paladin/ai-gateway-cloudflare"},{"title":"Connect LiteLLM","sidebarTitle":"LiteLLM","href":"/docs/paladin/ai-gateway-litellm"},{"title":"Connect Bifrost","sidebarTitle":"Bifrost","href":"/docs/paladin/ai-gateway-bifrost"}]},{"title":"Set up Paladin on self-hosted Opal","sidebarTitle":"Self-Hosted Setup","href":"/docs/paladin/self-hosted-setup"}]},{"group":"OpalQuery","icon":"search","tag":"NEW","pages":[{"title":"Overview","href":"/docs/opal-query"},{"title":"Node queries","href":"/docs/opal-query-node"},{"title":"Access queries","href":"/docs/opal-query-access"},{"title":"Query API","href":"/docs/opal-query-api"}]},{"group":"Auditing and Security","icon":"user-round-search","pages":[{"group":"Access Campaigns","tag":"NEW","pages":[{"title":"Create Access Campaigns","sidebarTitle":"Create access campaigns","href":"/docs/access-campaigns"},{"title":"Manage Access Campaign","sidebarTitle":"Manage your access campaign","href":"/docs/managing-access-campaigns"},{"group":"Legacy UARs","pages":[{"title":"Create Access Reviews","tag":"LEGACY","href":"/docs/access-reviews-legacy"},{"title":"Assign and complete reviews","tag":"LEGACY","href":"/docs/assigning-and-completing-reviews-legacy"},{"title":"Manage reviews","tag":"LEGACY","href":"/docs/managing-user-access-reviews-legacy"}]}]},{"title":"Events","href":"/docs/event-types"},{"title":"Events Streaming","href":"/docs/events-streaming"},{"title":"Metrics dashboard","href":"/docs/metrics"},{"title":"Sync schedules and triggers","href":"/docs/sync-schedules-and-triggers"}]},{"group":"Custom Integrations","icon":"pencil-line","pages":[{"title":"Overview","href":"/docs/custom-integrations-overview"},{"title":"Create your own connector","href":"/docs/how-to-create-your-own-connector"},{"title":"Custom Connector API Spec","href":"/docs/api-spec"},{"title":"Webhooks","href":"/docs/webhooks"}]},{"group":"For Developers","icon":"terminal","pages":[{"title":"Opal CLI","href":"/docs/opal-cli"},{"title":"Use Terraform with Opal","href":"/docs/use-terraform-with-opal"},{"group":"Model Context Protocol (MCP) Server","tag":"NEW","pages":[{"title":"Model Context Protocol (MCP)","mode":"wide","sidebarTitle":"Overview","href":"/docs/mcp/overview"},{"title":"End User MCP Server","sidebarTitle":"End Users","href":"/docs/mcp/end-user"},{"title":"Admin Provisioning MCP Server","sidebarTitle":"Admin Provisioning","href":"/docs/mcp/admin-provisioning"},{"title":"Admin Auditing MCP Server","sidebarTitle":"Admin Auditing","href":"/docs/mcp/admin-auditing"},{"title":"Okta Cross App Access (XAA)","sidebarTitle":"Okta Cross App Access","href":"/docs/mcp/okta-cross-app-access"},{"title":"Legacy MCP","deprecated":true,"href":"/docs/mcp/gram-mcp-servers"}]}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/authentication"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/changelog"}]}]},"basePath":"","title":"Opal architecture - Opal Security Docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BbK2OBGL.js","lightbox-handle-r17bVUz3.js"]}