Sign in to the Azure Portal and search for Microsoft Entra ID.
In the left menu open Manage → App registrations.
Click + New registration, give it a name (e.g. codeant-cspm), leave the defaults, and click Register.
b. Create a client secret
In the app registration’s left menu, open Manage → Certificates & secrets.
Click + New client secret, set an expiry, and click Add. Copy the secret Value immediately - it is only shown once.
c. Grant Microsoft Graph permissions
In the app registration’s left menu, open Manage → API permissions.
Click + Add a permission, choose Microsoft Graph, then Application permissions.
Search for and tick: AuditLog.Read.All, Directory.Read.All, Policy.Read.All. Click Add permissions.
Click Grant admin consent for <tenant>, then Yes. Each permission’s status should turn green.
d. Assign the Reader role on the subscription
In the Azure Portal top search bar, type Subscriptions and click the first plain Subscriptions result under Services (not Billing subscriptions or the Resource Manager variant).
From the list, click the subscription you want CodeAnt to scan. (If you have many subscriptions, repeat this step for each one.)
In the left menu of the subscription blade, click Access control (IAM).
Click + Add at the top of the page, then choose Add role assignment from the dropdown.
On the Role tab, search for Reader, select the Reader row, and click Next.
On the Members tab, leave Assign access to as User, group, or service principal, then click + Select members.
In the Select members panel on the right, type codeant-cspm (or the exact name you used in step a.3) into the search box, click the matching application in the results, and click Select at the bottom.
Click Next until you reach the Review + assign tab, then click Review + assign to commit.
e. Collect the credentialsFrom the app registration Overview page copy the Application (client) ID and Directory (tenant) ID. Use these together with the client secret from step b in the next section. (The Subscription ID, found on the subscription’s Overview page, isn’t part of the saved credential - it’s only used for the optional validation probe in step 2.)
Get the tenant ID
az account show --query tenantId -o tsv
Get the client (app) ID
az ad app list --display-name "codeant-cspm" --query "[0].appId" -o tsv
The three GUIDs are the well-known role IDs for AuditLog.Read.All, Directory.Read.All, and Policy.Read.All on Microsoft Graph. Admin consent requires a Global Administrator (or Privileged Role Administrator) signed in.
Settings
In the CodeAnt UI navigate to Settings → Cloud Security → Azure.
Under Azure Credentials, fill in Directory (tenant) ID, Application (client) ID, and Azure Client Secret, then click Save in the top right.
(Optional) Under Validate against subscription, paste a Subscription ID and click Validate to confirm the service principal can read that subscription. A green confirmation means the Reader role is assigned and resources are listable; it does not test the Graph permissions, so make sure admin consent in step 1c really turned green. The Subscription ID is not stored - it is only used for this probe.
Start a Scan
Go to Cloud Security -> Start a New Scan and pick your Azure connection.
Within 15-20 minutes, the scan will be completed, and you will see the results.
The built-in Reader role misses two read actions that a pair of App Service checks (app_function_access_keys_configured, app_function_ftps_deployment_disabled) need. To include them, create a small custom role and assign it alongside Reader:
On the subscription’s Access control (IAM) page choose + Add → Add custom role, pick Start from JSON, and upload this file with your subscription ID filled in:
{ "properties": { "roleName": "CodeAntExtraRead", "description": "Read-only actions not covered by Reader, used by two App Service checks.", "assignableScopes": ["/subscriptions/<your-subscription-id>"], "permissions": [ { "actions": [ "Microsoft.Web/sites/host/listkeys/action", "Microsoft.Web/sites/config/list/Action" ], "notActions": [], "dataActions": [], "notDataActions": [] } ] }}
Assign the new role to codeant-cspm the same way as Reader.
VM Scanning reuses this same service principal but needs the Microsoft.Compute/snapshots/* actions, which Reader does not grant - it creates a temporary disk snapshot, reads it, and deletes it. Assign the built-in Disk Snapshot Contributor role to the CSPM app alongside Reader (Reader is still needed to read the source disk):
Azure Portal
Azure CLI
Open the subscription → Access control (IAM) → + Add → Add role assignment.
On the Role tab, search for Disk Snapshot Contributor, select it, and click Next.
On the Members tab, click + Select members, choose your CSPM app (e.g. codeant-cspm), and click Select.
Click Review + assign. Repeat for each subscription you want VM Scanning to cover.
az role assignment create \ --assignee YOUR_APP_ID \ --role "Disk Snapshot Contributor" \ --scope "/subscriptions/YOUR_SUBSCRIPTION_ID"
Without this role the scan fails when creating the snapshot, returning 403 Forbidden on a PUT .../providers/Microsoft.Compute/snapshots/... request.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"CodeAnt AI","colors":{"primary":"#4F4FE6","light":"#8B8BF5","dark":"#4040C4"},"logo":{"light":"https://mintcdn.com/codeantai/q1mptv9VxSkpnEvR/logo/light.svg?fit=max\u0026auto=format\u0026n=q1mptv9VxSkpnEvR\u0026q=85\u0026s=fe5541a58bbbaf4c33513282b7246e56","dark":"https://mintcdn.com/codeantai/q1mptv9VxSkpnEvR/logo/dark.svg?fit=max\u0026auto=format\u0026n=q1mptv9VxSkpnEvR\u0026q=85\u0026s=6931bdb408cba905a4ccbf60ac60653d"},"favicon":"https://mintcdn.com/codeantai/q1mptv9VxSkpnEvR/favicon.svg?fit=max\u0026auto=format\u0026n=q1mptv9VxSkpnEvR\u0026q=85\u0026s=af1f3e766af7f1c03b127c519d0da4ac","appearance":{"default":"system"},"background":{"color":{"light":"#ffffff","dark":"#101010"}},"navbar":{"links":[{"href":"/support","label":"Contact support"}],"primary":{"type":"button","label":"Open dashboard","href":"https://app.codeant.ai"}},"footer":{"socials":{"twitter":"https://twitter.com/CodeAntAI","linkedin":"https://www.linkedin.com/company/codeant-ai"},"links":[{"items":[{"label":"Get help","href":"/support"},{"label":"Report an issue","href":"mailto:support@codeant.ai"}]}]},"search":{"prompt":"Search for anything"},"fonts":{"heading":{"family":"Geist","weight":550},"body":{"family":"Geist"}},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"css-variables"},"latex":true},"contextual":{"options":[{"title":"Connect your AI agent","description":"Connect your AI agent to CodeAnt with the MCP server","icon":"plug","href":"https://docs.codeant.ai/cli/mcp-server"},"copy","chatgpt","claude"],"display":"toc"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"codeantai","hasAudioNarration":false,"actualSubdomain":"codeantai","customDomains":["docs.codeant.ai"],"gitSource":{"type":"github","owner":"codeant-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf02f7ad3ed130d8d6cafc","collectionId":"b2e8b113-bf40-4bba-9092-d282829ce9ab","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf02f7ad3ed130d8d6cafc"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae644e28478937caf58fead","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Documentation","count":191},{"language":"default","tag":"Rule Reference","count":76},{"language":"default","tag":"Anti-Patterns","count":53},{"language":"default","tag":"IDE, CLI \u0026 CI/CD","count":38},{"language":"default","tag":"API Reference","count":29},{"language":"default","tag":"Get Started","count":23},{"language":"default","tag":"AI Code Review","count":20},{"language":"default","tag":"Setup","count":18},{"language":"default","tag":"CI/CD","count":17},{"language":"default","tag":"JavaScript","count":15}]},"assistantConfig":{},"basePath":"","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":"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":"byok-sep-25","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":"billing-updated-9-15","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}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","href":"/_mintlify/custom/codeantai/ad284d9ff2193268/styles.css"}],"page":{"pagePath":"cloud_security/setup/azure","slug":"/cloud_security/setup/azure","pageMetadata":{"title":"Azure","description":"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)","icon":"microsoft","href":"/cloud_security/setup/azure"},"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: \"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\"\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`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Tab,Tabs,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Permissions`})}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Azure Portal`,id:`azure-portal`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`a. Register an application`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Sign in to the `,_jsx(_components.a,{href:`https://portal.azure.com`,children:`Azure Portal`}),` and search for `,_jsx(_components.strong,{children:`Microsoft Entra ID`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=216fceccceae93937c2ccc27b1a96894`,alt:`Search Microsoft Entra ID`,\"data-og-width\":`1043`,width:`1043`,\"data-og-height\":`347`,height:`347`,\"data-path\":`images/control_center/cloud_security/azure/portal/search-entra-id.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=5b9a79678184e170bf662d75f6eb70a0 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=ce7148e6b017f67e0f4e0cdf48dcbb0c 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=b7eabe0a5b3eb0b2884d6fbd860cdf3a 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=f16fee5227f0d652b7e480985935958c 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=ced550c6cdb6682db3c7662d8146e629 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/search-entra-id.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=b68100e927d17e9a38bc6dd2fc86ca91 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`In the left menu open `,_jsx(_components.strong,{children:`Manage → App registrations`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=ced83a37d83822c0a819337f111d25b2`,alt:`App registrations menu`,\"data-og-width\":`1294`,width:`1294`,\"data-og-height\":`982`,height:`982`,\"data-path\":`images/control_center/cloud_security/azure/portal/app-registration-menu.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=8c62aa9c88bfc7f3329c47ebf2a2c4e7 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=5a8562490d5b0165e2ab64cbbc59038d 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=c10e660c2f69fec50b58b2b7699ecfe6 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=943a34508115f16aab7b7b498d75014f 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=9268cd1b5ab55e35a19e1623423aa710 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/app-registration-menu.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=3d3951734801fbd529ccc899cd143906 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`+ New registration`}),`, give it a name (e.g. `,_jsx(_components.code,{children:`codeant-cspm`}),`), leave the defaults, and click `,_jsx(_components.strong,{children:`Register`}),`.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`b. Create a client secret`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the app registration’s left menu, open `,_jsx(_components.strong,{children:`Manage → Certificates \u0026 secrets`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=ab0cdb790e14f2d767e6e749f9df2826`,alt:`Certificates \u0026 secrets`,\"data-og-width\":`2572`,width:`2572`,\"data-og-height\":`920`,height:`920`,\"data-path\":`images/control_center/cloud_security/azure/portal/certificates-and-secrets.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=18a48aba73f1a89907bfb7ff0e89b22f 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=cd35152ffb757a0d0e0125f11a2e4f5b 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=9aea477178ee6b82bf8fd8b5084c06bd 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=1b35f2f1f1e4d8ab822180585e4f2e49 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=77318b216d970eaa9ca40d5cfc28db39 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/certificates-and-secrets.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=c8244553b815d3216de61329dd7f488d 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`+ New client secret`}),`, set an expiry, and click `,_jsx(_components.strong,{children:`Add`}),`. Copy the secret `,_jsx(_components.strong,{children:`Value`}),` immediately - it is only shown once.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=c163b5a2780915ae22c4cd4dc801b050`,alt:`New client secret`,\"data-og-width\":`1800`,width:`1800`,\"data-og-height\":`970`,height:`970`,\"data-path\":`images/control_center/cloud_security/azure/portal/new-client-secret.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=391beedf03687490a8bb5dd0b7b1ab04 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=57552e578ec40bdcec4c7cd985d18639 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=94bee9768e452097b60234577a95ecb0 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=91e9df6caafa33d32443b1c9c51b0f25 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=b922bea4a9f8a49761e59d99df77e416 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/new-client-secret.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=7518c9a263f4b7082c4a29d3fad89a30 2500w`}),`\n`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`c. Grant Microsoft Graph permissions`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the app registration’s left menu, open `,_jsx(_components.strong,{children:`Manage → API permissions`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`+ Add a permission`}),`, choose `,_jsx(_components.strong,{children:`Microsoft Graph`}),`, then `,_jsx(_components.strong,{children:`Application permissions`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=edee549bf228971c36bebb6792335290`,alt:`Microsoft Graph application permissions`,\"data-og-width\":`1095`,width:`1095`,\"data-og-height\":`595`,height:`595`,\"data-path\":`images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=c5b2cf6e415199377f826020e8c1d719 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=e389c3bc75cf15a7341cdb3f5fefd075 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=e8ec1c772afa84235a7a5214b094c42f 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=021ee7475bffe9752ce92fd03bf9f8bd 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=a09d5893a2f74e6d605e4f5548e31886 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/microsoft-graph-detail.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=18489cdb7ab83a258cc347e506d9a171 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Search for and tick: `,_jsx(_components.code,{children:`AuditLog.Read.All`}),`, `,_jsx(_components.code,{children:`Directory.Read.All`}),`, `,_jsx(_components.code,{children:`Policy.Read.All`}),`. Click `,_jsx(_components.strong,{children:`Add permissions`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=d010de695ad77c8de2841390c1f5a190`,alt:`Select permissions`,\"data-og-width\":`837`,width:`837`,\"data-og-height\":`562`,height:`562`,\"data-path\":`images/control_center/cloud_security/azure/portal/select-graph-permissions.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=8710e3495b4cd0ff5219912f1729ab9c 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=b137b4c2b6f280240aae3a398d2bab7b 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=85171ad833e416ece463a36f40bee5cf 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=156155cdacd5434e1f0e39c4bb6d3812 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=7e23b4b58f5a51ccb259ba14152f7ce0 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/select-graph-permissions.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=5bb54405a914ad593fb8f42d63770ec4 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Grant admin consent for \u003ctenant>`}),`, then `,_jsx(_components.strong,{children:`Yes`}),`. Each permission’s status should turn green.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`d. Assign the Reader role on the subscription`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the Azure Portal top search bar, type `,_jsx(_components.strong,{children:`Subscriptions`}),` and click the first plain `,_jsx(_components.strong,{children:`Subscriptions`}),` result under `,_jsx(_components.em,{children:`Services`}),` (not `,_jsx(_components.em,{children:`Billing subscriptions`}),` or the `,_jsx(_components.em,{children:`Resource Manager`}),` variant).`]}),`\n`,_jsx(_components.li,{children:`From the list, click the subscription you want CodeAnt to scan. (If you have many subscriptions, repeat this step for each one.)`}),`\n`,_jsxs(_components.li,{children:[`In the left menu of the subscription blade, click `,_jsx(_components.strong,{children:`Access control (IAM)`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`+ Add`}),` at the top of the page, then choose `,_jsx(_components.strong,{children:`Add role assignment`}),` from the dropdown.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Role`}),` tab, search for `,_jsx(_components.code,{children:`Reader`}),`, select the `,_jsx(_components.strong,{children:`Reader`}),` row, and click `,_jsx(_components.strong,{children:`Next`}),`.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=7ab2432f8347493be71122d656361b78`,alt:`Add Reader role`,\"data-og-width\":`1057`,width:`1057`,\"data-og-height\":`402`,height:`402`,\"data-path\":`images/control_center/cloud_security/azure/portal/add-reader-role.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=a810c73d0c4ae9b6debd94c09c51aeaa 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=4924a0f24ff123896e1d38cea9ba6335 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=1a09a635812a5e83c97e5372d182166b 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=a7e1e138095dc116e67a36876d07c4b3 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=97f8c40918f867c7436602f824a890dc 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/portal/add-reader-role.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=bd2b88978dc9b3a7a5318dab903a6d51 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Members`}),` tab, leave `,_jsx(_components.strong,{children:`Assign access to`}),` as `,_jsx(_components.em,{children:`User, group, or service principal`}),`, then click `,_jsx(_components.strong,{children:`+ Select members`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Select members`}),` panel on the right, type `,_jsx(_components.code,{children:`codeant-cspm`}),` (or the exact name you used in step a.3) into the search box, click the matching application in the results, and click `,_jsx(_components.strong,{children:`Select`}),` at the bottom.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Next`}),` until you reach the `,_jsx(_components.strong,{children:`Review + assign`}),` tab, then click `,_jsx(_components.strong,{children:`Review + assign`}),` to commit.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`e. Collect the credentials`})}),_jsxs(_components.p,{children:[`From the app registration `,_jsx(_components.strong,{children:`Overview`}),` page copy the `,_jsx(_components.strong,{children:`Application (client) ID`}),` and `,_jsx(_components.strong,{children:`Directory (tenant) ID`}),`. Use these together with the client secret from step b in the next section. (The `,_jsx(_components.strong,{children:`Subscription ID`}),`, found on the subscription’s `,_jsx(_components.strong,{children:`Overview`}),` page, isn’t part of the saved credential - it’s only used for the optional validation probe in step 2.)`]})]}),_jsx(Tab,{title:`Azure CLI`,id:`azure-cli`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Get the tenant ID`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` account`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` show`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --query`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` tenantId`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` -o`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` tsv`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Get the client (app) ID`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` ad`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` app`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` list`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --display-name`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"codeant-cspm\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --query`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"[0].appId\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` -o`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` tsv`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Create (or reset) a client secret`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` ad`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` app`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` credential`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` reset`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --id`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` YOUR_APP_ID`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --append`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --credential-description`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"exporter-script\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --years`}),_jsx(_components.span,{style:{color:`var(--mint-token-constant, #171717)`,\"--shiki-dark\":`var(--mint-token-constant, #171717)`},children:` 1`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --query`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` password`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` -o`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` tsv`})]}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`This command outputs the new secret.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Get the subscription ID`}),` (the one you want CodeAnt to scan)`,`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` account`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` show`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --query`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` id`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` -o`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` tsv`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ensure the SP has Reader rights`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` role`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` assignment`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` create`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --assignee`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` YOUR_APP_ID`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --role`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` Reader`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --scope`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"/subscriptions/YOUR_SUBSCRIPTION_ID\"`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Grant Microsoft Graph application permissions`}),` (`,_jsx(_components.code,{children:`AuditLog.Read.All`}),`, `,_jsx(_components.code,{children:`Directory.Read.All`}),`, `,_jsx(_components.code,{children:`Policy.Read.All`}),`)`,`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`GRAPH_APP_ID`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:`00000003-0000-0000-c000-000000000000`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` ad`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` app`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` permission`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` add`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --id`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` YOUR_APP_ID`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --api`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` $GRAPH_APP_ID \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --api-permissions`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` b0afded3-3588-46d8-8b3d-9842eff778da=Role`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` 246dd0d5-5bd0-4def-940b-0421030a5b68=Role`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` ad`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` app`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` permission`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` admin-consent`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --id`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` YOUR_APP_ID`})]}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The three GUIDs are the well-known role IDs for `,_jsx(_components.code,{children:`AuditLog.Read.All`}),`, `,_jsx(_components.code,{children:`Directory.Read.All`}),`, and `,_jsx(_components.code,{children:`Policy.Read.All`}),` on Microsoft Graph. Admin consent requires a Global Administrator (or Privileged Role Administrator) signed in.`]}),`\n`]}),`\n`]}),`\n`]})})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Settings`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In the CodeAnt UI navigate to `,_jsx(_components.strong,{children:`Settings → Cloud Security → Azure`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Azure Credentials`}),`, fill in `,_jsx(_components.strong,{children:`Directory (tenant) ID`}),`, `,_jsx(_components.strong,{children:`Application (client) ID`}),`, and `,_jsx(_components.strong,{children:`Azure Client Secret`}),`, then click `,_jsx(_components.strong,{children:`Save`}),` in the top right.`]}),`\n`,_jsxs(_components.li,{children:[`(Optional) Under `,_jsx(_components.strong,{children:`Validate against subscription`}),`, paste a Subscription ID and click `,_jsx(_components.strong,{children:`Validate`}),` to confirm the service principal can read that subscription. A green confirmation means the `,_jsx(_components.strong,{children:`Reader`}),` role is assigned and resources are listable; it does not test the Graph permissions, so make sure admin consent in step 1c really turned green. The Subscription ID is `,_jsx(_components.strong,{children:`not`}),` stored - it is only used for this probe.`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=afb9653ff810c4b7dcfb2753b0a87d42`,alt:`Cloud Security – Azure form`,\"data-og-width\":`2412`,width:`2412`,\"data-og-height\":`1250`,height:`1250`,\"data-path\":`images/control_center/cloud_security/azure/setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=746c7fab8e596b8168b3a361db2f839a 280w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=f6ddba0f3205004ba465b82125a40ddd 560w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=847af7bc5efa5070e1a3e8693576d729 840w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=99986a020f29a7c333d4c6e912144c25 1100w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=beada797b0ee6278082c743049f4eecb 1650w, https://mintcdn.com/codeantai/vIQvFHilaNIlEj3B/images/control_center/cloud_security/azure/setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=vIQvFHilaNIlEj3B\u0026q=85\u0026s=7326645aaaf61d6372373d6afc505d59 2500w`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Start a Scan`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Cloud Security -> Start a New Scan`}),` and pick your Azure connection.`]}),`\n`,_jsx(_components.li,{children:`Within 15-20 minutes, the scan will be completed, and you will see the results.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`optional-cover-two-extra-app-service-checks`,children:`Optional: cover two extra App Service checks`}),`\n`,_jsxs(_components.p,{children:[`The built-in `,_jsx(_components.strong,{children:`Reader`}),` role misses two read actions that a pair of App Service checks (`,_jsx(_components.code,{children:`app_function_access_keys_configured`}),`, `,_jsx(_components.code,{children:`app_function_ftps_deployment_disabled`}),`) need. To include them, create a small custom role and assign it alongside Reader:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`On the subscription’s `,_jsx(_components.strong,{children:`Access control (IAM)`}),` page choose `,_jsx(_components.strong,{children:`+ Add → Add custom role`}),`, pick `,_jsx(_components.strong,{children:`Start from JSON`}),`, and upload this file with your subscription ID filled in:`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"properties\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"roleName\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"CodeAntExtraRead\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"description\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"Read-only actions not covered by Reader, used by two App Service checks.\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"assignableScopes\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` [`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`\"/subscriptions/\u003cyour-subscription-id>\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`]`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"permissions\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"actions\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"Microsoft.Web/sites/host/listkeys/action\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"Microsoft.Web/sites/config/list/Action\"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` ]`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"notActions\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` []`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"dataActions\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` []`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"notDataActions\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` []`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`Assign the new role to `,_jsx(_components.code,{children:`codeant-cspm`}),` the same way as Reader.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`vm-scanning-permissions`,children:`VM Scanning permissions`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/cloud_security/vm-scanning`,children:`VM Scanning`}),` reuses this same service principal but needs the `,_jsx(_components.code,{children:`Microsoft.Compute/snapshots/*`}),` actions, which `,_jsx(_components.strong,{children:`Reader does not grant`}),` - it creates a temporary disk snapshot, reads it, and deletes it. Assign the built-in `,_jsx(_components.strong,{children:`Disk Snapshot Contributor`}),` role to the CSPM app `,_jsx(_components.strong,{children:`alongside`}),` Reader (Reader is still needed to read the source disk):`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Azure Portal`,id:`azure-portal-2`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the subscription → `,_jsx(_components.strong,{children:`Access control (IAM)`}),` → `,_jsx(_components.strong,{children:`+ Add → Add role assignment`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Role`}),` tab, search for `,_jsx(_components.code,{children:`Disk Snapshot Contributor`}),`, select it, and click `,_jsx(_components.strong,{children:`Next`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Members`}),` tab, click `,_jsx(_components.strong,{children:`+ Select members`}),`, choose your CSPM app (e.g. `,_jsx(_components.code,{children:`codeant-cspm`}),`), and click `,_jsx(_components.strong,{children:`Select`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Review + assign`}),`. Repeat for each subscription you want VM Scanning to cover.`]}),`\n`]})}),_jsx(Tab,{title:`Azure CLI`,id:`azure-cli-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:`az`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` role`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` assignment`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` create`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --assignee`}),_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` YOUR_APP_ID`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --role`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"Disk Snapshot Contributor\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-string, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string, #297a3a)`},children:` --scope`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"/subscriptions/YOUR_SUBSCRIPTION_ID\"`})]}),`\n`]})})})})]}),`\n`,_jsxs(Warning,{children:[`Without this role the scan fails when creating the snapshot, returning `,_jsx(_components.code,{children:`403 Forbidden`}),` on a `,_jsx(_components.code,{children:`PUT .../providers/Microsoft.Compute/snapshots/...`}),` request.`]})]})}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":"css-variables"},"config":{},"pageMetadata":{"title":"Azure","description":"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)","icon":"microsoft","href":"/cloud_security/setup/azure"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How It Works","slug":"how-it-works","depth":3,"children":[]},{"title":"Optional: cover two extra App Service checks","slug":"optional-cover-two-extra-app-service-checks","depth":3,"children":[]},{"title":"VM Scanning permissions","slug":"vm-scanning-permissions","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/codeantai/ccf9042a50041cb8/reo.js","/_mintlify/custom/codeantai/939c2d631654a3f6/sidebar-motion.js","/_mintlify/custom/codeantai/75cecc4363704fee/toc-highlight.js","/_mintlify/custom/codeantai/faf9f427997bdaa6/code-controls.js","/_mintlify/custom/codeantai/eb4a078ba732b846/scroll-to-top.js","/_mintlify/custom/codeantai/59b3b4df740c5bc6/home.js","/_mintlify/custom/codeantai/010da96f973f2fb0/nav-motion.js","/_mintlify/custom/codeantai/5039b744165ff9a7/product-switcher.js","/_mintlify/custom/codeantai/a35541ef2295242c/theme-switch.js"],"subdomain":"codeantai","siteName":"CodeAnt AI","title":"Azure - CodeAnt AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-11T07:38:33.579Z","originalFileLocation":"cloud_security/setup/azure.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=\"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\">\u003cmeta data-mint-head name=\"application-name\" content=\"CodeAnt AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_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/codeantai/urpqEjqQ6niJ8Uh7/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Azure - CodeAnt AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CodeAnt AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.codeant.ai/cloud_security/setup/azure\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://codeantai.mintlify.app/_mintlify/api/og/v2?division=Setup+%26+IAM\u0026amp;title=Azure\u0026amp;description=Connect+Azure+to+CodeAnt+for+Cloud+Security+Posture+Management+%28CSPM%29\u0026amp;theme=2d40b3bda09d04ea4a3d2ef1\u0026amp;signature=94d7bcf131b950cecfc4750f9d8801687f61d08cb57a0fb7b95fbac790c3762b\">\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=\"Azure - CodeAnt AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://codeantai.mintlify.app/_mintlify/api/og/v2?division=Setup+%26+IAM\u0026amp;title=Azure\u0026amp;description=Connect+Azure+to+CodeAnt+for+Cloud+Security+Posture+Management+%28CSPM%29\u0026amp;theme=2d40b3bda09d04ea4a3d2ef1\u0026amp;signature=94d7bcf131b950cecfc4750f9d8801687f61d08cb57a0fb7b95fbac790c3762b\">\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/codeantai/urpqEjqQ6niJ8Uh7/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CodeAnt AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4F4FE6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.codeant.ai/cloud_security/setup/azure\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/cloud_security/setup/azure.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.codeant.ai/#organization\",\"name\":\"CodeAnt AI\",\"url\":\"https://docs.codeant.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/codeantai/q1mptv9VxSkpnEvR/logo/light.svg?fit=max\u0026auto=format\u0026n=q1mptv9VxSkpnEvR\u0026q=85\u0026s=fe5541a58bbbaf4c33513282b7246e56\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.codeant.ai#website\",\"name\":\"CodeAnt AI\",\"url\":\"https://docs.codeant.ai\",\"publisher\":{\"@id\":\"https://docs.codeant.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.codeant.ai/cloud_security/setup/azure#webpage\",\"url\":\"https://docs.codeant.ai/cloud_security/setup/azure\",\"name\":\"Azure\",\"description\":\"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\",\"dateModified\":\"2026-10-11T07:38:33.579Z\",\"isPartOf\":{\"@id\":\"https://docs.codeant.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.codeant.ai/cloud_security/setup/azure#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.codeant.ai/cloud_security/setup/azure#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Cloud Security\",\"item\":\"https://docs.codeant.ai/cloud_security/cspm\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setup \u0026 IAM\",\"item\":\"https://docs.codeant.ai/cloud_security/setup/aws\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Azure\",\"item\":\"https://docs.codeant.ai/cloud_security/setup/azure\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.codeant.ai/cloud_security/setup/azure#article\",\"headline\":\"Azure\",\"name\":\"Azure\",\"description\":\"Connect Azure to CodeAnt for Cloud Security Posture Management (CSPM)\",\"url\":\"https://docs.codeant.ai/cloud_security/setup/azure\",\"mainEntityOfPage\":{\"@id\":\"https://docs.codeant.ai/cloud_security/setup/azure#webpage\"},\"dateModified\":\"2026-10-11T07:38:33.579Z\",\"publisher\":{\"@id\":\"https://docs.codeant.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.codeant.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CodeAnt AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CodeAnt AI","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"file-lines","groups":[{"group":"Get Started","icon":"rocket","pages":[{"title":"CodeAnt AI","icon":"sparkles","sidebarTitle":"What is CodeAnt?","mode":"wide","href":""},{"group":"Setup","pages":[{"title":"GitHub","icon":"github","href":"/setup/github"},{"title":"GitHub Enterprise","icon":"github","href":"/setup/github_enterprise"},{"title":"Bitbucket","icon":"bitbucket","href":"/setup/bitbucket"},{"title":"Bitbucket Data Center","icon":"bitbucket","href":"/setup/bitbucket_data_center"},{"group":"Gitlab","pages":[{"title":"GitLab Access Token","icon":"key","href":"/setup/gitlab/access-token"},{"title":"Manual Webhook Setup","icon":"webhook","href":"/setup/gitlab/manual-webhooks"},{"title":"Self-Hosted GitLab Setup","icon":"server","href":"/setup/gitlab/self-hosted/control_center"}]},{"group":"Azure Devops","pages":[{"group":"Cloud","pages":[{"title":"Microsoft Entra Workload Identity","icon":"id-badge","href":"/setup/azure_devops/cloud/entra_workload_identity"},{"title":"Service Account","icon":"user-shield","href":"/setup/azure_devops/cloud/service_account"},{"title":"Pull Request Review","icon":"code","href":"/setup/azure_devops/cloud/pull_request"},{"title":"Control Center","icon":"browser","href":"/setup/azure_devops/cloud/control_center"}]},{"group":"Self-Hosted","pages":[{"title":"Pull Request Review","icon":"code","href":"/setup/azure_devops/self-hosted/pull_request"},{"title":"Control Center","icon":"browser","href":"/setup/azure_devops/self-hosted/control_center"}]}]}]},{"group":"Organization","pages":[{"title":"Organization Teams","sidebarTitle":"Organization Teams","icon":"users","href":"/settings/teams"},{"title":"Access Control","sidebarTitle":"Access Control","icon":"shield","href":"/settings/access-control"}]},{"title":"API Tokens","sidebarTitle":"API Tokens","icon":"key","href":"/settings/api-tokens"},{"group":"Repositories","pages":[{"title":"Analysis Configuration","sidebarTitle":"Analysis Configuration","icon":"sliders","href":"/repositories/analysis_configuration"}]},{"group":"Integrations","pages":[{"group":"Jira","pages":[{"title":"Setup","icon":"gear","href":"/control_center/jira/setup"},{"title":"Create Jira Issues","icon":"ticket","href":"/control_center/jira/create_tickets"}]},{"group":"Linear","pages":[{"title":"Setup","icon":"gear","href":"/control_center/linear/setup"},{"title":"Create Linear Issues","icon":"ticket","href":"/control_center/linear/create_tickets"}]},{"group":"Slack","pages":[{"title":"Slack Integration","icon":"slack","href":"/control_center/slack/setup"}]}]}]},{"group":"AI Code Review","icon":"code-pull-request","pages":[{"group":"Features","pages":[{"title":"How to Use","icon":"circle-question","href":"/pull_request/howToUse"},{"title":"Code Review","sidebarTitle":"Code Review","icon":"magnifying-glass-chart","href":"/pull_request/features/code_review"},{"title":"Frontend QA Agent","sidebarTitle":"Frontend QA","icon":"flask","href":"/pull_request/features/frontend_qa"},{"title":"Chat","sidebarTitle":"Chat","icon":"comment-dots","href":"/pull_request/features/chat"},{"title":"Learnings","sidebarTitle":"Learnings","icon":"lightbulb","href":"/pull_request/features/learnings"},{"title":"Fix in IDE","sidebarTitle":"Fix in IDE","icon":"wand-magic-sparkles","href":"/pull_request/features/fix_in_ide"},{"title":"Auto Approve PR","sidebarTitle":"Auto Approve PR","icon":"circle-check","href":"/pull_request/features/auto_approve_pr"},{"title":"Automated PR Descriptions","sidebarTitle":"Summary","icon":"list","href":"/pull_request/description"}]},{"group":"Customize Review","pages":[{"title":"Agent Personas","icon":"robot","href":"/pull_request/customize/agent_personas"},{"title":"Instructions","icon":"wrench","href":"/pull_request/customize/instructions"},{"title":"Rules","icon":"list","href":"/pull_request/customize/rules"},{"title":"Example Prompts","sidebarTitle":"Example Prompts","href":"/pull_request/customize/prompt_examples"},{"title":"Suggestions Threshold","icon":"key","href":"/pull_request/customize/thresholds"},{"title":"Repository PR Templates","sidebarTitle":"PR Templates","icon":"file-lines","href":"/pull_request/customize/repository_pr_template"},{"title":"Custom PR Labels","sidebarTitle":"Custom Labels","icon":"tags","href":"/pull_request/customize/custom_labels"},{"title":"Global Repo Configuration","icon":"sitemap","href":"/pull_request/customize/global_repo_config"}]},{"group":"Quality Gates","pages":[{"title":"Quality Gates","icon":"circle-check","href":"/pull_request/quality_gates/setup"},{"title":"Repository Configuration","icon":"file-code","href":"/pull_request/quality_gates/repository_configuration"}]},{"group":"Integrations","pages":[{"title":"Jira Ticket Compliance","icon":"jira","sidebarTitle":"Jira","href":"/pull_request/jira_compliance"},{"title":"Third-Party Tools","icon":"square-arrow-up-right","href":"/pull_request/third_party/integrations"}]}]},{"group":"Code Security","icon":"shield","pages":[{"title":"Application security","sidebarTitle":"SAST","icon":"shield","href":"/scan_center/code_security/security"},{"title":"Secrets detection","icon":"key","href":"/scan_center/code_security/secrets"},{"title":"IaC Analysis","icon":"cloud","href":"/scan_center/code_security/iac"},{"title":"Software Composition Analysis","sidebarTitle":"SCA","icon":"cube","href":"/scan_center/code_security/sca"},{"title":"DAST","sidebarTitle":"DAST","icon":"globe","href":"/scan_center/code_security/dast"},{"title":"Issues Fixed report","sidebarTitle":"Issues Fixed","icon":"circle-check","href":"/scan_center/code_security/issues_fixed"},{"title":"Security report badge","sidebarTitle":"Security report badge","icon":"badge-check","href":"/scan_center/code_security/security_report_badge"},{"group":"Penetration Testing","pages":[{"title":"Penetration Testing","sidebarTitle":"Overview","icon":"shield-halved","href":"/pentesting/overview"},{"title":"Black Box Testing","sidebarTitle":"Black Box","icon":"user-secret","href":"/pentesting/black_box"},{"title":"Gray Box Testing","sidebarTitle":"Gray Box","icon":"circle-half-stroke","href":"/pentesting/gray_box"},{"title":"White Box Testing","sidebarTitle":"White Box","icon":"box-open","href":"/pentesting/white_box"},{"title":"Pentesting Outbound IPs","sidebarTitle":"Outbound IPs","icon":"network-wired","href":"/pentesting/outbound_ips"}]}]},{"group":"Cloud Security","icon":"cloud","pages":[{"title":"CSPM","icon":"cloud","href":"/cloud_security/cspm"},{"title":"VM Scanning","icon":"server","href":"/cloud_security/vm-scanning"},{"title":"Container Scanning","icon":"box","href":"/cloud_security/container-scanning"},{"group":"Setup \u0026 IAM","pages":[{"title":"AWS","icon":"aws","href":"/cloud_security/setup/aws"},{"title":"GCP","description":"Connect GCP to CodeAnt for Cloud Security Posture Management (CSPM)","icon":"google","href":"/cloud_security/setup/gcp"},{"title":"Azure","icon":"microsoft","href":"/cloud_security/setup/azure"}]}]},{"group":"Code Quality","icon":"gauge-high","pages":[{"title":"Docstring Generation","description":"Effortlessly Generate Contextual Docstrings for Your Codebase","icon":"file","href":"/scan_center/code_quality/docstring"},{"title":"Dead code","icon":"trash","href":"/scan_center/code_quality/dead_code"},{"title":"Duplicate code","icon":"copy","href":"/scan_center/code_quality/duplicate_code"},{"title":"Complex Functions","icon":"expand","href":"/scan_center/code_quality/complex_functions"},{"title":"Antipatterns/Bugs","icon":"bug","href":"/scan_center/code_quality/antipatterns"},{"title":"Reporting","icon":"file-pdf","href":"/scan_center/code_quality/report_generation"}]},{"group":"Engineering Metrics","icon":"chart-line","pages":[{"title":"DORA Metrics","sidebarTitle":"DORA Metrics","icon":"chart-line","href":"/engineering_productivity/dora_metrics"},{"title":"Developer Productivity Metrics","sidebarTitle":"Dev Productivity","icon":"gauge-high","href":"/engineering_productivity/dev_metrics"}]},{"group":"IDE, CLI \u0026 CI/CD","icon":"terminal","pages":[{"group":"IDE","pages":[{"group":"Setup","pages":[{"title":"VS Code Extension","sidebarTitle":"VS Code","icon":"code","href":"/ide/setup/vscode"},{"title":"Cursor Extension","icon":"arrow-pointer","sidebarTitle":"Cursor","href":"/ide/setup/cursor"},{"title":"Windsurf Extension","sidebarTitle":"Windsurf","icon":"wind","href":"/ide/setup/windsurf"},{"title":"JetBrains IDEs Plugin","sidebarTitle":"JetBrains","icon":"lightbulb","href":"/ide/setup/jetbrains"},{"title":"Visual Studio Extension","sidebarTitle":"Visual Studio","icon":"window","href":"/ide/setup/visualstudio"}]},{"group":"Review","pages":[{"title":"How to use","icon":"question","href":"/ide/review/how_to_use"},{"title":"Code review Instructions","icon":"wrench","href":"/ide/review/code_review_instructions"},{"title":"Custom Review Rules","icon":"list","href":"/ide/review/custom_prompts"},{"title":"Review Configuration","icon":"gear","href":"/ide/review/configuration"}]}]},{"group":"CLI","pages":[{"title":"Installation \u0026 Setup","sidebarTitle":"Setup","icon":"terminal","href":"/cli/setup"},{"title":"CLI Commands","sidebarTitle":"Commands","icon":"code","href":"/cli/commands"},{"title":"AI Code Review","sidebarTitle":"AI Review","icon":"robot","href":"/cli/review"},{"title":"SCM Integration \u0026 PR Tools","sidebarTitle":"SCM \u0026 PR Tools","icon":"code-pull-request","href":"/cli/scm-integration"},{"title":"Repository Scans","sidebarTitle":"Repository Scans","icon":"magnifying-glass-chart","href":"/cli/scan-center"},{"title":"Findings","sidebarTitle":"Findings","icon":"shield-check","href":"/cli/findings"},{"title":"Autofix CodeAnt comments using your coding agent","sidebarTitle":"Autofix CodeAnt Comments","icon":"comments","href":"/cli/resolve-pr-comments-skill"},{"title":"Git Hooks","sidebarTitle":"Git Hooks","icon":"git-alt","href":"/cli/git-hooks"},{"title":"Claude Code Integration","sidebarTitle":"Claude Code","icon":"message-bot","href":"/cli/claude-code-integration"},{"title":"Cursor Integration","sidebarTitle":"Cursor","icon":"arrow-pointer","href":"/cli/cursor-integration"},{"title":"MCP Server","sidebarTitle":"MCP Server","icon":"plug","href":"/cli/mcp-server"},{"title":"MCP Tool Reference","sidebarTitle":"MCP Tools","icon":"list","href":"/cli/mcp-tools"}]},{"group":"CI/CD","pages":[{"group":"Automated scans","pages":[{"title":"Azure Pipelines","icon":"cloud","href":"/control_center/ci/ci_azuredevops"},{"title":"Bitbucket Pipelines","icon":"bitbucket","href":"/control_center/ci/ci_bitbucket"},{"title":"Github Actions","icon":"github","href":"/control_center/ci/ci_github"},{"title":"GitLab","icon":"gitlab","href":"/control_center/ci/ci_gitlab"},{"title":"Jenkins","icon":"hammer","href":"/control_center/ci/ci_jenkins"}]},{"group":"Test Coverage","pages":[{"title":"GitHub Actions","icon":"github","href":"/control_center/test_coverage/github"},{"title":"Bitbucket Pipelines","icon":"bitbucket","href":"/control_center/test_coverage/bitbucket"},{"title":"GitLab CI/CD","icon":"gitlab","href":"/control_center/test_coverage/gitlab"},{"title":"Azure Pipelines","icon":"cloud","href":"/control_center/test_coverage/azuredevops"},{"title":"Jenkins","icon":"jenkins","href":"/control_center/test_coverage/jenkins"},{"title":"CircleCI","icon":"circle","href":"/control_center/test_coverage/circleci"}]},{"group":"Quality gates","pages":[{"title":"GitHub Actions","icon":"github","href":"/control_center/quality_gates/quality_gate_github"},{"title":"GitLab CI/CD","icon":"gitlab","href":"/control_center/quality_gates/quality_gate_gitlab"},{"title":"Azure Pipelines","icon":"cloud","href":"/control_center/quality_gates/quality_gate_azuredevops"},{"title":"Bitbucket Pipelines","icon":"bitbucket","href":"/control_center/quality_gates/quality_gate_bitbucket"},{"title":"Jenkins","icon":"jenkins","href":"/control_center/quality_gates/quality_gate_jenkins"}]},{"group":"DAST","pages":[{"title":"Jenkins","icon":"jenkins","href":"/control_center/dast/dast_jenkins"}]}]}]},{"group":"Rule Reference","icon":"list","pages":[{"group":"Compliance","pages":[{"title":"EU AI Act Statement","href":"/compliance/EU-AI-Act-Statement"},{"title":"GDPR","href":"/compliance/GDPR"},{"title":"HIPAA","href":"/compliance/HIPAA"},{"title":"ISO/IEC 27001:2022","href":"/compliance/ISO-IEC-27001:2022"},{"title":"ISO 27002:2022","href":"/compliance/ISO-27002:2022"},{"title":"RBI Baseline Cyber Security and Resilience Requirements","href":"/compliance/RBI-Baseline-Cyber-Security-and-Resilience-Requirements"},{"title":"PCI DSS v4.0","href":"/compliance/PCI-DSS-v4.0"},{"title":"SOC 2","href":"/compliance/SOC-2"},{"title":"MISRA-C-2012","href":"/compliance/MISRA-C-2012"},{"title":"MISRA-CPP-2023","href":"/compliance/MISRA-CPP-2023"},{"title":"AUTOSAR-CPP-2014","href":"/compliance/AUTOSAR-CPP-2014"}]},{"group":"Anti-Patterns","pages":[{"title":null,"href":"/antipattern-rules/pyspark"},{"group":"Python","pages":[{"title":"Python - 1","href":"/antipattern-rules/Python/python1"},{"title":"Python - 2","href":"/antipattern-rules/Python/python2"},{"title":"Python - 3","href":"/antipattern-rules/Python/python3"}]},{"group":"Java","pages":[{"title":"Java - 1","href":"/antipattern-rules/Java/java1"},{"title":"Java - 2","href":"/antipattern-rules/Java/java2"},{"title":"Java - 3","href":"/antipattern-rules/Java/java3"},{"title":"Java - 4","href":"/antipattern-rules/Java/java4"}]},{"title":"C / CPP","href":"/rules/cfamily"},{"title":"C #","href":"/rules/csharp"},{"group":"JavaScript","pages":[{"title":null,"href":"/rules/javascript"},{"title":null,"href":"/rules/angular"},{"title":null,"href":"/rules/autofix"},{"title":null,"href":"/rules/eslint"},{"title":null,"href":"/rules/import"},{"title":null,"href":"/rules/jsx"},{"title":null,"href":"/rules/next"},{"title":null,"href":"/rules/promise"},{"title":null,"href":"/rules/react"},{"title":null,"href":"/rules/react_native"},{"title":null,"href":"/rules/security"},{"title":null,"href":"/rules/sonar"},{"title":null,"href":"/rules/tailwind"},{"title":null,"href":"/rules/typescript"},{"title":null,"href":"/rules/unicorn"}]},{"title":null,"href":"/rules/jcl"},{"title":null,"href":"/rules/kotlin"},{"title":null,"href":"/rules/kubernetes"},{"title":null,"href":"/rules/abap"},{"title":null,"href":"/rules/apex"},{"title":"Azure Source Manager","href":"/rules/azureresourcemanager"},{"title":null,"href":"/rules/php"},{"title":null,"href":"/rules/pli"},{"title":null,"href":"/rules/plsql"},{"title":null,"href":"/rules/secrets"},{"title":null,"href":"/rules/swift"},{"title":null,"href":"/rules/terraform"},{"title":null,"href":"/rules/text"},{"title":null,"href":"/rules/tsql"},{"title":null,"href":"/rules/rpg"},{"title":null,"href":"/rules/ruby"},{"title":"Elixir","href":"/rules/elixir"},{"title":null,"href":"/rules/scala"},{"title":null,"href":"/rules/vb6"},{"title":null,"href":"/rules/vbnet"},{"title":null,"href":"/rules/xml"},{"title":null,"href":"/rules/flex"},{"title":null,"href":"/rules/go"},{"title":null,"href":"/rules/html"},{"title":null,"href":"/rules/docker"},{"title":null,"href":"/rules/css"},{"title":null,"href":"/rules/cobol"},{"title":null,"href":"/rules/common"}]},{"title":"Infrastructure Security Database","href":"/infra_security_descriptions"},{"group":"Application Security Database","pages":[{"title":"Application Security Rules","sidebarTitle":"Overview","href":"/application_rules/overview"},{"group":"OWASP Top 10 (2021)","pages":[{"title":"A01:2021 - Broken Access Control","sidebarTitle":"A01 - Broken Access Control","href":"/application_rules/a01-broken-access-control"},{"title":"A02:2021 - Cryptographic Failures","sidebarTitle":"A02 - Cryptographic Failures","href":"/application_rules/a02-cryptographic-failures"},{"title":"A03:2021 - Injection","sidebarTitle":"A03 - Injection","href":"/application_rules/a03-injection"},{"title":"A04:2021 - Insecure Design","sidebarTitle":"A04 - Insecure Design","href":"/application_rules/a04-insecure-design"},{"title":"A05:2021 - Security Misconfiguration","sidebarTitle":"A05 - Security Misconfiguration","href":"/application_rules/a05-security-misconfiguration"},{"title":"A06:2021 - Vulnerable and Outdated Components","sidebarTitle":"A06 - Vulnerable and Outdated Components","href":"/application_rules/a06-vulnerable-outdated-components"},{"title":"A07:2021 - Identification and Authentication Failures","sidebarTitle":"A07 - Identification and Authentication Failures","href":"/application_rules/a07-auth-failures"},{"title":"A08:2021 - Software and Data Integrity Failures","sidebarTitle":"A08 - Software and Data Integrity Failures","href":"/application_rules/a08-data-integrity-failures"},{"title":"A09:2021 - Security Logging and Monitoring Failures","sidebarTitle":"A09 - Security Logging and Monitoring Failures","href":"/application_rules/a09-logging-monitoring-failures"},{"title":"A10:2021 - Server-Side Request Forgery (SSRF)","sidebarTitle":"A10 - Server-Side Request Forgery (SSRF)","href":"/application_rules/a10-ssrf"}]}]}]},{"group":"Resources","icon":"newspaper","pages":[{"title":"Support","icon":"life-ring","href":"/support"},{"group":"How CodeAnt Uses CodeAnt","pages":[{"title":"Sprint Reports","icon":"newspaper","href":"/how_codeant_uses_codeant/sprint_reports"},{"title":"Addressing Review Feedback","icon":"comments","href":"/how_codeant_uses_codeant/addressing_review_feedback"},{"title":"Cloud Security","icon":"shield-halved","href":"/how_codeant_uses_codeant/cloud_security"},{"title":"Quality Gates","icon":"flag-checkered","href":"/how_codeant_uses_codeant/quality_gates"}]},{"group":"Open Source","pages":[{"title":"Tree-sitter VB.NET Parser","icon":"code","href":"/open_source/vb-dot-net"}]},{"group":"Blogs","pages":[{"title":"Superhuman Context","icon":"brain-circuit","href":"/blog/superhuman-context"},{"title":"Practical Agent Sandboxing","icon":"cube","href":"/blog/practical-agent-sandboxing"}]}]}]},{"tab":"API Reference","icon":"file-code","pages":[{"title":"API Reference","href":"/api-reference/analysis/start-analysis"}]}]},"basePath":"","title":"Azure - CodeAnt AI","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}