Skip to main content

netbox-access-paths

PyPI Python CI

Document how your team reaches every customer system, in NetBox.

Every MSP has the same tribal knowledge: to get into customer X, connect to the office VPN, RDP to the jump host, then open the firewall portal. It lives in a wiki page, a password manager note, or one engineer's head. That's fine until:

  • a customer's NIS2 supplier questionnaire asks how exactly do you access our systems?
  • a technician leaves and you need to know everything they could reach,
  • your jump host or RMM is compromised and you need to know which customers sit behind it,
  • a new hire needs a map of how to get into customer infrastructure.

netbox-access-paths turns that knowledge into data. An access path is who can reach which customer system, from where, through which hops, with which method, approved by whom, and when it's due for review.

 Support team ──► Office LAN ──► NetBird ──► jump01 (VM) ──► RDP ──► customer-dc01
   (who)          (origin)       └────── shared route ─────┘  (method)  (target, tenant "Acme")

An access path: origin, route hops, customer-side hops, method and target

What you get

  • Routes: the MSP-side chain you reuse for every customer (office → VPN/ZTNA → jump host). Define it once; dozens of paths share it.
  • Paths: route + customer-side hops + target (device, VM, service or URL) + method (RDP, SSH, web portal, RMM, vendor remote tool, ...), who may use it, MFA, and where the credential lives (a reference, never the secret).
  • Approval and review: approved by, review date, expiry for temporary or vendor access, break-glass paths flagged.
  • Answers, not just records:
    • Customer tab: every way into this tenant, ready to paste into a questionnaire (CSV/Markdown export).
    • Device/VM tab: every path that runs through this box (blast radius) or into it.
    • Contact tab: everything this person can reach (offboarding).
    • Review queue: paths past review date, expired, or without MFA.

Built on NetBox objects you already have (tenants, contacts, devices, VMs, tunnels, services, prefixes); REST API, GraphQL and CSV import included.

What it is not

Not a password manager, not a PAM, and it doesn't open connections. It documents the paths; your RDM/PAM/ZTNA tools keep doing the access.

Status

Alpha, on PyPI as netbox-access-paths (0.1.0). NetBox 4.7–4.8, Python 3.12+, Apache-2.0. Feedback from MSPs running NetBox is welcome: open an issue.

Install

Into NetBox's virtual environment:

source /opt/netbox/venv/bin/activate
pip install netbox-access-paths
# keep it across NetBox upgrades:
echo "netbox-access-paths" >> /opt/netbox/local_requirements.txt

configuration.py:

PLUGINS = ["netbox_access_paths"]
PLUGINS_CONFIG = {"netbox_access_paths": {}}

Then python manage.py migrate and restart NetBox (netbox and netbox-rq).

To look around first: python manage.py access_paths_demo creates a fictional MSP with three customers, four routes and seven paths (all named "Access paths demo"); --delete removes them again.

How it fits together

Object What it is Example
Access route Where sessions start (origin) and the hops on your side Office → msp-fw01 → msp-jump01
Access path One way into one customer system: route, customer-side hops, method, target, who, approval Acme: route above → IPsec tunnel → acme-fw01 → RDP → acme-dc01
Access hop One step on a route or a path: a device, VM, tunnel, or a label for something outside NetBox "ZTNA cloud", "TeamViewer cloud"
  • A path's target is a device, VM, application service or IP address, or a URL (or both). The device tab counts a path into one of its services or IP addresses as a path into the device.
  • Holders are contacts; holder groups are contact groups, and a grant to a group covers its sub-groups.
  • Approved by / on: setting an approver without a date dates it today; changing the approver does too.
  • A deleted target leaves its path behind, marked target missing in the review queue, rather than deleting documentation silently.
  • Disabled paths don't count as expired, due or without MFA.

Where to find things

  • Tenant → Access paths tab: every way into the customer, with Questionnaire (CSV) and (Markdown) exports: one row per path with target, method, starting point, hops, who, authentication, approval and review dates.
  • Device / VM → Access paths tab: through this (the paths that use it as a hop, grouped by customer: the blast radius if it is compromised) and into this.
  • Contact → Access paths tab: everything the person may use, directly or through a group.
  • Access paths → Review queue: expired, review due, without MFA, break-glass, target missing.
  • Path page: the chain drawn left to right, from origin through route and customer-side hops to the target.
Customer tab with the questionnaire export Jump host: every customer behind it
Tenant tab Device tab

Review queue

Filters for all of these exist on the path list and the REST API (/api/plugins/access-paths/paths/): tenant_id, holder_id (groups included), device_id / virtual_machine_id (into, services and IPs included), hop_device_id (through, route or path), needs_review, expired, review_due, lacks_mfa, break_glass, target_missing. The questionnaire export takes the same filters: /plugins/access-paths/export/?tenant_id=4&format=markdown. GraphQL: access_paths_path_list and friends.

Configuration

PLUGINS_CONFIG = {
    "netbox_access_paths": {
        # Add the credential reference column to the questionnaire export (default: left out)
        "export_credential_ref": False,
    },
}

The origin, method, authentication and status choices can be replaced or extended with NetBox's FIELD_CHOICES, e.g.:

FIELD_CHOICES = {
    "netbox_access_paths.AccessPath.method+": (("winrm", "WinRM", "blue"),),
    "netbox_access_paths.AccessRoute.origin+": (("soc", "SOC network", "purple"),),
}

Development: docs/development.md. Design notes: DESIGN.md.

Made by Packetflow, from the same team as netbox-iec62443.

Metadata

Release files for netbox-access-paths 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for netbox-access-paths 0.1.0
File Size Uploaded Provenance Actions
netbox_access_paths-0.1.0.tar.gz 49.3 kB With provenance Details for netbox_access_paths-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for netbox-access-paths 0.1.0
File Interpreter ABI Platform Actions
netbox_access_paths-0.1.0-py3-none-any.whl Python 3 none any Details for netbox_access_paths-0.1.0-py3-none-any.whl

Total release size: 111.4 kB

Release files / netbox_access_paths-0.1.0.tar.gz

Download URL netbox_access_paths-0.1.0.tar.gz
Size 49.3 kB
Tags Source
SHA-256 checksum
How to use checksums
1b00fd97a5be6d1379625b2441013053a1ac3aadede0995e7d3a74fa0c7107d9
BLAKE2b-256 checksum
How to use checksums
31f7a4474f40ffdc0d00367418590e79167077e3703a6f2865fd6cc5beed1ecc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

Release files / netbox_access_paths-0.1.0-py3-none-any.whl

Download URL netbox_access_paths-0.1.0-py3-none-any.whl
Size 62.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d6a051f64d6b47e406c544f32be1cf10b0cddc4253034a173f4457cecd82ac0c
BLAKE2b-256 checksum
How to use checksums
216f5b1c8c9b2f4b469f034582f7d1cce877ad947ab5ec3b5e52f5a204ebd5da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

Security for netbox-access-paths 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for netbox_access_paths-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page