Katabarwa Labs
← Blog

How to audit who can access your Jira Service Management portals

Jira Service Management · August 29, 2026 · 5 min read

Ask a simple question of any Jira Service Management site that has been running for a year: who can reach this portal, and how? There is no screen that answers it. External customers get added desk by desk, organizations get granted and their memberships drift, agents land on the Service Desk Team role directly or through groups nobody re-checks, and deactivated accounts stay on that role long after the person left. Portal-access visibility is a long-running ask on the JSM issue tracker (JSDCLOUD) and a recurring "who has access to our portal?" thread on Atlassian Community, and it matters most exactly when an access review or customer-data audit lands on your desk.

Why JSM cannot tell you this out of the box

The DIY approach: walk every desk through the REST API

Everything you need is in the JSM and Jira REST APIs, spread across several endpoints that you have to join yourself, per desk:

The catches: the Service Desk Team role name is localized per project language, so an English-only match silently loses agent data on non-English sites; the public API does not expose a portal's open-signup setting, so "open to anyone with the link" cannot be detected directly; and a one-off script gives you a snapshot, not a record. To see drift you have to persist each run and diff it against the last, per desk, forever.

A ready-made option: Portal Governance for JSM

Our tool for this: Portal Governance for JSM on the Atlassian Marketplace. It is built on Atlassian Forge and runs entirely on Atlassian's own platform inside your Jira Cloud tenant, so nothing leaves your instance.

Portal Governance for JSM is that pattern packaged. It scans every service desk daily and on demand, builds the per-desk access matrix (customers, organization grants with membership rollups, and agent grants classified direct vs group), flags exposure (deactivated agents, group-granted access, empty organization grants, portals with zero request types), diffs each scan against the previous one so you see exactly what changed, and exports the whole matrix as audit-ready CSV. An opt-in cleanup can then remove deactivated accounts from customer lists and organizations, always as a dry-run preview first, behind an explicit confirmation, with each account re-verified as still deactivated immediately before removal. Cleanup removes portal access only: it does not deactivate accounts and does not free license seats, and removal is recoverable. Outside that opt-in cleanup, the app is read-only.

Key facts

Related reading: set an external identity to expire instead of letting it linger.


Written by the team at Katabarwa Labs. We build small, single-purpose Azure tools that run entirely inside your own tenant. Questions: abaho@llmgraph.ai.