Install
openclaw skills install prisma-migrateMigrate Prisma Access configurations between different SCM tenants (TSGs). Use when moving security policies, NAT rules, address objects, and other configurations from one Prisma Access tenant to another. Includes migration compatibility matrix based on real-world testing.
openclaw skills install prisma-migrateMigrate configurations between Prisma Access tenants (TSGs) via the Strata Cloud Manager API.
This skill helps you export configurations from a source tenant and import them into a target tenant. It handles naming conflicts, reference resolution, and dependency ordering.
For detailed API call reference, see migration-workflow.md.
Based on real-world migration testing, here is what can and cannot be migrated directly via SCM API:
| Resource | Notes |
|---|---|
| Tags | No issues |
| Address Objects | IP netmask, FQDN, IP range, IP wildcard all supported |
| Address Groups | Static and dynamic; referenced addresses must exist first |
| Service Objects | No issues |
| Service Groups | No issues |
| Application Filters | No issues |
| Application Groups | No issues |
| External Dynamic Lists (EDL) | No issues |
| HIP Objects | No issues |
| HIP Profiles | No issues |
| File Blocking Profiles | No issues |
| Profile Groups | Supported, but referenced sub-profiles must exist first |
| Security Rules (most) | Simple rules migrate directly |
| NAT Rules | No issues |
| Decryption Rules (most) | Simple rules migrate directly |
| Resource | Issue | Workaround |
|---|---|---|
| URL Filtering Profiles | Service Account returns Access denied | Grant additional API permissions, or recreate manually in SCM console |
| Data Filtering Profiles | Service Account returns Access denied | Same as above |
| AI Security Profiles | Service Account returns Access denied | Same as above |
| Custom URL Categories | API returns 0 results or Access denied | Recreate manually in SCM console before migrating rules that reference them |
| Profile Groups with inaccessible refs | References URL Filtering / Data Filtering / AI Security profiles that can't be exported | Migrate with invalid references stripped; add them back manually after creating the sub-profiles in the target tenant |
| Rules referencing missing objects | Security/Decryption rules fail with INVALID_REFERENCE | Create the missing referenced objects first, then retry the rule |
app-tagging rules | Nested object arrays cause Invalid Request Payload | Recreate manually in SCM console |
| Cross-folder name conflicts | Rules with same name in All or Prisma Access folder cause UNIQUEIN_ERROR | Skip — these are typically system-preset rules already present in the target |
Shared, All, Prisma Access, Mobile Users folders — checking only Shared misses conflictsid, created, last_modified, snippet, override_loc, override_type, override_id, rule_uuid, folder, policy_type, position (position goes in the query parameter instead)Set the following environment variables:
# Source tenant credentials
export SRC_SCM_CLIENT_ID="source-client-id"
export SRC_SCM_CLIENT_SECRET="source-client-secret"
export SRC_SCM_TSG_ID="source-tsg-id"
# Target tenant credentials
export DST_SCM_CLIENT_ID="target-client-id"
export DST_SCM_CLIENT_SECRET="target-client-secret"
export DST_SCM_TSG_ID="target-tsg-id"
Authenticate and export all configuration objects from the source tenant via SCM API:
GET https://api.sase.paloaltonetworks.com/sse/config/v1/{resource}?folder={folder}&limit=200
Export objects in dependency order. Handle pagination with offset when total exceeds limit.
Before importing, check the target tenant for conflicts across all folders (Shared, All, Prisma Access, Mobile Users, Remote Networks):
All folder that block creation in Shared — skip theseFor each conflict, present the user with options:
migrated- prefix)For each object:
id, created, last_modified, snippet, override_loc, override_type, override_id, rule_uuid)folder and policy_type from the body (folder goes in query param)position from body (goes in query param as &position=pre or &position=post)POST https://api.sase.paloaltonetworks.com/sse/config/v1/{resource}?folder={folder}
After import:
POST https://api.sase.paloaltonetworks.com/sse/config/v1/config-versions/candidate:push
Only commit after user explicitly confirms:
POST https://api.sase.paloaltonetworks.com/sse/config/v1/config-versions/running:push
/prisma-access:prisma-migrate
Interactive mode: prompts for source and target tenant details.
/prisma-access:prisma-migrate 1234567890 0987654321
Migrate from TSG 1234567890 to TSG 0987654321.