https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-BTP-Security-blog-posts.xmlSAP Community - SAP BTP Security2026-02-22T21:00:23.084741+00:00python-feedgenSAP BTP Security blog posts in SAP Communityhttps://community.sap.com/t5/technology-blog-posts-by-sap/how-to-integrate-sap-btp-cloud-logging-service-with-sap-cloud-identity/ba-p/14264923How to Integrate SAP BTP Cloud Logging Service with SAP Cloud Identity Services (IAS) Using SAML2025-11-11T06:21:39.917000+01:00shusei_sekiyahttps://community.sap.com/t5/user/viewprofilepage/user-id/46547<H3 id="introduction" id="toc-hId-1893736172"><STRONG>Introduction</STRONG></H3><UL><LI><STRONG>Why this matters:</STRONG> SAP Cloud Logging (based on OpenSearch) supports SAML 2.0 integration, allowing you to implement secure access and role-based authorization using SAP Cloud Identity Services (IAS) Groups.<BR />While the official <A href="https://help.sap.com/docs/cloud-logging/cloud-logging/prerequisites" target="_blank" rel="noopener noreferrer">SAP Help documentation</A> outlines the prerequisites and the JSON configuration for the Cloud Logging side, it does not detail the specific configuration steps required on the Identity Provider (IAS) side. This gap can lead to configuration errors, such as mismatched Entity IDs or missing attribute mappings. This article provides a complete, end-to-end guide to bridge that gap.</LI><LI><STRONG>Benefits:</STRONG><UL><LI><STRONG>Centralized Identity Management:</STRONG> Manage users and lifecycles in one place (IAS) rather than maintaining local users in OpenSearch.</LI><LI><STRONG>Single Sign-On (SSO):</STRONG> Provide a seamless login experience for developers and administrators across your BTP landscape.</LI><LI><STRONG>Security & Compliance:</STRONG> Adhere to SAP BTP security recommendations (BTP-CLS-0001) by enforcing MFA and audit logging via IAS.</LI></UL></LI><LI><STRONG>Prerequisites:</STRONG><UL><LI>A <STRONG>Cloud Logging Service instance</STRONG> created in SAP BTP.</LI><LI>An active <STRONG>SAP Cloud Identity Services (IAS) tenant</STRONG> with administrative access.</LI><LI>Cloud Foundry CLI (cf CLI) installed to update the service instance.</LI></UL></LI></UL><HR /><H3 id="step1prepareiasforsamlintegration" id="toc-hId-1697222667"><STRONG>Step 1: Prepare IAS for SAML Integration</STRONG></H3><P>In this step, we will register the Cloud Logging service as a Service Provider (SP) within IAS. This establishes the trust relationship required for authentication.</P><OL><LI>Log in to the IAS Admin Console: <CODE>https://[tenant].accounts.ondemand.com/admin</CODE></LI><LI>Create a new <STRONG>SAML 2.0 Application</STRONG>:<P>This application represents your specific Cloud Logging instance.</P><UL><LI><STRONG>Application Name:</STRONG> <CODE>CloudLogging-CLS-Test</CODE> (You can choose any recognizable name).</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_1-1762837132912.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338361iAA3A8AF20063D19B/image-size/medium?v=v2&px=400" role="button" title="shusei_sekiya_1-1762837132912.png" alt="shusei_sekiya_1-1762837132912.png" /></span></P></LI><LI>Add <STRONG>SAML 2.0 Configuration</STRONG>:<P>We will configure the endpoints where IAS sends the authentication response.</P><UL><LI>Select <STRONG>Configure Manually</STRONG>.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_2-1762837291339.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338364i6594E99A6D48FC96/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="shusei_sekiya_2-1762837291339.png" alt="shusei_sekiya_2-1762837291339.png" /></span></P><UL><LI><STRONG>SP Entity ID:</STRONG> <CODE>cls-test</CODE><BR /><EM>Note: This ID must be unique within your IAS tenant and must exactly match the <CODE>entity_id</CODE> defined in your Cloud Logging JSON config later.</EM></LI><LI><STRONG>ACS URL:</STRONG> <CODE>https://[cls-url]/_opendistro/_security/saml/acs</CODE><BR /><EM>Note: The "Assertion Consumer Service" URL is where IAS posts the SAML token. You can find the base <CODE>[cls-url]</CODE> by checking the "dashboards-endpoint" in your BTP service key or instance details.</EM></LI><LI><STRONG>Single Logout URL:</STRONG> <CODE>https://[cls-url]</CODE></LI><LI><STRONG>Binding:</STRONG> <CODE>HTTP_REDIRECT</CODE></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_3-1762837727079.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338365iEF23BA6BB7D2AC3C/image-size/medium?v=v2&px=400" role="button" title="shusei_sekiya_3-1762837727079.png" alt="shusei_sekiya_3-1762837727079.png" /></span></P><UL><LI><STRONG>NameID Format:</STRONG> <CODE>Email</CODE><BR /><EM>This ensures the user is identified by their email address in the OpenSearch audit logs.</EM></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_4-1762837867436.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338366i1F2EDD91042BB7C7/image-size/medium?v=v2&px=400" role="button" title="shusei_sekiya_4-1762837867436.png" alt="shusei_sekiya_4-1762837867436.png" /></span></P></LI><LI>Configure <STRONG>Attributes</STRONG>:<P><STRONG>Crucial Step:</STRONG> Cloud Logging relies on SAML assertions to assign permissions. We must map the user's groups in IAS to an attribute named <CODE>groups</CODE>.</P><UL><LI><STRONG>Name:</STRONG> <CODE>groups</CODE> (This is the key Cloud Logging looks for).</LI><LI><STRONG>Source:</STRONG> <CODE>Identity Directory</CODE>.</LI><LI><STRONG>Value:</STRONG> <CODE>All Groups</CODE> (Or specific groups if you want to restrict the payload size).</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_5-1762837924090.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338367i046974A83B9FE5BD/image-size/medium?v=v2&px=400" role="button" title="shusei_sekiya_5-1762837924090.png" alt="shusei_sekiya_5-1762837924090.png" /></span></P></LI></OL><HR /><H3 id="step2createiasgroupforadminaccess" id="toc-hId-1500709162"><STRONG>Step 2: Create IAS Group for Admin Access</STRONG></H3><P>Instead of mapping individual users, we will use IAS Groups to manage permissions dynamically. This group will be mapped to the <CODE>all_access</CODE> role in Cloud Logging.</P><UL><LI><STRONG>Group Name:</STRONG> <CODE>LoggingAdmins</CODE><BR /><EM>(Ensure this name matches the <CODE>admin_group</CODE> parameter in Step 4 exactly).</EM></LI><LI>Assign the users who require full administrative access to the OpenSearch Dashboards to this group.</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shusei_sekiya_0-1762837051216.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/338360i03AEDDCED5DDEC6A/image-size/medium?v=v2&px=400" role="button" title="shusei_sekiya_0-1762837051216.png" alt="shusei_sekiya_0-1762837051216.png" /></span></P><HR /><H3 id="step3generatesigningkeyandcertificateoptional" id="toc-hId-1304195657"><STRONG>Step 3: Generate Signing Key and Certificate (Optional)</STRONG></H3><P>For enhanced security, you can configure Cloud Logging to sign its authentication requests sent to IAS. This proves the request actually came from your Cloud Logging instance. If you enable "Signed Authentication Requests" in IAS, this step is mandatory.</P><P>Run the following commands to generate the necessary keys:</P><PRE><CODE># Generate a new private key and certificate
openssl req -x509 -newkey rsa:2048 -keyout private.key -out cert.pem -nodes -days 365
# Convert the key to PKCS#8 format (Required for the JSON config)
openssl pkcs8 -topk8 -v1 PBE-SHA1-3DES -in private.key -out private_pkcs8.key
# Encode the key to Base64 to fit into the JSON string
base64 -w0 private_pkcs8.key > private_pkcs8.b64</CODE></PRE><UL><LI>Upload the <CODE>cert.pem</CODE> file to the <STRONG>Signing Certificate</STRONG> section in your IAS Application.</LI><LI>Keep the <CODE>private_pkcs8.b64</CODE> string ready for the Cloud Logging configuration in the next step.</LI></UL><HR /><H3 id="step4configurecloudloggingservice" id="toc-hId-1107682152"><STRONG>Step 4: Configure Cloud Logging Service</STRONG></H3><P>Now we apply the configuration to the Cloud Logging instance. This tells the OpenSearch security plugin how to talk to IAS.</P><P>Create a JSON file named <CODE>saml-config.json</CODE>:</P><PRE><CODE>{
"saml": {
"enabled": true,
"initiated": true,
"idp": {
"metadata_url": "https://<IAS-tenant>/saml2/metadata",
"entity_id": "https://<IAS-tenant>"
},
"admin_group": "LoggingAdmins",
"roles_key": "groups",
"sp": {
"entity_id": "cls-test",
"signature_private_key": "<Base64-encoded-key>", // Optional: From Step 3
"signature_private_key_password": "<password>" // Optional: If you set a password on the key
},
"exchange_key": "RandomKey32CharsRandomKey32Chars"
}
}</CODE></PRE><P><STRONG>Configuration Breakdown:</STRONG></P><UL><LI><CODE>idp.metadata_url</CODE>: The URL where Cloud Logging fetches IAS public certificates.</LI><LI><CODE>admin_group</CODE>: Users belonging to this IAS group (<CODE>LoggingAdmins</CODE>) will automatically get super-admin privileges.</LI><LI><CODE>roles_key</CODE>: Tells Cloud Logging to look at the <CODE>groups</CODE> attribute in the SAML assertion to find group memberships.</LI><LI><CODE>exchange_key</CODE>: A random string used internally for cookie encryption (must be at least 32 characters).</LI></UL><P>Apply the configuration using the Cloud Foundry CLI:</P><PRE><CODE>cf update-service cls-test -c saml-config.json</CODE></PRE><HR /><H3 id="step5validatetheintegration" id="toc-hId-911168647"><STRONG>Step 5: Validate the Integration</STRONG></H3><P>Once the update finishes, verify the setup to ensure the handshake between IAS and Cloud Logging is working correctly.</P><UL><LI>Open your Cloud Logging Dashboard URL: <CODE>https://[your-cls-url]</CODE></LI><LI>You should be immediately redirected to the IAS login page.</LI><LI>Log in with a user that you assigned to the <CODE>LoggingAdmins</CODE> group in Step 2.</LI><LI>Upon successful login, check your user profile in OpenSearch. You should see that you are mapped to the <CODE>all_access</CODE> backend role.</LI></UL><HR /><H3 id="troubleshooting" id="toc-hId-714655142"><STRONG>Troubleshooting</STRONG></H3><P>If you encounter issues, check the following common errors:</P><UL><LI><STRONG>400 Bad Request:</STRONG> This usually means the <STRONG>SP Entity ID</STRONG> in your <CODE>saml-config.json</CODE> does not match the Entity ID configured in the IAS Application. They must be identical. Also, verify the ACS URL in IAS matches your Cloud Logging URL exactly.</LI><LI><STRONG>401 Unauthorized:</STRONG> You authenticated successfully, but don't have permission to view the dashboard. Verify that:<UL><LI>The user is in the <CODE>LoggingAdmins</CODE> group in IAS.</LI><LI>The <STRONG>Attribute</STRONG> mapping in Step 1 is set to <CODE>groups</CODE>.</LI></UL></LI><LI><STRONG>Emergency Reset:</STRONG> If you lock yourself out, you can disable SAML to regain access via client certificates or default credentials:</LI></UL><PRE><CODE>cf update-service cls-test -c '{"saml":{"enabled":false}}'</CODE></PRE><HR /><H3 id="conclusion" id="toc-hId-518141637"><STRONG>Conclusion</STRONG></H3><P>You have successfully configured SAML 2.0 authentication for SAP Cloud Logging. By integrating with SAP Cloud Identity Services, you have moved from basic authentication to a robust, enterprise-grade identity solution.</P><UL><LI><STRONG>Security:</STRONG> Centralized control reduces the risk of unauthorized access.</LI><LI><STRONG>Scalability:</STRONG> Easily manage new team members by simply adding them to the IAS group.</LI><LI><STRONG>Next Steps:</STRONG> Consider setting up additional groups in IAS and mapping them to specific "Read-Only" roles in OpenSearch for non-admin users.</LI></UL><P>I hope this article proves useful and helps you save time with your configuration!<BR />Shusei Sekiya</P>2025-11-11T06:21:39.917000+01:00https://community.sap.com/t5/sap-teched-blog-posts/sap-teched-2025-virtual-experience-the-best-of-sap-teched-and-broaden-your/ba-p/14268981SAP TechEd 2025 Virtual: Experience the best of SAP TechEd and broaden your SAP security expertise2025-11-14T11:57:51.056000+01:00RegineSchimmerhttps://community.sap.com/t5/user/viewprofilepage/user-id/8286<P>You missed SAP TechEd Berlin? Don’t worry – we recorded many sessions for you, and they’re available free of charge on the <A href="https://www.sap.com/germany/events/teched/virtual.html" target="_self" rel="noopener noreferrer">virtual SAP TechEd platform</A>. <STRONG> <BR /></STRONG>Check out these three security sessions:</P><P><STRONG><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1752172016416001rHH3?token_type=bearer&client_id=08cbc601-1128-43a8-9587-150cadca5f52" target="_blank" rel="noopener noreferrer">Road map for security and compliance services in SAP BTP (XP802v)</A><BR /></STRONG>Rakefet Jackoby Galazan and Michael Friedrich lead you through the road map for security, identity and access management, and compliance services in SAP Business Technology Platform (SAP BTP). Learn about upcoming features and enhancements that boost protection, help ensure regulatory alignment, and support more-secure, scalable cloud architectures.</P><P><STRONG><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1751961442238001rPJg" target="_blank" rel="noopener noreferrer">Insider threats: Security versus AI and analytics (CA100v)</A><BR /></STRONG>Insider threats—whether intentional or accidental—continue to challenge organizations, demanding a proactive and adaptive defense strategy. Slim Trabelsi and Chase Kilburn dive into the design of a comprehensive insider threat program that integrates behavioral analytics and AI-driven monitoring to detect and mitigate risks effectively.</P><P><STRONG><A href="https://www.sap.com/events/teched/virtual/flow/sap/tev25/catalog-virtual/page/catalog/session/1751961458248001rPpc" target="_blank" rel="noopener noreferrer">From control to confidence: What’s ahead for security and compliance at SAP (CA815v)</A><BR /></STRONG>Sabrina Himmer and Patrick Boch give an outlook on future security features and tools within SAP Business Suite. Additionally, they dive into the streamlining process for compliance regulations that SAP and SAP Business Suite will adhere to now and in the future.</P><P>Join the <A href="https://pages.community.sap.com/topics/security" target="_blank" rel="noopener noreferrer">SAP Security</A> and the <A href="https://community.sap.com/t5/sap-teched/gh-p/SAP-TechEd-Group" target="_blank">SAP TechEd</A> Communities to stay up to date – and sign up for the monthly <A href="https://www.sap.com/cmp/nl/product-security-newsletter/index.html" target="_blank" rel="noopener noreferrer">SAP Security Newsletter</A> to get all the latest news delivered directly into your inbox!</P>2025-11-14T11:57:51.056000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-secure-your-integration-flows-in-sap-integration-suite/ba-p/14243228How to secure your integration flows in SAP Integration Suite2025-11-18T06:43:54.400000+01:00milan17https://community.sap.com/t5/user/viewprofilepage/user-id/2259433<P>SAP Integration Suite is basically SAP's way of letting you connect everything, from your old-school SAP systems to your cloud apps. Think of it as the super glue holding all your tech together.</P><P>It has tools like:</P><UL><LI>Cloud Integration (CPI) – for creating and handling iFlows</LI><LI>API Management – for handling, and guarding your APIs</LI><LI>Open Connectors – for third party integrations (like Salesforce, Google, etc.)</LI><LI>Integration Advisor – for making B2B connections easier</LI></UL><P>If you're using iFlows to send important business info, security has to be a priority from the get-go.</P><P><STRONG>Why Protecting iFlows Matters</STRONG></P><P>Your iFlows might be sending:</P><UL><LI>Customer info</LI><LI>Financial records</LI><LI>Employee details</LI><LI>Proprietary business logic</LI></UL><P>If those flows aren't secure, you could face:</P><UL><LI>Data leaks</LI><LI>Compliance violations (like GDPR, HIPAA)</LI><LI>System crashes or attacks</LI></UL><P>Unsecured integrations put your business at serious risk.</P><P><STRONG>Key Areas to Focus On</STRONG></P><P>1. Who Gets Access</P><P>Start by making sure only the right people can get to your iFlows.</P><P>I suggest:</P><UL><LI>Using OAuth 2.0 for secure API access with tokens</LI><LI>Using client certificates for connections between systems or B2B stuff</LI></UL><P>Don't:</P><UL><LI>Use basic authentication, especially with hardcoded passwords. If you still are, try to switch ASAP.</LI></UL><P>Also, give people the right roles. Use role-based access control in SAP BTP Cockpit and only give people the access they need.</P><P>2. Keep Things Encrypted</P><P>Use HTTPS with TLS 1.2 or higher for all data transfers.</P><P>For on-premise systems, use SAP Cloud Connector with a list of approved IP addresses and TLS.</P><P>For sensitive payloads, <SPAN>consider message-level encryption or PGP steps within your iFlow.</SPAN></P><P>Avoid saving sensitive data unless you really have to.<SPAN> SAP encrypts data at rest by default</SPAN>, but you should still control what data you keep.</P><P>3. Design with Security in Mind</P><P>Security should be a normal part of your design, not something you add at the end.</P><P>Some good ideas:</P><UL><LI>Check all incoming data (use JSON/XML validator steps)</LI><LI>Clean up inputs used in Groovy or JavaScript</LI><LI><SPAN>Avoid dynamically evaluating user inputs in scripts</SPAN></LI><LI>Use content filters to block or route unwanted messages</LI><LI>Use the Groovy script sandbox to stop access to risky Java classes</LI></UL><P>4. Secure Your APIs</P><P>If you're exposing iFlows as APIs through SAP API Management, make sure to:</P><UL><LI>Use OAuth 2.0 or API key validation</LI><LI>Apply rate limiting and quotas</LI><LI>Enable IP filtering</LI><LI>Check incoming JWTs to maintain identity context</LI><LI>Use threat protection to stop XML/JSON injection attacks</LI></UL><P>5. <SPAN>Monitor</SPAN> and Track Everything</P><P>Enable logging and monitoring to spot problems early.</P><UL><LI>Use SAP Audit Log Service to track changes and access events.</LI><LI>Set up alerts for suspicious activity, like huge payloads or frequent errors.</LI><LI>Use SAP Cloud ALM or integrate with tools like Splunk or Dynatrace to see what's going on.</LI></UL><P>Logs and monitoring are key for fixing problems and proving you're following the rules.</P><P> </P><P><STRONG>A Real World Example</STRONG></P><P>A factory accidentally exposed an iFlow with basic authentication info that was hardcoded. An attacker found it and got into confidential shipping data.</P><P>The problem went on for days because no one was watching or getting alerts.</P><P>The result was a data leak, fines, and a damaged reputation.</P><P>This shows why even small mistakes can lead to big trouble.</P><P><STRONG>Secure DevOps</STRONG></P><P>Security doesn't stop when you deploy.</P><UL><LI>Use SAP Transport Management Service (TMS) to move iFlows across environments with approvals</LI><LI>Keep secrets in the SAP BTP Keystore or Secure Parameter Store</LI><LI>Don't put passwords in scripts or config files</LI><LI>Automate testing, including tests for bad situations and security regression tests</LI></UL><P><STRONG>Identity Propogation</STRONG></P><P>In hybrid integrations, <SPAN>maintaining user identity across systems is important for audit trails and authorization.</SPAN></P><P>Some options:</P><UL><LI>JWT tokens for cloud-based situations</LI><LI>SAML assertions for on-premise SAP systems</LI><LI>OAuth2SAMLBearerAssertion in SAP API Management for secure token exchange</LI></UL><P><STRONG>Threat Modeling</STRONG></P><P>Use the STRIDE model to identify risks in your integration design early:</P><P>1. Spoofing: Use OAuth 2.0, client certificates</P><P>2. Tampering: Use digital signatures, message hashing</P><P>3. Repudiation: Enable and retain audit logs</P><P>4. Information Disclosure: Use TLS, apply data masking</P><P>5. Denial of Service: Apply rate limiting, IP restrictions</P><P>6. Elevation of Privilege: Use role-based access control</P><P><STRONG>Metrics to monitor</STRONG></P><P>Track these things to see how secure you are:</P><UL><LI>Failed login attempts</LI><LI>Outdated or insecure connections</LI><LI>Hardcoded passwords in iFlows</LI><LI>How long it takes to fix problems</LI><LI>Time to react to security alerts</LI></UL><P>Use dashboards or connect to your SIEM tools to stay informed.</P><P><STRONG>Security Checklist</STRONG></P><P>Before you deploy an iFlow, make sure that:</P><P>1. HTTPS and TLS 1.2+ are enforced</P><P>2. Authentication is done with OAuth or certificates</P><P>3. No credentials are stored in scripts</P><P>4. Sensitive data is encrypted or hidden</P><P>5. Role-based access controls are set up</P><P>6. Monitoring and alerts are configured</P><P>7. API throttling and quotas are in place</P><P>8. Input validation and error handling are implemented</P><P><STRONG>Helpful SAP guides:</STRONG></P><P>SAP Integration Suite Security Guide: <A href="https://help.sap.com/docs/integration-suite#operate_task-security" target="_self" rel="noopener noreferrer">https://help.sap.com/docs/integration-suite#operate_task-security</A></P><P>Identity and Access Management:<A href="https://help.sap.com/docs/integration-suite/sap-integration-suite/identity-and-access-management?version=CLOUD" target="_self" rel="noopener noreferrer"> https://help.sap.com/docs/integration-suite/sap-integration-suite/identity-and-access-management?version=CLOUD</A></P><P><STRONG>Final Thoughts</STRONG></P><P>Security is more than just a setting. It's a way of thinking.</P><P>Whether you're building, designing, or taking care of iFlows, make security a daily habit. Check your integrations often. Look at your logs. Fix problems fast.</P><P>Because in today's connected world, your integrations are more than just tech. They're the foundation of your business. Keep them secure.</P>2025-11-18T06:43:54.400000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/project-foxhound-on-the-scent-of-client-side-web-vulnerabilities/ba-p/14272605Project Foxhound - on the Scent of Client-Side Web Vulnerabilities2025-11-19T11:10:41.188000+01:00Fempelhttps://community.sap.com/t5/user/viewprofilepage/user-id/10046<P><SPAN class=""><SPAN class=""><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="logo_foxhound.png" style="width: 200px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342623i26737B2381B0CC35/image-size/small?v=v2&px=200" role="button" title="logo_foxhound.png" alt="logo_foxhound.png" /></span>In this article</SPAN><SPAN class="">,</SPAN><SPAN class=""> we show how the open-source </SPAN></SPAN><A href="https://github.com/SAP/project-foxhound" target="_blank" rel="noopener noreferrer nofollow">Project Foxhound</A><SPAN class=""><SPAN class=""> has evolved </SPAN><SPAN class="">from its </SPAN><SPAN class="">academic </SPAN><SPAN class="">roots </SPAN><SPAN class="">t</SPAN><SPAN class="">o become </SPAN><SPAN class="">the </SPAN></SPAN><A class="" href="https://www.dais.unive.it/~calzavara/papers/www25.pdf" target="_blank" rel="noreferrer noopener nofollow"><SPAN class=""><SPAN class="">best tool</SPAN></SPAN></A><SPAN class=""><SPAN class=""> for discovering client-side security </SPAN><SPAN class="">vulnerabilities. </SPAN></SPAN></P><P><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">The most recent </SPAN><SPAN class="">development on this journey is that </SPAN><SPAN class="">Foxhound </SPAN><SPAN class="">was</SPAN><SPAN class=""> selected to appear as part of </SPAN></SPAN><A class="" href="https://www.blackhat.com/eu-25/arsenal/schedule/#project-foxhound-48440" target="_blank" rel="noreferrer noopener nofollow"><SPAN class=""><SPAN class="">Black Hat Arsenal</SPAN><SPAN class=""> 2025</SPAN></SPAN></A><SPAN class=""><SPAN class=""> in London in December! If you are attending the conference, be sure to check out our demo, where we are hoping to reveal some exciting new features and integrations!</SPAN></SPAN><SPAN class=""> </SPAN></SPAN></SPAN></P><H4 id="toc-hId-2023679887"> </H4><H4 id="toc-hId-1827166382"><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">Background</SPAN></SPAN></SPAN></SPAN></SPAN></H4><P><SPAN>The world-wide-web is one of the most pervasive innovations of the modern age, underpinning communications, banking, education and business. However, programming flaws or misconfigurations can cause security vulnerabilities, exposing the systems and their data to malicious attackers. According to a recent report from IBM, the </SPAN><A href="https://www.ibm.com/reports/data-breach" target="_blank" rel="noopener nofollow noreferrer"><SPAN>average cost</SPAN></A><SPAN> of a Cybersecurity data breach is $4.4M.</SPAN><SPAN> </SPAN></P><P><SPAN>In recent years, web applications have seen a paradigm shift from on-premise, monolithic server applications, to heterogeneous collections of cloud-based microservices. As such, much of the application logic has shifted from the server to the client, with program logic running as JavaScript code in a user's browser. This shift has brought with it new classes of client-side (or DOM-based) web vulnerabilities, for example:</SPAN><SPAN> </SPAN></P><UL class="lia-list-style-type-disc"><LI><SPAN>Client-Side Cross-Site Scripting (XSS)</SPAN><SPAN> </SPAN></LI><LI><SPAN>Client-Side Cross-Site Request Forgery (CSRF)</SPAN><SPAN> </SPAN></LI><LI><SPAN>Request Hijacking</SPAN><SPAN> </SPAN></LI><LI><SPAN>Markup Injection</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>Most state-of-the-art tools, however, are still focused on detection of their server-side counterparts (such as reflected XSS). Hunting for client-side issues, remains a manual effort, requiring time-intensive and costly penetration tests.</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="image (8).png" style="width: 729px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342604i0E33F8E07828D261/image-dimensions/729x189?v=v2" width="729" height="189" role="button" title="image (8).png" alt="image (8).png" /></span></P><P><EM> Figure 1: JavaScript vulnerable to client-side XSS</EM></P><H4 id="toc-hId-1630652877"> </H4><H4 id="toc-hId-1434139372"><SPAN><SPAN class="">Project </SPAN><SPAN class="">Foxhound</SPAN></SPAN></H4><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="foxhound quote.png" style="width: 651px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342600i4D673F5B9208373D/image-dimensions/651x250?v=v2" width="651" height="250" role="button" title="foxhound quote.png" alt="foxhound quote.png" /></span></P><P><SPAN class="">This is </SPAN><SPAN class="">where project</SPAN><SPAN class=""> Foxhound come</SPAN><SPAN class="">s</SPAN><SPAN class=""> in </SPAN><SPAN class="">–</SPAN> <SPAN class="">providing </SPAN><SPAN class="">a state-of-the-art</SPAN><SPAN class=""> framework for the detection of client-side web application vulnerabilities. It has seen a wide range of proven </SPAN><SPAN class="">use-cases</SPAN><SPAN class="">, from academic studies to industrial-scale dynamic testing and even education.</SPAN></P><H4 id="toc-hId-1237625867"><STRONG><SPAN class=""><SPAN class=""><SPAN class=""><SPAN class="">Features</SPAN></SPAN></SPAN></SPAN></STRONG></H4><P><SPAN>Foxhound is a modified web browser based on Firefox with the following enhancements:</SPAN><SPAN> </SPAN></P><UL class="lia-list-style-type-disc"><LI><SPAN>An instrumented JavaScript engine and content model to track insecure data-flows using dynamic taint-tracking. </SPAN><SPAN> </SPAN></LI><LI><SPAN>Taint tracking makes it possible to automatically detect client-side vulnerabilities by </SPAN><I><SPAN>tainting</SPAN></I><SPAN> certain attacker-controlled strings, e.g., </SPAN><SPAN>location.hash</SPAN><SPAN>, and notifying the user when tainted data reaches a sensitive sink, e.g., </SPAN><SPAN>eval()</SPAN><SPAN> or </SPAN><SPAN>.innerHTML</SPAN><SPAN>.</SPAN><SPAN> </SPAN></LI><LI><SPAN>Foxhound also tracks a history of operations performed on the string at runtime, allowing automatic detection of potential input sanitization which essentially reduces false positives.</SPAN><SPAN> </SPAN></LI><LI><SPAN>Integration with popular browser automation frameworks, such as Selenium and Playwright. </SPAN><SPAN> </SPAN></LI></UL><H4 id="toc-hId-1041112362"><SPAN><SPAN class=""><SPAN class="">History</SPAN></SPAN><SPAN class=""> </SPAN></SPAN></H4><P><SPAN>The technology for Foxhound was conceived at SAP Security Research </SPAN><A href="https://swag.cispa.saarland/papers/lekies2013flows.pdf" target="_blank" rel="noopener nofollow noreferrer"><SPAN>back in 2013</SPAN></A><SPAN>, where it was successfully used to discover that at least 10% of web applications are vulnerable to cross-site scripting. This paper spawned multiple follow-ups, with many research groups implementing their own instrumented browsers, which is not a trivial task!</SPAN><SPAN> </SPAN></P><P><SPAN>We saw the need in the community for an open-source, up-to-date tool for teams to use as a platform for their own research. This gap was the main inspiration to open-source our implementation, which was released in 2022 – and Foxhound was born! </SPAN><SPAN> </SPAN></P><P><SPAN>Since then, the Foxhound community has grown from the initial founders at SAP and the <A href="https://www.tu-braunschweig.de/en/ias" target="_self" rel="nofollow noopener noreferrer">University of Braunschweig</A> and is currently in use by groups at CISPA (Germany), Waterloo (Canada), and Venice (Italy). With the support of the SAP Open Source team, the project has evolved and matured, appearing in podcasts, at conferences, and even has a new logo!</SPAN><SPAN> </SPAN></P><P><SPAN>Foxhound has also proven its worth in industry, with SAP using it to dynamically test UI5 applications since 2023 as part of the </SPAN><A href="https://www.csoonline.com/article/3541180/sap-se-revamps-application-security-scanning-using-simulation-and-automation-2.html" target="_blank" rel="noopener nofollow noreferrer"><SPAN>award-winning FioriDAST tool</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></P><H4 id="toc-hId-844598857"><SPAN><SPAN class=""><SPAN class="">Why Foxhound?!</SPAN></SPAN><SPAN class=""> </SPAN></SPAN></H4><P><SPAN>Foxhound offers several advantages over existing tools and techniques to outperform the competition. Firstly, as Foxhound uses dynamic testing, it benefits from lower false positives and higher accuracy compared to static analysis techniques. Secondly, Foxhound is non-invasive and does not require actively probing an application with potentially harmful and inaccurate payloads.</SPAN><SPAN> </SPAN></P><P><SPAN>In fact, </SPAN><A href="https://www.dais.unive.it/~calzavara/papers/www25.pdf" target="_blank" rel="noopener nofollow noreferrer"><SPAN>a recent independent academic study</SPAN></A><SPAN> found that Foxhound was the best tool for dynamic JavaScript analysis. To quote the paper: </SPAN><I><SPAN>"the only effective solution given the current state of the art is Project Foxhound."</SPAN></I><SPAN> </SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="undefined.png" style="width: 903px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342602i30D606B450364532/image-size/large?v=v2&px=999" role="button" title="undefined.png" alt="undefined.png" /></span></SPAN></P><P><EM> <SPAN class=""><SPAN class="">Figure </SPAN></SPAN><SPAN class=""><SPAN class=""><SPAN class="">2</SPAN></SPAN></SPAN><SPAN class=""><SPAN class="">: Foxhound hard at work detecting </SPAN><SPAN class="">a cross-site scripting vulnerability at </SPAN></SPAN><A class="" href="https://domgo.at/" target="_blank" rel="noreferrer noopener nofollow"><SPAN class=""><SPAN class="">https://domgo.at</SPAN></SPAN></A><SPAN class=""><SPAN class=""> </SPAN></SPAN><SPAN class=""> </SPAN></EM></P><H4 id="toc-hId-648085352"> </H4><H4 id="toc-hId-451571847"><SPAN><SPAN class=""><SPAN class="">Find out More</SPAN></SPAN><SPAN class=""> </SPAN></SPAN></H4><P><SPAN>The next opportunity to experience Foxhound live and meet the team in person will be at </SPAN><A href="https://www.blackhat.com/eu-25/arsenal/schedule/#project-foxhound-48440" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Black Hat Europe</SPAN></A><SPAN>, where Foxhound has been selected to appear as part of the Arsenal program. So be sure to pass by our booth to check out the latest features!</SPAN><SPAN> </SPAN></P><P><SPAN>If you can’t make it to Black Hat, but are still interested in the project, check out the following links:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>The best place to find out more is on our </SPAN><A href="https://github.com/SAP/project-foxhound" target="_blank" rel="noopener nofollow noreferrer"><SPAN>GitHub repository</SPAN></A><SPAN> where we also manage development via issues and pull requests and actions.</SPAN><SPAN> </SPAN></LI><LI><SPAN>Binaries for selected platforms are provided by the University of Braunschweig on a </SPAN><A href="https://foxhound.ias.tu-bs.de/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>dedicated server</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></LI><LI><SPAN>More resources include </SPAN><A href="https://github.com/SAP/project-foxhound/wiki/Publications" target="_blank" rel="noopener nofollow noreferrer"><SPAN>academic papers</SPAN></A><SPAN>, talks at </SPAN><A href="https://youtu.be/iZ8F1h51zas?feature=shared" target="_blank" rel="noopener nofollow noreferrer"><SPAN>IEEE S&P 2025</SPAN></A><SPAN> and the </SPAN><A href="https://media.ccc.de/v/god2024-56282-protecting-web-application" target="_blank" rel="noopener nofollow noreferrer"><SPAN>German OWASP day,</SPAN></A><SPAN> and even a </SPAN><A href="https://podcast.opensap.info/open-source-way/2023/10/25/project-foxhound-hunting-cross-site-scripting-on-the-web/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Podcast</SPAN></A><SPAN>!</SPAN><SPAN> </SPAN></LI></UL><P><STRONG>Authors of this Article</STRONG></P><UL><LI><SPAN>Thomas Barber, Product Security Expert, SAP BTP</SPAN></LI><LI><SPAN>Ulrike Fempel, SAP Open Source Program Office</SPAN></LI></UL>2025-11-19T11:10:41.188000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/accessing-btp-user-security-using-apis-of-the-sap-authorization-and-trust/ba-p/14269047Accessing BTP User Security Using APIs of the SAP Authorization and Trust Management Service2025-11-19T11:59:58.410000+01:00sheldondes0uzahttps://community.sap.com/t5/user/viewprofilepage/user-id/820631<H2 id="toc-hId-1764793825">Introduction</H2><P>Identity and Access Management lies at the core of an organization's Digital infrastructure. In SAP's BTP ecosystem, identities are provisioned in SAP Identity Services and roles are granted in BTP. </P><P>This blog aims to capture my learnings during my investigations to fetch Users and their assigned roles in BTP using APIs, which then can be later read to an Organization's IAM system for User lifecycle management.</P><P>I am targeting this API call to the BTP subaccount rather than the SAP IAS tenant as we were looking to not only interested in fetching the users in BTP but the assigned BTP roles as well.</P><H2 id="toc-hId-1568280320">Pre-requisite</H2><P>You have BTP CLI installed. If not, you can download and install following the instructions from <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/download-and-start-using-btp-cli-client" target="_blank" rel="noopener noreferrer">Download and Start Using the btp CLI Client | SAP Help Portal</A></P><H2 id="toc-hId-1371766815">Create a credential for API access</H2><P>Create a credential to call <SPAN>he REST APIs of the SAP Authorization and Trust Management service. Credentials can be created on global account, subaccount, or directory level.</SPAN></P><P><SPAN>Log in to your BTP global account. Your first login takes you into a global account, and all your commands are executed on a global account level. In my case, I would like my commands to be executed on a specific subaccount, so do so by using the <FONT face="courier new,courier" color="#0000FF">"btp target"</FONT> command.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="btp cli login" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342089i7514F4B6002C19A3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-11-14 095006.png" alt="btp cli login" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">btp cli login</span></span></SPAN></P><P> </P><P> </P><P> </P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="btp target" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342092iA858688017D4E7E0/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-11-14 100853.png" alt="btp target" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">btp target</span></span>Once you are in the desired BTP target, create the api-credential using command <FONT face="courier new,courier" color="#0000FF"><SPAN>btp create security/api-credential --name my-credential</SPAN></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Screenshot 2025-11-14 105058.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/342093i9C1F3B1594A2D31B/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Screenshot 2025-11-14 105058.png" alt="Screenshot 2025-11-14 105058.png" /></span></P><P>Store the these details in a secure location or password manager, as you will not be able to retrieve the client ID & secret later.</P><H2 id="toc-hId-1175253310">Call the API</H2><P>We will test the API using Postman</P><P><SPAN>We can use the different endpoints of the <SPAN class="">SAP Authorization and Trust Management service</SPAN> APIs to manage users roles and other authorization configurations</SPAN></P><DIV class=""><P><SPAN>Actually, we need two separate URLs. First, you need the token URL to fetch an access token. Next, you can use the API URL to call an API.</SPAN></P></DIV><P class="">To call an API of the<SPAN> </SPAN><SPAN class="">SAP Authorization and Trust Management service</SPAN>, you need an access token. See the following example how to retrieve an access token and how to call an endpoint with GET request</P><P class="">Configure postman to request a token from the OAuth authorization server</P><P class="">Create a new collection from template "REST API basics". In the POST call, add the Token URL from the create API credential step. Add the below parameter to the post call.</P><TABLE border="1" width="44.444145595521576%"><TBODY><TR><TD width="33.333333333333336%"><STRONG>Key</STRONG></TD><TD width="33.333333333333336%"><STRONG>Value</STRONG></TD></TR><TR><TD width="33.333333333333336%">grant_type</TD><TD width="33.333333333333336%">client_credentials</TD></TR></TBODY></TABLE><P>In the Authorization tab, select Auth Type "Basic Auth". In the Username & Password fields, enter the client ID & secret.\</P><P>Once you click send, t<SPAN>he authorization server returns a token along with other related information</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sheldondes0uza58_4-1763116702310.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340627iF7A8825A91678DDF/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="sheldondes0uza58_4-1763116702310.png" alt="sheldondes0uza58_4-1763116702310.png" /></span></P><P>We can now use the value of this access_token<SPAN> property to make calls to the various API endpoints</SPAN></P><P><SPAN>With a GET request, we can now call the API end point to request the list of users and their details. With the Auth type selected to "Bearer Token" and paste the Token we received from the above step.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sheldondes0uza58_5-1763117183777.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340634i4B8E2807178D6004/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="sheldondes0uza58_5-1763117183777.png" alt="sheldondes0uza58_5-1763117183777.png" /></span></P><P>You can refer to <A href="https://api.sap.com/api/PlatformAPI/tryout" target="_blank" rel="noopener noreferrer">Try Out | User Management (System for Cross-domain Identity Management (SCIM)) | SAP Business Accelerator Hub </A>for other API endpoints for User Management.</P><H2 id="toc-hId-978739805">Conclusion</H2><P>To summarize, this blog's main goal was to document my learnings for a niche request where we would need to fetch a BTP subaccount User list and their assigned roles in BTP. I have used postman for testing the API calls for the purpose of this demonstration, but for a production scenario the 3rd party IAM system can connect to the BTP subaccount security in the same way. As I mentioned in the Introduction, I am targeting this API call to the BTP subaccount rather than the SAP IAS tenant as we were looking to not only interested in fetching the users in BTP but the assigned BTP roles as well. Hence, Ideally for user provision and management we can use another set of API calls targeting the SAP IAS Tenant</P><P>Based on interest, I may create another blog with steps for API calls to SAP IAS tenant for User Provisioning. Tenant management etc.</P><P> </P><P> </P>2025-11-19T11:59:58.410000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684Introducing Application Vulnerability Report for Cloudfoundry Applications – Try It Now!2025-12-02T08:25:25.852000+01:00Yoganandahttps://community.sap.com/t5/user/viewprofilepage/user-id/75<TABLE border="1" width="100%"><TBODY><TR><TD width="100%"><P class="lia-align-center" style="text-align: center;"><FONT color="#993300"><STRONG>Application Vulnerability Report Service is currently in Beta Phase <BR />Try it out and provide feedback on your observations<BR />SAP Technical Support Ticket Component : <FONT color="#0000FF">BC-CP-SEC-AVR</FONT></STRONG></FONT></P></TD></TR></TBODY></TABLE><H3 id="toc-hId-1895491145"><STRONG>What Is Application Vulnerability Report?</STRONG></H3><P>Security is a top priority in today’s digital landscape, especially when applications rely heavily on open-source components. These components, while powerful and cost-effective, often come with publicly known vulnerabilities that can put your business data at risk.</P><P>The <STRONG>Application Vulnerability Report</STRONG> is a newly introduced feature for <STRONG>SAP Business Technology Platform (BTP)</STRONG> services that helps you <STRONG>detect and remediate vulnerabilities in your Cloud Foundry applications</STRONG>. This tool scans your application for known security issues based on <STRONG>Common Vulnerabilities and Exposures (CVEs)</STRONG>, ensuring that you stay ahead of potential threats.<BR /><BR /><STRONG>Currently in Beta Phase and available in eu-10 region</STRONG>.. Once Beta Phase is completed.. roll-out to other regions are expected in Q1 or Q2 2026.</P><H3 id="toc-hId-1698977640"><FONT color="#FF6600">How to enable in your tenant ?</FONT></H3><P><STRONG>Go to Entitlements in your SAP BTP Sub-account to add <FONT color="#800080">Application Vulnerability Report</FONT> to add the plans</STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_07-58-18.png" style="width: 872px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347349i7738C4E67E3A7A98/image-size/large?v=v2&px=999" role="button" title="2025-12-02_07-58-18.png" alt="2025-12-02_07-58-18.png" /></span></P><H3 id="toc-hId-1502464135">Service Marketplace</H3><P><SPAN>Search for </SPAN><SPAN class="">application-vulnerability-report-service</SPAN><SPAN> in the SAP BTP </SPAN><SPAN class="">Service Marketplace </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_07-59-10.png" style="width: 896px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347351iFA4CF76136F80CA0/image-size/large?v=v2&px=999" role="button" title="2025-12-02_07-59-10.png" alt="2025-12-02_07-59-10.png" /></span></P><H3 id="toc-hId-1305950630">Create Instance in your Cloud Foundry space</H3><UL><LI>Go to your Cloud Foundry Space (example : Dev, UAT, TST...etc)</LI><LI>Create a new Instance for <STRONG>Application Vulnerability Report</STRONG> with default plan</LI><LI>Provide a Instance Name</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_08-32-48.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347352i842A08BDE0279914/image-size/large?v=v2&px=999" role="button" title="2025-12-02_08-32-48.png" alt="2025-12-02_08-32-48.png" /></span></P><H3 id="toc-hId-1109437125"><SPAN>Create Service Key</SPAN></H3><UL><LI><SPAN>Create a New Service Key for API Access</SPAN></LI></UL><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_08-34-24.png" style="width: 824px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347353i27C3C5AE2AFC001C/image-size/large?v=v2&px=999" role="button" title="2025-12-02_08-34-24.png" alt="2025-12-02_08-34-24.png" /></span></SPAN></P><H3 id="allow-the-user-to-access-the-space" id="toc-hId-912923620"><SPAN>Allow the User to Access the Space</SPAN></H3><P><SPAN>You need to manually add the application-vulnerability-report-scanner@sap.com user to your Cloud Foundry space. This enables the <SPAN class="">application vulnerability report</SPAN> to download the droplets of the respective applications and scan them accordingly.</SPAN></P><OL><LI>Log on to the CF space that you want to scan.</LI><LI>Select the<SPAN> </SPAN><SPAN class="">Space Members</SPAN><SPAN> </SPAN>tab and choose<SPAN> </SPAN><SPAN class="">Add Member</SPAN>.</LI><LI>Enter the<SPAN> </SPAN>application-vulnerability-report-scanner@sap.com<SPAN> </SPAN>user and assign the<SPAN> </SPAN><SPAN class="">Space Auditor</SPAN><SPAN> </SPAN>role to it.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_08-41-38.png" style="width: 956px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347355i171C8D88B9EADC90/image-size/large?v=v2&px=999" role="button" title="2025-12-02_08-41-38.png" alt="2025-12-02_08-41-38.png" /></span></P><H3 id="toc-hId-716410115"><STRONG>Why Is This Important?</STRONG></H3><P>Open-source vulnerabilities are one of the most frequent security challenges in modern application development. Attackers are quick to exploit these weaknesses, and failing to address them promptly can lead to severe consequences, including data breaches and compliance violations.</P><P>By using the Application Vulnerability Report, you can:</P><UL><LI><STRONG>Identify vulnerabilities early</STRONG> in your application lifecycle.</LI><LI><STRONG>Understand the severity</STRONG> of each issue based on CVE data.</LI><LI><STRONG>Take corrective actions quickly</STRONG> to secure your SAP BTP landscape.</LI></UL><H3 id="toc-hId-519896610"> </H3><H3 id="toc-hId-323383105"><FONT color="#800080"><SPAN class="">Application Vulnerability Report</SPAN><SPAN> - Process overview</SPAN></FONT></H3><P><FONT color="#000000"><SPAN>The <SPAN class="">application vulnerability report</SPAN> supports you in the detection of vulnerabilities in custom applications during runtime. Instead of a shift-left support approach during pipeline runs, this service provides security-relevant information for what has already been deployed (and maybe forgotten). The service scans the applications using a proprietary scanning layer that utilizes open-source scanners such as Open Source Vulnerabilities (OSV) and trivy, as well as custom SAP BTP-specific and 0-day exploit targeted scanners. This unique combination offers a very broad and up-to-date coverage of vulnerabilities in your applications. By using an API, you can integrate the report data into your incident and security workflow.</SPAN></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="jpeg (1)1764659722.png" style="width: 666px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347350iF7393CD884DAB60E/image-size/large?v=v2&px=999" role="button" title="jpeg (1)1764659722.png" alt="jpeg (1)1764659722.png" /></span></P><H3 id="toc-hId-126869600"><FONT color="#FF00FF">Overview of the each Process flow</FONT></H3><H4 id="toc-hId--438278281"><STRONG>1. Applications Running on SAP BTP</STRONG></H4><UL><LI>This is the starting point.</LI><LI>It includes all your <STRONG>Cloud Foundry applications</STRONG> deployed on SAP Business Technology Platform.</LI><LI>Example : CAP, Python, Javascript, Java, Go, Dot-Net... any programming languages those are deployed in your Space.. (This also includes NPM Libraries, Pip libraries or any libraries which are consumed in your applications)</LI><LI>These applications often use <STRONG>open-source libraries and packages</STRONG>, which can have vulnerabilities.</LI></UL><HR /><H4 id="toc-hId--634791786"><STRONG>2. Scanning Layer</STRONG></H4><P>This layer performs the <STRONG>security scans</STRONG> on your applications. It's currently runs weekly scan. It consists of multiple scanning sources:</P><UL><LI><P><FONT color="#FF00FF"><STRONG>Commercial</STRONG></FONT><BR />Uses commercial vulnerability databases and tools to identify known issues.</P></LI><LI><P><FONT color="#FF00FF"><STRONG>Trivy/OSV</STRONG></FONT><BR /><STRONG>Trivy</STRONG> is an open-source vulnerability scanner, and <STRONG>OSV</STRONG> (Open Source Vulnerabilities) is a database of vulnerabilities in open-source software.<BR />These help detect issues in widely used open-source components.</P></LI><LI><P><FONT color="#FF00FF"><STRONG>BTP Specific</STRONG></FONT><BR />Scans for vulnerabilities specific to <STRONG>SAP BTP services and configurations</STRONG>, ensuring platform-level security.</P></LI><LI><P><FONT color="#FF00FF"><STRONG>0 Day</STRONG></FONT><BR />Focuses on <STRONG>zero-day vulnerabilities</STRONG>, which are newly discovered and not yet patched.<BR />These are critical because attackers often exploit them quickly.</P></LI></UL><HR /><H4 id="toc-hId--831305291"><STRONG>3. Application Vulnerability Report for SAP BTP</STRONG></H4><UL><LI>After scanning, all findings are consolidated into a <STRONG>single report</STRONG>.</LI><LI>This report provides:<UL><LI><STRONG>List of vulnerabilities</STRONG></LI><LI><STRONG>Severity levels</STRONG></LI><LI><STRONG>Recommendations for remediation</STRONG></LI></UL></LI><LI>It acts as a <STRONG>centralized dashboard</STRONG> for security insights.</LI></UL><HR /><H4 id="toc-hId--1027818796"><STRONG>4. API for Customers</STRONG></H4><UL><LI>Customers can <STRONG>access the report via API</STRONG>.</LI><LI>This allows integration with:<UL><LI><STRONG>Security dashboards</STRONG></LI><LI><STRONG>CI/CD pipelines</STRONG></LI><LI><STRONG>Monitoring tools</STRONG></LI></UL></LI><LI>Ensures automation and continuous security checks.</LI></UL><HR /><H4 id="toc-hId--1224332301"><STRONG>5. Customers</STRONG></H4><UL><LI>End-users (developers, security teams) consume the report and take <STRONG>corrective actions</STRONG> to secure applications.</LI></UL><P> </P><H4 id="toc-hId--1420845806"><FONT color="#FF00FF">Technical Usage</FONT><BR /><BR />How to get findings of your deployed CF applications running.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-02_09-43-39.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347367i3495E311BCED4211/image-size/large?v=v2&px=999" role="button" title="2025-12-02_09-43-39.png" alt="2025-12-02_09-43-39.png" /></span></H4><P><STRONG>Example : Scanned Finding Report</STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2025-12-03_09-06-34.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/347835i8D868D2DC99AE3FB/image-size/large?v=v2&px=999" role="button" title="2025-12-03_09-06-34.png" alt="2025-12-03_09-06-34.png" /></span></P><P> </P><H3 id="toc-hId--1323956304">Reference:</H3><UL><LI><A href="https://help.sap.com/docs/application-vulnerability-report/application-vulnerability-report-e02c6e1a86544ce981810c8c8a12e750/initial-setup" target="_self" rel="noopener noreferrer">Initial Setup Process</A></LI><LI><A href="https://help.sap.com/docs/application-vulnerability-report/application-vulnerability-report-e02c6e1a86544ce981810c8c8a12e750/authentication" target="_self" rel="noopener noreferrer">Authentication Process</A></LI><LI><A href="https://help.sap.com/docs/application-vulnerability-report/application-vulnerability-report-e02c6e1a86544ce981810c8c8a12e750/auditing-and-logging-information" target="_self" rel="noopener noreferrer">Audit Logging Process</A></LI><LI><A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800006073&range=CURRENT-LAST" target="_self" rel="noopener noreferrer">Roadmap for AVR</A></LI></UL><H3 id="toc-hId--1520469809">External resource:</H3><UL><LI><A href="https://osv.dev/" target="_self" rel="nofollow noopener noreferrer">OSV database </A></LI></UL>2025-12-02T08:25:25.852000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/securing-cap-applications-with-sap-cloud-identity-services-and-ams/ba-p/14283492Securing CAP Applications with SAP Cloud Identity Services and AMS2025-12-04T05:52:08.244000+01:00gopalanandhttps://community.sap.com/t5/user/viewprofilepage/user-id/126694<H2 id="toc-hId-1766466115">Introduction</H2><P>SAP Cloud Identity Services are a group of services of SAP Business Technology Platform (SAP BTP), which enable you to integrate identity and access management between systems. SAP Cloud Identity Services is the central solution for managing authentication, Single Sign-On (SSO), and the identity lifecycle. They improve system integration, provide a seamless user experience, and enhance security and compliance.</P><P>The SAP Cloud Identity Services consists of four services:</P><UL><LI><A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/scenarios" target="_blank" rel="noopener noreferrer">Identity Authentication</A></LI><LI><A href="https://help.sap.com/docs/identity-provisioning/identity-provisioning/bundle-tenants-and-connectors?version=Cloud#how-to-use-bundle-tenants" target="_blank" rel="noopener noreferrer">Identity Provisioning</A></LI><LI><A href="https://help.sap.com/docs/identity-provisioning/identity-provisioning/local-identity-directory?version=Cloud" target="_blank" rel="noopener noreferrer">Identity Directory</A></LI><LI><A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/configuring-authorization-policies?version=Cloud" target="_blank" rel="noopener noreferrer">Authorization Management</A></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="SCI1.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/348299i11F9B8ACD7FAB329/image-size/medium?v=v2&px=400" role="button" title="SCI1.png" alt="SCI1.png" /></span></P><P> </P><P> </P><P> </P><P> </P><P> </P><DIV class=""><H4 id="toc-hId-1828118048">Authorization Management Service(AMS) and CAP</H4></DIV><P>The Authorization Management Service (AMS), as part of SAP Cloud Identity Services (SCI), provides libraries and services for developers of cloud business applications to declare, enforce and manage instance-based authorization checks. When used together with CAP the AMS "Policies” can contain the CAP roles as well as additional filter criteria, for instance, based authorizations that can be defined in the CAP model. transformed to AMS policies and later on refined by customer users and authorization administrators in the SCI administration console, and assigned to business users.</P><DIV class=""><H3 id="toc-hId-1502521824">Use AMS as Authorization Management System on SAP BTP</H3></DIV><P>For newly built applications, the usage of AMS is generally recommended. The only constraint that comes with the usage of AMS is that customers need to copy their users to the Identity Directory Service as the central place to manage users for SAP BTP applications. This is also the general SAP strategy to simplify user management in the future.</P><DIV class=""><H3 id="toc-hId-1306008319">CDS-Based Authorization</H3></DIV><P>Authorization means restricting access to data by adding respective declarations to CDS models, which are then enforced in service implementations. By adding such declarations, we essentially revoke all default access and then grant individual privileges.</P><P><A href="https://cap.cloud.sap/docs/guides/security/authorization#cds-based-authorization" target="_blank" rel="nofollow noopener noreferrer">Read More about CDS-based Authorization</A></P><H2 id="toc-hId-980412095">Solution Diagram</H2><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="ias-ams-solutionDiagram.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/348300iE54AE1D577E932D2/image-size/medium?v=v2&px=400" role="button" title="ias-ams-solutionDiagram.png" alt="ias-ams-solutionDiagram.png" /></span></P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><H2 id="toc-hId-783898590">Integrate With the Authorization Management Service into CAP Application</H2><P><SPAN>CAP is tightly integrated with Authorization Management Service (AMS). Applications that run with IAS-based authentication can benefit from AMS, which allows central access to policy management at the business level. The integration with AMS comes as an easy-to-consume plug-in for CAP applications.</SPAN></P><P>The following section describes how to integrate your CAP application with the Authorization Management Service (AMS) using SAP Cloud Identity Service(IAS) as the identity provider.</P><P>You will be using<SPAN> </SPAN><CODE>cds add ams</CODE><SPAN> </SPAN>command to add the necessary dependencies and configurations to your CAP project.</P><P>The<SPAN> </SPAN><CODE>cds add ams</CODE><SPAN> </SPAN>automatically adds required configuration for IAS/AMS, considering the concrete application context (tenant mode and runtime environment, and so on).</P><UL><LI><CODE>cds add ias</CODE><SPAN> </SPAN>- adds configuration for authentication via IAS</LI><LI><CODE>cds add ams</CODE><SPAN> </SPAN>- adds configuration for authorization via AMS</LI></UL><DIV class=""><DIV class=""><H2 id="toc-hId-587385085">Configure AMS Integration in CAP Application</H2><P>For this blog, I will be using Incident Management Applicaiton: <A href="https://github.com/SAP-samples/incidents-app" target="_blank" rel="noopener nofollow noreferrer">https://github.com/SAP-samples/incidents-app</A> </P><P><SPAN>Execute the following command to add IAS and AMS configuration and dependencies to your project:</SPAN></P></DIV><DIV class=""><PRE>cds add ams</PRE></DIV><P>Install the added dependencies:</P><DIV class=""><PRE>npm i</PRE><DIV class=""><P>Build the project:</P><DIV class=""><PRE>cds build --production</PRE><DIV class=""> </DIV><DIV class=""><SPAN>The build command generates the DCL files in the</SPAN><SPAN> </SPAN><CODE>ams/dcl/cap/basePolicies.dcl</CODE><SPAN> </SPAN><SPAN>and</SPAN><SPAN> </SPAN><CODE>gen/policies/dcl/cap/basePolicies.dcl</CODE><SPAN> </SPAN><SPAN>folder. The generated policies will look like this:</SPAN></DIV></DIV><DIV class=""><PRE><SPAN class="">POLICY</SPAN> <SPAN class="">"admin"</SPAN> {
<SPAN class="">ASSIGN</SPAN> <SPAN class="">ROLE</SPAN> <SPAN class="">"admin"</SPAN>;
}
<SPAN class="">POLICY</SPAN> <SPAN class="">"support"</SPAN> {
<SPAN class="">ASSIGN</SPAN> <SPAN class="">ROLE</SPAN> <SPAN class="">"support"</SPAN>;
}</PRE><DIV class=""><P>The roles defined in<SPAN> </SPAN><CODE>processor-service.cds</CODE><SPAN> </SPAN>-><SPAN> </SPAN><CODE>annotate ProcessorService with @(requires: 'support');</CODE><SPAN> </SPAN>has the corresponding policy<SPAN> </SPAN><CODE>support</CODE><SPAN> </SPAN>generated in the DCL file. Similarly, the<SPAN> </SPAN><CODE>admin</CODE><SPAN> </SPAN>role is also generated.</P><P>Now, you can see that in<SPAN> </SPAN><CODE>gen/srv/ams/dcl/cap/basePolicies.dcl</CODE><SPAN> </SPAN>a policy<SPAN> </SPAN><CODE>support</CODE><SPAN> </SPAN>is generated. A user with the policy<SPAN> </SPAN><CODE>cap.support</CODE><SPAN> </SPAN>can view and update the Incidents.</P><H2 id="toc-hId-390871580">Configure Users for Local Testing</H2><P> <SPAN>The authorization checks that you added to the CAP model apply not only when deployed to the cloud but also for local testing. Therefore, we need a way to log in to the application locally. To test it, </SPAN><STRONG>let's first add a wrong policy</STRONG><SPAN> to the user </SPAN><CODE>alice</CODE><SPAN>, to access incidents, support role is required, so we will assign the </SPAN><CODE>admin</CODE><SPAN> policy to the user </SPAN><CODE>alice</CODE><SPAN> to see the authorization error:</SPAN></P><P>Update the following configurations for the<SPAN> </SPAN><CODE>users</CODE><SPAN> </SPAN>in the<SPAN> </SPAN><CODE>package.json</CODE><SPAN> </SPAN>with the following code:</P><DIV class=""><PRE><SPAN class="">"users"</SPAN>: {
<SPAN class="">"alice"</SPAN>: {
<SPAN class="">"policies"</SPAN> : [
<SPAN class=""><SPAN class="">"</SPAN>cap.admin<SPAN class="">"</SPAN></SPAN>
]
},
<SPAN class="">"bob"</SPAN>: {
}
}</PRE></DIV></DIV></DIV></DIV></DIV></DIV><P>Open the application in your browser<SPAN> </SPAN><CODE><A href="http://localhost:4004/webapp/incidents" target="_blank" rel="noopener nofollow noreferrer">http://localhost:4004/webapp/incidents</A></CODE><SPAN> </SPAN>and log in with<SPAN> </SPAN><CODE>username</CODE><SPAN> </SPAN>as<SPAN> </SPAN><CODE>alice</CODE>, leave the<SPAN> </SPAN><CODE>password</CODE><SPAN> </SPAN>field<SPAN> </SPAN><CODE>empty</CODE>.</P><P><SPAN>You should see an authorization error when trying to access the Incidents application because the user </SPAN><CODE>alice</CODE><SPAN> has the </SPAN><CODE>admin</CODE><SPAN> policy assigned, which does not allow access to the Incidents service.</SPAN></P><PRE>[error] - 403 - Error: Forbidden
at requires_check (/Users/xxxxxxxxxxx/incidents-app/node_modules/@sap/cds/lib/srv/protocols/http.js:54:32)
at http_log (/Users/I329347/Coding/Dev-GuideQ4/incidents-app/node_modules/@sap/cds/lib/srv/protocols/http.js:42:59) {
code: <SPAN class=""><SPAN class="">'</SPAN>403<SPAN class="">'</SPAN></SPAN>,
reason: <SPAN class=""><SPAN class="">"</SPAN>User 'alice' is lacking required roles: [support]<SPAN class="">"</SPAN></SPAN>,
user: User {
id: <SPAN class=""><SPAN class="">'</SPAN>alice<SPAN class="">'</SPAN></SPAN>,
roles: { admin: 1 },
policies: [ <SPAN class=""><SPAN class="">'</SPAN>admin<SPAN class="">'</SPAN></SPAN> ],
authInfo: IdentityServiceSecurityContext { config: {} },
is: [Function (anonymous)],
amsRoles: [],
[Symbol(AMS_AUTHORIZATIONS)]: Authorizations {
ams: [AuthorizationManagementService],
policySet: [Object],
context: [EventContext],
correlation_id: <SPAN class=""><SPAN class="">'</SPAN>c9f8470e-59a5-xxxxx-9af8-8f5ed57a785b<SPAN class="">'</SPAN></SPAN>,
defaultInput: [Object],
authorizationLimits: []
}
},
required: [ <SPAN class=""><SPAN class="">'</SPAN>support<SPAN class="">'</SPAN></SPAN> ]
}</PRE><P><SPAN>This shows that the AMS integration is working correctly, as the user </SPAN><CODE>alice</CODE><SPAN> is missing the required </SPAN><CODE>support</CODE><SPAN> role to access the Incidents service.</SPAN></P><P>Update the user<SPAN> </SPAN><CODE>alice</CODE><SPAN> </SPAN>in the<SPAN> </SPAN><CODE>package.json</CODE><SPAN> </SPAN>to assign the correct policy and test, you should be able to access the Incidents application:</P><DIV class=""><PRE><SPAN class="">"users"</SPAN>: {
<SPAN class="">"alice"</SPAN>: {
<SPAN class="">"policies"</SPAN> : [
<SPAN class=""><SPAN class="">"</SPAN>cap.support<SPAN class="">"</SPAN></SPAN>
]
},
<SPAN class="">"bob"</SPAN>: {
}
}</PRE></DIV><P>This demonstrates how you can use AMS in a CAP Application, for deployment to production and SAP Build Work Zone Setup you can read further here: <A href="https://github.com/SAP-samples/btp-developer-guide-cap/tree/main/documentation/xsuaa-to-ams" target="_blank" rel="noopener nofollow noreferrer">https://github.com/SAP-samples/btp-developer-guide-cap/tree/main/documentation/xsuaa-to-ams</A> </P><H2 id="toc-hId-194358075"><STRONG>Wrap-Up</STRONG></H2><P>Integrating AMS into your CAP application is more than a technical enhancement — it positions your solution firmly within SAP’s modern identity and access management strategy. </P><P>With CAP’s streamlined tooling — <CODE>cds add ams</CODE> — developers can generate authorization policies directly from CDS models, enforce them consistently across environments, and support both role-based and instance-based access. Administrators benefit from unified policy management in the SCI console, while users enjoy a seamless and secure experience powered by IAS authentication and Identity Directory–based user management.</P><P> </P>2025-12-04T05:52:08.244000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/beta-version-of-application-vulnerability-report-for-sap-btp-now-available/ba-p/14283839Beta Version of Application Vulnerability Report for SAP BTP Now Available2025-12-04T14:18:40.970000+01:00Fabian_Richterhttps://community.sap.com/t5/user/viewprofilepage/user-id/1859514<P><SPAN class="">Earlier this month, we released the application vulnerability report (beta) for SAP Business Technology Platform (SAP BTP). You can use this new service to detect and remediate open-source application vulnerabilities in your SAP BTP deployed applications.</SPAN><SPAN class=""> </SPAN></P><H2 id="toc-hId-1766469780"><STRONG><SPAN>What is this new service all about?</SPAN></STRONG><SPAN> </SPAN></H2><P><SPAN>Frequent security issues in open-source components endanger business data in customer deployed applications. Customers are responsible for performing vigilant patch and vulnerability management. By leveraging the new application vulnerability report for SAP BTP, open-source vulnerabilities in your Cloud Foundry applications can be detected and remediated. It's crucial to fix such vulnerabilities quickly, as attackers are usually aware of them and might try to break into vulnerable systems.</SPAN><SPAN> </SPAN></P><H2 id="toc-hId-1569956275"><STRONG><SPAN>What does the new application vulnerability report service offer you?</SPAN></STRONG><SPAN> </SPAN></H2><P><SPAN>The application vulnerability report supports you in the detection of vulnerabilities in custom applications during runtime. It enables you to act on criticality and other provided vulnerability details, like mitigation recommendations. </SPAN><SPAN> </SPAN></P><P><SPAN>If we take a closer look at the process, the service scans the applications using a proprietary scanning layer that utilizes open-source scanners as well as custom SAP BTP-specific and 0-day exploit targeted scanners. This unique combination offers a very broad and up-to-date coverage of vulnerabilities in your applications. By using an API, you can also integrate the report data into your incident and security workflow.</SPAN><SPAN> </SPAN></P><P><SPAN>Let’s have a quick look at the architecture overview:</SPAN><SPAN> </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Fabian_Richter_0-1764845089098.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/348480iF8F3D2E11CE07ED0/image-size/medium?v=v2&px=400" role="button" title="Fabian_Richter_0-1764845089098.png" alt="Fabian_Richter_0-1764845089098.png" /></span></P><P class="lia-align-center" style="text-align: center;"><I><SPAN>Application Vulnerability Report for SAP BTP – Architecture Overview</SPAN></I><SPAN> </SPAN></P><H2 id="toc-hId-1373442770"><STRONG><SPAN>Get started now!</SPAN></STRONG><SPAN> </SPAN></H2><P><SPAN>You can find lots of useful information in this practical hands-on blog post:</SPAN><SPAN> </SPAN></P><P><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684" target="_blank"><SPAN>Introducing Application Vulnerability Report for Cloud Foundry Applications – Try It Now!</SPAN></A><SPAN> </SPAN></P><P><SPAN>The complete documentation is available on </SPAN><A href="https://help.sap.com/docs/application-vulnerability-report?locale=en-US" target="_blank" rel="noopener noreferrer"><SPAN>SAP Help Portal</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></P><P><SPAN>Please note that this is a </SPAN><STRONG><SPAN>beta service</SPAN></STRONG><SPAN> available on SAP BTP for subaccounts in trial and enterprise accounts. It is currently available in the “cf-eu10” landscape. Once the beta phase is completed, we plan to roll out the service to other regions.</SPAN><SPAN> </SPAN></P><P><SPAN>If you are interested in what’s more to come, check out the road map in </SPAN><A href="https://roadmaps.sap.com/board?PRODUCT=73554900100800006073&range=CURRENT-LAST" target="_blank" rel="noopener noreferrer"><SPAN>SAP Road Map Explorer</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></P><P><SPAN>Try it out, and we look forward to your feedback!</SPAN><SPAN> </SPAN></P><P><SPAN> </SPAN></P><P><STRONG><SPAN>Also make sure to join our community to learn more about the security services and features in SAP Business Technology Platform here:</SPAN></STRONG><SPAN> </SPAN></P><P><A href="https://community.sap.com/topics/btp-security" target="_blank"><STRONG><SPAN>https://community.sap.com/topics/btp-security</SPAN></STRONG></A><SPAN> </SPAN></P>2025-12-04T14:18:40.970000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/automating-user-offboarding-in-sap-btp-across-multiple-subaccounts-with/ba-p/14298902Automating User Offboarding in SAP BTP Across Multiple Subaccounts with PowerShell & BTP CLI2026-01-01T05:43:28.335000+01:00shasankgupta024https://community.sap.com/t5/user/viewprofilepage/user-id/877731<P>Managing user offboarding in a complex SAP BTP (Business Technology Platform) landscape with multiple subaccounts can quickly become a time-consuming and error-prone process. Manually tracking and deleting users across all subaccounts and trusted identity providers (IDPs) increases the risk of missing accounts, leading to potential security gaps.</P><P>To address this challenge, I have <STRONG>developed a PowerShell script that automates the process of deleting users from all IDPs across all your BTP subaccounts</STRONG>, ensuring a secure and consistent offboarding process.</P><P>In this blog, I will walk you through the prerequisites, setup, and usage of the script, as well as the benefits it brings to your BTP user management.</P><P><FONT color="#0000FF"><STRONG>Why Automate User Deletions?</STRONG></FONT></P><P>SAP BTP tenants frequently use multiple subaccounts for different environments (dev/test/prod), business units, or regions. Each subaccount might rely on several identity providers (IDPs), making manual user cleanup a tedious and risky task. Automation ensures that:</P><UL><LI>No user is accidentally missed during the offboarding process.</LI><LI>Audit logs are maintained for all deletions, enhancing traceability.</LI><LI>The process is standardized and efficient, reducing manual interventions and errors.</LI></UL><P><FONT color="#0000FF"><STRONG>Prerequisites</STRONG></FONT></P><P>Before you begin, make sure you have the following:</P><OL><LI><U>SAP BTP CLI Installed</U><BR /> Download the SAP BTP CLI from [SAP Help Portal](<A href="https://help.sap.com/docs/btp/sap-business-technology-platform/download-and-start-using-btp-cli-client" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/btp/sap-business-technology-platform/download-and-start-using-btp-cli-client</A>). Unzip it into a directory of your choice, e.g., `C:\BTP`.</LI><LI><U>Subaccount Administrator Role</U><BR /> You need to have sufficient permissions to manage users and IDP configurations in the target BTP subaccounts. Make sure your user has the **Subaccount Administrator** role in BTP.</LI><LI><U>PowerShell (Windows OS)</U><BR /> The script is written for PowerShell and assumes you are running on a Windows machine.</LI><LI><U>User Email List</U><BR /> Prepare a text file named `useremails.txt` containing one email address per line for users you wish to offboard. Lines starting with `#` and empty lines are ignored by the script. Example:<BR /> abcd.ytr@sap.com<BR /> lmno.pqr@sap.com<BR /> xyza.bcde@sap.com<BR /> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_2-1767020680708.png" style="width: 463px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/356583i5A6461F6E30990AC/image-dimensions/463x296?v=v2" width="463" height="296" role="button" title="shasankgupta24_bldr_2-1767020680708.png" alt="shasankgupta24_bldr_2-1767020680708.png" /></span><P> </P></LI></OL><P><FONT color="#0000FF"><STRONG>Folder Structure</STRONG></FONT></P><P>Place the following files in the C:\BTP directory. Alternatively, you can choose any location, as long as all the files listed below are stored together in the same folder.</P><P>`btp.exe` (SAP BTP CLI executable)<BR />`delete-user-from-all-idps-txt-input.ps1` (PowerShell script - see below)<BR />`useremails.txt` (Text file with user emails to be deleted)</P><P><STRONG><FONT color="#0000FF">Script Walkthrough</FONT></STRONG></P><P><U><EM>1. Logging Into BTP CLI</EM></U></P><P>First, you need to authenticate using the BTP CLI. Open a <STRONG>CMD window</STRONG> and enter:</P><OL class="lia-list-style-type-lower-alpha"><LI>cd C:\BTP</LI><LI>btp login </LI></OL><P>***When prompted, enter the CLI server URL as: <A href="https://cli.btp.cloud.sap" target="_blank" rel="noopener nofollow noreferrer">https://cli.btp.cloud.sap</A></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_1-1767020611006.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/356582i032F96B6B7FCDCEC/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_1-1767020611006.png" alt="shasankgupta24_bldr_1-1767020611006.png" /></span></P><P><EM><U>2. Executing the Deletion Script</U></EM></P><P>After logging in, Open Powershell Window and again change the folder to C:\BTP and run the PowerShell script with the following command:</P><P>.\delete-user-from-all-idps-txt-input.ps1 -UserEmailFile "useremails.txt"</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_3-1767021128569.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/356647iCA3AAD87CFD7374E/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_3-1767021128569.png" alt="shasankgupta24_bldr_3-1767021128569.png" /></span></P><P>On successful deletion </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_6-1767021631983.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/356720i481693AF9A8D1D74/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_6-1767021631983.png" alt="shasankgupta24_bldr_6-1767021631983.png" /></span></P><UL><LI> **What does the script do?**<UL><LI>Reads the list of user emails from your `useremails.txt` file.</LI><LI>Fetches all subaccounts your user has access to.<FONT color="#008000">—creates a file</FONT></LI><LI>For each subaccount:</LI><LI>Retrieves all trusted IDPs<FONT color="#008000">—creates a file</FONT></LI><LI>Attempts to delete each user email from every IDP (including `sap.default`, the default identity provider).</LI><LI>Logs the result (success or error) for every attempt.<FONT color="#008000">—creates a file</FONT></LI><LI>Generates a timestamped log file for traceability.</LI></UL></LI></UL><P> </P><P class="lia-indent-padding-left-120px" style="padding-left : 120px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_5-1767021397308.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/356650iC734A64D30E9F373/image-size/medium?v=v2&px=400" role="button" title="shasankgupta24_bldr_5-1767021397308.png" alt="shasankgupta24_bldr_5-1767021397308.png" /></span></P><P><STRONG><U>3. Script Features</U></STRONG></P><UL><LI>Bulk User Deletion: Delete multiple users from all IDPs across all subaccounts in one go.</LI><LI>Automatic Audit Logging: Each run creates a log file in the `C:\BTP` folder (e.g., `user_deletion_log_20251229_153201.txt`) recording every deletion attempt, including timestamp, subaccount, IDP, user, and outcome.</LI><LI>Intelligent Parsing: The script skips commented and empty lines in your email input file and robustly parses the BTP CLI output.</LI><LI>Error Handling: If a user is not found or cannot be deleted, it's clearly logged with an error message.</LI></UL><P><STRONG><FONT color="#0000FF">Conclusion</FONT></STRONG></P><P>Automating user deletions with a PowerShell script and BTP CLI simplifies the offboarding process, reduces mistakes, and improves auditability in large BTP environments. Simply update your `useremails.txt` for each offboarding round, and in a matter of minutes, you can ensure all relevant user accounts are purged from every subaccount and IDP.</P><P>**Happy automating!**</P><P><FONT color="#008000"><U><EM>PowerShell Script Code as below :</EM></U></FONT></P><pre class="lia-code-sample language-php"><code>param (
[Parameter(Mandatory = $true)]
[string]$UserEmailFile
)
# --- CONFIGURE LOG FILE PATH HERE ---
$now = Get-Date -Format 'yyyyMMdd_HHmmss'
$LogFile = "user_deletion_log_$now.txt"
# Prepare log file with header
$logHeader = "User Deletion Log - Started at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
Set-Content -Path $LogFile -Value $logHeader
function Write-Log {
param (
[string]$Message
)
Write-Host $Message
Add-Content -Path $LogFile -Value $Message
}
# Get the current user running the script
$scriptUser = $env:USERNAME
if (-not $scriptUser) { $scriptUser = $env:USER }
# Check if file exists
if (!(Test-Path $UserEmailFile)) {
Write-Log "ERROR: File '$UserEmailFile' not found."
exit 1
}
# Read user emails (ignore empty/comment lines)
$UserEmails = Get-Content $UserEmailFile | Where-Object { $_.Trim() -ne "" -and -not ($_ -like "#*") }
if ($UserEmails.Count -eq 0) {
Write-Log "No user emails found in the file."
exit 1
}
Write-Log "Read $($UserEmails.Count) user emails from $UserEmailFile..."
# Step 1: Fetch all subaccounts
Write-Log "Fetching subaccounts..."
.\btp list accounts/subaccount > subaccounts.txt
# Skip the header lines (assume first 2 lines are header and column desc)
$lines = Get-Content subaccounts.txt | Select-Object -Skip 2
foreach ($line in $lines) {
# Skip header/footer/blank lines
if ($line.Trim() -eq "" -or $line -match '^subaccount id:' -or $line -match '^subaccounts in') { continue }
# Split line by 2+ spaces (columns are separated by several spaces)
$fields = $line -split '\s{2,}'
if ($fields.Length -lt 2) { continue }
$subGuid = $fields[0].Trim()
$displayName = $fields[1].Trim()
Write-Log "`nFetching IDP trusts for subaccount: $displayName ($subGuid)..."
.\btp list security/trust --subaccount $subGuid > idp_trusts.txt
$trustLines = Get-Content idp_trusts.txt | Select-Object -Skip 1
$originKeys = @()
foreach ($trust in $trustLines) {
$trust = $trust.Trim()
if ($trust -match '(?<OriginKey>([a-zA-Z0-9\.\-]+|sap\.default))\s+(Active|Inactive)$') {
$originKey = $matches['OriginKey']
if ($originKey -and ($originKeys -notcontains $originKey)) {
$originKeys += $originKey
}
}
}
if ($originKeys.Count -eq 0) {
Write-Log "No origin keys found for subaccount $displayName ($subGuid)."
continue
}
foreach ($origin in $originKeys) {
foreach ($userEmail in $UserEmails) {
Write-Log "Deleting user $userEmail from origin $origin in subaccount $displayName ($subGuid)..."
.\btp delete security/user $userEmail --of-idp $origin --subaccount $subGuid
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
if ($LASTEXITCODE -eq 0) {
Write-Log "SUCCESS: User $userEmail deleted from subaccount $displayName, origin $origin by $scriptUser at $timestamp."
} else {
Write-Log "ERROR: User $userEmail not found, failed to delete User $userEmail from $displayName, origin $origin by $scriptUser at $timestamp."
}
}
}
}
Write-Log "`nDONE! User deletions attempted for all specified emails in $UserEmailFile, for all origins and all subaccounts."</code></pre>2026-01-01T05:43:28.335000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-export-all-users-with-origins-from-all-sap-btp-subaccounts-via-cli/ba-p/14299316How to Export All Users (with Origins) from All SAP BTP Subaccounts via CLI Automation2026-01-02T08:17:57.154000+01:00shasankgupta024https://community.sap.com/t5/user/viewprofilepage/user-id/877731<P><FONT color="#0000FF"><EM><STRONG>Introduction</STRONG></EM></FONT></P><P>If you manage a large SAP BTP Global Account, you may find it challenging to export a full user inventory—especially when your environment is segmented into multiple subaccounts and utilizes various identity provider origins (multiple trusts). <STRONG>The SAP BTP Cockpit does not offer a single "Export All Users" button at the global account level</STRONG>.</P><P>This blog <STRONG>demonstrates how to efficiently extract all users and their identity origins across all BTP subaccounts using the SAP BTP Command Line Interface (btp CLI) and PowerShell scripting.</STRONG></P><P><EM><FONT color="#0000FF"><STRONG>Prerequisites</STRONG></FONT></EM></P><UL><LI>btp CLI: Ensure you have downloaded and installed `btp.exe` (the SAP BTP CLI). [<A href="https://help.sap.com/docs/btp/sap-business-technology-platform/download-and-start-using-btp-cli-client" target="_self" rel="noopener noreferrer">Download Link</A>]</LI><LI>Login Required: Log in to your SAP BTP Global Account using the CLI: <STRONG>btp login</STRONG></LI><LI>Open a <STRONG>CMD window </STRONG>and enter:</LI></UL><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_1-1767035683871.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/357064iD700B913F1A138CB/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_1-1767035683871.png" alt="shasankgupta24_bldr_1-1767035683871.png" /></span></P><UL><LI>Permissions: Your user should have sufficient permissions (Global Account Admin, Directory Admin, Subaccount Admin) to view users in the target scopes.</LI><LI>Windows PowerShell: The script example uses PowerShell, but similar logic can be implemented in Bash or Python.</LI><LI>Working Directory: Place your files in `C:\BTP` (or another folder of your choice).</LI></UL><P><FONT color="#0000FF"><EM><STRONG>Folder Structure</STRONG></EM></FONT></P><P>Suggested folder contents:</P><P>C:\BTP\btp.exe *(SAP BTP CLI executable)*<BR />C:\BTP\btp-all-users-with-origins.ps1 *(PowerShell script for extraction)*</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_0-1767035617924.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/357063i839C3A9063401EE3/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_0-1767035617924.png" alt="shasankgupta24_bldr_0-1767035617924.png" /></span></P><P> </P><P><FONT color="#0000FF"><EM><STRONG>PowerShell Script Overview</STRONG></EM></FONT></P><P>The script will:<BR />- List all directories and subaccounts in your global account.<BR />- For each subaccount, fetch all users and their identity provider origins.<BR />- Aggregate results into a CSV file for easy analysis and reporting.</P><P><SPAN>After logging in, <STRONG>Open Powershell Window</STRONG> and again change the folder to C:\BTP and run the PowerShell script with the following command: <STRONG>.\btp-all-users-with-origins.ps1</STRONG></SPAN></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_2-1767035780947.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/357065i90EFF483F6EAB993/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_2-1767035780947.png" alt="shasankgupta24_bldr_2-1767035780947.png" /></span></P><P class="lia-indent-padding-left-30px" style="padding-left : 30px;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shasankgupta24_bldr_3-1767035869907.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/357068iEC853B1A43F264CE/image-size/large?v=v2&px=999" role="button" title="shasankgupta24_bldr_3-1767035869907.png" alt="shasankgupta24_bldr_3-1767035869907.png" /></span></P><P><FONT color="#0000FF"><EM><STRONG>Conclusion</STRONG></EM></FONT></P><P>Automating the extraction of all users (with IdP origins) from SAP BTP’s global landscape is made possible via the btp CLI and PowerShell scripting. This approach helps admins map, reconcile, and audit user access efficiently, overcoming cockpit UI limitations.</P><P>Feel free to adapt or extend the script for additional reporting, periodic scheduled runs, or integration with ITSM tools.</P><P><STRONG>Code for PowerShell Script:</STRONG></P><P> </P><pre class="lia-code-sample language-php"><code>##-------------------------------------------------------------------------------------------------------------------------------------------------
# PowerShell Script: btp-all-users-with-origins.ps1
#
# This script fetches all subaccounts, extracts all IDP origin keys,
# and then fetches all users from each subaccount for each origin key
# using the IDP via "--of-idp <originKey>".
# The user details are saved to all_users_detailed_with_origins.csv.
# Output CSV header (includes IDP origin)
"subaccount_guid,subaccount_name,originKey,userUUID,email,roles,lastLogin" | Out-File -Encoding UTF8 all_users_detailed_with_origins.csv
# Step 1: List all subaccounts and extract subaccount GUIDs and names
Write-Host "Fetching subaccounts..."
.\btp list accounts/subaccount > subaccounts.txt
$subaccounts = @()
$subLines = Get-Content subaccounts.txt | Select-Object -Skip 4
foreach ($line in $subLines) {
if ($line.Trim() -eq "") { continue }
if ($line -match '^([a-f0-9\-]{36})\s+(.+)$') {
$subaccounts += @{
guid = $matches[1]
name = $matches[2]
}
}
}
# Step 2: Gather all IDP origin keys from all subaccounts (combine)
$idpOriginSet = @{}
foreach ($subaccount in $subaccounts) {
Write-Host "Fetching IDP trusts for: $($subaccount.name) ($($subaccount.guid))..."
.\btp list security/trust --subaccount $($subaccount.guid) > idp_trusts.txt
$trustLines = Get-Content idp_trusts.txt | Select-Object -Skip 1
foreach ($trust in $trustLines) {
$trust = $trust.Trim()
if ($trust -match '(?<OriginKey>([a-zA-Z0-9\.\-]+|sap\.default))\s+(Active|Inactive)$') {
$originKey = $matches['OriginKey']
if ($originKey) { $idpOriginSet[$originKey] = $true }
}
}
}
$idpOriginList = $idpOriginSet.Keys
Write-Host "Collected IDP origin keys:"
$idpOriginList | ForEach-Object { Write-Host $_ }
# Step 3: For each subaccount and each origin key, get users with origin filtering
foreach ($subaccount in $subaccounts) {
foreach ($originKey in $idpOriginList) {
Write-Host "Fetching users for subaccount: $($subaccount.name) ($($subaccount.guid)) with origin: $originKey..."
.\btp list security/user --subaccount $($subaccount.guid) --of-idp $originKey > users.txt
$userLines = Get-Content users.txt | Where-Object {
($_ -match '\S') -and
($_ -notmatch 'username') -and
($_ -notmatch '^OK$') -and
($_ -notmatch '^No users found')
}
foreach ($userline in $userLines) {
$email = $userline.Trim()
if ($email -eq "") { continue }
# Get user details
$userDetails = .\btp get security/user $email --subaccount $($subaccount.guid) 2>&1
# Extract UUID (user ID)
$userIdLine = $userDetails | Where-Object { $_ -match '^id:' }
$userUUID = if ($userIdLine) { $userIdLine -replace '^id:\s*', '' } else { "" }
# Extract Role Collections
$roleLines = $userDetails | Select-String -Pattern '^ - '
$roles = if ($roleLines) { ($roleLines | ForEach-Object { $_.ToString().Trim() }) -join ';' } else { "" }
# Extract Last Login
$loginLine = $userDetails | Where-Object { $_ -match '^Last Login:' }
$lastLogin = if ($loginLine) { $loginLine -replace '^Last Login:\s*', '' } else { "N/A" }
"$($subaccount.guid),$($subaccount.name),$originKey,$userUUID,$email,$roles,$lastLogin" | Out-File -Append -Encoding UTF8 all_users_detailed_with_origins.csv
}
}
}
Write-Host "DONE! Output saved to all_users_detailed_with_origins.csv"
##-------------------------------------------------------------------------------------------------------------------------------------------------
</code></pre>2026-01-02T08:17:57.154000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/new-expert-guided-implementation-joule-prerequisites-and-activation/ba-p/14308272New Expert-Guided Implementation: Joule Prerequisites and Activation2026-01-16T00:06:43.973000+01:00mirnachaaninehttps://community.sap.com/t5/user/viewprofilepage/user-id/8362<P><A href="https://accounts.sap.com/saml2/idp/sso?sp=https://www.successfactors.eu/learninghub&RelayState=%2Fsf%2Flearning%3FdestUrl%3Dhttps%253a%252f%252fsaplearninghub%252eplateau%252ecom%252flearning%252fuser%252fdeeplink%255fredirect%252ejsp%253flinkId%253dCATALOG%255fSEARCH%2526sbArSel%253d%2526keywords%253dSUP_EDE_00012366%2526selKeyWordHeader%253dSUP_EDE_00012366%2526catSel%253d%2526srcSel%253dESAC%2526delMthSel%253d%2526ILDateFrm%253d%2526ILDateTo%253d%2526ILBlend%253d%2526ILSchd%253d%2526fromSF%253dY%26company%3Dlearninghub" target="_self" rel="noopener noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mirnachaanine_0-1769125086418.png" style="width: 721px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364277i4E3AD51202FE9C69/image-dimensions/721x155/is-moderation-mode/true?v=v2" width="721" height="155" role="button" title="mirnachaanine_0-1769125086418.png" alt="mirnachaanine_0-1769125086418.png" /></span></A></P><H4 id="toc-hId-2046019507">Establish the Foundation for Your AI Journey </H4><P><SPAN>SAP Joule is transforming how organizations interact with SAP applications by bringing intelligence directly into everyday workflows. For customers to activate Joule and unlock its AI-powered capabilities, they must first prepare their SAP Cloud Identity Services (CIS), SAP Business Technology Platform (BTP), and integration foundations to fully realize the value of Joule from day one.</SPAN><SPAN> </SPAN></P><P><SPAN>To support customers with this essential preparation, we are pleased to introduce a new Expert-Guided Implementation (EGI): </SPAN><SPAN> </SPAN></P><P><A href="https://accounts.sap.com/saml2/idp/sso?sp=https://www.successfactors.eu/learninghub&RelayState=%2Fsf%2Flearning%3FdestUrl%3Dhttps%253a%252f%252fsaplearninghub%252eplateau%252ecom%252flearning%252fuser%252fdeeplink%255fredirect%252ejsp%253flinkId%253dCATALOG%255fSEARCH%2526sbArSel%253d%2526keywords%253dSUP_EDE_00012366%2526selKeyWordHeader%253dSUP_EDE_00012366%2526catSel%253d%2526srcSel%253dESAC%2526delMthSel%253d%2526ILDateFrm%253d%2526ILDateTo%253d%2526ILBlend%253d%2526ILSchd%253d%2526fromSF%253dY%26company%3Dlearninghub" target="_self" rel="noopener noreferrer"><STRONG><SPAN>Joule Prerequisites & Activation</SPAN></STRONG><SPAN> </SPAN></A><SPAN>- a hands-on, expert-led program designed to help you configure all required technical components for a smooth Joule activation.</SPAN><SPAN> </SPAN></P><P><SPAN>This new offering helps customers understand Joule’s architecture, explore deployment options, configure platform prerequisites, and establish the identity and access foundation required for a secure activation. By the end of the EGI, participants will be positioned to complete all the prerequisites required to </SPAN><STRONG><SPAN>activate Joule</SPAN></STRONG><SPAN>, ensuring a seamless start to their AI adoption journey.</SPAN><SPAN> <BR /><BR /></SPAN></P><H4 id="toc-hId-1849506002">Workshop Schedule<SPAN> </SPAN></H4><P><SPAN>To accommodate global participants, this session will be offered on the following dates and time zones as follows:</SPAN><SPAN> <BR /><BR /></SPAN></P><TABLE border="1" width="100%"><TBODY><TR><TD width="33.333333333333336%" height="30px"><STRONG>2026 Dates</STRONG></TD><TD width="33.333333333333336%" height="30px"><STRONG>Time</STRONG></TD><TD width="33.333333333333336%" height="30px"><STRONG>Time Zone </STRONG></TD></TR><TR><TD width="33.333333333333336%" height="30px"><FONT color="#999999"><STRONG>January 19-20</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#999999"><STRONG>10:00AM - 12:00PM</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#999999"><STRONG>EMEA | CET</STRONG></FONT></TD></TR><TR><TD width="33.333333333333336%" height="31px"><FONT color="#000000"><STRONG>January 26-27</STRONG></FONT></TD><TD width="33.333333333333336%" height="31px"><FONT color="#000000"><STRONG>11:00AM - 1:00PM</STRONG></FONT></TD><TD width="33.333333333333336%" height="31px"><FONT color="#000000"><STRONG>NA/LA | EST </STRONG></FONT></TD></TR><TR><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>February 9-10</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>10:00AM-12:00PM</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>EMEA | CET</STRONG></FONT></TD></TR><TR><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>February 16-17</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>11:00AM - 1:00PM</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>NA/LA | EST </STRONG></FONT></TD></TR><TR><TD width="33.333333333333336%" height="30px"><STRONG>March 2-3</STRONG></TD><TD width="33.333333333333336%" height="30px"><STRONG>10:00AM-12:00PM</STRONG></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>EMEA | CET</STRONG></FONT></TD></TR><TR><TD width="33.333333333333336%"><STRONG>March 9-10</STRONG></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>11:00AM - 1:00PM</STRONG></FONT></TD><TD width="33.333333333333336%" height="30px"><FONT color="#000000"><STRONG>NA/LA | EST </STRONG></FONT></TD></TR></TBODY></TABLE><H4 id="toc-hId-1652992497"><BR />Why This EGI Matters </H4><P><SPAN>Before Joule can be activated, customers must ensure the right technical prerequisites are in place—across SAP BTP, Cloud Identity Services, Build Work Zone, and Line-of-Business systems. This EGI provides:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>A </SPAN><STRONG><SPAN>clear, step-by-step path</SPAN></STRONG><SPAN> to completing these prerequisites</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Expert-led</SPAN></STRONG><SPAN> </SPAN><STRONG><SPAN>guidance</SPAN></STRONG><SPAN> for setting up SAP Cloud Identity Services including Identity Authentication Service (IAS)/Identity Provisioning Service (IPS), and entitlements</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Live configuration guidance</SPAN></STRONG><SPAN> in your SAP BTP environment and SAP Build Workzone (BWZ)</SPAN><SPAN> </SPAN></LI></UL><UL><LI><STRONG><SPAN>Hands-on support</SPAN></STRONG><SPAN> through real examples and troubleshooting</SPAN><SPAN> </SPAN></LI></UL><P><SPAN>With AI rapidly becoming central to SAP’s product strategy, organizations need the right technical foundation to adopt Joule with confidence, security, and scalability.</SPAN><SPAN> <BR /><BR /></SPAN></P><H4 id="toc-hId-1456478992">What You’ll Learn: Program Overview </H4><P><SPAN>This 2-day EGI blends instruction, demonstrations, and guided hands-on exercises.</SPAN><SPAN> </SPAN></P><P><STRONG><SPAN>Day 1 – Foundation & Architecture</SPAN></STRONG><SPAN> </SPAN></P><UL><LI><SPAN>Understand Joule’s system architecture and deployment scenarios</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Learn how SAP Cloud Identity Services (IAS/IPS), SAP BTP, SAP Build Work Zone, and LOB solutions work together</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Navigate BTP global accounts, subaccounts, entitlements, and subscriptions</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Validate system readiness and begin configuring your Joule environment</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Experience a live demonstration of Joule integrated with SAP SuccessFactors</SPAN><SPAN> </SPAN></LI></UL><P><STRONG><SPAN>Day 2 – Identity, Provisioning & Work Zone Integration</SPAN></STRONG><SPAN> </SPAN></P><UL><LI><SPAN>Deep-dive into SAP Cloud Identity Services - Identity Authentication (IAS) and Identity Provisioning (IPS) for Joule</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Integrate CIS with your corporate Identity Provider</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Configure SAP Build Workzone (BWZ) as the unified interface for Joule</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Establish trust relationships between systems</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Expose LOB content to BWZ and validate provisioning flows</SPAN><SPAN> </SPAN></LI></UL><H4 id="toc-hId-1259965487"><STRONG><SPAN><BR /></SPAN></STRONG>What You Will Achieve </H4><P><SPAN>This new EGI equips your organization with everything needed to prepare for Joule activation, ensuring compliance, security, and a streamlined technical foundation from day one.</SPAN><SPAN> </SPAN></P><P><SPAN>If your organization is planning to adopt SAP Joule or preparing for AI-driven innovation within SAP applications, this EGI is the ideal starting point to fast-track your readiness and reduce implementation risk.</SPAN><SPAN> </SPAN></P><P><SPAN>By the end of the EGI, you will have:</SPAN><SPAN> </SPAN></P><UL><LI><SPAN>A configured SAP BTP environment with a designated Joule subaccount</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Completed IAS/IPS setup for secure authentication and provisioning</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Integrated BWZ as the experience layer for Joule</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Verified all activation prerequisites using a comprehensive readiness checklist</SPAN><SPAN> </SPAN></LI></UL><UL><LI><SPAN>Gained expert-backed confidence to run the Joule Booster and proceed with activation</SPAN></LI></UL><H4 id="toc-hId-1063451982"><SPAN>How to Register <BR /></SPAN></H4><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mirnachaanine_1-1768517062801.png" style="width: 17px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361743i9F8DA86CD8872CFF/image-dimensions/17x17/is-moderation-mode/true?v=v2" width="17" height="17" role="button" title="mirnachaanine_1-1768517062801.png" alt="mirnachaanine_1-1768517062801.png" /></span><STRONG><A href="https://accounts.sap.com/saml2/idp/sso?sp=https://www.successfactors.eu/learninghub&RelayState=%2Fsf%2Flearning%3FdestUrl%3Dhttps%253a%252f%252fsaplearninghub%252eplateau%252ecom%252flearning%252fuser%252fdeeplink%255fredirect%252ejsp%253flinkId%253dCATALOG%255fSEARCH%2526sbArSel%253d%2526keywords%253dSUP_EDE_00012366%2526selKeyWordHeader%253dSUP_EDE_00012366%2526catSel%253d%2526srcSel%253dESAC%2526delMthSel%253d%2526ILDateFrm%253d%2526ILDateTo%253d%2526ILBlend%253d%2526ILSchd%253d%2526fromSF%253dY%26company%3Dlearninghub" target="_blank" rel="noopener noreferrer">Register here to secure your spot</A>* </STRONG><SPAN>today to learn from SAP experts and gain the skills to bring <STRONG>Business AI to life</STRONG> across your enterprise.</SPAN></P><P><SPAN> * <EM>You may need to register your S-user for access to SAP Learning Hub to access the EGI registration page. It is a one-time registration, click <A href="https://support.sap.com/en/offerings-programs/enterprise-support/enterprise-support-academy/learn.html" target="_blank" rel="noopener noreferrer">here.</A></EM></SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mirnachaanine_0-1768519307900.png" style="width: 159px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/361744i9721FA1F62F2C8E7/image-dimensions/159x159/is-moderation-mode/true?v=v2" width="159" height="159" role="button" title="mirnachaanine_0-1768519307900.png" alt="mirnachaanine_0-1768519307900.png" /></span></P><H4 id="toc-hId-866938477">Related Articles</H4><P><STRONG><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/new-expert-guided-implementation-unlocking-joule-and-sap-business-ai-from/ba-p/14237653" target="_self">Unlocking Joule and SAP Business AI from Strategy to Activation: Expert-Guided Implementation</A></STRONG></P>2026-01-16T00:06:43.973000+01:00https://community.sap.com/t5/integration-blog-posts/secure-sap-ai-integration-using-advantco-openpgp-services/ba-p/14312233Secure SAP–AI Integration Using Advantco OpenPGP Services2026-01-22T18:25:33.866000+01:00peter_ha3https://community.sap.com/t5/user/viewprofilepage/user-id/185224<P><STRONG>Secure SAP–AI Integration Using Advantco OpenPGP Services</STRONG></P><P><STRONG>1. Purpose and Scope</STRONG></P><P>This article defines a secure, deployment-agnostic reference architecture for integrating SAP backend systems with external AI agents using OpenPGP-based cryptographic services provided by Advantco. The architecture separates cryptographic processing from data transport, ensuring that encryption, decryption, signing, and verification are performed by a dedicated cryptographic service layer, while message routing and orchestration remain the responsibility of the calling application or integration layer.</P><P>The architecture is intended for hybrid enterprise environments in which SAP backend systems may be deployed on-premise, in private cloud, on hyperscalers, or under RISE with SAP. AI agents may run on external platforms or managed AI services. Advantco OpenPGP services are exposed as APIs (REST and/or SOAP) and may be deployed on SAP Business Technology Platform or an equivalent enterprise runtime. This document describes a logical reference architecture and does not prescribe a specific deployment topology.</P><P>The scope of this document is limited to secure data exchange and trust establishment between SAP systems and AI agents. AI model behavior, prompt engineering, SAP business logic, and transport-level protocol selection are out of scope except where they affect security guarantees.</P><P><STRONG>2. Architectural Rationale</STRONG></P><P>Integrating SAP systems with external AI capabilities introduces a trust boundary between SAP-controlled environments and systems that operate outside SAP governance. This architecture addresses that boundary by enforcing message-level security that is independent of transport mechanisms and network topology.</P><P>Rather than embedding cryptographic logic into SAP applications or integration flows, the architecture externalizes OpenPGP operations into a dedicated cryptographic service layer. This allows encryption, decryption, signing, and verification to be centrally governed, audited, and evolved without requiring changes to SAP business applications. Transport and routing of messages remain the responsibility of SAP applications or integration components, preventing the cryptographic services from becoming an implicit integration broker.</P><P><STRONG>3. Architectural Overview</STRONG></P><P>The architecture consists of four logical concerns: SAP backend systems, an optional integration or orchestration layer, Advantco OpenPGP cryptographic services, and an external AI agent ecosystem.</P><P>SAP backend systems produce and consume business data but do not perform cryptographic operations directly. They rely on an integration or orchestration layer such as SAP Integration Suite, a SAP BTP application, or other middleware to coordinate message exchange with external systems where required.</P><P>Advantco OpenPGP services provide cryptographic transformation via APIs only. They do not perform message routing, transport, or forwarding.</P><P>External AI agents receive only signed and encrypted payloads and return responses in signed and encrypted form. Unencrypted payloads exist only within SAP-controlled trust boundaries.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Architecture diagram v3.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364171i55A1F7E8D95B8D0B/image-size/large?v=v2&px=999" role="button" title="Architecture diagram v3.png" alt="Architecture diagram v3.png" /></span></P><P>Advantco OpenPGP provides cryptographic APIs only and returns results to the caller. Message transport and routing are handled by SAP or integration components and are not performed by Advantco.</P><P><STRONG>4. Architecture Structure</STRONG></P><P>From a business perspective, the architecture enables SAP processes to consume AI-generated insights without relinquishing control over data confidentiality or trust decisions. AI systems may influence SAP outcomes, but only after cryptographic validation and SAP-side authorization.</P><P>From an application perspective, the architecture separates responsibilities clearly. SAP backend systems focus on business logic. The integration or orchestration layer handles routing, retries, and protocol adaptation. Advantco OpenPGP services handle cryptographic transformation. AI agents handle AI processing only.</P><P>From an integration perspective, communication is message-based and transport-agnostic. Payload-level security is applied using OpenPGP before data crosses trust boundaries, ensuring that transport security is an additional layer rather than the primary protection mechanism.</P><P>From a data perspective, unencrypted payload exists only within SAP-controlled environments. Outside those boundaries, data is always exchanged in signed and encrypted form, accompanied by cryptographic metadata required for verification and audit.</P><P><STRONG>5. Component Responsibilities</STRONG></P><P>SAP backend systems remain the authoritative producers and consumers of business data. They initiate outbound requests and consume inbound results but delegate cryptographic processing to external services. SAP systems do not store or manage cryptographic private keys.</P><P>The integration or orchestration layer (where present) is responsible for transport, routing, protocol handling, retries, correlation, and error handling. It invokes Advantco OpenPGP APIs as required and forwards encrypted payloads to external AI agents, and returns verified payloads to SAP systems. It does not perform cryptographic operations beyond invoking the cryptographic service APIs.</P><P>Advantco OpenPGP services provide cryptographic operations as APIs. For outbound processing, they accept payloads and perform optional compression, message digest generation, digital signing, and OpenPGP hybrid encryption. For inbound processing, they accept encrypted payloads, verify digital signatures, decrypt content under governed key controls, and return verified payloads to the caller. These services are stateless with respect to message routing and do not forward data to external systems.</P><P>External AI agents operate outside the SAP trust boundary and are treated as untrusted by default. They can only process data that they have successfully decrypted and verified using trusted SAP public keys. AI agents sign and encrypt all outbound responses using their own private keys and do not receive access to SAP private keys or verified SAP payloads.</P><P>Key management is handled by a centralized Key Management Service that governs cryptographic key lifecycles, enforces usage policies, and records audit events. Agent identities are established by registering and allow-listing agent public keys, typically identified by fingerprints or key identifiers. Private keys remain protected and are never exposed outside the cryptographic service boundary.</P><P><STRONG>6. Message Exchange</STRONG></P><P>The Advantco OpenPGP APIs may be invoked directly by SAP applications or by an intermediate integration or orchestration layer. In all cases, Advantco performs cryptographic transformation only and does not forward messages.</P><P>In the outbound flow, SAP backend systems submit payloads for signing and encryption via the Advantco OpenPGP service. The service returns a signed and encrypted payload to the caller, which is responsible for forwarding the encrypted message to the external AI agent.</P><P>In the inbound flow, the external AI agent produces a signed and encrypted response. The encrypted response is submitted to the Advantco OpenPGP service for verification and decryption. The service returns a verified payload to the caller, which delivers the result to the SAP backend system.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sequence.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364172iB37D07B204A6B275/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="sequence.png" alt="sequence.png" /></span></P><P>The sequence diagram above illustrates the strict request–response nature of the Advantco OpenPGP APIs and the separation of cryptographic processing from message transport and routing.</P><P><STRONG>7. Trust and Security Model</STRONG></P><P>Trust in this architecture is based on cryptographic identity rather than network location. Public-key identities establish which parties may exchange data, while centralized key governance determines how keys may be used. By default, no shared secrets are required between SAP systems and AI agents.</P><P>Confidentiality is enforced through OpenPGP hybrid encryption. Integrity and authenticity are enforced through digital signatures. Auditability is provided through centralized logging of cryptographic operations. Replay protection is enforced by the receiving side using message identifiers, timestamps, and validity windows.</P><P>Cryptographic validity does not imply business authorization. AI-generated responses or instructions must still be validated against schemas, allow-listed actions, and SAP-side authorization rules before affecting SAP business processes.</P><P><STRONG>8. Deployment Considerations</STRONG></P><P>The architecture supports a wide range of deployment models, including scenarios in which SAP systems and integration components run on SAP BTP while cryptographic services are cloud-hosted and AI agents operate on external platforms. Security and correctness depend on logical separation of responsibilities rather than physical co-location.</P><P>As a concrete implementation option, Advantco OpenPGP services are available for deployment on SAP Business Technology Platform (SAP BTP). In this model, the cryptographic services run as managed applications or services on SAP BTP and expose OpenPGP functionality through REST and/or SOAP APIs. SAP backend systems and SAP integration components can invoke these APIs directly using standard SAP-supported connectivity mechanisms. Deployment on SAP BTP does not change the logical architecture described in this document; Advantco OpenPGP continues to operate strictly as a cryptographic service and does not perform message routing or transport.</P><P><STRONG>9. Conclusion</STRONG></P><P>This reference architecture defines a clear separation between cryptographic services, message transport, and business logic for secure SAP–AI integration. By exposing OpenPGP operations as governed APIs and keeping data transport outside the cryptographic service boundary, the architecture enables strong security guarantees while remaining flexible, deployment-neutral, and suitable for enterprise use.</P><P><STRONG>10. Sources</STRONG></P><P><A href="https://www.sap.com/products/technology-platform.html" target="_self" rel="noopener noreferrer">https://www.sap.com/products/technology-platform.html</A><BR /><A href="https://www.rfc-editor.org/rfc/rfc4880" target="_self" rel="nofollow noopener noreferrer">https://www.rfc-editor.org/rfc/rfc4880</A><BR /><A href="https://owasp.org/www-project-api-security/" target="_self" rel="nofollow noopener noreferrer">https://owasp.org/www-project-api-security/</A><BR /><A href="https://www.advantco.com/sap-integration-adapters/sap-pgp-integration" target="_self" rel="nofollow noopener noreferrer">https://www.advantco.com/sap-integration-adapters/sap-pgp-integration</A></P>2026-01-22T18:25:33.866000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/configure-role-owner-stage-auto-approval-in-sap-iag/ba-p/14308750Configure Role Owner Stage Auto Approval in SAP IAG2026-01-23T06:15:25.857000+01:00SuryaPrakash_Machavarapuhttps://community.sap.com/t5/user/viewprofilepage/user-id/2274419<P><STRONG>Introduction</STRONG></P><P>This blog explains how to configure Role Owner Stage Auto Approval in IAG. focusing on setting up the required data objects, business rules, and workflow configuration to automate approvals.</P><P><STRONG>Step 1: Create Data Object</STRONG></P><P>Create a data object called <STRONG>RoleOwnerAttributes</STRONG>. This object holds the input values used to determine whether the Role Owner stage should be automatically approved.</P><P>Add the following attributes to the data object:</P><UL><LI>roleName (String)</LI><LI>roleCriticality (String)</LI><LI>roleApprover (String)</LI><LI>roleBusinessProcess (String)</LI><LI>roleSubprocess (String)</LI><LI>roleRiskCount (Number)<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_0-1769169958942.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364560iDF3842AFE0B0991C/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_0-1769169958942.png" alt="SuryaPrakash_Machavarapu_0-1769169958942.png" /></span><P> </P></LI></UL><P><STRONG>Step 2: Create another Data Object </STRONG></P><P>Create another data object called <STRONG>AutoApproveRoleOwnerStage</STRONG>. This object stores the output of the rule.</P><P>Add the following attributes to the data object:</P><UL><LI>roleName (String)</LI><LI>roleOwnerAutoStage (Boolean)<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_1-1769169958949.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364561i1F32A140A8F35A87/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_1-1769169958949.png" alt="SuryaPrakash_Machavarapu_1-1769169958949.png" /></span><P> </P></LI></UL><P><BR /><STRONG>Step 3: Create Local Rule</STRONG><BR />Create a local rule called <STRONG>RoleOwnerStageAutoRule</STRONG></P><P>decision table settings:</P><UL><LI>Use the fields from <STRONG>RoleOwnerAttributes</STRONG> (Step 1) as the <STRONG>conditions</STRONG>.</LI><LI>Use <STRONG>AutoApproveRoleOwnerStage</STRONG> (Step 2) as the <STRONG>result</STRONG>.</LI></UL><P>Result Attributes:</P><UL><LI>Role Owner Auto Stage → Access: <STRONG>Editable</STRONG></LI><LI>Role Name → Access: <STRONG>Hidden</STRONG></LI><LI>Set the hardcoded value as the <STRONG>roleName from RoleOwnerAttributes.</STRONG></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_2-1769169958959.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364562i1A27DAB1957F3995/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_2-1769169958959.png" alt="SuryaPrakash_Machavarapu_2-1769169958959.png" /></span><SPAN>In this scenario, the condition is defined based on the Role Name.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_3-1769169958966.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364565i6E32B7A8800AFA8E/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_3-1769169958966.png" alt="SuryaPrakash_Machavarapu_3-1769169958966.png" /></span></P><P> </P><P>Step 4: Create Rule Set</P><P>Create a rule set called <STRONG>RoleOwnerRuleSet </STRONG> and add the local rule <STRONG>RoleOwnerStageAutoRule</STRONG> (from Step 3) to it.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_4-1769169958971.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364563i4EBBE1941F1C56D3/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_4-1769169958971.png" alt="SuryaPrakash_Machavarapu_4-1769169958971.png" /></span></P><P> </P><P><STRONG>Step 5: Create Rule Service</STRONG></P><P>Create a rule service called <STRONG>AutoApproveRoleOwnerStage</STRONG>.</P><UL><LI><STRONG>Input</STRONG> → RoleOwnerAttributes (from Step 1)</LI><LI><STRONG>Result</STRONG> → AutoApproveRoleOwnerStage (from Step 2)</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_5-1769169958976.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364564iF128A564D349DC4A/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_5-1769169958976.png" alt="SuryaPrakash_Machavarapu_5-1769169958976.png" /></span></P><P> </P><P><STRONG>Step 6: Assign Rule Service</STRONG></P><P>Assign the rule service <STRONG>AutoApproveRoleOwnerStage</STRONG> (from Step 5) to the rule set <STRONG>RoleOwnerRuleSe</STRONG>t (from Step 4).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_6-1769169958981.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364566i669B685D247F8FD9/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_6-1769169958981.png" alt="SuryaPrakash_Machavarapu_6-1769169958981.png" /></span></P><P> </P><P><STRONG>Step 7: Activate and Deploy</STRONG></P><P>Activate all the created objects and deploy the business rule service. If any changes are made, the service must be deployed again.</P><P><STRONG>Existing Workflow Setup</STRONG></P><P>In the current existing workflow, the access request is configured to follow the Role Owner approval path as the stage 1 during the approval process.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_7-1769169958987.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364568i454F979113C3606B/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_7-1769169958987.png" alt="SuryaPrakash_Machavarapu_7-1769169958987.png" /></span></P><P> </P><P><STRONG>Testing Scenario</STRONG></P><P>The following test scenario was performed to validate the configuration:</P><UL><LI>An access request was raised for the role PR_approver_0_1M.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_8-1769169958991.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364567i574F015F3DBE1147/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_8-1769169958991.png" alt="SuryaPrakash_Machavarapu_8-1769169958991.png" /></span></LI><LI>The audit log shows that the request was automatically approved by the system.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_9-1769169958997.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364570i2E564CBDA85D6276/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_9-1769169958997.png" alt="SuryaPrakash_Machavarapu_9-1769169958997.png" /></span></LI><LI>The Access request status shows that it moved to the Risk Owner stage, confirming that the Role Owner stage was automatically approved successfully.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SuryaPrakash_Machavarapu_10-1769169959002.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/364569i989392EC4F87CEC6/image-size/large?v=v2&px=999" role="button" title="SuryaPrakash_Machavarapu_10-1769169959002.png" alt="SuryaPrakash_Machavarapu_10-1769169959002.png" /></span></LI></UL><P><STRONG>Conclusion</STRONG></P><P>Role Owner stage auto approval reduces manual effort and speeds up the approval process for eligible access requests. Using rule-based conditions, organizations can automatically approve condition based requests while keeping manual approvals for critical cases.</P>2026-01-23T06:15:25.857000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/runtime-threat-detection-for-sap-btp-kyma-with-azure-arc-microsoft-defender/ba-p/14319899Runtime Threat Detection for SAP BTP Kyma with Azure Arc + Microsoft Defender for Containers2026-02-02T15:52:32.766000+01:00haithamshahinhttps://community.sap.com/t5/user/viewprofilepage/user-id/2275053<H1 id="securing-an-external-kubernetes-cluster-with-microsoft-defender-for-containers-via-azure-arc-" id="toc-hId-1659730497">Securing an external Kubernetes cluster with Microsoft Defender for Containers (via Azure Arc)</H1><P>When I say "secure Kubernetes", I'm not just thinking about admission policies and CIS checklists. I'm thinking about what happens when <STRONG>something is already running</STRONG> and turns malicious — a web shell lands in a pod, a container starts burning CPU for crypto mining, or someone drops network scanning tools into an otherwise boring workload.</P><P>If you're running <STRONG>SAP BTP Kyma runtime</STRONG>, this matters. Kyma has strong <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/kyma-security-concepts#kubernetes-control-plane" target="_blank" rel="noopener noreferrer">platform hardening</A> (Gardener-managed control plane, DISA STIG alignment), and API server audit logs exist — but those logs go to <A href="https://help.sap.com/docs/btp/sap-business-technology-platform/auditing-and-logging-information-in-kyma" target="_blank" rel="noopener noreferrer">SAP's Platform Logging Service</A>, not directly to you. That's fine for platform-level auditing, but it's not the same as <STRONG>seeing threats inside your workloads at runtime</STRONG>.</P><P>That's the gap I'm filling: <STRONG>runtime threat detection</STRONG> — the ability to detect and alert on malicious activity (crypto mining, web shells, credential theft) while workloads are running.</P><HR /><H2 id="real-world-threats" id="toc-hId-1592299711">Real-world threats</H2><P>These aren't hypotheticals — crypto mining and container compromise campaigns are actively targeting Kubernetes clusters:</P><P><STRONG>DERO Cryptojacking (2023–2024)</STRONG>: Attackers scanned for misconfigured Kubernetes API servers, then deployed DaemonSets named "proxy-api" to blend in with legitimate cluster components. The mining process itself was named "pause" — masquerading as the standard Kubernetes pause container. CrowdStrike found malicious images with over 10,000 pulls on Docker Hub. <STRONG>How runtime detection helps</STRONG>: Defender's eBPF monitoring catches unusual process spawning from "pause" containers and flags sustained high CPU from processes that shouldn't be compute-intensive. (Source: <A href="https://www.crowdstrike.com/en-us/blog/crowdstrike-discovers-first-ever-dero-cryptojacking-campaign-targeting-kubernetes/" target="_blank" rel="noopener nofollow noreferrer">CrowdStrike — DERO Cryptojacking Discovery</A>)</P><P><STRONG>Kinsing Campaign (2023–ongoing)</STRONG>: This campaign exploits vulnerabilities in PostgreSQL, WebLogic, Liferay, and WordPress to gain initial access to containers, then pivots to deploy crypto miners across the cluster. The campaign has affected 75+ cloud-native applications. <STRONG>How runtime detection helps</STRONG>: Defender detects process genealogy anomalies — for example, a WebLogic process spawning shell commands that enumerate Kubernetes resources or deploy new containers.</P><P>The pattern: attackers get in through a misconfiguration or vulnerability, then run workloads <STRONG>inside</STRONG> the cluster. Admission policies and CIS benchmarks don't catch threats that start after deployment — that's the gap runtime detection fills.</P><HR /><H2 id="the-solution-azure-arc-defender-for-containers" id="toc-hId-1395786206">The solution: Azure Arc + Defender for Containers</H2><P>For non-AKS clusters, the approach is: <STRONG>Azure Arc</STRONG> (makes the cluster an Azure resource) + <STRONG>Defender for Containers</STRONG> (deploys the runtime sensor as an Arc extension).</P><P><STRONG>What gets installed</STRONG>:</P><UL><LI><STRONG>Arc agents</STRONG> (<CODE>azure-arc</CODE> namespace): maintain outbound connection to Azure</LI><LI><STRONG>Defender sensor</STRONG> (DaemonSet on each node): collects runtime telemetry via eBPF — process creation, network activity, system calls</LI></UL><P><STRONG>What the sensor detects</STRONG>: crypto mining patterns, web shell activity, network scanning tools, binary drift. (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/alerts-containers#workload-runtime-detection" target="_blank" rel="noopener nofollow noreferrer">Workload runtime detection</A>)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="kyma-defender-architecture.png" style="width: 942px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368106iA5FA9AA45DFD92C3/image-size/large?v=v2&px=999" role="button" title="kyma-defender-architecture.png" alt="kyma-defender-architecture.png" /></span></P><P>Arc also provides an <STRONG>extension platform</STRONG> — Defender isn't the only add-on you can deploy this way. And Microsoft provides a <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">verification checklist</A> so you can prove it's working.</P><P><STRONG>Networking note</STRONG>: Both Arc and Defender require outbound connectivity. If egress is blocked, onboarding fails silently. Check the <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/network-requirements" target="_blank" rel="noopener nofollow noreferrer">Arc network requirements</A> and ensure <CODE>*.cloud.defender.microsoft.com:443</CODE> is allowed.</P><HR /><H2 id="how" id="toc-hId-1199272701">How</H2><P>I’ll show a portal-first path (fastest to understand), then a programmatic path (fastest to automate).</P><H3 id="step-0-pre-flight-checklist" id="toc-hId-1131841915">Step 0 — Pre-flight checklist</H3><P>Here’s what I personally confirm before I touch the portal:</P><P>1) <STRONG>Network egress (outbound)</STRONG></P><UL><LI>Arc agents require outbound access to a set of URLs (Azure Resource Manager, Entra ID token endpoints, container registries for pulling agent images, and more depending on features). (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/network-requirements" target="_blank" rel="noopener nofollow noreferrer">Azure Arc-enabled Kubernetes network requirements</A>)</LI><LI>Defender for Containers on Arc requires outbound access to <CODE>*.cloud.defender.microsoft.com:443</CODE>. (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A>)</LI></UL><P>2) <STRONG>Tooling</STRONG></P><UL><LI>Azure CLI + the <CODE>connectedk8s</CODE> extension (for Arc onboarding). (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A>)</LI><LI>If I want to script extension deployment, I also install the <CODE>k8s-extension</CODE> extension. (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/extensions" target="_blank" rel="noopener nofollow noreferrer">Deploy and manage Arc-enabled Kubernetes extensions</A>)</LI></UL><P>3) <STRONG>Cluster access</STRONG></P><UL><LI><CODE>kubectl</CODE> works and points at the cluster I’m onboarding.</LI><LI>If I’m missing kubeconfig on my workstation, the Kyma Dashboard has a <STRONG>Download kubeconfig</STRONG> link for the cluster.</LI><LI>I sanity-check that my kubeconfig/current context is the Kyma cluster before running anything destructive:</LI></UL><PRE><CODE>kubectl <SPAN class="">config</SPAN> current-<SPAN class="">context</SPAN>
kubectl cluster-info</CODE></PRE><UL><LI>I have capacity for Arc agents (the Arc quickstart calls out resource requirements and that agents are deployed on connect). (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A>)</LI></UL><H3 id="step-1-connect-the-cluster-to-azure-arc" id="toc-hId-935328410">Step 1 — Connect the cluster to Azure Arc</H3><P>I typically do this from a workstation that already has <CODE>kubectl</CODE> access to the cluster.</P><H4 id="1-1-register-providers-if-needed-" id="toc-hId-867897624">1.1 Register providers (if needed)</H4><P>The Arc quickstart includes registering resource providers like <CODE>Microsoft.Kubernetes</CODE>, <CODE>Microsoft.KubernetesConfiguration</CODE>, and <CODE>Microsoft.ExtendedLocation</CODE>. (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A>)</P><H4 id="1-2-run-the-connect-command" id="toc-hId-671384119">1.2 Run the connect command</H4><P>From the Arc quickstart, the core command is:</P><PRE><CODE>az connectedk8s connect --<SPAN class="">name</SPAN> <cluster-<SPAN class="">name</SPAN>> --resource-<SPAN class="">group</SPAN> <resource-<SPAN class="">group</SPAN>></CODE></PRE><P>In practice, I prefer to be explicit (especially on shared subscriptions) and set <CODE>--location</CODE> and <CODE>--tags</CODE>:</P><PRE><CODE>az connectedk8s connect \
--name <SPAN class=""><cluster-name></SPAN> \
--resource-group <SPAN class=""><resource-group></SPAN> \
--location <SPAN class=""><azure-region></SPAN> \
--<SPAN class="">tags</SPAN> env=<SPAN class=""><env></SPAN> owner=<SPAN class=""><team></SPAN> <SPAN class="">system</SPAN>=<SPAN class=""><system></SPAN>
</CODE></PRE><P>What I’m explicitly setting there:</P><UL><LI><CODE>--location</CODE>: the Azure region where the <STRONG>Azure Arc-enabled Kubernetes resource</STRONG> is created. If you omit it, it’s created in the same region as the resource group.</LI><LI><CODE>--tags</CODE>: Azure Resource Manager tags on the Arc resource (space-separated <CODE>key[=value]</CODE>).</LI></UL><P>If this command hangs or fails in weird ways, I go back to egress first — the Arc network requirements doc is the authoritative “what URLs/ports must my cluster reach?” list. (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/network-requirements" target="_blank" rel="noopener nofollow noreferrer">Azure Arc-enabled Kubernetes network requirements</A>)</P><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A> and <A href="https://learn.microsoft.com/en-us/cli/azure/connectedk8s?view=azure-cli-latest#az-connectedk8s-connect" target="_blank" rel="noopener nofollow noreferrer">Azure CLI reference — az connectedk8s connect</A>)</P><H4 id="1-3-verify-arc-agents-in-the-cluster" id="toc-hId-474870614">1.3 Verify Arc agents in the cluster</H4><P>The quickstart calls out that Arc deploys agents into the <CODE>azure-arc</CODE> namespace. I validate that they’re <CODE>Running</CODE>:</P><PRE><CODE>kubectl <SPAN class="">get</SPAN> deployments,pods -n azure-<SPAN class="">arc</SPAN>
</CODE></PRE><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A>)</P><P>Here’s what that looks like in practice on my Kyma cluster:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arc-pods-kyma.png" style="width: 904px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368107i5371DF84949A9569/image-size/large?v=v2&px=999" role="button" title="arc-pods-kyma.png" alt="arc-pods-kyma.png" /></span></P><P>And here’s the connected cluster resource in Azure (showing things like connectivity status, location, and tags):</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="arc-kyma-ui.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368108i00A2C62A41C26166/image-size/large?v=v2&px=999" role="button" title="arc-kyma-ui.png" alt="arc-kyma-ui.png" /></span></P><P>At this point, if Arc isn’t healthy, I stop and fix that first. Everything else depends on it.</P><H3 id="step-2-enable-the-containers-plan-in-microsoft-defender-for-cloud" id="toc-hId-149274390">Step 2 — Enable the Containers plan in Microsoft Defender for Cloud</H3><P>Now I go to Defender for Cloud and enable the <STRONG>Containers</STRONG> plan for the subscription where my Arc-enabled cluster lives.</P><P>The portal walkthrough is:</P><UL><LI>Microsoft Defender for Cloud → <STRONG>Environment settings</STRONG> → pick subscription → toggle <STRONG>Containers</STRONG> plan On</LI><LI>Select <STRONG>Settings</STRONG> next to the Containers plan → choose <STRONG>Enable specific components</STRONG></LI></UL><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A>)</P><P>At this point you’ll be asked which Containers plan components to enable.</P><P>You <EM>can</EM> enable everything, but for this post I’m intentionally focusing on the <STRONG>Defender sensor</STRONG> (runtime detections). The important callout: <STRONG>from a pricing perspective there’s no cost benefit to enabling one vs. many — the cost is the same</STRONG> — so this is purely about keeping the walkthrough scoped to runtime detection.</P><P>Here’s what that looks like in the portal (first the Containers plan settings, then the component selection where I keep only the sensor in scope):</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="enable-defender-containers-settings.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368109iBE82CDA5D44C2406/image-size/large?v=v2&px=999" role="button" title="enable-defender-containers-settings.png" alt="enable-defender-containers-settings.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="defender-settings-details.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368110i15410E5DD773E877/image-size/large?v=v2&px=999" role="button" title="defender-settings-details.png" alt="defender-settings-details.png" /></span></P><H3 id="step-3-deploy-defender-components-to-the-arc-enabled-cluster" id="toc-hId--122470484">Step 3 — Deploy Defender components to the Arc-enabled cluster</H3><P>I use one of two flows.</P><H4 id="option-a-recommended-deploy-via-defender-for-cloud-recommendations" id="toc-hId--612386996">Option A (recommended): Deploy via Defender for Cloud Recommendations</H4><P>This is the “guided remediation” path:</P><UL><LI>Defender for Cloud → <STRONG>Recommendations</STRONG></LI><LI>Find “Azure Arc-enabled Kubernetes clusters should have Defender extension installed”</LI><LI>Select the clusters → <STRONG>Fix</STRONG></LI></UL><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A>)</P><H4 id="option-b-deploy-manually-from-the-arc-cluster-resource" id="toc-hId--808900501">Option B: Deploy manually from the Arc cluster resource</H4><P>If I want explicit control (or I’m debugging), I do:</P><UL><LI>Arc-enabled Kubernetes resource → <STRONG>Extensions</STRONG> → <STRONG>+ Add</STRONG></LI><LI>Install <STRONG>Microsoft Defender for Containers</STRONG></LI><LI>Choose/configure the <STRONG>Log Analytics workspace</STRONG> during installation (this is where the extension sends collected logs/telemetry used by Defender for Cloud and Azure Monitor Logs)<UL><LI>I can select an existing workspace, create a new one, or use the default: <CODE>DefaultWorkspace-[subscription-id]-[region]</CODE></LI></UL></LI></UL><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A>)</P><H3 id="step-4-optional-programmatic-deployment-repeatable-automation-" id="toc-hId--712010999">Step 4 (optional) — Programmatic deployment (repeatable automation)</H3><P>If I’m onboarding clusters at scale, I don’t want a click path. The programmatic doc gives the Azure CLI commands for creating the Defender extension.</P><P>Defender sensor extension:</P><P>Note: Some examples include an <CODE>auditLogPath</CODE> setting for clusters where you control the API server audit log file location. In Kyma, audit logs are handled via SAP’s Platform Logging Service and you generally don’t have direct access to that file path, so I’m omitting it here.</P><PRE><CODE>az k8s-extension create \
-<SPAN class="">-name microsoft.azuredefender.kubernetes \</SPAN> -<SPAN class="">-cluster-type connectedClusters \</SPAN> -<SPAN class="">-cluster-name <cluster-name> \</SPAN> -<SPAN class="">-resource-group <resource-group> \</SPAN> -<SPAN class="">-extension-type microsoft.azuredefender.kubernetes \</SPAN> -<SPAN class="">-configuration-settings \</SPAN> logAnalyticsWorkspaceResourceID="/subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.OperationalInsights/workspaces/<workspace-name>"</CODE></PRE><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-programmatically" target="_blank" rel="noopener nofollow noreferrer">Deploy Defender for Containers on Arc-enabled Kubernetes (programmatic)</A>)</P><P>If you need the generic “how do extensions work / how do I list/update/delete them” reference, the Arc extensions doc is the canonical place. (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/extensions" target="_blank" rel="noopener nofollow noreferrer">Deploy and manage Arc-enabled Kubernetes extensions</A>)</P><H3 id="step-5-verify-it-s-actually-working" id="toc-hId--908524504">Step 5 — Verify it’s actually working</H3><P>This is where I slow down and prove success.</P><P>Microsoft’s verification checklist is:</P><UL><LI>Arc connection is healthy</LI><LI>Defender extension shows as installed</LI><LI>Sensor pods are running</LI><LI>Alerts appearing</LI></UL><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A>)</P><H4 id="5-1-verify-arc-connectivity" id="toc-hId--1398441016">5.1 Verify Arc connectivity</H4><PRE><CODE>az connectedk8s show \
-<SPAN class="">-name <cluster-name> \</SPAN> -<SPAN class="">-resource-group <resource-group> \</SPAN> -<SPAN class="">-query connectivityStatus</SPAN>
</CODE></PRE><P>The expected output is <CODE>Connected</CODE>. (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A>)</P><H4 id="5-2-verify-defender-extension-provisioning" id="toc-hId--1594954521">5.2 Verify Defender extension provisioning</H4><PRE><CODE>az k8s-extension show \
-<SPAN class="">-name microsoft.azuredefender.kubernetes \</SPAN> -<SPAN class="">-cluster-type connectedClusters \</SPAN> -<SPAN class="">-cluster-name <cluster-name> \</SPAN> -<SPAN class="">-resource-group <resource-group> \</SPAN> -<SPAN class="">-query provisioningState</SPAN>
</CODE></PRE><P>The expected output is <CODE>Succeeded</CODE>. (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A>)</P><H4 id="5-3-verify-sensor-pods" id="toc-hId--1791468026">5.3 Verify sensor pods</H4><PRE><CODE>kubectl <SPAN class="">get</SPAN> pods -n kube-<SPAN class="">system</SPAN> -l app=microsoft-defender
<SPAN class=""># If you don’t see anything in kube-system, also check the mdc namespace:</SPAN>
kubectl <SPAN class="">get</SPAN> ds -n mdc
kubectl <SPAN class="">get</SPAN> pods -n mdc</CODE></PRE><P>This is the simplest “is the sensor deployed?” check. If the DaemonSet exists and the pods are <CODE>Running</CODE>, you’re in good shape.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="defender-daemonsets.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368111iC3A48CB4F95070E2/image-size/large?v=v2&px=999" role="button" title="defender-daemonsets.png" alt="defender-daemonsets.png" /></span></P><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A>)</P><H4 id="5-4-verify-in-the-portal" id="toc-hId--1987981531">5.4 Verify in the portal</H4><P>This is the “did Azure actually receive the signals?” check.</P><P>After you’ve deployed the Defender extension and the sensor is running, go to <STRONG>Microsoft Defender for Cloud</STRONG> and look at <STRONG>Security alerts</STRONG> (or the Alerts view in the Defender for Cloud experience). If you just ran the simulator (next step), this is where you’ll see the resulting alerts.</P><P>It can take a bit of time (think minutes, not seconds) for the cluster and alerts to show up after onboarding. (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A>)</P><H4 id="5-5-optional-prove-runtime-detection-by-simulating-alerts" id="toc-hId-2110472260">5.5 (Optional) Prove runtime detection by simulating alerts</H4><P>If I want hard proof that the sensor-backed detections are flowing end-to-end, I use Microsoft’s Kubernetes alerts simulation tool.</P><P>It has two prerequisites that matter in practice:</P><UL><LI>Defender for Containers is enabled and the Defender sensor is deployed.</LI><LI>I have admin permissions on the cluster.</LI></UL><P>Then I download and run the simulator:</P><PRE><CODE>curl -O http<SPAN class="">s:</SPAN>//raw.githubusercontent.<SPAN class="">com</SPAN>/microsoft/Defender-<SPAN class="">for</SPAN>-Cloud-Attack-Simulation/refs/heads/main/simulation.<SPAN class="">py</SPAN>
<SPAN class="">python</SPAN> simulation.<SPAN class="">py</SPAN>
</CODE></PRE><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="run-simulation-alerts.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368112iC3515E0A16A305FC/image-size/large?v=v2&px=999" role="button" title="run-simulation-alerts.png" alt="run-simulation-alerts.png" /></span></P><P>After it runs, I go back to Defender for Cloud and look at the alerts that were generated:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="defender-alerts-simulation.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368113i931D880C4A9ABCFE/image-size/large?v=v2&px=999" role="button" title="defender-alerts-simulation.png" alt="defender-alerts-simulation.png" /></span></P><P>(Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/alerts-containers#kubernetes-alerts-simulation-tool" target="_blank" rel="noopener nofollow noreferrer">Kubernetes alerts — Kubernetes alerts simulation tool</A>)</P><H4 id="5-6-inspect-the-alert-details-example-binary-drift-" id="toc-hId-2082142446">5.6 Inspect the alert details (example: binary drift)</H4><P>To make this feel real (and to sanity-check what Defender is actually flagging), I open one of the generated alerts and look at the <STRONG>Alert details</STRONG> pane. For example, the “A drift binary detected executing in the container” alert includes fields like the <STRONG>suspicious process path</STRONG>, <STRONG>command line</STRONG>, <STRONG>parent process</STRONG>, and the <STRONG>affected Arc-enabled Kubernetes resource</STRONG>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="details-drift-binary.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368114i0C069D1D3E3DB66D/image-size/large?v=v2&px=999" role="button" title="details-drift-binary.png" alt="details-drift-binary.png" /></span></P><H3 id="step-6-troubleshooting-the-short-list-" id="toc-hId--2115935348">Step 6 — Troubleshooting (the short list)</H3><H4 id="6-1-if-an-extension-is-stuck-check-egress-first" id="toc-hId-1689115436">6.1 If an extension is stuck, check egress first</H4><UL><LI>Arc-required outbound URLs: (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/network-requirements" target="_blank" rel="noopener nofollow noreferrer">Azure Arc-enabled Kubernetes network requirements</A>)</LI><LI>Defender-required outbound endpoint (<CODE>*.cloud.defender.microsoft.com:443</CODE>) (Docs: <A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A>)</LI></UL><H4 id="6-2-if-things-drift-over-time" id="toc-hId-1492601931">6.2 If things drift over time</H4><P>The Arc extensions doc notes that if Arc agents don’t have network connectivity for an extended period, an extension can transition to <CODE>Failed</CODE>, and you may need to recreate the extension. (Docs: <A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/extensions" target="_blank" rel="noopener nofollow noreferrer">Deploy and manage Arc-enabled Kubernetes extensions</A>)</P><HR /><H2 id="closing-thoughts" id="toc-hId-1882894440">Closing thoughts</H2><P>If you’re running Kubernetes outside AKS, it’s easy to end up with fragmented security tooling. The Arc + Defender for Containers pattern is one of the cleaner ways I’ve found to bring:</P><UL><LI>centralized visibility,</LI><LI>actionable runtime alerts,</LI><LI>and runtime security signals</LI></UL><P>into a hybrid Kubernetes estate—without replatforming.</P><P>In future posts, I’ll explore what else we can do with <STRONG>Kyma + Azure Arc + Azure</STRONG> beyond Defender for Containers (observability, more security patterns, etc.).</P><HR /><H2 id="references-microsoft-learn-" id="toc-hId-1686380935">References (Microsoft Learn)</H2><UL><LI><A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/overview" target="_blank" rel="noopener nofollow noreferrer">Azure Arc-enabled Kubernetes overview</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/network-requirements" target="_blank" rel="noopener nofollow noreferrer">Azure Arc-enabled Kubernetes network requirements</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster" target="_blank" rel="noopener nofollow noreferrer">Quickstart: Connect an existing Kubernetes cluster to Azure Arc</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/azure-arc/kubernetes/extensions" target="_blank" rel="noopener nofollow noreferrer">Deploy and manage Arc-enabled Kubernetes extensions</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-portal" target="_blank" rel="noopener nofollow noreferrer">Enable Defender for Containers on Arc-enabled Kubernetes (portal)</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-enable-programmatically" target="_blank" rel="noopener nofollow noreferrer">Deploy Defender for Containers on Arc-enabled Kubernetes (programmatic)</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-arc-verify" target="_blank" rel="noopener nofollow noreferrer">Verify Defender for Containers on Arc-enabled Kubernetes</A></LI><LI><A href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-containers-architecture" target="_blank" rel="noopener nofollow noreferrer">Defender for Containers architecture</A></LI></UL>2026-02-02T15:52:32.766000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/custom-domain-service-in-sap-btp-build-work-zone-standard-edition/ba-p/14314511Custom Domain Service in SAP BTP Build Work Zone (Standard Edition)2026-02-03T06:12:27.191000+01:00RohitGerahttps://community.sap.com/t5/user/viewprofilepage/user-id/7607<P>Hello Everyone,</P><P>After analyzing and successfully implementing <STRONG>Custom Domain Service</STRONG> in <STRONG>SAP Build Work Zone, Standard Edition</STRONG>, I’m writing this blog to share my learnings. This post explains the <STRONG>concept of Custom Domain Service in SAP BTP</STRONG> and provides <STRONG>end-to-end steps</STRONG> to configure and use it with SAP Build Work Zone.</P><P>This blog will help you get started with <STRONG>SAP Custom Domain Service</STRONG> in <STRONG>SAP BTP Build Work Zone (Standard Edition)</STRONG>.</P><P> </P><H2 id="toc-hId-1788661122">Business Requirement</H2><P>Our client required the use of a <STRONG>custom (client-specific) domain</STRONG> instead of the <STRONG>SAP standard domain</STRONG>.</P><P>By default, when accessing an SAP Build Work Zone site, the URL looks like this:</P><PRE><CODE>https://<SubAccount>.launchpad.cfapps.<DataCenter>.hana.ondemand.com/site/<site-alias>#Shell-home</CODE></PRE><P>(Here, we are using <STRONG>SAP Build Work Zone – Standard Edition</STRONG>.). We can use it for advanced edition too.</P><P>The requirement was to replace this with a <STRONG>client-friendly URL</STRONG>, for example:</P><PRE><CODE>https://abc.com
OR
https://abcservices.abc.com</CODE></PRE><P>We initially tried redirecting traffic from<BR /><CODE><A href="https://abcservices.abc.com" target="_blank" rel="noopener nofollow noreferrer">https://abcservices.abc.com</A></CODE> to the SAP BTP Work Zone URL.<BR />However, this approach didn’t meet the requirement because:</P><UL><LI><P>Network-level redirection works, but</P></LI><LI><P>The browser address bar changes to the SAP BTP URL,</P></LI><LI><P>The client URL (<CODE><A href="https://abcservices.abc.com" target="_blank" rel="noopener nofollow noreferrer">https://abcservices.abc.com</A></CODE>) is no longer visible.</P></LI></UL><P>To solve this, we implemented <STRONG>SAP Custom Domain Service</STRONG>.</P><P> </P><H2 id="toc-hId-1592147617">Prerequisites</H2><P>Before starting the configuration, ensure the following prerequisites are met:</P><H3 id="toc-hId-1524716831">1. Enable Custom Domain Service</H3><P>Add <STRONG>Custom Domain Service</STRONG> to your <STRONG>subaccount</STRONG> with the <STRONG>Standard</STRONG> plan.</P><BLOCKQUOTE><P>Note: Another plan exists but is deprecated at the time of writing this blog.</P></BLOCKQUOTE><P><STRONG>SAP Help Document:</STRONG><BR /><A href="https://help.sap.com/docs/custom-domain/custom-domain-manager/initial-setup" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/custom-domain/custom-domain-manager/initial-setup</A></P><P>Below is the screen shot from sub account for reference:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_0-1769766584396.png" style="width: 680px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367327iF67382972CABCD82/image-dimensions/680x128?v=v2" width="680" height="128" role="button" title="RohitGera_0-1769766584396.png" alt="RohitGera_0-1769766584396.png" /></span></P><P>Please note SAP will charge based on how many certificate you have uploaded in the Cusotm Domain Manager irrespective of Number of Custom Domain.</P><P> </P><H3 id="toc-hId-1328203326">2. Finalize Reserved and Custom Domains</H3><P>Finalize your <STRONG>reserved domain</STRONG> and <STRONG>custom domains</STRONG> in advance.</P><P><STRONG>Do’s:</STRONG></P><UL><LI><P>Do not rush this step. </P></LI><LI><P>Finalize domains separately for <STRONG>Non-Prod (DEV & QA)</STRONG> and <STRONG>Prod</STRONG> subaccounts.</P></LI><LI><P>Changing domains later can be complex and time-consuming.</P></LI></UL><P><STRONG>Dont’s:</STRONG></P><UL><LI>Do not signed the CSR form Trusted CA authority because it involved cost and time. </LI><LI>If possible dont configure the Non Prod and Prod Custom domain in single custom domain manager because it will mess the things. Try to keep the Custom Domain Service for Production seperately.</LI><LI>Dont configure the Custom Domain Manager for Production untill you get success in the Non Prod environment.</LI><LI> </LI></UL><H3 id="toc-hId-1131689821">3. Runtime Destination Naming</H3><P>Ensure the <STRONG>runtime destination names</STRONG> are finalized as per project standards, as these are referenced by applications.</P><P> </P><H2 id="toc-hId-806093597">Implementation Steps</H2><H3 id="toc-hId-738662811">Step 1: Define a Default Site</H3><P>A <STRONG>default site</STRONG> is the site that opens when no site ID is specified in the URL.</P><P>Key points:</P><UL><LI><P>A default site is configured <STRONG>per custom domain</STRONG>.</P></LI><LI><P>It does <STRONG>not</STRONG> affect all domains in the subaccount.</P></LI><LI><P>A custom domain can be mapped to only <STRONG>one entry point</STRONG>, which is why it’s mapped to the <STRONG>default site</STRONG> and not to a specific site. Below is the screen shot of the default site:</P></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_1-1769767006507.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367339i272B63F06D9A7C11/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="RohitGera_1-1769767006507.png" alt="RohitGera_1-1769767006507.png" /></span></P><P> </P><P> </P><H3 id="toc-hId-542149306">Step 2: Identify the Reserved Domain</H3><P>The <STRONG>reserved domain</STRONG> should be the <STRONG>parent domain</STRONG>, for example:</P><PRE><CODE>abc.com or abcservices.abc.com</CODE></PRE><P>The <STRONG>custom domain</STRONG> is created using the reserved domain, such as:</P><PRE><CODE>wz.abcservices.abc.com</CODE></PRE><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_2-1769767132424.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367340i0B87C53C0FE7B467/image-size/medium?v=v2&px=400" role="button" title="RohitGera_2-1769767132424.png" alt="RohitGera_2-1769767132424.png" /></span></P><P> </P><H3 id="toc-hId-345635801">Step 3: Define Custom Domains for Applications</H3><P>Create custom domains for the following applications as needed:</P><OL><LI><P><STRONG>SAP Build Work Zone</STRONG></P></LI><LI><P><STRONG>On-Premise Backend Systems</STRONG> (S/4HANA, CRM, BW, etc.) – <EM>Optional</EM></P></LI><LI><P><STRONG>Identity Authentication Service (IAS)</STRONG> – <EM>Optional</EM></P></LI></OL><BLOCKQUOTE><P>IAS works with the SAP standard domain by default. A custom domain for IAS is optional.</P></BLOCKQUOTE><H4 id="toc-hId-278205015">IAS Considerations</H4><P>In our case, we did <STRONG>not</STRONG> configure a custom domain for IAS because:</P><UL><LI><P>IAS requires a separate CSR and CA-signed certificate.</P></LI><LI><P>This involves additional cost.</P></LI><LI><P>Wildcard certificates used in Custom Domain Manager <STRONG>do not work for IAS</STRONG>.</P></LI></UL><P><STRONG>Reference Documents:</STRONG></P><UL><LI><P><A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/use-custom-domain-in-identity-authentication" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/use-custom-domain-in-identity-authentication</A></P></LI><LI><P><A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/regional-availability?version=Cloud" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/regional-availability?version=Cloud</A></P></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_3-1769767311802.png" style="width: 794px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367342i55A7F4ECD9A52254/image-dimensions/794x261?v=v2" width="794" height="261" role="button" title="RohitGera_3-1769767311802.png" alt="RohitGera_3-1769767311802.png" /></span></P><P> </P><H3 id="toc-hId--122622578">Step 4: Configure Custom Domain Manager</H3><P>Add the <STRONG>reserved domain</STRONG> and <STRONG>custom domains</STRONG> in <STRONG>Custom Domain Manager</STRONG>.</P><H4 id="toc-hId--612539090">Required Roles:</H4><P>Assign the following roles to the user (Default or Custom IAS):</P><UL><LI><P><STRONG>Custom Domain Administrator</STRONG> – Manage configurations</P></LI><LI><P><STRONG>Custom Domain Viewer</STRONG> – View configurations</P></LI></UL><P>Once roles are assigned, you can access <STRONG>Custom Domain Manager</STRONG> from the subaccount.</P><H3 id="toc-hId--515649588"> </H3><H3 id="toc-hId--712163093">Step 5: Create SaaS Routes</H3><P>Create a <STRONG>SaaS route</STRONG> for each custom domain.<BR />These routes act as redirection endpoints for:</P><UL><LI><P>SAP Build Work Zone</P></LI><LI><P>Backend systems (if applicable)</P></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_4-1769767538312.png" style="width: 751px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367343i212651F7AB4CCB1D/image-dimensions/751x252?v=v2" width="751" height="252" role="button" title="RohitGera_4-1769767538312.png" alt="RohitGera_4-1769767538312.png" /></span></P><P> </P><H3 id="toc-hId--908676598">Step 6: Create TLS Configuration</H3><P>Create a <STRONG>TLS configuration</STRONG> for secure communication.</P><P><STRONG>SAP Help Document:</STRONG><BR /><A href="https://help.sap.com/docs/custom-domain/custom-domain-manager/manage-tls-configurations" target="_blank" rel="noopener noreferrer">https://help.sap.com/docs/custom-domain/custom-domain-manager/manage-tls-configurations</A></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_0-1770095743175.png" style="width: 721px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368389iD08C164C486F3758/image-dimensions/721x292?v=v2" width="721" height="292" role="button" title="RohitGera_0-1770095743175.png" alt="RohitGera_0-1770095743175.png" /></span></P><H3 id="toc-hId--1105190103">Step 7: Generate CSR (Certificate Signing Request)</H3><P>Generate a <STRONG>CSR</STRONG> from Custom Domain Manager and get it signed by a <STRONG>trusted Certificate Authority (CA)</STRONG>.</P><H4 id="toc-hId--1595106615">CSR Generation Options</H4><P><STRONG>Option A: Individual Certificates</STRONG><BR />Generate one CSR per domain, for example:</P><UL><LI><P><CODE>s4.abcservices.abc.com</CODE></P></LI><LI><P><CODE>crm.abcservices.abc.com</CODE></P></LI><LI><P><CODE>bw.abcservices.abc.com</CODE></P></LI></UL><P><STRONG>Option B: Wildcard Certificate</STRONG><BR />Generate a wildcard CSR:</P><PRE><CODE>CN: *.abcservices.abc.com
SAN: *.abcservices.abc.com, abcservices.abc.com</CODE></PRE><H4 id="toc-hId--1791620120">Certificate Signing Guidelines</H4><UL><LI><P><STRONG>Internal network</STRONG> → Internal CA is acceptable and all the applicaiton will work.</P></LI><LI><P><STRONG>Public access</STRONG> → Internal CA will cause browser warnings as below and navigation to the backend </P></LI><LI><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_0-1770289776904.png" style="width: 730px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369147iD0C82EE0588CE3CF/image-dimensions/730x301?v=v2" width="730" height="301" role="button" title="RohitGera_0-1770289776904.png" alt="RohitGera_0-1770289776904.png" /></span></P><P> </P><P>Use a trusted CA like <STRONG>DigiCert </STRONG>if you want to access the custom domain publically.</P><P> </P></LI></UL><P><STRONG>Important Notes:</STRONG></P><UL><LI><P>Verify <STRONG>CN and SAN</STRONG> before submitting CSR.</P></LI><LI><P>Certificates are valid <STRONG>only for the Custom Domain Manager instance</STRONG> from which the CSR was generated.</P></LI><LI><P>Non-Prod certificates cannot be reused in Prod.</P></LI><LI>We have generated the Wild Card Certificate for Production and Single Certificate (Included all SAN) for Non Prod System. Below is the Certificate Screen shot:</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_1-1770095804785.png" style="width: 729px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/368390iF1D61E742E487AE9/image-dimensions/729x279?v=v2" width="729" height="279" role="button" title="RohitGera_1-1770095804785.png" alt="RohitGera_1-1770095804785.png" /></span></P><P> </P><P><STRONG>DigiCert Reference:</STRONG><BR /><A href="https://docs.digicert.com/en/certcentral/manage-certificates/reissue-an-ssl-tls-certificate.html" target="_blank" rel="noopener nofollow noreferrer">https://docs.digicert.com/en/certcentral/manage-certificates/reissue-an-ssl-tls-certificate.html</A></P><H3 id="toc-hId--1694730618"> </H3><H3 id="toc-hId--1891244123">(Optional) IAS CSR Generation</H3><P>Wildcard certificates <STRONG>do not work</STRONG> for IAS.<BR />A separate CSR and certificate are required.</P><BLOCKQUOTE><P>We skipped IAS custom domain due to additional cost and renewal overhead.</P></BLOCKQUOTE><H3 id="toc-hId--1919573937"> </H3><H3 id="toc-hId--2116087442">Step 8: Upload and Activate Certificate</H3><P>Once signed, upload the certificate to <STRONG>Custom Domain Manager</STRONG>.</P><P>The certificate package includes:</P><UL><LI><P>Actual certificate</P></LI><LI><P>Intermediate certificate</P></LI><LI><P>Root certificate</P></LI></UL><H4 id="toc-hId-1688963342">Certificate Chain Format</H4><PRE><CODE>Actual Certificate
+ Intermediate Certificate
+ Root Certificate</CODE></PRE><P><STRONG>Tips:</STRONG></P><UL><LI><P>Combine the full chain in a text file.</P></LI><LI><P>Remove extra spaces or blank lines.</P></LI><LI><P>Activate the certificate after upload.</P></LI></UL><P>Once activated:</P><UL><LI><P>Certificate expiry days are visible.</P></LI><LI><P>Renewal can be planned proactively.</P></LI></UL><P> </P><H2 id="toc-hId-2079255851">Final Result</H2><P>After successful activation, SAP Build Work Zone is accessible using the custom domain:</P><PRE><CODE>https://wz.abccompany.company.com</CODE></PRE><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_7-1769767998071.png" style="width: 744px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/367348iBDC5C3EF8C1F5AB0/image-dimensions/744x388?v=v2" width="744" height="388" role="button" title="RohitGera_7-1769767998071.png" alt="RohitGera_7-1769767998071.png" /></span></P><P> </P><P><STRONG>Errors that can occur: </STRONG>After all the configuration, If you stuck in the IAS authentication while accessing the work zone and getting the below error then add the custom domain in the IAS application:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_1-1770290146587.png" style="width: 620px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369150iC32C59E05990BEF7/image-dimensions/620x245?v=v2" width="620" height="245" role="button" title="RohitGera_1-1770290146587.png" alt="RohitGera_1-1770290146587.png" /></span></P><P> </P><P>Add you custom domain in the following path in the IAS if not came automatically:</P><P>Login to IAS -> Applications & Resources -> Applications -> Select the Application of Build Work Zone -> Single Sign On -> OpenID Connet Configuraiton and then in the <STRONG>Redirect URIs </STRONG>and<STRONG>Post Logout Redirect URIs </STRONG>section add the URl as <STRONG>https://*.abcservices.abc.ae/** </STRONG>(Your custom domain so that IAS will trust this domain)</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_2-1770290505147.png" style="width: 699px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369153i9EA8DF7B7FA4BAC4/image-dimensions/699x365?v=v2" width="699" height="365" role="button" title="RohitGera_2-1770290505147.png" alt="RohitGera_2-1770290505147.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RohitGera_4-1770290594863.png" style="width: 700px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/369156i336613B50C700C5C/image-dimensions/700x366?v=v2" width="700" height="366" role="button" title="RohitGera_4-1770290594863.png" alt="RohitGera_4-1770290594863.png" /></span></P><P> </P><H2 id="toc-hId-1882742346">Conclusion</H2><P>I hope this blog helps you understand the <STRONG>Custom Domain Service</STRONG> concept and implement it successfully in <STRONG>SAP Build Work Zone</STRONG> projects.</P><P>Happy learning and implementing! <span class="lia-unicode-emoji" title=":rocket:">🚀</span></P><P> </P><P><STRONG>Regards,</STRONG><BR /><STRONG>Rohit Gera</STRONG></P>2026-02-03T06:12:27.191000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/q4-2025-quarterly-release-highlights-sap-btp-security-and-identity-amp/ba-p/14324273Q4 2025 Quarterly Release Highlights: SAP BTP Security and Identity & Access Management2026-02-10T09:00:00.021000+01:00RegineSchimmerhttps://community.sap.com/t5/user/viewprofilepage/user-id/8286<P><SPAN>In the last quarter of 2025, we release a number of new features, as well as the SAP Key Management Service.</SPAN></P><P><SPAN>Want the full overview for SAP Cloud Identity Services? You’ll find a list of all new feature announcements for SAP Cloud Identity Services in the <A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/what-s-new-for-identity-authentication" target="_blank" rel="noopener noreferrer">SAP Cloud Identity Services Release Notes</A> on the SAP Help Portal. </SPAN></P><H2 id="toc-hId-1789581948"><SPAN>SAP Cloud Identity Services: Use Data Control Language (DCL) to Define Authorization Policies</SPAN></H2><P><SPAN>Developers define authorization policies in SAP Cloud Identity Services, using an SQL-like language - the data control language (DCL). Administrators can restrict base policies and combine authorization policies into a new authorization policy. For more details, please check the <A href="https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/data-control-language-dcl" target="_blank" rel="noopener noreferrer">SAP Help Portal</A>. </SPAN></P><H2 id="toc-hId-1593068443"><SPAN>SAP Key Management Service</SPAN></H2><P><SPAN>We released the <A href="https://help.sap.com/docs/SAP_Key_Management_Service?locale=en-US" target="_blank" rel="noopener noreferrer"><STRONG>SAP Key Management Service (KMS)</STRONG></A>, which puts customers in control of their data across SAP cloud services and products. By managing their own encryption keys, customers decide exactly who can access their information. </SPAN></P><P><SPAN>With SAP KMS</SPAN><SPAN>, data remains inaccessible to any external party, including SAP, government agencies, or legal authorities, unless the customer explicitly authorizes access. The service enables customers to securely create, manage, and control the encryption keys used to protect their data, and helps ensure that encryption and decryption can occur only with their approval. </SPAN></P><H2 id="toc-hId-1396554938"><SPAN>SAP Cryptographic Library</SPAN></H2><P><SPAN>The latest <STRONG>SAP Cryptographic Library</STRONG> release (version 8.6) supports quantum-safe cryptography and contains updated compliance certifications. It introduces a quantum-safe TLS 1.3 handshake using a hybrid key exchange that protects encrypted communications even against future quantum attacks. </SPAN></P><P><SPAN>In addition, SAP’s FIPS crypto kernel has achieved FIPS 140-3 certification, meeting strict security requirements for regulated industries. Together, these enhancements help customers future-proof their data protection while maintaining compliance. For more information, check our latest <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/new-version-8-6-of-the-sap-cryptographic-library-with-quantum-safe/ba-p/14280039" target="_blank">blog </A> as well as release notes <A href="https://me.sap.com/notes/3685428" target="_blank" rel="noopener noreferrer">3685428 - Fixes and features in CommonCryptoLib 8.6.2</A> and <A href="https://me.sap.com/notes/1848999" target="_blank" rel="noopener noreferrer">1848999 - Central Note for CommonCryptoLib 8 (SAPCRYPTOLIB)</A>.</SPAN></P><H2 id="toc-hId-1200041433"><SPAN>Application Vulnerability Report for SAP BTP</SPAN></H2><P><SPAN>Frequent security issues in open-source components endanger business data in applications. Use the application vulnerability report to detect and remediate any vulnerabilities in your SAP BTP landscape. The application vulnerability report focuses on detecting publicly-known security vulnerabilities based on Common Vulnerabilities and Exposures (CVEs). It's crucial to solve such vulnerabilities quickly as attackers are generally aware of them and might try to break into vulnerable systems. Check our <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/beta-version-of-application-vulnerability-report-for-sap-btp-now-available/ba-p/14283839" target="_blank">blog</A> for details.</SPAN></P><H2 id="toc-hId-1003527928"><SPAN>Stay connected</SPAN></H2><P><SPAN>Want to stay up to date on our services? Join our <A href="https://pages.community.sap.com/topics/btp-security" target="_blank" rel="noopener noreferrer">SAP BTP Security</A> and <A href="https://pages.community.sap.com/topics/cloud-identity-services" target="_blank" rel="noopener noreferrer">SAP Cloud Identity Services</A> communities! </SPAN></P><P><SPAN> </SPAN></P><P> </P>2026-02-10T09:00:00.021000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/ui-for-the-btp-application-vulnerability-report/ba-p/14325818UI for the BTP Application Vulnerability Report2026-02-10T22:42:33.106000+01:00WouterLemairehttps://community.sap.com/t5/user/viewprofilepage/user-id/9863<P><SPAN>SAP recently introduced the Application Vulnerability Report for Cloud Foundry applications on BTP. It is a tool that scans your deployed applications for known vulnerabilities and exposes the findings through an API. If you haven't seen it yet, check out the official announcement: </SPAN><A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684" target="_blank">https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684</A></P><P><SPAN>The API is great, but what was missing is an interface to browse, search, filter, sort and export those findings. So I built one. In this blog post I'll walk you through the open-source UI I created on top of the BTP Application Vulnerability Report API.</SPAN></P><H2 id="toc-hId-1789617324"> </H2><H2 id="toc-hId-1593103819"><SPAN>Problem</SPAN></H2><P><SPAN>The Application Vulnerability Report API provides: vulnerability descriptions, severity levels, affected packages, CVE identifiers and the full organizational context (global account, sub-account, space, org). However, consuming a raw API to get an overview of your security posture is not practical for most teams. You need to be able to:</SPAN></P><UL><LI><SPAN>Quickly scan through all findings at a glance</SPAN></LI><LI><SPAN>Sort by severity, application name or date to prioritize remediation</SPAN></LI><LI><SPAN>Filter by sub-account, space, organization or any other column</SPAN></LI><LI><SPAN>Search across all findings with a free-text search</SPAN></LI><LI><SPAN>Export the full report to Excel for offline analysis or sharing with stakeholders</SPAN></LI></UL><H2 id="toc-hId-1396590314"> </H2><H2 id="toc-hId-1200076809"><SPAN>Solution</SPAN></H2><P><SPAN>That's what I tried to solve by adding this UI: a full SAPUI5 frontend backed by a CAP Node.js service that proxies the BTP API, deployed via the managed approuter on BTP. The CAP layer might be a bit overkill at this point but it offers flexibility for future improvements. </SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_1-1770759652731.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371192i9CC68784C972E22C/image-size/medium?v=v2&px=400" role="button" title="WouterLemaire_1-1770759652731.png" alt="WouterLemaire_1-1770759652731.png" /></span></P><P><SPAN>The first version comes with the following features:</SPAN></P><UL><LI><STRONG>Sorting</STRONG>: Click column headers to sort findings</LI><LI><STRONG>Filtering</STRONG>: Right-click cells or use column menus to filter by severity, application, sub-account, space or any field</LI><LI><STRONG>Free-Text Search</STRONG>: Search across all finding properties using CVE numbers, package names or application names</LI><LI><STRONG>Export to Excel</STRONG>: Generate formatted .xlsx files with all 15 fields including recommendations, dates, finding IDs and CVSS scores</LI><LI><STRONG>Severity Indicators</STRONG>: Color-coded findings (Critical/High in red, Moderate in orange, Low in blue) for instant visual prioritization</LI></UL><H2 id="toc-hId-1003563304"> </H2><H2 id="toc-hId-807049799"><SPAN>Architecture Overview</SPAN></H2><P><SPAN>The project consists of two parts:</SPAN></P><UL><LI><SPAN>CAP Node.js Backend: A lightweight OData V4 service that acts as a proxy to the BTP Application Vulnerability Report API. It connects to the external API via a BTP Destination with OAuth2 authentication. The CAP service defines the Findings entity as a projection on the external service model and uses api.run(req.query) to forward OData queries. At this point, the only value of having CAP is for merging some array fields into one single column:</SPAN></LI></UL><P><SPAN> </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_2-1770759678419.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371193i7DE488C967D80D91/image-size/medium?v=v2&px=400" role="button" title="WouterLemaire_2-1770759678419.png" alt="WouterLemaire_2-1770759678419.png" /></span></P><P> </P><UL><LI><SPAN>SAPUI5 Frontend: A freestyle UI5 application with a table to show the overview and provide some additional functionalities like sorting, filtering and an export to excel. Now thinking about it, this could’ve been a Fiori Elements app as well. The app is deployed to the HTML5 Application Repository and served via the managed approuter of SAP Build Work Zone.</SPAN></LI></UL><P><SPAN> </SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_0-1770759606583.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371191iC58C098EB96E4C34/image-size/medium?v=v2&px=400" role="button" title="WouterLemaire_0-1770759606583.png" alt="WouterLemaire_0-1770759606583.png" /></span></P><H2 id="toc-hId-610536294"> </H2><H2 id="toc-hId-414022789"><SPAN>Getting It Up and Running</SPAN></H2><H3 id="toc-hId-346592003"><SPAN>Prerequisites</SPAN></H3><UL><LI><SPAN>Node.js >= 18</SPAN></LI><LI><SPAN>SAP CAP CLI (npm i -g @sap/cds-dk)</SPAN></LI><LI><SPAN>Cloud MTA Build Tool (npm i -g mbt)</SPAN></LI><LI><SPAN>CF CLI with the MTA plugin</SPAN></LI><LI><SPAN>A BTP subaccount with the Application Vulnerability Report service enabled</SPAN></LI></UL><H3 id="toc-hId-150078498"><SPAN>Step 1: Clone the Repository</SPAN></H3><P><SPAN>git clone <A href="https://github.com/lemaiwo/btp-application-vulnerability-report-ui.git" target="_blank" rel="noopener nofollow noreferrer">https://github.com/lemaiwo/btp-application-vulnerability-report-ui.git</A><BR />cd btp-application-vulnerability-report-ui<BR />npm install</SPAN></P><H3 id="toc-hId--121666376"><SPAN>Step 2: Create the BTP Destination</SPAN></H3><P><SPAN>In your BTP subaccount, create a destination named "BTPVulnerabilityReport" that points to the Application Vulnerability Report API. Configure it with OAuth2ClientCredentials authentication using the credentials from your service key.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="WouterLemaire_3-1770759699130.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371194iD5BB0EBDBC442078/image-size/medium?v=v2&px=400" role="button" title="WouterLemaire_3-1770759699130.png" alt="WouterLemaire_3-1770759699130.png" /></span></P><H3 id="toc-hId--318179881"><SPAN>Step 3: Build and Deploy</SPAN></H3><P><SPAN>mbt build -t gen --mtar btpvulnerabilityreport.mtar<BR />cf deploy gen/btpvulnerabilityreport.mtar</SPAN></P><P><SPAN>The MTA deployment creates:</SPAN></P><UL><LI><SPAN>A CAP Node.js backend application</SPAN></LI><LI><SPAN>An XSUAA service instance for authentication</SPAN></LI><LI><SPAN>A Destination service instance (with HTML5 runtime enabled)</SPAN></LI><LI><SPAN>An HTML5 Application Repository entry for the UI5 app</SPAN></LI></UL><H3 id="toc-hId--514693386"><SPAN>Step 4: Access the App</SPAN></H3><P><SPAN>The application is deployed using the managed approuter pattern. You can access it through SAP Build Work Zone by adding it as an application tile. The Fiori Launchpad integration is pre-configured with the semantic object "VulnerabilityReport" and action "display".</SPAN></P><H3 id="toc-hId--711206891"><SPAN>Local Development</SPAN></H3><P><SPAN>For local development, run cds watch from the project root (not ui5 serve from the app folder). The cds-plugin-ui5 plugin serves the UI5 app directly from the CAP server. To test against the real BTP API locally, use the hybrid profile: cds watch --profile hybrid after binding the destination service with cds bind.</SPAN></P><H3 id="toc-hId--907720396"><SPAN>No Database Required</SPAN></H3><P><SPAN>The application does not use a database. All data comes directly from the BTP API in real-time. This keeps the architecture simple and ensures you always see the latest findings without any synchronization concerns.</SPAN></P><H2 id="toc-hId--810830894"> </H2><H2 id="toc-hId--1007344399"><SPAN>What's Next?</SPAN></H2><P><SPAN>The current version uses the managed approuter of SAP Build Work Zone for serving the application. I'm considering adding a standalone approuter configuration as an alternative for scenarios where Work Zone is not available or needed.</SPAN></P><P><SPAN>Other ideas for future enhancements include dashboard charts for severity distribution, drill-down to individual finding details and scheduled notifications for new critical findings.</SPAN></P><P><SPAN>Contributions and feedback are welcome! The full source code is available on GitHub:</SPAN></P><P><SPAN><A href="https://github.com/lemaiwo/btp-application-vulnerability-report-ui" target="_blank" rel="noopener nofollow noreferrer">https://github.com/lemaiwo/btp-application-vulnerability-report-ui</A></SPAN></P><H2 id="toc-hId--1203857904"> </H2><H2 id="toc-hId--1400371409"><SPAN>References</SPAN></H2><UL><LI><SPAN>Introducing Application Vulnerability Report for CloudFoundry Applications (SAP Community Blog): <A href="https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684" target="_blank">https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-application-vulnerability-report-for-cloudfoundry-applications/ba-p/14281684</A></SPAN></LI><LI><SPAN>GitHub Repository: <A href="https://github.com/lemaiwo/btp-application-vulnerability-report-ui" target="_blank" rel="noopener nofollow noreferrer">https://github.com/lemaiwo/btp-application-vulnerability-report-ui</A></SPAN></LI></UL>2026-02-10T22:42:33.106000+01:00https://community.sap.com/t5/integration-blog-posts/the-hidden-threat-to-your-clean-core-variant-governance-in-s-4hana/ba-p/14325710The Hidden Threat to Your Clean Core: Variant Governance in S/4HANA2026-02-11T21:50:33.739000+01:00Atul_Joshi85https://community.sap.com/t5/user/viewprofilepage/user-id/2274193<H1 id="toc-hId-1660533636"> </H1><P><STRONG>By Atul Joshi — Lead SAP Architect, Utilities & Clean Core Specialist</STRONG></P><H1 id="toc-hId-1464020131">Introduction</H1><P>Organizations invest millions in S/4HANA transformations, aiming for a Clean Core, agile upgrades, and a future‑proof digital landscape. We move custom code to BTP, rationalize interfaces, and modernize processes.</P><P>Yet one silent, often overlooked threat can undermine all of that work: <STRONG>uncontrolled variant changes in production batch jobs.</STRONG></P><P>A single unauthorized variant change can cause incorrect billing, incomplete financial postings, or regulatory reporting issues. These failures are not technical—they are governance failures. And they can compromise Clean Core integrity even when no Z‑code exists.</P><H1 id="toc-hId-1267506626">Why Variant Governance Fails in Utilities and S/4HANA Landscapes</H1><H2 id="toc-hId-1200075840">1. “Temporary Fix” Syndrome</H2><P>A user changes a variant “just for today” and forgets to revert it.</P><H2 id="toc-hId-1003562335">2. Lack of Awareness</H2><P>Users do not understand the downstream impact of altering a production variant.</P><H2 id="toc-hId-807048830">3. Over‑Authorization</H2><P>Security roles grant variant maintenance access where only execution is required.</P><P>The result is a silent failure that may not surface until weeks later—after financial cycles close, billing runs complete, or regulatory reports are submitted.</P><H1 id="toc-hId-481452606">A Real‑World Case: The Variant That Broke a Month of Processing</H1><P>A nightly batch report was scheduled using <STRONG>Variant X</STRONG>, configured to process <STRONG>all company codes</STRONG>. It ran successfully for months.</P><P>One day, a well‑meaning user modified Variant X and restricted it to <STRONG>a single company code</STRONG>, assuming it was a temporary adjustment.</P><P>No one noticed.</P><P>For the next month, the batch job processed only that one company code. No dumps, no warnings, no alerts. The issue surfaced only during reconciliation, when the business noticed missing postings across multiple entities.</P><P>By then:</P><UL><LI>Downstream reports were incorrect</LI><LI>Financial data was incomplete</LI><LI>Audit trails were inconsistent</LI><LI>Cleanup required days of effort</LI></UL><P>This was not a technical issue. It was a <STRONG>governance failure</STRONG>—and a perfect example of how a single variant change can undermine Clean Core stability.</P><H1 id="toc-hId-284939101"><STRONG><U>Why This Threatens Clean Core</U></STRONG></H1><P>Clean Core is not only about removing custom code. It is about <STRONG>predictability, stability, and governance</STRONG>.</P><P>A single variant change can:</P><UL><LI>Break standardized processes</LI><LI>Trigger incorrect financial or billing results</LI><LI>Create audit and compliance risks</LI><LI>Force emergency patches</LI><LI>Introduce new technical debt</LI></UL><P>You can have zero Z‑code and still have a “dirty core” if your variants are uncontrolled.</P><H1 id="toc-hId-88425596">My Approach to Variant Hardening</H1><P>To address this risk, I use a three‑layer governance model that protects mission‑critical batch processes. This approach combines technical controls with operational discipline.</P><H2 id="toc-hId-20994810">Layer 1: Protect Variant Flag — First Line of Defense</H2><P>Every production variant should have the <STRONG>Protect Variant</STRONG> flag enabled (SE38 or program RSVARATT).</P><P><STRONG>How it works:</STRONG></P><P>Only the creator or last protector can modify the variant. Others can execute it, but fields become read‑only.</P><P><STRONG>Benefit:</STRONG></P><P>Prevents casual or accidental modifications.</P><P><STRONG>Limitation:</STRONG></P><P>It is a single point of failure—additional layers are required.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Atul_Joshi85_0-1770742846001.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/371139i1B9485BE3ADA904F/image-size/medium/is-moderation-mode/true?v=v2&px=400" role="button" title="Atul_Joshi85_0-1770742846001.png" alt="Atul_Joshi85_0-1770742846001.png" /></span></P><P> </P><H2 id="toc-hId-171735662">Layer 2: SAP Security Authorization — Granular Access Control</H2><P>This is the enterprise‑grade safeguard.</P><P><STRONG>Key object:</STRONG> S_PROGRAM</P><P><STRONG>Key field:</STRONG> P_ACTION</P><P><STRONG>Best practice:</STRONG></P><UL><LI>Business users → SUBMIT only</LI><LI>Variant maintenance (VARIANT) → restricted to a small governance group</LI></UL><P><STRONG>Impact:</STRONG></P><P>Even if someone attempts to unprotect a variant, they cannot save changes without the correct authorization.</P><H2 id="toc-hId--24777843">Layer 3: ABAP Validation — The Final Safety Net</H2><P>For critical programs, embed validation logic inside the ABAP code.</P><P><STRONG>Example:</STRONG></P><P>abap</P><P>AT SELECTION-SCREEN.</P><P> IF sy-batch = 'X'.</P><P> IF s_company_code IS INITIAL.</P><P> MESSAGE 'Company Code is mandatory for batch execution. Job aborted.' TYPE 'A'.</P><P> ENDIF.</P><P> </P><P> IF p_date_from > p_date_to.</P><P> MESSAGE 'Invalid date range. Job aborted.' TYPE 'A'.</P><P> ENDIF.</P><P> ENDIF.</P><P><STRONG>Result:</STRONG></P><P>Even if a variant bypasses the first two layers, the program aborts before processing incorrect data.</P><H1 id="toc-hId-72111659">The Executive Mandate: Variant Governance as a Clean Core Requirement</H1><P>Variant governance must be elevated from a technical detail to a <STRONG>strategic governance priority</STRONG>.</P><P>As architects, we must:</P><UL><LI>Educate business teams</LI><LI>Enforce governance protocols</LI><LI>Treat variant control as part of Clean Core</LI><LI>Elevate this topic to leadership</LI></UL><P>The cost of prevention is minimal compared to the cost of correction.</P><P>By implementing this 3‑layer protocol, organizations can:</P><UL><LI>Protect data integrity</LI><LI>Ensure compliance</LI><LI>Improve operational stability</LI><LI>Safeguard their Clean Core investment</LI></UL><P>This is not just configuration—it is operational excellence.</P><H1 id="toc-hId--124401846">Let’s Discuss</H1><P>What challenges do you face in managing variants in your SAP landscape? Have you experienced a variant‑related incident?</P><P>Share your experiences below—let’s architect better governance together.</P><P> </P>2026-02-11T21:50:33.739000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/sap-btp-xsuaa-security-configuration-comparison-attribute-based-vs/ba-p/14330535SAP BTP XSUAA Security Configuration Comparison: Attribute-Based vs. Authority-Based Approaches2026-02-18T03:27:30.148000+01:00RajeshKPutumbakahttps://community.sap.com/t5/user/viewprofilepage/user-id/2081121<P class="">In SAP Business Technology Platform (BTP) Cloud Foundry applications, configuring <STRONG>XSUAA</STRONG> (Extended Services for User Account and Authentication) via the <STRONG>xs-security.json</STRONG> file is a critical step for secure authentication and authorization.</P><P class="">Sample Application used for this article - "Message Reprocessing Application". This scenario try to cover 2 roles - "ReprocessViewer" and "ReprocessAdministrator".</P><P class="">Two main approaches exist:</P><P class=""> </P><UL><LI><STRONG>Configuration A</STRONG>: Explicit attribute-based – manual mapping and control</LI><LI><STRONG>Configuration B</STRONG>: Authority-based – automatic acceptance of IDP attributes (recommended for most cases)</LI></UL><P> </P><P class="">Understanding the differences helps you balance security, compliance, simplicity, and development speed.</P><H3 id="ember57" id="toc-hId-1919471785">Quick Comparison Table</H3><PRE><CODE>Feature | Config A (Explicit Attributes) | Config B (Authority-Based)
---------------------------------|-----------------------------------------|--------------------------------------------
attributes section | ✅ Present (defines email, etc.) | ❌ Not needed
attribute-references in roles | ✅ Yes (links attributes to roles) | ❌ Not present
authorities array | ❌ Not used | ✅ "$ACCEPT_GRANTED_AUTHORITIES"
oauth2 grant-types | ❌ Uses defaults | ✅ Explicit list (authorization_code + others)
oauth2 autoapprove | ❌ Not set (shows consent screen) | ✅ true (smooth internal login)</CODE></PRE><P class=""><STRONG>Key takeaway from the table</STRONG></P><H3 id="ember59" id="toc-hId-1722958280">Configuration A: Explicit Attribute-Based Approach</H3><P class=""><STRONG>Structure (xs-security.json excerpt):</STRONG></P><P class="">JSON</P><PRE><CODE>{
"xsappname": "my-app-reprocess-v2",
"tenant-mode": "dedicated",
"description": "Message Reprocessing Application - Security Configuration",
"scopes": [
{
"name": "$XSAPPNAME.ReprocessViewer",
"description": "View messages, content, and statistics (read-only access)"
},
{
"name": "$XSAPPNAME.ReprocessAdministrator",
"description": "Full administrative access including reprocess operations and CRUD"
}
],
"attributes": [
{
"name": "email",
"description": "User email address",
"valueType": "string"
}
],
"role-templates": [
{
"name": "ReprocessViewer",
"description": "Read-Only Access - View messages and statistics",
"scope-references": ["$XSAPPNAME.ReprocessViewer"],
"attribute-references": ["email"]
},
{
"name": "ReprocessAdministrator",
"description": "Full Administrative Access - CRUD operations and reprocess actions",
"scope-references": [
"$XSAPPNAME.ReprocessAdministrator",
"$XSAPPNAME.ReprocessViewer"
],
"attribute-references": ["email"]
}
],
"role-collections": [
{
"name": "MessageReprocessViewersRC",
"description": "Message Reprocess Viewers - Read-only access",
"role-template-references": ["$XSAPPNAME.ReprocessViewer"]
},
{
"name": "MessageReprocessAdministratorsRC",
"description": "Message Reprocess Administrators - Full access",
"role-template-references": ["$XSAPPNAME.ReprocessAdministrator"]
}
],
"oauth2-configuration": {
"credential-types": ["binding-secret", "x509"],
"redirect-uris": ["https://*.cfapps.example.com/**", "http://localhost:*/**"],
"token-validity": 3600,
"refresh-token-validity": 86400
}
}</CODE></PRE><P class=""><STRONG>Advantages</STRONG></P><P class=""> </P><UL><LI>Explicit control over exposed attributes</LI><LI>Fine-grained security and compliance</LI><LI>Enables attribute transformation and ABAC</LI></UL><P> </P><P class=""><STRONG>Disadvantages</STRONG></P><P class=""> </P><UL><LI>Higher maintenance</LI><LI>More complex configuration</LI><LI>Less flexible with IDP changes</LI></UL><P> </P><P class=""><STRONG>When to use</STRONG>: Regulated industries (healthcare, finance, government), ABAC needs, multi-tenant SaaS, strict governance.</P><H3 id="ember67" id="toc-hId-1526444775">Configuration B: Authority-Based Approach (Recommended)</H3><P class=""><STRONG>Structure (xs-security.json excerpt):</STRONG></P><P class="">JSON</P><PRE><CODE>{
"xsappname": "my-app-reprocess-v2",
"tenant-mode": "dedicated",
"description": "Message Reprocessing Application - Security Configuration",
"scopes": [ /* same as above */ ],
"role-templates": [ /* same as above, without attribute-references */ ],
"role-collections": [ /* same as above */ ],
"authorities": ["$ACCEPT_GRANTED_AUTHORITIES"],
"oauth2-configuration": {
"grant-types": ["authorization_code", "client_credentials", "refresh_token"],
"credential-types": ["binding-secret", "x509"],
"redirect-uris": ["https://*.cfapps.example.com/**", "http://localhost:*/**"],
"token-validity": 3600,
"refresh-token-validity": 86400,
"autoapprove": true
}
}</CODE></PRE><P class=""><STRONG>Advantages</STRONG></P><P class=""> </P><UL><LI>Simplicity and minimal config</LI><LI>Automatic handling of standard IDP attributes</LI><LI>Lower maintenance, faster development</LI><LI>Seamless with SAP IAS, Azure AD, Okta</LI></UL><P> </P><P class=""><STRONG>Disadvantages</STRONG></P><P class=""> </P><UL><LI>Less granular control (all attributes passed)</LI><LI>Potential over-exposure</LI></UL><P> </P><P class=""><STRONG>When to use</STRONG> (most cases): Standard enterprise apps, RBAC, rapid development, microservices, agile environments.</P><H3 id="ember75" id="toc-hId-1329931270">Deep Dive: Key Differences</H3><P class=""> </P><UL><LI><STRONG>Attributes & attribute-references</STRONG> — Explicit in A, automatic in B via $ACCEPT_GRANTED_AUTHORITIES</LI><LI><STRONG>Authorities</STRONG> — Special directive in B accepts all granted attributes/scopes from trusted IDP</LI><LI><STRONG>OAuth grant-types & autoapprove</STRONG> — Explicit in B for predictability and better UX (no consent screen for internal apps)</LI></UL><P> </P><H3 id="ember77" id="toc-hId-1133417765">JWT Token Examples</H3><P class=""><STRONG>Configuration A (Explicit):</STRONG></P><P class="">JSON</P><PRE><CODE>{
"user_name": "john.doe",
"email": "john.doe@example.com",
"scope": ["my-app-reprocess-v2.ReprocessViewer"],
"xs.user.attributes": { "email": ["john.doe@example.com"] }
}</CODE></PRE><P class=""><STRONG>Configuration B (Automatic):</STRONG></P><P class="">JSON</P><PRE><CODE>{
"user_name": "john.doe",
"email": "john.doe@example.com",
"given_name": "John",
"family_name": "Doe",
"scope": ["my-app-reprocess-v2.ReprocessViewer"],
"xs.user.attributes": { "email": ["john.doe@example.com"], "department": ["Engineering"], "cost_center": ["CC-1234"] }
}</CODE></PRE><H3 id="ember82" id="toc-hId-936904260">Application Code Impact (Examples)</H3><P class=""><STRONG>SAP CAP (Node.js) – Configuration B:</STRONG></P><P class="">JavaScript</P><PRE><CODE>this.before('READ', 'Messages', async (req) => {
const userEmail = req.user.attr.email;
const department = req.user.attr.department; // extra attributes available
// ...
});</CODE></PRE><P class=""><STRONG>Spring Boot (Java) – Configuration B:</STRONG></P><P class="">Java</P><PRE><CODE>String email = token.getAttributeFromClaimAsString("email");
String department = token.getAttributeFromClaimAsString("department");</CODE></PRE><H3 id="ember87" id="toc-hId-740390755">Migration Guide & Troubleshooting</H3><P class="">(Refer to the detailed steps in original content for From A → B and vice versa, plus common issues like missing attributes, invalid grant types, consent screens, token size.)</P><H3 id="ember89" id="toc-hId-543877250">Security & Performance Best Practices</H3><P class=""> </P><UL><LI>Principle of least privilege</LI><LI>Validate JWT properly (@sap/xssec)</LI><LI>Specific redirect URIs (avoid wildcards in prod)</LI><LI>Appropriate token lifetimes</LI><LI>Prefer X.509 in production</LI><LI>Monitor token size (switch to A if >4KB)</LI></UL><P> </P><H3 id="ember91" id="toc-hId-347363745">Recommendations by Use Case</H3><P class="">Use CaseRecommendedRationaleInternal Enterprise AppConfiguration BSimplicity & standard integrationRegulated IndustryConfiguration AExplicit governance & audit trailRapid Prototype/MVPConfiguration BMinimal configAttribute-Based AuthorizationConfiguration ARequired for ABAC</P><P class=""><STRONG>Conclusion</STRONG> For <STRONG>most SAP BTP applications in 2025</STRONG>, go with <STRONG>Configuration B (Authority-Based)</STRONG> — it delivers simplicity, flexibility, and aligns with modern OAuth/OIDC patterns while reducing maintenance.</P><P class="">Only choose <STRONG>Configuration A</STRONG> when you need strict attribute control, custom transformations, or operate in highly regulated environments.</P><P class="">What approach are you using in your SAP BTP projects? Have you migrated between the two? Share your experiences or questions in the comments — happy to discuss architecture or troubleshooting!</P><P class="">#SAPBTP #XSUAA #CloudFoundry #SAPSecurity #Authorization #IdentityManagement #SAPDeveloper</P>2026-02-18T03:27:30.148000+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/when-business-asks-for-a-bicycle-don-t-build-a-spaceship/ba-p/14333381When Business Asks for a Bicycle, Don't Build a Spaceship2026-02-21T19:02:14.003000+01:00RajeshKPutumbakahttps://community.sap.com/t5/user/viewprofilepage/user-id/2081121<P><SPAN>When Business Asks for a Bicycle, Don't Build a Spaceship</SPAN><BR /><BR /><SPAN>I have developed a comprehensive playbook demonstrating how modern SAP tools and AI can deliver solutions in DAYS instead of MONTHS.</SPAN><BR /><BR /><SPAN>The shocking math:</SPAN><BR /><SPAN>- Traditional approach: 6 months, $650K in delayed value</SPAN><BR /><SPAN>- SAP tools + AI: 1 week, $25K in delayed value</SPAN><BR /><BR /><SPAN>This isn't just theory—it's a practical guide that covers:</SPAN><BR /><SPAN>- CDS Views for data modeling</SPAN><BR /><SPAN>- CAP for service generation</SPAN><BR /><SPAN>- Fiori Elements for instant UIs</SPAN><BR /><SPAN>- Integration Suite for connectivity</SPAN><BR /><SPAN>- AI to accelerate everything</SPAN></P><P><A title="SAPBTP+CAP+FIORI+AI" href="https://www.linkedin.com/posts/rajesh-putumbaka-456267101_sap-btp-ai-development-playbook-ugcPost-7431029390173696001-y7Yn?utm_source=share&utm_medium=member_desktop&rcm=ACoAABnYP8IBvlY4GDRmR8utVFLHXZ61gUvSa-0" target="_self" rel="nofollow noopener noreferrer">https://www.linkedin.com/posts/rajesh-putumbaka-456267101_sap-btp-ai-development-playbook-ugcPost-7431029390173696001-y7Yn?utm_source=share&utm_medium=member_desktop&rcm=ACoAABnYP8IBvlY4GDRmR8utVFLHXZ61gUvSa-0</A> <BR /><SPAN>Download the full playbook (PDF attached) and share your thoughts: Have you encountered the "perfect is the enemy of good" trap in your SAP projects?</SPAN><BR /><A class="" href="https://www.linkedin.com/search/results/all/?keywords=%23sap&origin=HASH_TAG_FROM_FEED" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><STRONG>#SAP</STRONG></SPAN></A> <A class="" href="https://www.linkedin.com/search/results/all/?keywords=%23digitaltransformation&origin=HASH_TAG_FROM_FEED" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><STRONG>#DigitalTransformation</STRONG></SPAN></A> <A class="" href="https://www.linkedin.com/search/results/all/?keywords=%23ai&origin=HASH_TAG_FROM_FEED" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><STRONG>#AI</STRONG></SPAN></A> <A class="" href="https://www.linkedin.com/search/results/all/?keywords=%23sapcommunity&origin=HASH_TAG_FROM_FEED" target="_blank" rel="noopener nofollow noreferrer"><SPAN class=""><STRONG>#SAPCommunity</STRONG></SPAN></A></P>2026-02-21T19:02:14.003000+01:00