Defender for Cloud: Azure DevOps organization stuck in "OnboardedByOtherConnector" after the original connector was deleted – how to release the orphaned binding?

Rafał Leżanko 0 Reputation points
2026-09-21T14:04:19.0266667+00:00

Defender for Cloud: Azure DevOps organization stuck in "OnboardedByOtherConnector" after the original connector was deleted – how to release the orphaned binding?

Tags: azure-defender-for-cloud, azure-devops, defender-for-devops

Setup

  • Defender for Cloud with Defender CSPM (Standard) enabled on the subscription.
  • One Azure DevOps organization in the tenant. It is not connected to any other Defender for Cloud connector in any subscription of the tenant.
  • Prerequisites on the Azure DevOps side are met: the authorizing user is Project Collection Administrator (verified, membership via group), has Basic access level, and "Third-party application access via OAuth" is On. The "Microsoft Security DevOps" enterprise application is consented in the tenant.

Problem

Some time ago (more than 90 days, nothing left in the activity log) an Azure DevOps connector –

let's call it connector-old in resource group rg-old – was deleted. It looks like only the

Microsoft.Security/securityConnectors ARM resource was removed, and the organization binding

underneath it was never released.

Last week a new connector connector-new was created in another resource group, authorized by a

PCA user, autodiscovery enabled. It is reported Healthy (health report, no issues) and the portal

shows "Connected", but after 4+ days it has never discovered the organization, projects or

repositories. Its list of organizations is empty.

In Azure Resource Graph (securityresources table) the only azuredevopsorgs row in the

whole tenant still sits under the deleted connector:


/subscriptions/<sub>/resourceGroups/rg-old/providers/Microsoft.Security/securityConnectors/connector-old/devops/default/azureDevOpsOrgs/<org>

  type: microsoft.security/securityconnectors/devops/azuredevopsorgs

  properties.onboardingState: onboarded

  properties.provisioningStatusMessage: OK

  properties.provisioningStatusUpdateTimeUtc: still refreshed roughly twice a day (~03:12 and ~07:13 UTC)

So the backend still considers the organization onboarded to a connector that no longer exists,

and keeps refreshing that binding.

What I verified via the REST API (api-version 2024-04-01)

  • POST .../connector-new/devops/default/listAvailableAzureDevOpsOrgs → [{ "name": "<org>", "properties": { "onboardingState": "OnboardedByOtherConnector" } }]
  • GET .../connector-new/devops/default/azureDevOpsOrgs → []
  • GET .../connector-new/devops/default/azureDevOpsOrgs/<org> → 404 NotFound
  • GET .../connector-old/devops/default/azureDevOpsOrgs/<org> → 404 ParentResourceNotFound (ARM rejects the call because the parent connector resource is gone)

What I tried

  1. Re-authorized connector-new with a PCA account. No change after several daily cycles.
  2. Recreated a connector with the exact same name and resource group as the deleted one (connector-old in rg-old), hoping the backend would match the orphaned binding by path. The new resource got a different hierarchyIdentifier, listAvailableAzureDevOpsOrgs still returns OnboardedByOtherConnector, and its own organization list is empty. The orphaned row in Resource Graph is unchanged. So the binding seems to be keyed by the old connector's internal identifier, not by the ARM path.

I have not tried PUT .../azureDevOpsOrgs/<org> with onboardingState: Onboarded on the new

connector yet, nor deleting the recreated connector via the portal, because I would like to

understand the expected behaviour first rather than keep mutating the state.

Questions

  1. Is there any supported way (API or portal) to release an organization binding whose parent connector no longer exists? The Azure DevOps Orgs operation group has no Delete, and every path under the deleted connector fails at ARM level with ParentResourceNotFound.
  2. Does deleting the Microsoft.Security/securityConnectors resource directly (without deleting devops/default first, i.e. not via the Defender for Cloud "Environment settings" blade) leave the organization binding orphaned by design? If so, is this documented anywhere?
  3. Would PUT .../connector-new/devops/default/azureDevOpsOrgs/<org> with {"properties":{"onboardingState":"Onboarded"}} be expected to take over an organization that is in OnboardedByOtherConnector state, or is that always rejected?
  4. Is this something only Microsoft Support can clean up on the backend? If yes, is there a specific problem type in the support request form that routes to the DevOps security team?

Any pointers appreciated.

Microsoft Security | Microsoft Defender | Microsoft Defender for Cloud
0 comments No comments

1 answer

Sort by: Newest
  1. Konstantinos Lianos 830 Reputation points Student Ambassador
    2026-10-06T10:20:04.0833333+00:00

    Hello @Rafał Leżanko

    Based on the state you are seeing, this looks like an orphaned Defender for DevOps backend binding rather than an Azure DevOps permissions issue.

    OnboardedByOtherConnector specifically means Defender for Cloud still considers the organization onboarded through another connector. Microsoft’s current Azure DevOps Orgs API exposes Create/Update, Get, List and List Available operations, but no supported Delete operation for the organization resource itself. Microsoft Learn

    I would not try to force the PUT takeover. The documented state indicates that the organization is already owned by another connector, and there is no documented takeover mechanism for this orphaned scenario. Microsoft Learn

    Normally organizations should be removed through Defender for Cloud → Environment settings → Edit connector → Configure access, where Microsoft supports adding or removing onboarded organizations. Microsoft Learn

    Since the original connector no longer exists while the backend record is still being refreshed, I would open a Microsoft Support case for Defender for Cloud / DevOps Security and ask them to remove the stale organization-to-connector binding from the backend. Include the old connector resource ID, new connector resource ID, organization name, hierarchyIdentifier, and the OnboardedByOtherConnector REST response.

    If this answer helps, please mark it as Accepted/Resolved so it can help others as well.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.