News

When the Vendor Becomes the Customer: Building Internal Tools on an Agentic IAM Platform

  • None--securityboulevard.com
  • published date: 2026-01-08 00:00:00 UTC

None

<div data-elementor-type="wp-post" data-elementor-id="52782" class="elementor elementor-52782" data-elementor-post-type="post"> <div class="elementor-element elementor-element-024fa2f ccustom_blogdetail_topsec e-flex e-con-boxed e-con e-parent" data-id="024fa2f" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="e-con-inner"> <div class="elementor-element elementor-element-988554d elementor-widget elementor-widget-text-editor" data-id="988554d" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p dir="ltr">It began, as an engineer’s attempt to fix a nagging problem often does, with irritation.</p> <p dir="ltr">Each night, automated test pipelines ran across an expanding surface area of the <a href="https://aembit.io/product-overview/" rel="noopener">Aembit Workload IAM Platform</a>, validating that core components behave as expected across environments. </p> <p dir="ltr">By morning, the results existed, but they were scattered across interfaces and notifications that required patience to reconstruct into a coherent picture. TestOps platform Qase.io stored the data, and Slack delivered partial summaries from individual repositories and pipelines – but neither provided a clear answer to the question engineers needed to answer at the start of each day: <em>Is everything actually working like it should?</em></p> <p dir="ltr">Sebastian Ostrowski, Aembit’s lead test automation engineer, decided to build a dashboard to bring those results into one place.</p> </div> </div> </div> </div> <div class="elementor-element elementor-element-3a23c12a e-con-full e-flex e-con e-parent" data-id="3a23c12a" data-element_type="container"> <div class="elementor-element elementor-element-72e3c5cd elementor-widget elementor-widget-image" data-id="72e3c5cd" data-element_type="widget" data-widget_type="image.default"> <div class="elementor-widget-container"> <figure class="wp-caption"> <a href="https://aembit.io/wp-content/uploads/2026/01/image3.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image3" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NTI4NDIsInVybCI6Imh0dHBzOlwvXC9hZW1iaXQuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzAxXC9pbWFnZTMucG5nIn0%3D"><br> <img fetchpriority="high" decoding="async" width="1999" height="996" src="https://aembit.io/wp-content/uploads/2026/01/image3.png" class="attachment-full size-full wp-image-52842" alt="Screenshot of Aembit Test Dashboard." srcset="https://aembit.io/wp-content/uploads/2026/01/image3.png 1999w, https://aembit.io/wp-content/uploads/2026/01/image3-300x149.png 300w, https://aembit.io/wp-content/uploads/2026/01/image3-1024x510.png 1024w, https://aembit.io/wp-content/uploads/2026/01/image3-768x383.png 768w, https://aembit.io/wp-content/uploads/2026/01/image3-1536x765.png 1536w" sizes="(max-width: 1999px) 100vw, 1999px"> </a><figcaption class="widget-image-caption wp-caption-text"></figcaption></figure> </div> </div> </div> <div class="elementor-section elementor-top-section elementor-element elementor-element-7541b5c2 custom_blogdetail_topsec elementor-section-full_width elementor-section-stretched elementor-section-height-default elementor-section-height-default" data-id="7541b5c2" data-element_type="section" data-settings='{"background_background":"classic","stretch_section":"section-stretched"}'> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6d1fe123" data-id="6d1fe123" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <section class="elementor-section elementor-inner-section elementor-element elementor-element-47faf35 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="47faf35" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-5eaef706" data-id="5eaef706" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-759fa442 elementor-widget elementor-widget-text-editor" data-id="759fa442" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>Almost immediately, the work drifted into familiar territory: The application would run inside Kubernetes and depend on app-to-service connections (interactions that <a href="https://aembit.io/blog/identity-security-trends/" rel="noopener">have become routine</a> as non-human workloads take on more responsibility.)</p> <p>It would need access to Qase.io and Slack every night. But rather than introducing environment variables and long-lived tokens, Sebastian chose to use the Aembit Workload IAM Platform itself to handle access for the dashboard.</p> <p>At the time, this decision did not feel especially consequential. It was simply the cleanest option available. The dashboard would live in Kubernetes, it would be deployed through Argo CD, and it would need to authenticate itself repeatedly to external services. Using Aembit meant those credentials <a href="https://docs.aembit.io/get-started/how-aembit-works" rel="noopener">could be injected</a> at runtime, defined centrally and based on policy, and enforced through the platform rather than embedded into application code or configuration files.</p> </div> </div> </div> </div> </div> </section></div> </div> </div> </div> <div class="elementor-element elementor-element-2621b08 e-flex e-con-boxed e-con e-parent" data-id="2621b08" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="e-con-inner"> <div class="elementor-element elementor-element-67240ccf elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="67240ccf" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"><br> </span> </div> </div> </div> <div class="elementor-element elementor-element-2519cf0a elementor-widget elementor-widget-text-editor" data-id="2519cf0a" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>Embark on a technical deep dive to our Docs site to read <a href="https://docs.aembit.io/get-started/how-aembit-works" rel="noopener"><em>How Aembit Works</em></a></p> </div> </div> <div class="elementor-element elementor-element-590d6d41 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="590d6d41" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"><br> </span> </div> </div> </div> </div> </div> <div class="elementor-element elementor-element-1de73ce5 e-flex e-con-boxed e-con e-parent" data-id="1de73ce5" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="e-con-inner"> <div class="elementor-element elementor-element-319123a8 elementor-widget elementor-widget-text-editor" data-id="319123a8" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>The implications of that choice became clearer as the work progressed.</p> <p>Sebastian built the dashboard as a Python Flask application with a Vue.js front end, backed by MongoDB. The service pulled test automation results from Qase.io on a regular cadence, stored them locally, and rendered them in a format that made nightly runs easier to interpret. It also posted summarized results into Slack, providing the team with a single, consistent signal each morning.</p> </div> </div> </div> </div> <section class="elementor-section elementor-top-section elementor-element elementor-element-67df0c13 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="67df0c13" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-574cd47d" data-id="574cd47d" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-74945ded elementor-widget elementor-widget-image" data-id="74945ded" data-element_type="widget" data-widget_type="image.default"> <div class="elementor-widget-container"> <a href="https://aembit.io/wp-content/uploads/2026/01/image1.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image1" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NTI4NDQsInVybCI6Imh0dHBzOlwvXC9hZW1iaXQuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzAxXC9pbWFnZTEucG5nIn0%3D"><br> <img decoding="async" width="800" height="377" src="https://aembit.io/wp-content/uploads/2026/01/image1-1024x482.png" class="attachment-large size-large wp-image-52844" alt="Aembit Workload IAM screenshot." srcset="https://aembit.io/wp-content/uploads/2026/01/image1-1024x482.png 1024w, https://aembit.io/wp-content/uploads/2026/01/image1-300x141.png 300w, https://aembit.io/wp-content/uploads/2026/01/image1-768x362.png 768w, https://aembit.io/wp-content/uploads/2026/01/image1-1536x723.png 1536w, https://aembit.io/wp-content/uploads/2026/01/image1.png 1999w" sizes="(max-width: 800px) 100vw, 800px"> </a> </div> </div> </div> </div> </div> </section> <div class="elementor-section elementor-top-section elementor-element elementor-element-49a32f04 custom_blogdetail_topsec elementor-section-full_width elementor-section-stretched elementor-section-height-default elementor-section-height-default" data-id="49a32f04" data-element_type="section" data-settings='{"background_background":"classic","stretch_section":"section-stretched"}'> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-73dffa1e" data-id="73dffa1e" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <section class="elementor-section elementor-inner-section elementor-element elementor-element-1b18b5a7 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="1b18b5a7" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-50717e2a" data-id="50717e2a" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-3eb05c9e elementor-widget elementor-widget-text-editor" data-id="3eb05c9e" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>Throughout that process, Sebastian never handled a Qase.io API key or a Slack token. He did not copy credentials between environments or keep temporary secrets on his machine, avoiding a set of practices that remain common in many engineering workflows. Developers <a href="https://aembit.io/blog/why-devs-arent-responsible-for-non-human-credential-hygiene/" rel="noopener">often end up</a> handling credentials and writing authorization logic themselves, tolerated because it is familiar and expedient, despite the risk and operational inefficiencies. </p> <p>In this case, it simply never entered the picture.</p> <p>“As a developer, I didn’t have to worry about secrets,” Sebastian said. “I just built the dashboard.”</p> </div> </div> </div> </div> </div> </section></div> </div> </div> </div> <div class="elementor-element elementor-element-582da65 e-con-full e-flex e-con e-parent" data-id="582da65" data-element_type="container"> <div class="elementor-element elementor-element-277890a9 e-con-full e-flex e-con e-child" data-id="277890a9" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="elementor-element elementor-element-1fa2e783 elementor-widget elementor-widget-image" data-id="1fa2e783" data-element_type="widget" data-widget_type="image.default"> <div class="elementor-widget-container"> <img decoding="async" width="34" height="29" src="https://aembit.io/wp-content/uploads/2023/07/quotation-marks.svg" class="attachment-full size-full wp-image-4547" alt="quotation-mark-icon"> </div> </div> <div class="elementor-element elementor-element-53b07a1c elementor-widget elementor-widget-heading" data-id="53b07a1c" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h4 class="elementor-heading-title elementor-size-default">“As a developer, I didn’t have to worry about secrets.”</h4> </div> </div> </div> <div class="elementor-element elementor-element-4e7c92bf elementor-widget elementor-widget-text-editor" data-id="4e7c92bf" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <h2>When Debugging Doesn’t Mean Hunting for Secrets</h2> <p>The dashboard Sebastian built addressed one kind of failure: understanding test outcomes. Each morning, he could see what ran overnight, which components passed, and where tests failed. That clarity made regressions easier to spot and reduced the time spent reconstructing what happened across multiple systems.</p> <p>A different class of failure sat beneath the test results themselves. When a run failed because a service could not be reached or an API call was rejected, Sebastian could inspect the Aembit tenant to determine whether access had been granted as expected. He did not need to log in to machines or trace environment variables across repositories. The access layer was visible, inspectable, and separate from application logic.</p> <p>That separation mattered in practice. Sebastian did not begin the project as a Kubernetes specialist, and part of the work involved learning how an application fits into a real deployment workflow where responsibilities are divided and access is treated as shared infrastructure rather than developer-owned configuration.</p> <p>Using Aembit internally turned the dashboard into a practical test of that separation.</p> </div> </div> <div class="elementor-element elementor-element-272fd791 elementor-widget elementor-widget-image" data-id="272fd791" data-element_type="widget" data-widget_type="image.default"> <div class="elementor-widget-container"> <a href="https://aembit.io/wp-content/uploads/2026/01/image2.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image2" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6NTI4NDMsInVybCI6Imh0dHBzOlwvXC9hZW1iaXQuaW9cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzAxXC9pbWFnZTIucG5nIn0%3D"><br> <img loading="lazy" decoding="async" width="800" height="655" src="https://aembit.io/wp-content/uploads/2026/01/image2-1024x839.png" class="attachment-large size-large wp-image-52843" alt="Screenshot of Daily Activity Report." srcset="https://aembit.io/wp-content/uploads/2026/01/image2-1024x839.png 1024w, https://aembit.io/wp-content/uploads/2026/01/image2-300x246.png 300w, https://aembit.io/wp-content/uploads/2026/01/image2-768x629.png 768w, https://aembit.io/wp-content/uploads/2026/01/image2-1536x1258.png 1536w, https://aembit.io/wp-content/uploads/2026/01/image2.png 1978w" sizes="auto, (max-width: 800px) 100vw, 800px"> </a> </div> </div> </div> <div class="elementor-element elementor-element-80b7413 e-flex e-con-boxed e-con e-parent" data-id="80b7413" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="e-con-inner"> <div class="elementor-element elementor-element-601f9a63 elementor-widget elementor-widget-text-editor" data-id="601f9a63" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>The distinction grows more important as software <a href="https://aembit.io/blog/the-emerging-identity-imperatives-of-agentic-ai/" rel="noopener">takes on more autonomous behavior</a>. Non-human workloads already outnumber human users by orders of magnitude in most environments, and <a href="https://aembit.io/blog/ai-agent-identity-security/" rel="noopener">agentic AI systems amplify that imbalance</a> and introduce greater liability. </p> <p>Access needs to be scoped, short-lived, and enforced through identity-based policy<a style="letter-spacing: -0.1px;" href="https://aembit.io/blog/static-credentials-in-cloud-native-environments/" rel="noopener">rather than static secrets.</a></p> <p>Sebastian experienced that reality firsthand. Even though the dashboard was not an AI system, it behaved like one in the ways that mattered operationally. It ran on a schedule, acted without human intervention, and required trusted access to external services.</p> <p>Now to start each day, the team checks the dashboard and the clean Slack summary it produces. Typically everything is green. But if something does break, the signal is immediate and clear.</p> <p>“It sure made mornings easier,” Sebastian said.</p> </div> </div> </div> </div> <div class="elementor-element elementor-element-391d3de3 e-con-full e-flex e-con e-child" data-id="391d3de3" data-element_type="container"> <div class="elementor-element elementor-element-5cd982c5 e-con-full e-flex e-con e-child" data-id="5cd982c5" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="elementor-element elementor-element-5ee445fa e-con-full e-flex e-con e-child" data-id="5ee445fa" data-element_type="container" data-settings='{"background_background":"classic"}'> <div class="elementor-element elementor-element-7ec45937 elementor-widget elementor-widget-heading" data-id="7ec45937" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h3 class="elementor-heading-title elementor-size-default">Ready to Try Aembit?</h3> </div> </div> <div class="elementor-element elementor-element-7b435bcc elementor-widget__width-initial elementor-widget elementor-widget-text-editor" data-id="7b435bcc" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>Get started in minutes, with no sales calls required. Our free- forever tier is just a click away.</p> </div> </div> <div class="elementor-element elementor-element-2133aac2 elementor-align-left elementor-mobile-align-left elementor-widget elementor-widget-button" data-id="2133aac2" data-element_type="widget" data-widget_type="button.default"> <div class="elementor-widget-container"> <div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://useast2.aembit.io/signup" id="requestdemobutton_home_bottomcta"><br> <span class="elementor-button-content-wrapper"><br> <span class="elementor-button-icon"><br> <i aria-hidden="true" class="far fa-arrow-right"></i> </span><br> <span class="elementor-button-text">TRY AEMBIT TODAY</span><br> </span><br> </a> </div> </div> </div> </div> <div class="elementor-element elementor-element-5c31d1e3 e-con-full e-flex e-con e-child" data-id="5c31d1e3" data-element_type="container"> <div class="elementor-element elementor-element-52e00aa1 e-con-full e-flex e-con e-child" data-id="52e00aa1" data-element_type="container" data-settings='{"background_background":"classic","position":"absolute"}'> </div> </div> </div> </div> </div><p>The post <a href="https://aembit.io/blog/when-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform/">When the Vendor Becomes the Customer: Building Internal Tools on an Agentic IAM Platform</a> appeared first on <a href="https://aembit.io/">Aembit</a>.</p><div class="spu-placeholder" style="display:none"></div><div class="addtoany_share_save_container addtoany_content addtoany_content_bottom"><div class="a2a_kit a2a_kit_size_20 addtoany_list" data-a2a-url="https://securityboulevard.com/2026/01/when-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform/" data-a2a-title="When the Vendor Becomes the Customer: Building Internal Tools on an Agentic IAM Platform"><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fsecurityboulevard.com%2F2026%2F01%2Fwhen-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform%2F&amp;linkname=When%20the%20Vendor%20Becomes%20the%20Customer%3A%20Building%20Internal%20Tools%20on%20an%20Agentic%20IAM%20Platform" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fsecurityboulevard.com%2F2026%2F01%2Fwhen-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform%2F&amp;linkname=When%20the%20Vendor%20Becomes%20the%20Customer%3A%20Building%20Internal%20Tools%20on%20an%20Agentic%20IAM%20Platform" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fsecurityboulevard.com%2F2026%2F01%2Fwhen-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform%2F&amp;linkname=When%20the%20Vendor%20Becomes%20the%20Customer%3A%20Building%20Internal%20Tools%20on%20an%20Agentic%20IAM%20Platform" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fsecurityboulevard.com%2F2026%2F01%2Fwhen-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform%2F&amp;linkname=When%20the%20Vendor%20Becomes%20the%20Customer%3A%20Building%20Internal%20Tools%20on%20an%20Agentic%20IAM%20Platform" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fsecurityboulevard.com%2F2026%2F01%2Fwhen-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform%2F&amp;linkname=When%20the%20Vendor%20Becomes%20the%20Customer%3A%20Building%20Internal%20Tools%20on%20an%20Agentic%20IAM%20Platform" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share"></a></div></div><p class="syndicated-attribution">*** This is a Security Bloggers Network syndicated blog from <a href="https://aembit.io/">Aembit</a> authored by <a href="https://securityboulevard.com/author/0/" title="Read other posts by Dan Kaplan">Dan Kaplan</a>. Read the original post at: <a href="https://aembit.io/blog/when-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform/">https://aembit.io/blog/when-the-vendor-becomes-the-customer-building-internal-tools-on-an-agentic-iam-platform/</a> </p>