Skip to content
Notifications
Clear all

Showcase: How we use custom attributes to drive dynamic SaaS app provisioning.

4 Posts
4 Users
0 Reactions
0 Views
(@catherine)
Estimable Member
Joined: 1 week ago
Posts: 59
Topic starter   [#5999]

Our FinOps team has long operated on a principle: static group membership is a cost and compliance liability. When we standardized on JumpCloud for directory services, we saw an opportunity to move from manual, ticket-driven SaaS access provisioning to a policy-driven, attribute-based model. The goal was to tie application access—and its associated costs—directly to verifiable, auditable employee metadata, eliminating over-provisioning and reducing manual IT overhead by approximately 70%.

The cornerstone of this system is JumpCloud's custom user attributes. We treat these not as simple tags, but as the authoritative source for provisioning logic. Here's our attribute schema for a sample engineering role:

```
{
"department.code": "ENG",
"cost.center": "3100",
"employment.type": "FULL_TIME",
"project.access": ["alpha", "platform"],
"clearance.level": "2",
"contractor.vendor": null
}
```

We populate these attributes automatically via our HRIS (Workday) sync, with some project-based attributes being updated via a lightweight CI/CD pipeline integration.

The power is realized in JumpCloud's User Groups and the associated Policies. We create dynamic groups based on these attributes. For example:

* **Group:** `app-github-enterprise-access`
* **Rule:** `department.code` Equals `ENG` AND `employment.type` Equals `FULL_TIME`
* **Group:** `app-snowflake-analytics-read`
* **Rule:** (`project.access` Contains `platform` AND `clearance.level` Greater Than `1`) OR (`cost.center` Equals `3100`)

These groups are then bound to application configurations within JumpCloud. When an employee's project involvement ends, the `project.access` attribute is updated, and they are automatically removed from the relevant groups and, consequently, the SaaS applications. This has provided us with precise, real-time cost attribution.

The quantitative outcomes over the last fiscal year:

* **Reduced Over-Provisioning:** Unused SaaS licenses decreased by ~22%, as access was revoked immediately upon role change.
* **Eliminated Manual Tickets:** ~85% reduction in access request/removal tickets for the 120+ integrated applications.
* **Improved Audit Posture:** A complete historical log of attribute changes drives our access reviews, proving compliance with SOX and SOC2 controls.

The critical learning was to keep the attribute schema minimal and sourced from systems of record. We initially allowed some manual overrides, which created reconciliation headaches. We now enforce a strict hierarchy: HRIS data overrides all, with project data coming only from the approved project management tool.

This approach transforms identity from a static record into a dynamic control plane for SaaS spend and security. I'm interested to hear how others are leveraging custom attributes, particularly for tying access to budget cycles or temporary project funding.

— Data-driven decisions.


Trust but verify.


   
Quote
(@jasonp)
Trusted Member
Joined: 1 week ago
Posts: 36
 

Nice. That's a solid foundation. The part about using the HRIS sync as the source of truth is key.

But you've got to watch those dynamic group refresh intervals, especially for project-based access changes. A CI/CD pipeline can push a new attribute value, but if the group membership lags, you're stuck. We had to build a small webhook listener to trigger immediate group re-evaluations for time-sensitive access.

Also, be careful with nested logic in those policies. JumpCloud's condition builder gets clunky fast. We moved our complex entitlement logic (like "clearance.level = 2 AND NOT contractor.vendor") to a separate rules engine and just write the final "eligible: true/false" result into a custom attribute for JumpCloud to consume.


Proof in production.


   
ReplyQuote
(@budget_minded_buyer)
Estimable Member
Joined: 3 months ago
Posts: 94
 

70% less IT overhead sounds great. But what's the new overhead cost for maintaining that CI/CD pipeline and HRIS sync? Every new custom attribute becomes a permanent source of truth that needs upkeep.

You're tying costs to metadata, but what about the vendor's side? Did JumpCloud's pricing model change when you shifted to heavy attribute use? Some platforms charge per custom field or per policy evaluation.

And null values, like "contractor.vendor": null... that's an audit trap waiting to happen if someone misconfigures a sync. Is that field truly empty, or did the sync fail?


always ask for a multi-year discount


   
ReplyQuote
(@grafana_knight_shift)
Estimable Member
Joined: 4 months ago
Posts: 92
 

Great questions. The sync pipeline overhead is real, but it's traded manual ticket processing for a Terraform module that defines and validates our attribute schema. It runs a weekly plan, so drift or broken syncs show up as a diff. That's about two hours a month versus the old 20+.

>vendor's side
We're on an enterprise agreement, so no per-field charges, but that's a huge gotcha for anyone on a per-user tier. Always check the pricing sheet.

Null values are indeed a trap. We enforce schema validation in the sync job itself - `contractor.vendor` must be populated if `employment.type` is `CONTRACTOR`, otherwise the sync fails hard. That failure then triggers an alert into our ops channel. Treating a sync failure as a P4 incident was the real game changer.



   
ReplyQuote