TTechclick All lessons
Zscaler · Batch 11 · Lesson 5L2 / POLICY DESIGN

URL Filtering & Cloud App Control — shape what users can actually do

Forwarding got the traffic in. Auth knows who the user is. Now we shape what they can do. URL Filtering controls websites by category, custom URLs, and time quotas. Cloud App Control governs SaaS — sanctioned versus shadow IT, tenant restrictions, who-can-do-what inside Office 365 or Salesforce. Both layer on top of each other in a strict evaluation order. Get the order wrong and rules silently misfire.

📅 May 24, 2026 · ⏱ 15 min read · 🏷 10-question assessment included
🎯 By the end of this lesson, you'll be able to

Why this lesson matters

URL Filtering and Cloud App Control are where 80% of the business value of ZIA shows up. Auth + forwarding are infrastructure. Policy is the product. If you can't articulate why this rule matches before that rule, you can't debug a single "why is YouTube allowed for Marketing when I blocked it?" ticket. This lesson nails that.

It also covers a quiet feature most engineers underuse: Cloud App Reports. Every user, every SaaS they touched, ranked by risk score. Hand it to a CISO and you've discovered the company's entire shadow-IT footprint in 30 minutes. That alone justifies a Zscaler deployment.

URL Filtering — the anatomy of one rule

Super-Categories vs Categories

ZIA's URL taxonomy is two-level: 6 super-categories (Bandwidth Loss, Business Use, General Surfing, Privacy Risk, Productivity Loss, Security Risk) split into 160+ categories (e.g. Streaming Media, Gambling, Webmail). You can write a rule against a super-category to block all 'Security Risk' child cats at once — fewer rules to maintain. ZDTA exam tip: super-cat-vs-category is a common distractor.

Every URL Filtering rule has the same shape. Once you see the parts, you can build any rule by recipe.

FieldExampleWhat it does
Rule order10, 20, 30…First-match wins. Lower number evaluates first.
Rule name"Block-Social-Marketing"Searchable identifier. Use a naming convention.
ActionBlock · Allow · Caution (notify-and-continue) · Allow with Quota · Isolate (requires separate Zscaler Browser Isolation SKU)What happens on match.
URL Categories"Social Networking", "Streaming Media"One or more of 160+ URL categories organized into 6 super-categories (Bandwidth Loss, Business Use, General Surfing, Privacy Risk, Productivity Loss, Security Risk).
Custom URLs"reddit.com", "*.4chan.org"Exceptions or additions to category coverage.
GroupsMarketing, EngineeringMatch only for these IdP groups.
LocationsMumbai-HQ, all-roamingMatch only at these Locations or Sub-Locations.
TimeMon-Fri 09:00-18:00Restrict to working hours, allow social after-hours.
BandwidthCap 5 Mbps/userThrottle without blocking. Useful for streaming.
Quota30 min/day for "Streaming Media"User can browse, but only X minutes per period.

Build a real rule — "Block social for Marketing during work hours"

ZIA Admin Portal · URL Filtering rule
Policy → URL & Cloud App Control → URL Filtering → + Add Rule

  Order:            20
  Name:             Block-Social-Marketing-Workhrs
  Action:           Block
  Severity:         Medium  (used in Insights filtering)

  URL Categories:   Social Networking, Personal Network Storage,
                    Dating, Streaming Media (Video)
  Custom URLs:      reddit.com, hackerrank.com  (exception: hackerrank
                    is "social" but engineers need it during interviews)
  Group:            Marketing
  Location:         All (HQ + branch + roaming)
  Time:             Mon-Fri 09:00-18:00 IST
  HTTP/HTTPS:       Both

Save → Activate

That single rule covers ~95% of "block X for group Y during hours Z" tickets. Note the trick: list hackerrank.com in Custom URLs without going to the Allow rule first — that's a category-level override done inside the same Block rule using ZIA's Exception handling. Cleaner than a separate Allow rule above.

The policy evaluation order — first match wins

ZIA URL Filtering rules are evaluated top-to-bottom by Order number. First match wins. The moment a rule matches, evaluation stops and the action applies. This is why rule order is the single most important thing you'll touch.

ZIA URL Filtering policy evaluation flow
URL Filtering policy evaluation flow Request enters, evaluated against rules in order 10/20/30/40/default. First match returns its action and stops evaluation. User request hits PSE Order 10: Allow → Executive group → ANY category, ANY URL match? → Allow + STOP no match Order 20: Block → Marketing group → Social Networking → Mon-Fri 9-6 match? → Block + STOP no match Order 30: Caution → ALL groups → Newly Registered Domains match? → Caution + STOP no match Order 40: Block → ALL groups → Malicious Sites, Phishing, Adult match? → Block + STOP no match Default Rule → Allow

Top-down evaluation. The instant any rule matches, ZIA stops and applies that action. So if you Block social for Marketing at Order 20, then Allow social for everyone at Order 50, Marketing still gets blocked — Order 20 fires first. Order matters more than logic.

The classic order pattern (use this on every tenant)

  1. 10-19: Allow rules for exceptions / VIPs / bypasses
  2. 20-39: Block rules for group/location/time-based restrictions
  3. 40-49: Caution rules for risky-but-allowed categories
  4. 50-59: Block rules for universally bad (malicious, phishing, adult)
  5. Default: Allow — anything else passes through (with malware scan, SSL inspect, etc. still applying — those are separate policy stacks)

Cloud App Control — the SaaS layer

URL Filtering treats every site as a URL. Cloud App Control treats SaaS as applications with sub-actions. You can block YouTube as a category at the URL layer, OR you can use Cloud App Control to "allow YouTube view but block YouTube upload". Sub-action granularity is the whole point.

Sanctioned vs unsanctioned — the core distinction

CategoryDefinitionAction pattern
SanctionedApproved corporate SaaS (Office 365 tenant company.onmicrosoft.com, Google Workspace company.com, Salesforce instance, the official Slack workspace)Allow — but enforce tenant restrictions so users can't sign in to other Office 365 tenants from corporate devices
UnsanctionedShadow IT — personal Dropbox, personal Google Drive, random GenAI tools, file convertersBlock uploads, allow read-only, or block entirely. Log for Cloud App Reports.

Tenant Restrictions — the killer feature

Office 365 tenant restrictions stop users from signing into any other Office 365 tenant from your network. Without it, an employee can open portal.office.com and log into their personal Microsoft account — exfiltrating corporate data to a personal OneDrive. ZIA enforces this by inserting the Restrict-Access-To-Tenants HTTP header into every Office 365 request — your corporate tenant ID is allowed, every other rejected by Microsoft.

Modern Microsoft tenant restrictions use header sec-Restrict-Tenant-Access-Payload (a signed JWT) — v2. Legacy v1 used Restrict-Access-To-Tenants + Restrict-Access-Context. Both injectable via ZIA Tenant Restrictions module.

ZIA · Office 365 Tenant Restriction
Policy → URL & Cloud App Control → Cloud Applications →
Tenant Restriction → + Add Cloud Application

  Cloud Application: Microsoft Office 365
  Action:            Restrict
  Allowed Tenants:   contoso.onmicrosoft.com  (your tenant)
                     contractor.onmicrosoft.com  (partner if needed)
  Restrict v2:       Enabled  (newer header format)

Save → Activate

The app-control hierarchy SVG

Cloud App Control — sanctioned / unsanctioned / blocked hierarchy
Cloud App Control hierarchy Three columns: Sanctioned (allowed, monitored), Unsanctioned (restricted upload), and Blocked (denied). Examples shown in each. Cloud apps grouped by trust level ✓ SANCTIONED Allow + monitor • Office 365 (your tenant) • Google Workspace • Salesforce (corp instance) • Slack (corp workspace) • GitHub Enterprise • Jira / Confluence + tenant restrictions ⚠ UNSANCTIONED Read-only · block upload • Personal Dropbox • Personal Google Drive • Personal OneDrive • WeTransfer • File converters online • AI-summariser tools DLP-watched + logged ✗ BLOCKED Deny entirely • Anonymous file sharing • Pastebin-style services • Crypto miners • Personal VPNs • Anonymizers • Known-malicious SaaS + blocked-page splash

Three buckets, three different actions. Most cloud-app design conversations boil down to "what goes in which column" — that's the entire framework.

URL Rule Order Lab Cloud App Drill
📊Cloud App Risk Score (1-5)

Cloud App Risk Score (1-5): derived from data retention, admin audit logs, encryption-at-rest, MFA support, breach history. ZIA Cloud App Reports rank apps by this score. Standard interview question — know the input dimensions.

🔑Admin override codes

Override codes let a help-desk give a one-time pass for a blocked URL. Useful for emergency unblocks without policy change. Generated under Administration → User Management → Override Codes.

Time quotas — the "allow with limit" pattern

Sometimes you don't want to outright block. "Engineers can browse Reddit, but cap them at 30 minutes per day" is the time-quota use case. ZIA tracks per-user time spent in matched categories and shows a polite block page once the quota is hit ("you've used your 30 minutes on Streaming today — try again tomorrow").

URL Filtering rule with daily quota
Order:          25
Action:         Allow with Quota
URL Category:   Streaming Media (Video)
Group:          Engineering
Time Quota:     30 minutes / day
Bandwidth Cap:  5 Mbps (per user, while streaming)

Common production gotchas

Common Mistakes — URL filtering + cloud apps
💡Pro Tip — use Caution before Block on grey-area categories

For categories like "Newly Registered Domains" (potential phishing but lots of false positives), don't go straight to Block — use Caution. Caution shows a "this site might be risky, proceed?" interstitial. Users who genuinely need the site click through; phishing victims pause and reconsider. Half-block-half-allow with no admin overhead.

Verify — confirm a rule actually matched

After saving + Activating any rule:

Real-world scenario — Engineering's GenAI tool sprawl

Wednesday standup. Engineering manager: "Half our devs are pasting code into ChatGPT, Claude, Perplexity, every random AI tool. We can't ban all of them — productivity will tank. But we can't allow source code leakage either."

Your design using everything in this lesson:

  1. Cloud App Reports — run a 7-day report on the Engineering group, all AI-tool categories. You discover 14 distinct GenAI services in active use.
  2. Triage into three buckets: Sanctioned (your enterprise ChatGPT account, Claude Team) · Unsanctioned (personal accounts on the same services + a few obscure ones) · Blocked (totally unknown ones that look like data-exfil fronts).
  3. Sanctioned rules: Allow with tenant restriction — Engineering can use your Claude Team workspace but not personal Claude. Same for ChatGPT Enterprise.
  4. Unsanctioned: Allow read-only (engineers can read AI outputs) but DLP-watched on upload — if they paste source code matching your code-fingerprint patterns, ZIA blocks the upload and logs to SIEM.
  5. Blocked: outright denial of the 4 sketchy ones. Block page explains why and points to the sanctioned alternative.
  6. Caution for any newly-discovered AI tool added to the Newly Registered category — engineers see a "proceed if you trust this" warning and self-select.

Zero productivity loss for engineers who use sanctioned tools. Source code leakage blocked at the upload. Shadow IT shrunk from 14 tools to 2 sanctioned + a handful of read-only.

📌 Quick reference (memorise before Module 6)

QUICK LAB · ~15 MIN

Build a tight URL/Cloud App policy:

  1. In ZIA Admin → Policy → URL Filtering: create a rule blocking "Security Risk" super-category for ALL users.
  2. Add a second rule blocking "Productivity Loss → Social Media" with a 30-min quota for the Marketing group.
  3. In Cloud App Control: block ChatGPT for all, allow for the AI-Engineers group.
  4. Validate by browsing each category from a test laptop — verify block page or quota timer fires.

📝 Check your understanding

10 scenario questions — interview + ZDTA exam depth. Pick one answer per question. You need 70% (7 of 10) to mark this lesson complete on your profile.

Q1

You created a Block rule for "Streaming Media" at Order 50, and an Allow rule for the same category targeting your CEO at Order 60. The CEO complains Netflix is blocked. Why?

Correct: (b). First-match wins. Order 50 matches everyone in the Streaming Media category — including the CEO — so the Block fires and evaluation stops before Order 60 is even considered. The fix is universal: put exceptions above the broader Block rule. (a)/(c)/(d) could be problems too but the order is the textbook cause.
Q2

You want to block YouTube uploads but allow viewing. URL Filtering can block youtube.com entirely, but you need finer control. Which feature?

Correct: (c). Cloud App Control is purpose-built for sub-action granularity on known SaaS — view vs upload vs share vs comment, all distinct controls. URL Filtering only acts on URL/category level. (a) HTTP method match isn't a URL Filtering field. (b) Caution is an action, not a granular control. (d) bandwidth throttles, doesn't differentiate view vs upload.
Q3

An employee opens portal.office.com and signs into their personal @outlook.com account on their corporate laptop. Data flows to their personal OneDrive. How do you prevent this in ZIA?

Correct: (b). Tenant restrictions are exactly built for this — ZIA injects a header on every Office 365 request telling Microsoft "only allow these tenant IDs to authenticate." All non-corporate tenants are rejected at Microsoft side. (a) blocks corporate use too. (c) blocks all OneDrive including the corporate one. (d) Custom URL list doesn't enforce tenant identity.
Q4

A user complains "I'm blocked from a site I should have access to." You want to find which rule blocked them. Fastest path?

Correct: (a). Insights → Web is the per-transaction debug view. The Policy column tells you which rule matched. View Policy Tree shows the full evaluation chain so you see why earlier rules didn't match too. (b)/(c)/(d) are slow or destructive.
Q5

You created a Custom URL list with *reddit.com intending to match reddit.com and all its subdomains. Auditing logs show verybadreddit.com also matches. What went wrong?

Correct: (d). The missing dot makes all the difference. *reddit.com is a suffix match — any character before "reddit.com" is fine. *.reddit.com requires a subdomain (dot is mandatory). Always test custom wildcards with a non-trivial example. (c) SSL isn't relevant to URL matching. (b) wildcards are supported.
Q6

You enabled URL Filtering rule "Block youtube.com" but users still watch YouTube on their corporate laptops. SSL Inspection is OFF. Why doesn't the rule match cleanly?

Correct: (c). Without SSL Inspection, ZIA's view is limited to the TLS SNI — fine for blocking the domain itself, but YouTube actively serves video from googlevideo.com and other CDN domains. Blocking youtube.com only stops the front page; the video stream continues. SSL Inspection lets Cloud App Control identify "YouTube" as an application across all its CDN domains and block holistically.
Q7

For a Newly Registered Domain (NRD) category that often hosts phishing but sometimes hosts legit new SaaS, what's the best action?

Correct: (b). Caution is built for grey-area categories — high false-positive rate but real risk. Users self-select with an extra click. (a) Allow misses real phishing. (c) Block frustrates teams trying new SaaS. (d) Isolate is heavier (compute cost, latency); use only for truly high-risk categories like Adult or Anonymizers.
Q8

A Cloud App Report shows your Engineering team uses 14 different GenAI tools. The CTO wants to keep productivity but stop source-code leakage. Which combination of ZIA features?

Correct: (d). Triage into sanctioned/unsanctioned/blocked plus DLP is the production pattern for this exact problem — productivity preserved, leak vector closed at the upload. (a) blocks productivity entirely. (c) time quota doesn't prevent code leakage in the first 30 min. (b) education alone is not a control.
Q9

A Time Quota rule grants Engineering 30 minutes/day on "Streaming Media". A user spends 15 min on YouTube and 15 min on Netflix, both in Streaming Media. What's the result?

Correct: (a). Time quota is configured per rule, and quota consumption is tracked per user per rule. All categories named in the same rule share the same pool. Two categories in separate rules each get their own pool. Not 'category-wide'. (b)/(c) misunderstand the pool. (d) selective exemption needs separate rules.
Q10

You're rolling out a new ZIA tenant and need to set up URL Filtering rule order. Which sequence is best practice?

Correct: (c). The canonical Zscaler URL Filter rule pattern: Allow exceptions first (carve out VIPs and edge cases), then group-specific Blocks (the bulk of business rules), then Cautions (grey-area), then universal-bad Blocks (phishing, malicious, adult), then default Allow at the bottom. Same shape on every tenant — pattern-match it in your head when reviewing any deployment.
Lesson complete — saved to your profile.
Almost! Review the sections above and try again — you need 70% (7 of 10) to mark this lesson complete.

What's next — Lesson 6

URL Filtering matches based on what ZIA can see in the request. To see inside HTTPS requests, you need SSL Inspection. Next: SSL Inspection & File Type Control — the cert chain, Zscaler Root CA distribution, MITM concept, pinned-app exemptions, and the file-type rules that decide which uploads/downloads are allowed.