azure-dbx-access-connector-mi-attach
Attach/swap a user-assigned MI on a Databricks Access Connector, giving all workspace clusters access to that MI via IMDS.
match
A conjunctive graph pattern. Variables (?x) bind node ids; every clause must hold.
where
?principal has EFFECTIVE Microsoft.Databricks/accessConnectors/write on the target Access Connector
?principal has EFFECTIVE Microsoft.
ManagedIdentity/userAssignedIdentities/assign/action on ?userMI
emit
| source type | Identity |
|---|---|
| target type | Compute |
| source | <principal> |
| target | <Databricks Access Connector (GenericCompute — identity broker)> |
| permissions | Microsoft.Databricks/accessConnectors/write Microsoft.ManagedIdentity/userAssignedIdentities/assign/action |
| conditions | role_compatibility service_state |
Narrative
{principal.name} can attach/swap user-assigned MI {userMI.name} on Access Connector {target.name} (accessConnectors/write + assign/action on {userMI.name}), so cluster code will execute as {userMI.name} via IMDS after cluster restart.
Raw rule rules/derived/azure/databricks.yaml
id: azure-dbx-access-connector-mi-attach
emits: CanAttachIdentity
description: Attach/swap a user-assigned MI on a Databricks Access Connector, giving all workspace clusters
access to that MI via IMDS.
match:
- - principal: null
- CanPassIdentity
- userMI: null
where:
- ?principal has EFFECTIVE Microsoft.Databricks/accessConnectors/write on the target Access Connector
- ?principal has EFFECTIVE Microsoft.ManagedIdentity/userAssignedIdentities/assign/action on ?userMI
emit:
source_type: Identity
target_type: Compute
source: <principal>
target: "<Databricks Access Connector (GenericCompute \u2014 identity broker)>"
permissions:
- Microsoft.Databricks/accessConnectors/write
- Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
conditions:
- role_compatibility
- service_state
false_positive_note: 'BOTH ARM permissions are required: assign/action on the MI AND accessConnectors/write.
Neither alone attaches the MI. The new MI becomes accessible to cluster code only after clusters are
restarted (the Access Connector change propagates, but running clusters hold a cached token until
expiry or restart). Escalation only if the attached MI out-privileges the caller. Honor the assign/action
resource scope.'
derived_from:
- <CanPassIdentity edge_id>
narrative: '{principal.name} can attach/swap user-assigned MI {userMI.name} on Access Connector {target.name}
(accessConnectors/write + assign/action on {userMI.name}), so cluster code will execute as {userMI.name}
via IMDS after cluster restart.'