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.
| Field | Example | What it does |
|---|---|---|
| Rule order | 10, 20, 30… | First-match wins. Lower number evaluates first. |
| Rule name | "Block-Social-Marketing" | Searchable identifier. Use a naming convention. |
| Action | Block · 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. |
| Groups | Marketing, Engineering | Match only for these IdP groups. |
| Locations | Mumbai-HQ, all-roaming | Match only at these Locations or Sub-Locations. |
| Time | Mon-Fri 09:00-18:00 | Restrict to working hours, allow social after-hours. |
| Bandwidth | Cap 5 Mbps/user | Throttle without blocking. Useful for streaming. |
| Quota | 30 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"
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 → ActivateThat 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.
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)
- 10-19: Allow rules for exceptions / VIPs / bypasses
- 20-39: Block rules for group/location/time-based restrictions
- 40-49: Caution rules for risky-but-allowed categories
- 50-59: Block rules for universally bad (malicious, phishing, adult)
- 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
| Category | Definition | Action pattern |
|---|---|---|
| Sanctioned | Approved 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 |
| Unsanctioned | Shadow IT — personal Dropbox, personal Google Drive, random GenAI tools, file converters | Block 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.
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 → ActivateThe app-control hierarchy SVG
Three buckets, three different actions. Most cloud-app design conversations boil down to "what goes in which column" — that's the entire framework.
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.
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").
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
- Rule order wrong — Block rule for everyone at Order 50, an Allow rule for a VIP at Order 60. Rule 50 fires first, VIP also gets blocked. Always put Allow exceptions above the Block.
- Forgot to enable SSL Inspection for the URL category — HTTPS sites get only the SNI / domain match, not the full URL. So you can block
youtube.comby SNI but notyoutube.com/watch?v=xyzwithout SSL inspection. - Custom URL with wildcard typo —
*reddit.commatchesverybadreddit.comtoo. Use*.reddit.com(dot before). - Sanctioned tenant rule has wrong tenant ID — entire company locked out of Office 365 in 5 minutes. Always test on one user first, get them to login successfully, then Activate broadly.
- Cloud App Reports never reviewed — shadow IT discovered only after a leak. Schedule weekly review of the top 20 unsanctioned apps; promote to Sanctioned, restrict, or Block.
- Time quota set per-rule but multiple categories share the quota — engineer uses 15 min on YouTube and 15 min on Netflix, both quota-allowed under "Streaming Media" → all 30 min consumed even though each individual app got less. Educate users.
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.
After saving + Activating any rule:
- Test from one user's browser. Block rule → expect Zscaler block page. Allow → expect the site loads.
- ZIA Admin → Insights → Web → filter by URL + user. Each transaction shows which rule matched (rule name in the "Policy" column).
- Right-click any transaction → "View Policy Tree" — shows the full chain of rules evaluated and where the match happened. Best debugging tool ZIA ships.
- Bonus: schedule a daily Cloud App Report and have it emailed to security@. Top-10 unsanctioned apps with user counts → instant shadow-IT visibility.
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:
- 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.
- 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).
- Sanctioned rules: Allow with tenant restriction — Engineering can use your Claude Team workspace but not personal Claude. Same for ChatGPT Enterprise.
- 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.
- Blocked: outright denial of the 4 sketchy ones. Block page explains why and points to the sanctioned alternative.
- 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)
- URL Filtering rule fields: Order · Name · Action · URL Categories · Custom URLs · Groups · Locations · Time · Bandwidth · Quota
- Actions: Allow · Block · Caution · Isolate · Allow with Quota
- First-match wins — order is everything. Allow exceptions go ABOVE Block rules.
- Classic order pattern: 10–19 Allow exceptions · 20–39 Block by group/loc/time · 40–49 Caution · 50–59 Block universal-bad · Default Allow.
- Cloud App Control = sub-action granularity (allow view, block upload) on SaaS apps.
- Sanctioned vs Unsanctioned: corporate-tenant SaaS vs personal/shadow IT.
- Tenant Restrictions — Office 365 / Google Workspace: only your corporate tenant logs in from the network.
- Time Quota: allow with daily/weekly minute cap per category, per user.
- SSL Inspection ON for full URL matching — without it, you only see SNI (domain).
- Insights → Web → Policy Tree = your first stop when "why didn't my rule fire?"
- Cloud App Reports — weekly review of unsanctioned SaaS to catch shadow IT early.
Build a tight URL/Cloud App policy:
- In ZIA Admin → Policy → URL Filtering: create a rule blocking "Security Risk" super-category for ALL users.
- Add a second rule blocking "Productivity Loss → Social Media" with a 30-min quota for the Marketing group.
- In Cloud App Control: block ChatGPT for all, allow for the AI-Engineers group.
- 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.
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.