Azure Databricks · Networking & Security · Stage 9 · Capstone

Synthesis, Best Practices & Interview Prep

For the FDE/RSA who has to assemble and defend a design across the table. No new control here — just the three senior moves: name a reference design and draw it, recite the hardening checklist (and say what's overkill), and walk a packet hop-by-hop, naming the control and the trade-off at each door.
Azure-first 9.1 Reference Architectures 9.2 Best-Practices Checklist 9.3 Interview Scenarios Architect altitude

One map, three doors, four floor plans

Every earlier lesson taught one control. This capstone assembles them. A reference architecture is just a choice of one control on each of the three connectivity paths (the scaffold from Stage 2.2), plus identity, governance, and encryption on top. You never invent a new map — you pick the closest of four floor plans and adapt.

🧠 Mental model — hold this in your head

A reference architecture is a floor plan for a secure building, and every question is "which lock goes on which of three doors — and what's the cheapest lock the regulator will accept?" ① user→workspace (front door) · ② compute↔control (staff intercom, outbound-only) · ③ compute→storage (loading dock). Pick the closest of four floor plans, harden the three doors with the cheapest lock that meets the compliance language, and be able to walk the packet and name what breaks at each hop.

The three doors — the scaffold the whole topic rests on

PathWho talks to whomFloor control (free)Mandated upgrade
① User → workspaceBrowser / BI / REST → workspace URLIP access listFront-end Private Link + public access Disabled
② Compute ↔ controlCluster dials home (SCC relay, 443)VNet injection + SCCBack-end Private Link
③ Compute → storageCluster reads/writes ADLS Gen2Storage firewall + Service EndpointPrivate Endpoint / NCC PE (+ firewall DEP)

Static topology — the full-DEP reference (zoom-crisp, reusable in slides)

Full-DEP Azure Databricks reference architecture: user to front-end private
      endpoint to control plane (path 1); container subnet outbound via SCC over a back-end private endpoint to
      the control plane (path 2); container subnet to ADLS Gen2 via a dfs/blob private endpoint (path 3); UDR
      0.0.0.0/0 to an Azure Firewall in the hub VNet; and the serverless plane reaching ADLS via an NCC private
      endpoint.
The full-DEP blueprint — transit (hub) VNet + workspace (spoke) VNet, all three doors hardened with Private Link, storage firewall + PE, UDR→Azure Firewall, and NCC for serverless.

The line a security team wants to hear

"We don't custom-build per customer — we pick the closest of four references and adapt. A lot is already off the public internet by default; Private Link, NCC private endpoints, and the firewall DEP just remove the last public-IP hop and stop a compromised notebook from reaching an attacker."

Terms used here (full deep-dive lives in earlier modules)

SCC / back-end PL
SCC removes inbound (no public IP); back-end Private Link removes the public-IP hop. → Stage 2.3 / 3.1
Front-end / web-auth PL
Private user→workspace + the SSO callback endpoint (one per region/DNS zone). → Stage 3.1
NCC
Account-level, regional object giving serverless private reach (PE rules: dfs/blob). → Stage 5.2
DEP
UDR 0.0.0.0/0 → Azure Firewall with an FQDN allowlist — anti-exfiltration. → Stage 3.4
CMK / CSP
Customer-managed keys + the Compliance Security Profile for regulated workloads. → Stage 8

9.1 · Reference architectures end-to-end

Four blueprints an Azure Databricks SA draws from memory. Switch the diagram between them — the same three doors, hardened differently — and click any box for the "what + why." IP sizing shows the node-count math.

TipPick a blueprint, then click a box to see what it is and why it's there.

Why a separate transit VNet (Standard)

The browser_authentication endpoint is one per region per DNS zone and a single point of failure for SSO. Isolate it in a dedicated, delete-locked "web-auth workspace" so deleting a spoke never breaks login for the others. And size subnets for peak — CIDR is immutable.

Walk a packet (full-DEP) — name the control, and why it breaks without it

HopControl(s)WHY IT BREAKS without it
1 · User → workspace URLFront-end PL; IP ACL / public access DisabledURL resolves to a public IP — open to the internet
2 · SSO callbackbrowser_authentication PESSO callback has no route — login fails region-wide
3 · CP schedules clusterSCC/NPIP; VNet injection; delegationVMs get public IPs + open inbound ports
4 · Cluster → control planeBack-end PL; SCC reversed callOutbound rides the public internet to the relay
5 · Cluster → ADLS Gen2Storage firewall; SE/PE; UC ext. locationData path on public internet; storage open
6 · Any other egressUDR + Azure Firewall (DEP)Compromised notebook exfiltrates to any host

Illustrative config — the load-bearing lines

Terraform — VNet injection + SCC, sized for peak. Full module is the optional Stage 9 hands-on artifact.

resource "azurerm_virtual_network" "ws" {
  address_space = ["10.50.0.0/16"]                    # /16: room for big subnets + PE subnets
}
resource "azurerm_subnet" "container" {               # "private" subnet — private under SCC
  address_prefixes = ["10.50.4.0/22"]                 # /22 -> ~1,019 nodes peak; immutable later
  delegation { name = "dbx"; service_delegation { name = "Microsoft.Databricks/workspaces" } }
}
resource "azurerm_databricks_workspace" "this" {
  sku                                   = "premium"   # Private Link / CMK / CSP require Premium
  public_network_access_enabled         = false       # full-private (DEP); true for hybrid Standard
  network_security_group_rules_required = "NoAzureDatabricksRules"   # required with back-end PL
  custom_parameters { no_public_ip = true }           # SCC / No Public IP
}

Portal: Create → Azure Databricks → Networking → No Public IP = Yes, Deploy in your own VNet = Yes, Public Network Access Disabled (DEP), Required NSG Rules = NoAzureDatabricksRules.

FQDN allowlist (DEP) — allowlist names, not IPs

Control plane / SCC relay: *.azuredatabricks.net · data-plane: adb-dp-<id>.<n>.azuredatabricks.net · CDN assets: *.cloud.databricksusercontent.com — all 443. Don't route the SCC relay / back-end-PL traffic through the firewall (already private; needless hop).

9.2 · Networking & security best-practices checklist

The pre-flight checklist laid over the three doors. For each door, ask: what's the floor, and what do I add only when a mandate pays for it? Toggle the diagram between the floor (free, always-on) and the mandated upgrades; click any box for the "what + why."

TipToggle floor vs mandated, then click a box for the "what + why."

The reasoning trick

When someone asks "is this workspace secure?", don't recite features — walk the three doors and at each name (a) the floor control and (b) the mandated upgrade. Ten MUST items are the airframe; five amber items (back-end PL, front-end PL, storage PEs, CMK, firewall DEP) are bolt-ons only when the regulatory profile pays for the cost.

Non-negotiable vs "only when mandated"

ItemTierAlways do?Trade-off / when overkill
VNet injection + SCCAnyYesNone — the floor
Size subnets for peakAnyYesFree; only failure is too small
NAT gateway egressAnyYesSmall hourly + per-GB
Storage firewall + Service EndpointsAnyYesFree; default storage choice
Premium planPremiumYesHigher per-DBU cost
SSO + SCIM + MFA + separate adminsAnyYesSetup effort only
Unity Catalog for governed dataAnyYesMigration effort
Cluster policies + UC access modePremiumYesFriction for power users
Audit logging / system tablesAny (Preview)YesStorage/SIEM cost
IaC for everythingAnyYesUp-front authoring
Back-end Private LinkPremiumWhen internal traffic must be privatePer-endpoint cost
Front-end PL + public access DisabledPremiumWhen "no public ingress" mandatedTransit VNet, DNS, web-auth
Private Endpoints to storageAnyWhen private IP on storage mandatedPer-GB — validate first
CMKPremiumWhen key custody mandatedKey Vault ops + lockout risk
Azure Firewall DEPAnyWhen exfil-sensitiveCost + hop; don't route SCC through it

Illustrative config — the items unique to this synthesis lesson

# Item 4.3 — IP access list (enforcement must be ON, else stored-but-not-applied)
resource "databricks_workspace_conf" "this" {
  custom_config = { "enableIpAccessLists" = "true" }   # turn the feature ON
}
resource "databricks_ip_access_list" "allow_corp" {
  list_type    = "ALLOW"                                # an ALLOW list flips to default-deny
  ip_addresses = ["203.0.113.0/24"]                     # block lists win, evaluated first
}
# Item 5.2 — cluster policy: block legacy "No Isolation Shared"
#   data_security_mode allowlist: ["USER_ISOLATION","SINGLE_USER"]  # UC-compliant modes only
-- Item 6.1 — who changed permissions / failed to log in (Public Preview table; verify)
SELECT event_time, user_identity.email, action_name, source_ip_address
FROM system.access.audit
WHERE event_date >= current_date() - INTERVAL 7 DAYS
  AND (action_name ILIKE '%Permission%' OR action_name ILIKE '%login%');

Portal: IP access lists = Account Console → Settings → Security → IP access lists; MFA is enforced in Entra ID Conditional Access (not a Databricks toggle).

9.3 · Customer-conversation & interview scenarios

The five whiteboard answers an SA gives cold. Switch the diagram between scenarios — each highlights the door(s) in play and the control that locks it. The golden rule for all five: trace the packet, name the control at each hop, state the trade-off, and know what breaks.

TipPick a scenario, then click a box for the 30-second answer + the probe.
The golden rule (say it on every scenario)
"Every Azure Databricks network question reduces to three doors — user→workspace, compute→control, compute→data. I trace the packet on each, name the control, state the security-vs-cost-vs-complexity trade-off, then default to the cheapest control that meets your compliance language and only escalate to Private Link / firewall where the regulation actually requires it."

Service Endpoint vs Private Endpoint (Scenario 2)

DimensionService EndpointPrivate Endpoint
What it isSubnet "tag" routing to a service over the backboneNIC with a private IP mapped to one service
Storage FQDN resolves toPublic IP (firewall trusts the subnet)Private IP (via privatelink.dfs.core.windows.net)
CostFreePer-hour + per-GB
On-prem / cross-VNet reachNoYes
Serverless equivalentNCC default rules expose SE subnet IDsNCC private endpoint (dfs/blob)

Config proof — serverless private ADLS via NCC (Scenario 4)

# Databricks CLI (account admin). dfs = ADLS data; blob = model artifacts (you may need both).
databricks account network-connectivity create-network-connectivity-configuration \
  --json '{"name":"ncc-eastus","region":"eastus"}'
databricks account network-connectivity create-private-endpoint-rule <NCC_ID> \
  --json '{"resource_id":".../storageAccounts/<ADLS>","group_id":"dfs"}'
# -> APPROVE on the storage account: Portal -> Storage -> Networking -> Private endpoint connections.
#    Rule status: PENDING -> ESTABLISHED.  Quotas: 10 NCCs/region, 100 PEs/region, 50 workspaces/NCC.

Interview-fatal traps

Conflating SCC and Private Link (SCC = no public IP/no inbound; PL = no public hop — say both). "Just whitelist the serverless IPs" (they're dynamic — it's NCC). Routing the SCC relay through the firewall (needless hop). Quoting Preview as GA (inbound PL for performance-intensive services is Preview — verify per region).

Decision guide — which blueprint, which controls

Standard (default for production)

  • Multi-workspace production estate (Premium)
  • Hub-and-spoke with a separate transit VNet
  • VNet injection + SCC + back-end Private Link
  • Delete-locked web-auth workspace for SSO
  • Use unless cost forces Simplified or compliance forces DEP

Full DEP / regulated

  • Bank / health / gov / PII, "no public egress" mandate
  • Full Private Link + public access Disabled
  • UDR 0.0.0.0/0 → Azure Firewall, FQDN allowlist
  • Storage firewall + dfs/blob PEs + NCC PEs for serverless
  • CMK + Compliance Security Profile; justify the cost as audit sign-off

Rule of thumb

Start free, step up only when mandated. SCC + VNet injection (②) and storage firewall + Service Endpoint (③) cost nothing and are backbone-private. Add Private Link / NCC PEs / firewall DEP / CMK only when a regulator demands no public-IP hop or on-prem reach. Premium + Unity-Catalog-on-ADLS is the non-negotiable baseline; the IP-exhaustion layout applies to every design.

Customer Q&A — what the security team actually asks

The one-liner
"We pick the closest of four references and adapt. A lot is already off the public internet by default; Private Link, NCC private endpoints, and the firewall DEP remove the last public-IP hop and stop a compromised notebook from reaching an attacker. I default to the cheapest control that meets your compliance language and escalate only where the regulation requires it."

Common asks & the answer

Customer asks…Architect answers…
"Walk me through how a query reaches our private storage without touching the internet."Hop-by-hop: front-end PE → SSO via web-auth PE → SCC outbound + back-end PL → UC-governed ADLS via storage PE → any other egress via Azure Firewall FQDN allowlist.
"Does any traffic ever touch the public internet?"Front/back-end Private Link + NCC PEs + storage firewall. SCC alone is backbone-but-public-IP, so "no public hop" is true only once back-end PL is on.
"Can we get a stable egress IP for our allowlist?"Azure NAT Gateway for classic. Serverless has no static IP — use NCC, not an IP.
"How do we stop a compromised notebook from exfiltrating data?"UDR 0.0.0.0/0 → Azure Firewall FQDN allowlist (DEP) + a serverless egress/network policy (default-deny).
"Service Endpoint or Private Endpoint for our ADLS?"Default to Service Endpoints (free, backbone). Private Endpoints only when "no public IP, ever" or on-prem/cross-VNet reach is mandated.
"Can we start Simplified and move to full DEP later?"Yes, but folding egress into the workspace VNet makes the firewall retrofit harder — plan the transit VNet now if DEP is on the roadmap.
"What needs Premium, and what's still Preview?"PL / CMK / CSP / IP ACLs / audit delivery = Premium; inbound PL for performance-intensive services = Public Preview — verify per region.

What breaks in the field — and the FIRST check

SSO down for a whole region

The shared browser_authentication host workspace was deleted/changed.First check: does it still exist and does *.pl-auth.azuredatabricks.net resolve to the PE private IP?

"Private" URL resolves to a public IP

Custom/on-prem DNS isn't forwarding the zone.First check: spoke DNS conditional-forwards *.privatelink.azuredatabricks.net to Azure DNS.

"Cluster failed to start: insufficient IPs"

Container subnet at the ceiling on autoscale.First check: prefix vs node count against 2^(32−n) − 5; CIDR is immutable.

Cluster can't read its own ADLS

Storage firewall on, allow rule missing.First check: storage Networking blade — is the SE subnet or the PE in the allow rules with default Deny?

Serverless query to private storage hangs

NCC PE rule never approved.First check: rule status PENDING (approve on the storage account) + dfs vs blob group ID.

Egress fails after adding the firewall

FQDNs not allowed, or SCC forced through the firewall.First check: application rules for the Databricks FQDNs; SCC/back-end-PL should NOT route through it.

Three questions to ask before recommending an architecture

  1. Is there a regulatory mandate for no public-IP hop / no public egress, or is backbone-private enough?
  2. Multi-workspace production (Standard), non-prod single-team (Simplified), or regulated PII (full DEP)?
  3. Where will governed data live, are you on Premium, and have you sized subnets for peak (CIDR is immutable)?