ISE ERS API
External RESTful Services. The original ISE REST API for managing identity and policy objects.
Overview
Base URL |
|
Auth |
Basic Auth (ERS Admin role required) |
Format |
JSON or XML (Accept/Content-Type headers) |
Docs |
Administration > System > Settings > ERS Settings |
Enable ERS
# Must be enabled in ISE GUI first
# Administration > System > Settings > ERS Settings > Enable ERS for Read/Write
Common Endpoints
| Resource | Path | netapi Command |
|---|---|---|
Endpoints |
|
|
Endpoint Groups |
|
|
Identity Groups |
|
|
Network Devices |
|
|
Network Device Groups |
|
|
Authorization Profiles |
|
|
Downloadable ACLs |
|
|
SGTs |
|
|
ANC Policies |
|
|
Examples
List Endpoints
# netapi
netapi ise ers endpoints
# curl
curl -ks -u "$ISE_USER:$ISE_PASS" \
-H "Accept: application/json" \
"https://$ISE_HOST:9060/ers/config/endpoint" | jq '.SearchResult.resources'
Get Endpoint by MAC
# netapi
netapi ise ers endpoint --mac 14:F6:D8:7B:31:80
# curl
curl -ks -u "$ISE_USER:$ISE_PASS" \
-H "Accept: application/json" \
"https://$ISE_HOST:9060/ers/config/endpoint?filter=mac.EQ.14:F6:D8:7B:31:80" | jq
Create dACL
# netapi
netapi ise create-dacl "Linux-Research-Hardened" --file /tmp/dacl-content.txt
# curl
curl -ks -u "$ISE_USER:$ISE_PASS" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-X POST "https://$ISE_HOST:9060/ers/config/downloadableacl" \
-d '{
"DownloadableAcl": {
"name": "Linux-Research-Hardened",
"dacl": "permit tcp any host 10.50.1.50 eq 88\npermit tcp any host 10.50.1.50 eq 389\ndeny ip any any"
}
}'
List Authorization Profiles
# netapi
netapi ise get-authz-profiles
# curl
curl -ks -u "$ISE_USER:$ISE_PASS" \
-H "Accept: application/json" \
"https://$ISE_HOST:9060/ers/config/authorizationprofile" | \
jq '.SearchResult.resources[] | {name, id: .id}'
Pagination
ERS uses page and size parameters:
# First 100 endpoints
curl -ks -u "$ISE_USER:$ISE_PASS" \
"https://$ISE_HOST:9060/ers/config/endpoint?size=100&page=1"
# Loop all pages
page=1
while true; do
response=$(curl -ks -u "$ISE_USER:$ISE_PASS" \
"https://$ISE_HOST:9060/ers/config/endpoint?size=100&page=$page")
count=$(echo "$response" | jq '.SearchResult.resources | length')
[[ "$count" -eq 0 ]] && break
echo "$response" | jq '.SearchResult.resources[]'
((page++))
done
Filtering
# Filter by name
curl -ks -u "$ISE_USER:$ISE_PASS" \
"https://$ISE_HOST:9060/ers/config/endpoint?filter=name.CONTAINS.Linux"
# Filter by MAC
curl -ks -u "$ISE_USER:$ISE_PASS" \
"https://$ISE_HOST:9060/ers/config/endpoint?filter=mac.EQ.14:F6:D8:7B:31:80"
# Multiple filters (AND)
curl -ks -u "$ISE_USER:$ISE_PASS" \
"https://$ISE_HOST:9060/ers/config/endpoint?filter=name.CONTAINS.Linux&filter=staticGroupAssignment.EQ.true"
Environment Setup
Before running examples, set up credentials:
# Load from dsec
dsource d000 dev/network
# Or set manually
export ISE_HOST="ise-01.inside.domusdigitalis.dev"
export ISE_USER="ersadmin"
export ISE_PASS="<from gopass>"
Learnings
|
ERS Gotchas
|