Last updated on
October 29, 2025

A Look Inside: SaaS Security Workflows that Scale

Gabe Bello

Note from Obsidian Security:

At Obsidian, we’re lucky to work with incredible security teams who are tackling SaaS challenges head-on and building innovative programs to make security smarter. Gabe Bello’s security team is one such example. They’ve leveraged Obsidian Security APIs to create smarter, more efficient workflows that strengthen their SaaS security program—an approach that other organizations can look to as a model. 

In this blog post, Gabe shares the workflows and programs his team has built, and how they’re raising the bar for what modern SaaS security can look like.

Introduction

Security teams everywhere are lean, yet we balance an ever-growing list of responsibilities. For my Information Security team, SaaS is right at the top of that list. We see that some of the biggest industry threats are increasingly tied to SaaS applications and know we must proactively address SaaS risks. 

Our partnership with Obsidian marked the beginning of new visibility and control into our SaaS environment. With a clear view of our SaaS posture for the first time, our team could go beyond policies and standards on paper and see how people were actually working. 

With Obsidian, we’re building out a SaaS security program with two major philosophies: 

     1. Secure our company’s SaaS landscape at scale

     2. Empower app owners to move with agility and remediate risks self-service

By leveraging Obsidian’s APIs, we’ve turned that philosophy into scalable workflows that strengthen SaaS security. Here’s what we’ve built: 

1. Support for Internal Security OKRs
The Challenge

Security teams need to prove value and demonstrate trends, but tracking progress across all apps is complex and time-consuming. Obsidian’s UI dashboards provide a high-level overview, but reporting progress on internal OKRs requires customizability that may change quarter over quarter. Since our team also has multiple workstreams leveraging the Obsidian product, we need to be able to isolate specific data points for each OKR.

The Solution

Analyze data pulled from Obsidian through APIs to organize information for security leadership and identify areas of acceleration and blocked work. 

The Workflow

One of our hardest problems was reporting progress against internal security OKRs. Leadership needed high-level trends, while engineers needed detailed drill-downs. Doing this manually across dozens of apps didn’t scale.

Using Obsidian’s REST APIs, we now fetch:

From there, our workflow does the heavy lifting — aggregating passing/failing policies, surfacing breakdowns by tenant, and flagging blocked tenants where progress has stalled. Passing and failing policies are what we see in Obsidian, whereas blocked policies are an identifier we use internally to describe OKR-related progress (e.g. a team is over capacity and cannot support risk burndown this sprint). 

We have two main views: one for executive leadership and one for the engineering team.

Executive metrics look like this:

     1. Aggregated count of passing, failing, and blocked policies (raw count and percentages). This can be filtered to which tenants we’ve scoped for risk burndown.

     2. A diff summary of policies that drifted (failing → passing, passing → failing) to highlight key wins and challenges since the last update.

Engineering metrics look like this:

     1. Tenant-level breakdown of passing, failing, and blocked policies. This is filtered similarly to our executive metrics, only surfacing tenants we are actively working on for risk reduction. 

     2. A detailed diff report on policies and their changes: state change (pass/fail/blocked) and violation count change (highlights progress towards state change, especially for high-violation policies).

We run these reports at least biweekly (in sync with our OKR and engineering updates) and can also be triggered on demand. Each update shows the delta since the last cycle to show trends over time.

The Results
2. Automating Operations
The Challenge

In the early days of our SSPM program, remediation was slow and manual. Security engineers ran what we called a “white-glove service” — personally triaging violations, chasing app owners, and revisiting policies. With no SLAs, no escalation paths, and no accountability outside the security team, we couldn’t consistently drive towards our risk targets. 

The Solution

We built a lightweight automation framework on top of Obsidian’s webhook capabilities to make risk reduction into backlog-able work:

This transformed operations. Tickets are created with the right context, routed to the right owners, and closed automatically. Risks don’t languish in the console, and engineers can focus on higher-impact work.

The Workflow

Webhooks for Jira Integration

We chose Action Policy → Webhook for extensibility. Native Atlassian integrations don’t handle our custom Jira fields well, and we can route the webhook to an internal service where we can hydrate the payload:

Before introducing automation, we took time to vet each rule so that we could trust the data feeding this flow. Because of that upfront work, we’re confident letting Obsidian automatically close tickets when issues remediate.

Smarter Tagging

To ensure a seamless ticket lifecycle, we leverage tags on all of our policies. The two primary use cases are 1) tags to signify operational readiness and 2) tags to facilitate ticket closure

Tags that signify operational readiness are simple. We specify a string that is solely used to identify when a policy violation should result in a ticket (e.g. OPS-READY). This gives us batch capabilities for the work we do quarter over quarter and verifiable control over when tickets are created. New policies can be added to the Obsidian console without worry that it will disrupt the existing operational flow. 

Tags to facilitate ticket closure are step 2 to streamlining the process and reducing human clicks. When an operationally ready policy (see the previous paragraph) does results in a created ticket, we receive a payload back from Jira with some information, namely the ticket ID (e.g. PROJ-12345). We attach a new tag to the same policy in Obsidian with this unique identifier. When a violation resolves, the payload sent over is used in a Jira lookup (using the tag) to ensure we close the correct ticket. 

Looking Ahead

These automated services reflect a single philosophy: reduced clicks = reduced mental load. 

By streamlining operational work, we free up our engineers to focus on what matters most: understanding and solving risks.

Next on our roadmap:

For our company and team, automation isn’t just about fixing problems faster. It’s about empowering teams across the company to own risk, stay accountable, and move with agility. Obsidian gives us the foundation to do exactly that.

Frequently Asked Questions (FAQs)

Get Started

Start in minutes and secure your critical SaaS applications with continuous monitoring and data-driven insights.

get a demo