Traditional Azure portals and CLI tools provide a fragmented view of identities, roles, and permissions. For an architect, this fragmentation is a blind spot. **ROADrecon** solves this by gathering all metadata from the Microsoft Graph into a single, queryable SQLite database, allowing for surgical precision in audits.
Setting Up the Framework
ROADtools is a Python-based ecosystem. During an active audit, speed and stability are non-negotiable. For a stable deployment, we utilize a clean virtual environment:
# Recommendation: Hardened environment isolation
pip install roadrecon
For the bleeding-edge version directly from source to ensure access to the latest Graph schema changes:
git clone https://github.com/dirkjanm/roadtools.git
pip install -e roadtools/roadlib/
pip install -e roadtools/roadrecon/
Data Collection: The 'Gather' Protocol
Intelligence gathering starts with authentication. In modern environments with mandatory MFA, the device code flow is our most reliable ingress vector.
# Triggering secure OAuth session
roadrecon auth --device-code
Follow the prompts at microsoft.com/devicelogin. Once the tokens are committed to .roadtools_auth, we trigger the full sweep. If Global Reader status is established, always append the --mfa flag to expose conditional access gaps.
# High-fidelity data harvesting
roadrecon gather --mfa
Visualization: The ROAD GUI
The true power of the framework lies in its graphical command center. It converts thousands of raw JSON lines into an intuitive, traversable map of the tenant.
# Initializing local telemetry node
roadrecon gui
Navigate to http://127.0.0.1:5000. From here, we can execute defensive workflows with unprecedented speed:
- Role Exploration: Instant identification of Global Admin density and MFA compliance.
- Application Audit: Uncovering "Shadow Admins" hidden within AppRoleAssignments.
- Device Context: Mapping unmanaged devices to high-value identities.
STRATEGIC RECOMMENDATION
Run a monthly ROADrecon sweep of your production tenant. Compare the resulting roadrecon.db against your architectural baseline to detect unauthorized permission creep before an adversary does.