zscaler/zscaler-mcp-server/create-access-policy-rule

Claude Code and agent skill by zscaler/zscaler-mcp-server

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Create ZPA access policy rules with v2 conditions. Supports all condition object types: APP, APP_GROUP, SAML, SCIM, SCIM_GROUP, PLATFORM, COUNTRY_CODE, POSTURE, TRUSTED_NETWORK, RISK_FACTOR_TYPE, CLIENT_TYPE, MACHINE_GRP, LOCATION, and CHROME_ENTERPRISE. Walks through: (1) gathering requirements, (2) looking up identity attributes (SAML/SCIM), (3) building the conditions payload, (4) creating the rule. Includes ready-to-use examples for common scenarios: SCIM group access, SAML attribute matching, platform restrictions, country-based access, posture checks, and combined conditions.

Install

npx vskill@latest install zscaler/zscaler-mcp-server/create-access-policy-rule

SKILL.md

ZPA: Create Access Policy Rule

Keywords

access policy, access rule, allow rule, deny rule, zpa policy, scim group policy, saml policy, platform restriction, country restriction, posture check, require approval, zero trust policy, conditional access

Overview

Create ZPA access policy rules that control who can access private applications. Access policies use the v2 condition format and support a rich set of condition types: identity-based (SAML/SCIM), device-based (platform, posture, Chrome Enterprise), network-based (trusted networks, country codes), and risk-based (ZIA risk factors).

Use this skill when: An administrator asks to create an access policy rule, grant or deny application access based on user identity, device posture, location, or any combination of conditions.


Condition Object Type Reference

Each condition block must contain a single object type. Multiple condition blocks are ANDed together. Within a condition block, multiple operands or entry_values are ORed.

Value-Based Object Types (use values)
Object TypeDescriptionValues
APPApplication segmentsApplication segment IDs
APP_GROUPSegment groupsSegment group IDs
CLIENT_TYPEClient connector typezpn_client_type_zapp, zpn_client_type_exporter, zpn_client_type_machine_tunnel, zpn_client_type_browser_isolation, zpn_client_type_ip_anchoring, zpn_client_type_edge_connector, zpn_client_type_branch_connector, zpn_client_type_zapp_partner
MACHINE_GRPMachine groupsMachine group IDs
LOCATIONLocationsLocation IDs
EDGE_CONNECTOR_GROUPEdge connector groupsEdge connector group IDs
BRANCH_CONNECTOR_GROUPBranch connector groupsBranch connector group IDs
Entry-Values Object Types (use entry_values with lhs/rhs)
Object TypeLHSRHS
SAMLSAML attribute IDAttribute value to match (email, group name, etc.)
SCIMSCIM attribute header IDAttribute value to match
SCIM_GROUPIdentity Provider IDSCIM group ID
PLATFORMlinux, android, ios, mac, windows"true" or "false"
COUNTRY_CODEISO 3166 Alpha-2 code (US, CA, GB)"true" or "false"
POSTUREPosture profile posture_udid"true" or "false"
TRUSTED_NETWORKTrusted network network_id"true" or "false"
RISK_FACTOR_TYPEZIAUNKNOWN, LOW, MEDIUM, HIGH, CRITICAL
CHROME_ENTERPRISEmanaged"true" or "false"
Action Types
ActionDescription
ALLOWPermit access
DENYBlock access
REQUIRE_APPROVALRequire explicit approval before access

Workflow

Step 0: Identify the Rule Class (baseline alignment)

Reference: ZPA Baseline Recommendations v1.0 §Access Policy Construction (A–H). Before building conditions, identify which rule class this fits — that determines where the rule belongs in the policy order and which conditions are mandatory.

OrderClassActionMandatory criteriaNotes
1A. Deception (if licensed)ALLOWPredefined criteriaTenant feature — auto-provisioned. Do not modify the default rule.
2B. Machine Tunnel allowALLOWCLIENT_TYPE = zpn_client_type_machine_tunnel + APP (specific) + minimum POSTUREFor AD DCs, SCCM, patch services.
3B'. Machine Tunnel block-restDENYCLIENT_TYPE = zpn_client_type_machine_tunnelStops machine traffic from inheriting user rules.
4C. Contractor allowALLOWSCIM_GROUP (Contractors) + APP + CLIENT_TYPE + POSTURETightly scoped to approved apps only.
5C'. Contractor block-restDENYSCIM_GROUP (Contractors)Prevents contractor inheritance of employee rules.
6D. Posture remediation allowALLOWAPP (remediation segment) + CLIENT_TYPELets non-compliant devices reach the remediation app only.
7 + ND'. Posture block per-OSDENYPOSTURE (failed) + PLATFORM (Windows / macOS / iOS / Android / Linux)One rule per OS — see "Per-OS posture gotcha" below.
MidE. Critical app allowALLOWSCIM_GROUP + APP (crown-jewel) + CLIENT_TYPE (ZCC only) + POSTUREApply optional extra posture checks (cert, registry).
MidE'. Critical app block-restDENYAPP (crown-jewel) onlyDefense-in-depth even though E only allows approved users.
After EF. Standard internal appsALLOWSCIM_GROUP (employees) + APP + CLIENT_TYPEBaseline access for non-sensitive apps.
Near bottomG. Discovery wildcard catch-allALLOWAPP (wildcard discovery segment) + SCIM_GROUPDiscovery only — never above critical apps.
BottomH. Block-All explicitDENYNone — match allImproves logging and audit clarity beyond ZPA's implicit deny.
Per-OS posture gotcha

Defining a posture-block rule for only Windows leaves macOS, iOS, Android, and Linux implicitly allowed even when their device posture has failed. The doc is explicit about this on page 30: create one block rule per OS in use, each with its own POSTURE and PLATFORM criteria. This is the #1 posture-enforcement mistake.

When NOT to use this skill
  • Building a baseline policy from scratch (multiple classes at once) — defer to a future bulk-build skill, or chain calls to this skill once per class.
  • Auditing policy alignment — use the audit-baseline-compliance skill.

Step 1: Gather Requirements

Ask the administrator:

Required:

  • Rule name
  • Action: ALLOW, DENY, or REQUIRE_APPROVAL
  • What conditions determine access (identity, platform, location, etc.)

Optional:

  • Description
  • Which application segments or segment groups to scope to
  • App connector group IDs or server group IDs

Step 2: Look Up Identity Attributes

If the rule uses identity-based conditions (SAML, SCIM, SCIM_GROUP), look up the required IDs first.

For SCIM groups:

text
get_zpa_scim_group(search="<group_name>")

Note both the SCIM group ID (used as rhs) and the Identity Provider ID (used as lhs).

For SAML attributes:

text
get_zpa_saml_attribute(search="<attribute_name>")

Note the SAML attribute ID (used as lhs). The rhs is the value to match (e.g., an email address or group name string).

For SCIM attributes:

text
get_zpa_scim_attribute(search="<attribute_name>")

For segment groups (APP_GROUP):

text
zpa_list_segment_groups()

For posture profiles:

text
get_zpa_posture_profile(search="<profile_name>")

Note the posture_udid value (used as lhs).

For trusted networks:

text
get_zpa_trusted_network(search="<network_name>")

Note the network_id value (used as lhs).


Step 3: Build the Conditions Payload

Conditions use a list of dictionaries. Each dictionary represents one condition block with an operator and operands. Separate condition blocks for each object type.

Format:

json
[
{
"operator": "OR",
"operands": [
{
"object_type": "<OBJECT_TYPE>",
"values": ["<id1>", "<id2>"]
}
]
},
{
"operator": "OR",
"operands": [
{
"object_type": "<OBJECT_TYPE>",
"entry_values": [
{"lhs": "<lhs_value>", "rhs": "<rhs_value>"}
]
}
]
}
]

Rules:

  • Each condition block contains one object type only
  • Multiple condition blocks are ANDed together (all must match)
  • Within a block, multiple entry_values or multiple values are ORed (any can match)
  • Value-based types (APP, APP_GROUP, CLIENT_TYPE, etc.) use values
  • Entry-based types (SAML, SCIM_GROUP, PLATFORM, etc.) use entry_values

Step 4: Create the Rule
text
zpa_create_access_policy_rule(
name="<rule_name>",
action_type="ALLOW",
description="<description>",
conditions=<conditions_payload>,
app_connector_group_ids=["<optional_connector_group_ids>"],
app_server_group_ids=["<optional_server_group_ids>"]
)

Step 5: Verify
text
zpa_get_access_policy_rule(rule_id="<returned_rule_id>")

Ready-to-Use Examples

Example 1: Allow SCIM Groups to Access a Segment Group

Allow members of "Engineering" or "DevOps" SCIM groups to access an application segment group.

Step 1: Look up IDs

text
get_zpa_scim_group(search="Engineering")
get_zpa_scim_group(search="DevOps")
zpa_list_segment_groups()

Step 2: Create rule

text
zpa_create_access_policy_rule(
name="Allow Engineering and DevOps",
action_type="ALLOW",
description="Grants Engineering and DevOps teams access to internal apps",
conditions=[
{
"operator": "OR",
"operands": [
{
"object_type": "APP_GROUP",
"values": ["<segment_group_id>"]
}
]
},
{
"operator": "OR",
"operands": [
{
"object_type": "SCIM_GROUP",
"entry_values": [
{"lhs": "<idp_id>", "rhs": "<engineering_scim_group_id>"},
{"lhs": "<idp_id>", "rhs": "<devops_scim_group_id>"}
]
}
]
}
]
)

Logic: User must be in the segment group's apps AND be a member of Engineering OR DevOps.


Example 2: Allow SAML Users with Platform Restriction

Allow specific SAML-identified users, but only from macOS and Windows devices.

Step 1: Look up SAML attribute

text
get_zpa_saml_attribute(search="Email_Users")

Step 2: Create rule

text
zpa_create_access_policy_rule(
name="Allow Specific Users on Mac/Windows",
action_type="ALLOW",
conditions=[
{
"operator": "OR",
"operands": [
{
"object_type": "SAML",
"entry_values": [
{"lhs": "<saml_email_attribute_id>", "rhs": "alice@company.com"},
{"lhs": "<saml_email_attribute_id>", "rhs": "bob@company.com"}
]
}
]
},
{
"operator": "OR",
"operands": [
{
"object_type": "PLATFORM",
"entry_values": [
{"lhs": "mac", "rhs": "true"},
{"lhs": "windows", "rhs": "true"}
]
}
]
}
]
)

Logic: User must match a SAML email AND be on macOS OR Windows.


Example 3: Country-Based Access Restriction

Allow access only from the United States and Canada.

text
zpa_create_access_policy_rule(
name="US and Canada Only",
action_type="ALLOW",
description="Restrict access to US and Canadian locations",
conditions=[
{
"operator": "OR",
"operands": [
{
"object_type": "APP_GROUP",
"values": ["<segment_group_id>"]
}
]
},
{
"operator": "OR",
"operands": [
{
"object_type": "COUNTRY_CODE",
"entry_values": [
{"lhs": "US", "rhs": "true"},
{"lhs": "CA", "rhs": "true"}
]
}
]
}
]
)

Example 4: Posture-Based Access with Risk Factor

Allow access only from devices that pass a posture check and have a ZIA risk score of LOW or below.

Step 1: Look up posture profile

text
get_zpa_posture_profile(search="CrowdStrike_ZTA")

Step 2: Create rule

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
39
Repository forks
18
7-day trend score
18

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/zscaler/zscaler-mcp-server/create-access-policy-rule/badge)](https://verified-skill.com/skills/zscaler/zscaler-mcp-server/create-access-policy-rule)

Something wrong with this skill or its page? Tell us.