Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.
Portal implements comprehensive security measures to protect your Backstage deployment and user data. This document outlines the security architecture, built-in protections, and recommended practices for maintaining a secure Portal environment.
Portal’s security architecture is built around a formal set of security-focused requirements. These requirements draw from the OWASP Top 10, which highlights the most critical security risks to web applications, as well as Spotify’s own internal security recommendations. By integrating these standards into the development process, Portal ensures that common threat vectors are addressed early and systematically. These requirements are not static—they are periodically reviewed and updated to match the evolving security landscape. They directly inform Portal’s threat model and the corresponding risk assessment matrix, which are foundational to both product planning and engineering decisions.
Access to high-privilege operations is tightly controlled. Only a specific, authorized set of users is permitted to obtain root-level access within Portal. Importantly, after the initial setup and recovery mode, the root login feature is disabled by default. This reduces the attack surface by eliminating a common target for privilege escalation attacks. If root access needs to be re-enabled for recovery or maintenance, it should be promptly disabled again after use.
Portal adheres to a structured vulnerability management process. This means that vulnerabilities—whether reported by internal teams, external researchers, or through automated scanning—are triaged, tracked, and resolved in accordance with established procedures. This process is regularly updated to ensure ongoing compliance with Spotify-wide security standards and industry best practices.
Important Security NoticeThe root admin login interface presents a significant security risk when active. Recovery mode is enabled by Spotify for user environments when needed for setup or recovery activities, and is disabled once these activities are complete.
The root admin login interface, when active, presents a significant security risk because it is accessible to all users and protected only by a password. This login mode is intended strictly for initial setup or for recovery scenarios. To minimize the risk of unauthorized access, recovery mode is managed by Spotify and deactivated as soon as recovery or setup activities are complete. The password for this interface is provided by Spotify and follows established security practices for privileged accounts.
Portal’s security posture is continuously evaluated and improved. Regular reviews, internal audits, and updates based on both internal feedback and external developments in the security landscape ensure that Portal remains resilient in the face of emerging threats. Security-related FAQs and documentation are also maintained to assist users and customers in understanding how Portal protects their data and what steps they can take to further enhance security on their deployments.For more information on setup procedures, see our Getting Started Guide.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Spotify for Backstage","colors":{"primary":"#34baa2","light":"#9af0e1","dark":"#91eeda"},"logo":{"light":"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/light.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=e7c3376851f302fc6d1308df15deb771","dark":"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/dark.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=a4e4bd6c0b855fc5959169face3701e1","href":"/"},"favicon":"https://mintcdn.com/spotify-89f50c35/6C5KyJhdlFRgXnE0/static/favicon.ico?fit=max\u0026auto=format\u0026n=6C5KyJhdlFRgXnE0\u0026q=85\u0026s=78c7096e52c0a4493c1d4b76355d22d9","api":{"playground":{"display":"simple"}},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://backstage.spotify.com/contact-us/try-portal/","label":"Try Spotify Portal"}],"primary":{"type":"button","label":"Log in","href":"https://backstage.spotify.com/login/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/showcase/spotify-r\u0026d","x":"https://twitter.com/spotifyeng","youtube":"https://www.youtube.com/@SpotifyRnD","instagram":"https://www.instagram.com/lifeatspotify","facebook":"https://www.facebook.com/spotify"},"links":[{"header":"Learn More","items":[{"label":"Go to backstage.spotify.com","href":"https://backstage.spotify.com"},{"label":"Explore the demo","href":"https://demo.backstage.io/catalog"},{"label":"Partner interest form","href":"https://backstage.spotify.com/interested-in-partnering"}]},{"header":"News \u0026 Updates","items":[{"label":"Read our blog","href":"https://backstage.spotify.com/blog"},{"label":"Subscribe to newsletter","href":"https://spoti.fi/backstagenewsletter"},{"label":"Portal system status","href":"https://status.spotifyportal.com"}]},{"header":"Community","items":[{"label":"Join the community","href":"https://github.com/backstage/community"},{"label":"Get Backstage Certified","href":"https://www.cncf.io/training/certification/cba"}]},{"header":"Legal","items":[{"label":"Security","href":"https://backstage.spotify.com/security"},{"label":"Privacy Policy","href":"https://backstage.spotify.com/spotify-for-backstage-terms/privacy-policy"},{"label":"Cookies","href":"https://www.spotify.com/legal/cookies-policy"},{"label":"Terms of Service","href":"https://backstage.spotify.com/terms-of-service"},{"label":"Trademark Usage","href":"https://www.linuxfoundation.org/legal/trademark-usage"}]}]},"seo":{"metatags":{"canonical":"https://backstage.spotify.com/docs"}},"fonts":{"heading":{"family":"Circular Sp","source":"https://mintlify-assets.b-cdn.net/fonts/CircularSpTitle-Bold.woff2","format":"woff2"},"body":{"family":"Circular Sp","source":"https://mintlify-assets.b-cdn.net/fonts/CircularSp-Book.woff2","format":"woff2"}},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"dracula"}},"latex":false},"integrations":{"gtm":{"tagId":"GTM-58S6R55"},"telemetry":{"enabled":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Contact us","icon":"headset","href":"https://backstage.spotify.com/contact-us/talk-to-us/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"spotify-89f50c35","hasAudioNarration":false,"actualSubdomain":"spotify-89f50c35","customDomains":["backstage.spotify.com"],"gitSource":{"type":"github","owner":"backstage-external","repo":"spotify-for-backstage-docs","deployBranch":"main","contentDirectory":"public","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec8c7407f9eeebb29444b8","collectionId":"e3c2d75e-2c3c-4d17-95f0-22f8c22c5f8f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec8c7407f9eeebb29444b8"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec8c7407f9eeebb29444b8","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Portal","count":140},{"language":"default","tag":"Plugins","count":111},{"language":"default","tag":"Soundcheck","count":88},{"language":"default","tag":"Portal Features \u0026 Plugins","count":88},{"language":"default","tag":"API Reference","count":45},{"language":"default","tag":"Integrations","count":35},{"language":"default","tag":"Guides","count":34},{"language":"default","tag":"Core Concepts","count":31},{"language":"default","tag":"Checks","count":19},{"language":"default","tag":"Fact Collectors","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"backstage-support@spotify.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"llms-txt-v2","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":"vite-origin","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":"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}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"body{--font-jetbrains-mono:\n 'JetBrains Mono', SF Mono, SFMono-Regular, Menlo, Monaco, Cascadia Mono,\n Segoe UI Mono, Roboto Mono, Oxygen Mono, Ubuntu Monospace, Source Code Pro,\n Fira Mono, Droid Sans Mono, Consolas, Courier New, monospace}#topbar-cta-button svg path{stroke:#000000}#topbar-cta-button span{color:#000000}#content:has(.video-overlay){isolation:auto}.landing-page-card{transition:all 0.3s cubic-bezier(0.4, 0, 0.2, 1);backdrop-filter:blur(12px);border-width:2px;background-color:rgb(255 255 255)}.landing-page-card:is(.dark *){background-color:rgb(255 255 255 / 0.1)}.landing-page-card:hover{transform:translateY(-0.25rem)}.landing-page-card [data-component-part=\"card-icon\"],.landing-page-card [data-component-part=\"card-icon\"]>img{width:48px;height:48px}.landing-page-card h2{font-size:1.5rem;margin-bottom:1rem;font-weight:600}"}],"page":{"pagePath":"portal/security","slug":"/portal/security","pageMetadata":{"sidebar_position":5,"title":"Portal Security Overview","sidebarTitle":"Security","description":"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.","href":"/portal/security"},"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: \"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\"\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`,p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Portal implements comprehensive security measures to protect your Backstage deployment and user data. This document outlines the security architecture, built-in protections, and recommended practices for maintaining a secure Portal environment.`}),`\n`,_jsx(Heading,{level:`2`,id:`security-focused-requirements`,children:`Security-Focused Requirements`}),`\n`,_jsx(_components.p,{children:`Portal’s security architecture is built around a formal set of security-focused requirements. These requirements draw from the OWASP Top 10, which highlights the most critical security risks to web applications, as well as Spotify’s own internal security recommendations. By integrating these standards into the development process, Portal ensures that common threat vectors are addressed early and systematically. These requirements are not static—they are periodically reviewed and updated to match the evolving security landscape. They directly inform Portal’s threat model and the corresponding risk assessment matrix, which are foundational to both product planning and engineering decisions.`}),`\n`,_jsx(Heading,{level:`2`,id:`security-features`,children:`Security Features`}),`\n`,_jsx(_components.p,{children:`Portal includes a number of features designed to proactively protect users and their data:`}),`\n`,_jsx(Heading,{level:`3`,id:`access-control-and-root-privileges`,children:`Access Control and Root Privileges`}),`\n`,_jsxs(_components.p,{children:[`Access to high-privilege operations is tightly controlled. Only a specific, authorized set of users is permitted to obtain root-level access within Portal. Importantly, after the `,_jsx(_components.a,{href:`/portal/getting-started`,children:`initial setup`}),` and `,_jsx(_components.a,{href:`/portal/guides/enable-recovery-mode`,children:`recovery mode`}),`, the root login feature is disabled by default. This reduces the attack surface by eliminating a common target for privilege escalation attacks. If root access needs to be re-enabled for recovery or maintenance, it should be promptly disabled again after use.`]}),`\n`,_jsx(Heading,{level:`3`,id:`vulnerability-management`,children:`Vulnerability Management`}),`\n`,_jsx(_components.p,{children:`Portal adheres to a structured vulnerability management process. This means that vulnerabilities—whether reported by internal teams, external researchers, or through automated scanning—are triaged, tracked, and resolved in accordance with established procedures. This process is regularly updated to ensure ongoing compliance with Spotify-wide security standards and industry best practices.`}),`\n`,_jsx(Heading,{level:`2`,id:`known-risks-and-recommended-mitigations`,children:`Known Risks and Recommended Mitigations`}),`\n`,_jsx(Heading,{level:`3`,id:`root-admin-login`,children:`Root Admin Login`}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Important Security Notice`})}),_jsx(_components.p,{children:`The root admin login interface presents a significant security risk when active. Recovery mode is enabled by Spotify for user environments when needed for setup or recovery activities, and is disabled once these activities are complete.`})]}),`\n`,_jsx(_components.p,{children:`The root admin login interface, when active, presents a significant security risk because it is accessible to all users and protected only by a password. This login mode is intended strictly for initial setup or for recovery scenarios. To minimize the risk of unauthorized access, recovery mode is managed by Spotify and deactivated as soon as recovery or setup activities are complete. The password for this interface is provided by Spotify and follows established security practices for privileged accounts.`}),`\n`,_jsx(Heading,{level:`2`,id:`ongoing-security-improvements`,children:`Ongoing Security Improvements`}),`\n`,_jsx(_components.p,{children:`Portal’s security posture is continuously evaluated and improved. Regular reviews, internal audits, and updates based on both internal feedback and external developments in the security landscape ensure that Portal remains resilient in the face of emerging threats. Security-related FAQs and documentation are also maintained to assist users and customers in understanding how Portal protects their data and what steps they can take to further enhance security on their deployments.`}),`\n`,_jsxs(_components.p,{children:[`For more information on setup procedures, see our `,_jsx(_components.a,{href:`/portal/getting-started`,children:`Getting Started Guide`}),`.`]})]})}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":{"codeStyling":{"theme":{"light":"github-light","dark":"dracula"}},"config":{},"pageMetadata":{"sidebar_position":5,"title":"Portal Security Overview","sidebarTitle":"Security","description":"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.","href":"/portal/security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Security-Focused Requirements","slug":"security-focused-requirements","depth":2,"children":[]},{"title":"Security Features","slug":"security-features","depth":2,"children":[{"title":"Access Control and Root Privileges","slug":"access-control-and-root-privileges","depth":3,"children":[]},{"title":"Vulnerability Management","slug":"vulnerability-management","depth":3,"children":[]}]},{"title":"Known Risks and Recommended Mitigations","slug":"known-risks-and-recommended-mitigations","depth":2,"children":[{"title":"Root Admin Login","slug":"root-admin-login","depth":3,"children":[]}]},{"title":"Ongoing Security Improvements","slug":"ongoing-security-improvements","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"spotify-89f50c35","siteName":"Spotify for Backstage","title":"Portal Security Overview - Spotify for Backstage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-22T08:17:59.343Z","originalFileLocation":"portal/security.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=\"dark\"}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=\"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_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=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Portal Security Overview - Spotify for Backstage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://backstage.spotify.com/docs/portal/security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://spotify-89f50c35.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Portal+Security+Overview\u0026amp;description=Review+Portal+security+architecture%2C+access+controls%2C+vulnerability+management%2C+and+recommended+mitigations+for+root+admin+and+plugin+risks.\u0026amp;theme=6d10e252608a5725ef9a1e1f\u0026amp;signature=22c7ccad26030f13404b20d9af94edf4d8d5eccf5446ccc59a4a89e0040ba8fa\">\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=\"Portal Security Overview - Spotify for Backstage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://spotify-89f50c35.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Portal+Security+Overview\u0026amp;description=Review+Portal+security+architecture%2C+access+controls%2C+vulnerability+management%2C+and+recommended+mitigations+for+root+admin+and+plugin+risks.\u0026amp;theme=6d10e252608a5725ef9a1e1f\u0026amp;signature=22c7ccad26030f13404b20d9af94edf4d8d5eccf5446ccc59a4a89e0040ba8fa\">\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=\"/docs/mintlify-assets/_mintlify/favicons/spotify-89f50c35/R_8z5ScClO7v3nRq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Spotify for Backstage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#34baa2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://backstage.spotify.com/docs/portal/security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/portal/security.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://backstage.spotify.com/#organization\",\"name\":\"Spotify for Backstage\",\"url\":\"https://backstage.spotify.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/spotify-89f50c35/24doFeqc-xIrJKxF/static/logo/light.svg?fit=max\u0026auto=format\u0026n=24doFeqc-xIrJKxF\u0026q=85\u0026s=e7c3376851f302fc6d1308df15deb771\"}},{\"@type\":\"WebSite\",\"@id\":\"https://backstage.spotify.com/docs#website\",\"name\":\"Spotify for Backstage\",\"url\":\"https://backstage.spotify.com/docs\",\"publisher\":{\"@id\":\"https://backstage.spotify.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://backstage.spotify.com/docs/portal/security#webpage\",\"url\":\"https://backstage.spotify.com/docs/portal/security\",\"name\":\"Portal Security Overview\",\"description\":\"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\",\"dateModified\":\"2026-06-22T08:17:59.343Z\",\"isPartOf\":{\"@id\":\"https://backstage.spotify.com/docs#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://backstage.spotify.com/docs/portal/security#article\",\"headline\":\"Portal Security Overview\",\"name\":\"Portal Security Overview\",\"description\":\"Review Portal security architecture, access controls, vulnerability management, and recommended mitigations for root admin and plugin risks.\",\"url\":\"https://backstage.spotify.com/docs/portal/security\",\"mainEntityOfPage\":{\"@id\":\"https://backstage.spotify.com/docs/portal/security#webpage\"},\"dateModified\":\"2026-06-22T08:17:59.343Z\",\"publisher\":{\"@id\":\"https://backstage.spotify.com/#organization\"},\"isPartOf\":{\"@id\":\"https://backstage.spotify.com/docs#website\"}}]}\u003c/script>","siteName":"Spotify for Backstage","nav":{"global":{"anchors":[{"anchor":"Contact us","icon":"headset","href":"https://backstage.spotify.com/contact-us/talk-to-us/"}]},"tabs":[{"tab":"Portal","pages":[{"title":"Spotify Portal for Backstage","sidebarTitle":"Spotify Portal for Backstage","href":"/portal"},{"group":"Getting Started","root":{"title":"Getting Started Guide","sidebarTitle":"Getting started with Portal for Backstage","href":"/portal/getting-started"},"pages":[{"title":"AWS Marketplace","sidebarTitle":"Buy Portal on AWS Marketplace","href":"/portal/aws-marketplace"}]},{"group":"Portal Features \u0026 Plugins","root":{"title":"Portal Features \u0026 Plugins","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/index"},"pages":[{"group":"Catalog","root":{"title":"Software Catalog Overview","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/catalog/index"},"pages":[{"title":"Creating the Catalog Graph","href":"/portal/core-features-and-plugins/catalog/creating-the-catalog-graph"},{"title":"Descriptor Format of Catalog Entities","href":"/portal/core-features-and-plugins/catalog/descriptor-format"},{"title":"Life of an Entity","href":"/portal/core-features-and-plugins/catalog/life-of-an-entity"},{"title":"Entity References","href":"/portal/core-features-and-plugins/catalog/references"},{"title":"System Model","href":"/portal/core-features-and-plugins/catalog/system-model"},{"title":"Well-known Relations between Catalog Entities","sidebarTitle":"Well-known Relations","href":"/portal/core-features-and-plugins/catalog/well-known-relations"},{"title":"Well-known Status fields of Catalog Entities","sidebarTitle":"Well-known Statuses","href":"/portal/core-features-and-plugins/catalog/well-known-statuses"},{"title":"Creating a Single Entity","sidebarTitle":"Creating a Single Entity","href":"/portal/core-features-and-plugins/catalog/single-entity-create"},{"title":"Auto Ingestion","sidebarTitle":"Auto Ingestion","href":"/portal/core-features-and-plugins/catalog/auto-ingestion"},{"title":"Monorepos","href":"/portal/core-features-and-plugins/catalog/monorepos"},{"title":"Updating Components","sidebarTitle":"Updating Components","href":"/portal/core-features-and-plugins/catalog/bulk-editing"},{"group":"Bulk catalog ingestion","root":{"title":"Bulk catalog ingestion","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/catalog-builder/index"},"pages":[{"title":"Understanding Management Modes","sidebarTitle":"Understanding Management Modes","href":"/portal/core-features-and-plugins/catalog-builder/management-modes"},{"title":"Portal Mode Walkthrough","sidebarTitle":"Portal Mode Walkthrough","href":"/portal/core-features-and-plugins/catalog-builder/portal-mode-walkthrough"},{"title":"YAML Mode Walkthrough","sidebarTitle":"YAML Mode Walkthrough","href":"/portal/core-features-and-plugins/catalog-builder/yaml-mode-walkthrough"},{"title":"Troubleshooting Bulk Catalog Ingestion","sidebarTitle":"Troubleshooting","href":"/portal/core-features-and-plugins/catalog-builder/troubleshooting"},{"title":"Frequently Asked Questions","sidebarTitle":"FAQ","href":"/portal/core-features-and-plugins/catalog-builder/faq"}]}]},{"group":"Scaffolder","root":{"sidebarTitle":"Scaffolder","title":"Scaffolder (Portal)","href":"/portal/core-features-and-plugins/scaffolder/index"},"pages":[{"sidebarTitle":"Getting Started","title":"Getting Started with Scaffolder","href":"/portal/core-features-and-plugins/scaffolder/getting-started"},{"title":"How-to Guides","href":"/portal/core-features-and-plugins/scaffolder/how-to-guides"},{"sidebarTitle":"Reference","title":"Scaffolder Reference","href":"/portal/core-features-and-plugins/scaffolder/reference"}]},{"title":"TechDocs","sidebarTitle":"TechDocs","href":"/portal/core-features-and-plugins/techdocs"},{"title":"Soundcheck","sidebarTitle":"Soundcheck","href":"/portal/core-features-and-plugins/soundcheck"},{"group":"Fleetshift","root":{"title":"Fleetshift: Getting Started","sidebarTitle":"Fleetshift","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/getting-started"},"pages":[{"title":"Enable AI Shifts","sidebarTitle":"Enable AI Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/enable-ai-shifts"},{"title":"Create and Run a Shift","sidebarTitle":"Create and Run","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/create-and-run"},{"title":"Fleetshift Guides","sidebarTitle":"Guides","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/guides"},{"title":"Fleetshift: Writing and Publishing npm Package Shifts","sidebarTitle":"npm Package Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/npm-package-shifts"},{"title":"Fleetshift: OpenRewrite Shifts","sidebarTitle":"OpenRewrite Shifts","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/openrewrite-shifts"},{"title":"Fleetshift MCP Actions","sidebarTitle":"MCP Actions","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/mcp-actions"},{"title":"Fleetshift Troubleshooting","sidebarTitle":"Troubleshooting","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/troubleshooting"},{"title":"Fleetshift FAQ","sidebarTitle":"FAQ","hidden":false,"href":"/portal/core-features-and-plugins/fleetshift/faq"}]},{"group":"AI Gateway","root":{"title":"AI Gateway","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/ai-gateway/index"},"pages":[{"group":"Integrations","root":{"title":"Integrations","sidebarTitle":"Overview","href":"/portal/core-features-and-plugins/ai-gateway/integrations/index"},"pages":[{"title":"Anthropic","href":"/portal/core-features-and-plugins/ai-gateway/integrations/anthropic"},{"title":"OpenAI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/openai"},{"title":"Azure OpenAI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/azure"},{"title":"Cohere","href":"/portal/core-features-and-plugins/ai-gateway/integrations/cohere"},{"title":"Google Generative AI","href":"/portal/core-features-and-plugins/ai-gateway/integrations/google"},{"title":"Ollama","href":"/portal/core-features-and-plugins/ai-gateway/integrations/ollama"},{"title":"Amazon Bedrock","href":"/portal/core-features-and-plugins/ai-gateway/integrations/aws-bedrock"}]}]},{"title":"DevEx Metrics","href":"/portal/core-features-and-plugins/devex-metrics"},{"title":"Search","sidebarTitle":"Search","href":"/portal/core-features-and-plugins/search"},{"title":"Home","sidebarTitle":"Home","href":"/portal/core-features-and-plugins/home"},{"title":"Insights","sidebarTitle":"Insights","href":"/portal/core-features-and-plugins/insights"},{"title":"Skill Exchange","href":"/portal/core-features-and-plugins/skillexchange"},{"title":"Role-Based Access Control (RBAC)","sidebarTitle":"RBAC","href":"/portal/core-features-and-plugins/rbac"},{"group":"AiKA","pages":[{"title":"Getting Started with AiKA","sidebarTitle":"Getting Started","href":"/portal/core-features-and-plugins/aika/getting-started"},{"title":"Searching for Information","href":"/portal/core-features-and-plugins/aika/searching-for-information"},{"title":"Semantic Plugin","href":"/portal/core-features-and-plugins/aika/semantic-plugin"},{"title":"Tracing for AiKA","sidebarTitle":"Tracing for AiKA","href":"/portal/core-features-and-plugins/aika/tracing"},{"title":"AiKA Data Flow \u0026 Security","sidebarTitle":"Data Flow \u0026 Security","href":"/portal/core-features-and-plugins/aika/data-flow"},{"title":"Agent Configuration","sidebarTitle":"Agent Configuration","href":"/portal/core-features-and-plugins/aika/agent-configuration"},{"title":"AiKA Side Panel","sidebarTitle":"AiKA Side Panel","href":"/portal/core-features-and-plugins/aika/side-panel"},{"title":"Modes","sidebarTitle":"Modes","href":"/portal/core-features-and-plugins/aika/modes"}]},{"group":"AI Explorer","root":{"title":"AI Explorer","href":"/portal/core-features-and-plugins/ai-explorer/index"},"pages":[{"title":"Configuration","href":"/portal/core-features-and-plugins/ai-explorer/configuration"},{"title":"Local Resource Management From AI Explorer","href":"/portal/core-features-and-plugins/ai-explorer/installation"},{"title":"Rules","href":"/portal/core-features-and-plugins/ai-explorer/rules"},{"title":"Skills","href":"/portal/core-features-and-plugins/ai-explorer/skills"},{"title":"Marketplaces \u0026 Plugins","href":"/portal/core-features-and-plugins/ai-explorer/marketplaces"},{"title":"Ownership","href":"/portal/core-features-and-plugins/ai-explorer/ownership"},{"title":"Soundcheck Integration","href":"/portal/core-features-and-plugins/ai-explorer/soundcheck"}]},{"title":"Confidence Flags","href":"/portal/core-features-and-plugins/confidence-flags"},{"title":"Entity Overlays","sidebarTitle":"Entity Overlays","href":"/portal/core-features-and-plugins/entity-overlays"},{"group":"Data Experience","root":{"title":"Overview","href":"/portal/core-features-and-plugins/data-experience/overview"},"pages":[{"title":"Data Experience Quick Start","sidebarTitle":"Quick Start","href":"/portal/core-features-and-plugins/data-experience/quickstart"},{"title":"Key Concepts","href":"/portal/core-features-and-plugins/data-experience/key-concepts"},{"title":"Configuration","href":"/portal/core-features-and-plugins/data-experience/configuration"},{"title":"TechDocs","href":"/portal/core-features-and-plugins/data-experience/techdocs"},{"title":"Dataset Access Requests","href":"/portal/core-features-and-plugins/data-experience/data-access"},{"title":"Portal database tables","href":"/portal/core-features-and-plugins/data-experience/integration-portal-databases"},{"title":"Integration: Redshift","href":"/portal/core-features-and-plugins/data-experience/integration-redshift"},{"title":"Integration: Snowflake","href":"/portal/core-features-and-plugins/data-experience/integration-snowflake"},{"title":"Integration: BigQuery","href":"/portal/core-features-and-plugins/data-experience/integration-bigquery"},{"title":"Integration: Databricks","href":"/portal/core-features-and-plugins/data-experience/integration-databricks"},{"title":"Integration: dbt","href":"/portal/core-features-and-plugins/data-experience/integration-dbt"},{"title":"Data Lineage","href":"/portal/core-features-and-plugins/data-experience/data-lineage"}]},{"group":"MCP","root":{"title":"MCP in Portal","href":"/portal/core-features-and-plugins/mcp/overview"},"pages":[{"title":"Connecting AI Agents","href":"/portal/core-features-and-plugins/mcp/connecting-agents"},{"title":"Available MCP Tools","sidebarTitle":"Available Tools","href":"/portal/core-features-and-plugins/mcp/available-tools"},{"sidebarTitle":"Registering Tools","title":"Registering MCP Tools","href":"/portal/core-features-and-plugins/mcp/registering-tools"},{"title":"Third-Party MCP Servers","href":"/portal/core-features-and-plugins/mcp/third-party-servers"}]},{"group":"Portal CLI","root":{"title":"Get started with Portal CLI","sidebarTitle":"Get started","href":"/portal/core-features-and-plugins/cli/getting-started"},"pages":[]},{"group":"Audit Logs","root":{"title":"Getting Started","href":"/portal/core-features-and-plugins/audit-logs/getting-started"},"pages":[{"title":"Guides","href":"/portal/core-features-and-plugins/audit-logs/guides"},{"title":"Reference","href":"/portal/core-features-and-plugins/audit-logs/reference"}]},{"group":"Recommended Plugins","pages":[{"title":"PagerDuty","sidebarTitle":"PagerDuty","href":"/portal/core-features-and-plugins/recommended-plugins/pagerduty"},{"title":"Buildkite","sidebarTitle":"Buildkite","href":"/portal/core-features-and-plugins/recommended-plugins/buildkite"},{"title":"GitHub Actions","sidebarTitle":"GitHub Actions","href":"/portal/core-features-and-plugins/recommended-plugins/github-actions"},{"title":"GitHub Deployments","sidebarTitle":"GitHub Deployments","href":"/portal/core-features-and-plugins/recommended-plugins/github-deployments"},{"title":"GitHub Issues","sidebarTitle":"GitHub Issues","href":"/portal/core-features-and-plugins/recommended-plugins/github-issues"},{"title":"GitHub Pull Request Board","sidebarTitle":"GitHub Pull Request Board","href":"/portal/core-features-and-plugins/recommended-plugins/github-pull-request-board"},{"title":"Azure DevOps","sidebarTitle":"Azure DevOps","href":"/portal/core-features-and-plugins/recommended-plugins/azure-devops"},{"title":"New Relic","sidebarTitle":"New Relic","href":"/portal/core-features-and-plugins/recommended-plugins/new-relic"},{"title":"SonarQube","sidebarTitle":"SonarQube","href":"/portal/core-features-and-plugins/recommended-plugins/sonarqube"},{"title":"Jira Dashboard","sidebarTitle":"Jira Dashboard","href":"/portal/core-features-and-plugins/recommended-plugins/jira-dashboard"}]},{"title":"Portal Connect","href":"/portal/core-features-and-plugins/portal-connect"}]},{"group":"Developing Portal plugins","root":{"title":"Developing Portal plugins","sidebarTitle":"Overview","href":"/portal/portal-plugins/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/portal/portal-plugins/get-started"},{"title":"Build a plugin","sidebarTitle":"Build a plugin","href":"/portal/portal-plugins/build-plugin"},{"title":"Publish and install custom plugins","sidebarTitle":"Publish custom plugins","href":"/portal/portal-plugins/publishing-custom-plugins"},{"title":"Registry plugin publishing","sidebarTitle":"Registry publishing (previous method)","href":"/portal/portal-plugins/publishing-plugins"},{"title":"Generate package metadata","sidebarTitle":"Generate package metadata","href":"/portal/portal-plugins/generate-metadata"}]},{"group":"Managing Plugins","root":{"title":"Managing Plugins","sidebarTitle":"Overview","href":"/portal/managing-plugins/index"},"pages":[{"title":"Installing a Plugin","href":"/portal/managing-plugins/installing-plugins"},{"title":"Updating a Plugin","href":"/portal/managing-plugins/updating-plugins"},{"title":"Uninstalling a Plugin","href":"/portal/managing-plugins/uninstalling-plugins"},{"title":"Build Progress","href":"/portal/managing-plugins/build-progress"},{"title":"Plugin Versioning","href":"/portal/managing-plugins/plugin-versioning"},{"title":"Switching to pre-built plugins","href":"/portal/managing-plugins/migration"}]},{"group":"Guides","root":{"title":"Guides","href":"/portal/guides/index"},"pages":[{"group":"Authentication","root":{"title":"Authentication","sidebarTitle":"Overview","href":"/portal/guides/auth/index"},"pages":[{"group":"Entra ID","root":{"title":"Entra ID","sidebarTitle":"Overview","href":"/portal/guides/auth/entraId/index"},"pages":[{"title":"Create an Azure App Registration","href":"/portal/guides/auth/entraId/create-azure-app-registration"},{"title":"Ingest users and groups","href":"/portal/guides/auth/entraId/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/entraId/setup-auth"},{"title":"Retain admin access","href":"/portal/guides/auth/entraId/retain-admin-access"}]},{"group":"Okta","root":{"title":"Okta","sidebarTitle":"Overview","href":"/portal/guides/auth/okta/index"},"pages":[{"title":"Ingest users and groups","href":"/portal/guides/auth/okta/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/okta/setup-auth"}]},{"group":"GitHub","root":{"title":"GitHub","sidebarTitle":"Overview","href":"/portal/guides/auth/github/index"},"pages":[{"title":"GitHub Identity Setup Guide","sidebarTitle":"GitHub Setup Guide","href":"/portal/guides/auth/github/setup-auth"}]},{"group":"GitLab","root":{"title":"GitLab","sidebarTitle":"Overview","href":"/portal/guides/auth/gitlab/index"},"pages":[{"title":"Ingest users and groups","href":"/portal/guides/auth/gitlab/setup-catalog-provider"},{"title":"Setup auth provider","href":"/portal/guides/auth/gitlab/setup-auth"}]}]},{"group":"Integrations","root":{"title":"Integrations","sidebarTitle":"Overview","href":"/portal/guides/integrations/index"},"pages":[{"group":"Azure DevOps","root":{"title":"Azure DevOps","sidebarTitle":"Overview","href":"/portal/guides/integrations/azure-devops/index"},"pages":[{"title":"Setup the Azure integration in App Settings","href":"/portal/guides/integrations/azure-devops/azure-app-settings-integrations"},{"title":"Setup Azure DevOps Discovery","href":"/portal/guides/integrations/azure-devops/azure-devops-discovery"},{"title":"Install the Azure DevOps Annotator Processor","href":"/portal/guides/integrations/azure-devops/azure-devops-annotator-processor"},{"title":"Install the Azure DevOps plugin","href":"/portal/guides/integrations/azure-devops/azure-devops-plugin"},{"title":"Install the Azure DevOps scaffolder actions","href":"/portal/guides/integrations/azure-devops/azure-devops-scaffolder-actions"},{"title":"Install the Azure DevOps Wiki Collator","href":"/portal/guides/integrations/azure-devops/azure-devops-wiki-collator"}]},{"group":"GitLab","root":{"title":"GitLab","sidebarTitle":"Overview","href":"/portal/guides/integrations/gitlab/index"},"pages":[{"title":"Setup the GitLab integration in App Settings","href":"/portal/guides/integrations/gitlab/gitlab-app-settings-integrations"},{"title":"Setup GitLab Discovery","href":"/portal/guides/integrations/gitlab/gitlab-discovery"}]},{"title":"AWS Credentials","href":"/portal/guides/integrations/aws-credentials"},{"title":"Migrating to a GitHub App Integration","sidebarTitle":"Migrating to a GitHub App","href":"/portal/guides/integrations/migrating-to-a-github-app-integration"},{"title":"Ingesting Entities into your Catalog from GitHub","sidebarTitle":"Ingesting Entities into your Catalog from GitHub","href":"/portal/guides/integrations/ingesting-entities-into-your-catalog-from-github"},{"title":"Storing Entity Metadata outside of your SCM System","sidebarTitle":"Storing Entity Metadata outside of your SCM System","href":"/portal/guides/integrations/storing-entity-metadata-outside-of-your-scm-system"}]},{"title":"Enabling recovery mode","sidebarTitle":"Enabling recovery mode","href":"/portal/guides/enable-recovery-mode"},{"group":"Confidence Flags","root":{"title":"Introduction to Flags","sidebarTitle":"Overview","href":"/portal/guides/confidence-flags/index"},"pages":[{"title":"Confidence Flag SDKs","sidebarTitle":"Flag SDKs","href":"/portal/guides/confidence-flags/sdks"},{"title":"Configure a Flag","sidebarTitle":"Quickstart","href":"/portal/guides/confidence-flags/quickstart"},{"title":"Rules","sidebarTitle":"Rules","href":"/portal/guides/confidence-flags/rules"},{"title":"Flags","sidebarTitle":"Reference","href":"/portal/guides/confidence-flags/reference"},{"title":"Resolve Tester","sidebarTitle":"Resolve tester","href":"/portal/guides/confidence-flags/resolve-tester"},{"title":"Audience","href":"/portal/guides/confidence-flags/audience"}]},{"title":"Event-Driven Catalog Component Updates","sidebarTitle":"Event-Driven Catalog Component Updates","href":"/portal/guides/events-based-github"},{"group":"Admin","pages":[{"title":"Getting Started with Admin","sidebarTitle":"Getting Started","href":"/portal/guides/Admin/getting_started"},{"title":null,"href":"/portal/guides/Admin/create-api-key"}]},{"group":"Portal Connect","root":{"title":"Portal Connect","href":"/portal/guides/portal-connect/index"},"pages":[{"title":"Installation and Setup","href":"/portal/guides/portal-connect/installation"},{"title":"Managing Portal Connect","href":"/portal/guides/portal-connect/managing"},{"title":"Security Model","description":"Comprehensive security architecture and data handling for Portal Connect","href":"/portal/guides/portal-connect/security"}]}]},{"title":"Portal Security Overview","sidebarTitle":"Security","href":"/portal/security"},{"group":"Troubleshooting","root":{"title":"Troubleshooting","sidebarTitle":"Overview","description":"Diagnose and resolve common Portal issues including authentication failures, catalog sync errors, and identity provider misconfiguration.","href":"/portal/troubleshooting/index"},"pages":[{"title":"GitHub Integration Troubleshooting","href":"/portal/troubleshooting/github-integration"},{"title":"Troubleshooting Rate Limiting Issues","sidebarTitle":"Rate Limiting Issues","href":"/portal/troubleshooting/rate-limiting"}]},{"title":"Spotify Portal for Backstage Changelog","sidebarTitle":"Changelog","href":"/portal/changelog"},{"title":"Videos","mode":"wide","href":"/portal/videos"}]},{"tab":"Plugins","pages":[{"title":"Plugins","href":"/plugins"}]},{"tab":"Xirp","pages":[{"title":"Xirp","href":"/xirp"}]}]},"basePath":"","title":"Portal Security Overview - Spotify for Backstage","buildId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","deploymentId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","dynamics":[],"chunks":[]}