← Tillbaka till bloggen
cloud_sync SoD · SAP BTP · Hybrid åtkomst

SoD växer ur klassisk SAP. Så här byggde vi för det.

Åtkomst lever inte längre bara i SAP-transaktioner. Den lever i BTP-scopes, icke-SAP-behörigheter och i de tjänste- och AI-identiteter som anropar dina API:er. smartGRC behandlar var och en av dem som en förstaklassig medborgare i ansvarsuppdelningen - utan förklädnader.

eventPublicerad 4 september 2026 schedule10 min läsning codeTeknisk sektion inkluderad
Först, modellen

Hur åtkomst faktiskt fungerar i SAP BTP

I klassisk SAP kommer en persons rättigheter från roller som buntar ihop transaktioner och behörighetsobjekt. I SAP BTP är byggstenarna annorlunda - och att förstå dem är hela spelet. Behörigheter i ett BTP-subkonto hanteras av XSUAA, och de bildar en kedja:

BTP-behörighetskedja (XSUAA)
ANVÄNDARE människa eller tjänst ROLLSAMLING tilldelningsenheten ROLL mallinstans per app SCOPE verb på resurs ← där den verkliga rättigheten sitter

En användare tilldelas en eller flera rollsamlingar - den enhet som en administratör faktiskt delar ut, löst jämförbar med en composite role. En rollsamling innehåller roller (instanser av rollmallar som lever inuti en applikation). Varje roll beviljar en uppsättning scopes - och det är i scope:et den verkliga rättigheten sitter.

Ett scope är en sträng av formen xsappname.object.path.verb. Det är inte en transaktion - det är ett verb på en resurssökväg, publicerat av en applikations API. Till exempel bryts aicore!b164.scenarios.batches.write ned som:

DelExempelBetydelse
xsappnameaicore!b164applikationen (identifierare)
objectscenariosaffärsobjekt / domän
pathbatchesunderresurs eller funktionell sökväg
verbwriteoperationen som är tillåten

Åtkomstenheten i BTP är alltså en behörighet på API-nivå - "får skriva batches i den här appen" - inte "får köra transaktion X". Just den skillnaden är varför den traditionella linsen har svårt.

Varför den gamla linsen misslyckas

Varför tcode-/Fiori-objekt-modellen inte passar

I tjugo år har ansvarsuppdelning i SAP betytt transaktioner och behörighetsobjekt: en konflikt är ett par transaktioner som en person aldrig borde inneha samtidigt, och regelmotorerna byggdes helt kring den formen. En Fiori-app ändrar inte heller den underliggande modellen - den bryts fortfarande ned till kataloger, transaktionskoder och samma behörighetsobjekt.

BTP har inga av dessa fästpunkter. Det finns ingen transaktionskod, inget S_TCODE, inget dynpro-behörighetsobjekt att matcha mot. Enheten är ett scope - en app-nativ sträng som beskriver ett verb på en resurs. En transaktionsbunden motor har bokstavligen inget att gripa tag i: hela dess vokabulär (transaktion, behörighetsobjekt, aktivitet) existerar inte på den här ytan.

Så det klassiska angreppssättet har två alternativ - ignorera BTP helt, eller tvinga in varje scope i en transaktionsform det aldrig hade. Vilket leder oss till kringgåendet.

Tecknet

När man måste förkläda ett scope som en transaktion

Det vanliga sättet att få in BTP i en transaktionsbunden motor är att få scope:et att se ut som en transaktion. Utmärkt ingenjörskonst har publicerats som gör just detta: en anpassad adapter mappar XSUAA-användare, rollsamlingar, roller och scopes in i motorns strukturer, och - eftersom motorns aktivitetsnivåanalys bara känner igen en hårdkodad vitlista av resurstyper (SAP-transaktioner, tjänster) - släpper den ut en andra skuggrad som klär upp varje scope som en transaktion så att analysen överhuvudtaget kan se det.

Det fungerar, och det är smart. Men skuggraden är tecknet: motorn designades aldrig för att resonera om något som inte är en SAP-transaktion, så varje ny åtkomstmodell måste översättas tillbaka till en sådan.

Om en ny yta bara blir synlig för SoD genom att låtsas vara en transaktion, kämpar modellen emot dig.
Vad vi har

En behörighetsmodell-agnostisk SoD-motor

smartGRC utgår från ett annat antagande. Dess riskmotor är inte kopplad till SAP-transaktionskoder - den resonerar om behörigheter generiskt: ett objekt och en aktivitet, oavsett från vilket system de kom. Det enda designvalet gör resten rent:

Ett BTP-scope mappas till en nativ behörighet, inte en utklädd transaktion. En SAP-transaktion är en typ av behörighet; ett XSUAA-scope är en annan; en icke-SAP-behörighet är en tredje. De sitter sida vid sida i samma analys - så en ansvarsuppdelningskonflikt kan spänna över BTP × SAP × icke-SAP i en enda regel. Den hybridkonflikten - till exempel någon som kan administrera BTP-applikationen som matar en process och godkänna resultatet i S/4HANA - är exakt den sort som en beståndstäckande SoD-bild behöver, och exakt den sort som en enbart transaktionsbaserad motor har svårt att uttrycka.

Två motorformer
TRANSAKTIONSBUNDEN MOTOR SAP tcode Fiori-katalog BTP-scope icke-SAP shadow-row förkläs som tcode MOTOR resonerar om transaktioner + endast auth-objekt SoD-konflikter endast tcode-par BEHÖRIGHETSAGNOSTISK MOTOR SAP tcode Fiori-katalog BTP-scope icke-SAP MOTOR objekt + aktivitet, källagnostisk - alla förstaklassiga SoD-konflikter BTP × SAP × icke-SAP "Se ut som en tcode eller bli osynlig." "Var det du är. Motorn sköter resten."

Inga shadow-rows. Ingen vitlista att uppfylla. Scope:et är förstaklassigt eftersom motorn är byggd för att vara det.

smartGRC vs SAP GRC AC

Två verktyg, två former av problemet

För att vara rättvis mot Access Control: detta är inte AC utfört fel, det är AC ombedd att göra något utanför sin form. SAP GRC AC är en fullständig styrningssvit - begäran, godkännande, provisionering, analys och revision - djupt kopplad till klassisk SAP. För den klassiska SAP-livscykeln från begäran till revision är den mogen och svår att slå, och den bredden är verklig.

smartGRC är avsiktligt smalare och byggt annorlunda: en fokuserad, modellagnostisk SoD-motor. Där de två överlappar - analys av åtkomst för ansvarsuppdelning över ett modernt, hybridt, allt mer icke-SAP-bestånd - drar designvalen isär:

AnsvarsuppdelningSAP GRC AC 12.0smartGRC
MotorantagandeSAP-transaktioner & auth-objektVilken behörighet som helst (objekt + aktivitet), källagnostisk
Ny yta (t.ex. BTP)Anpassad ABAP-adapter + shadow-row-förklädnadKopplingskonfiguration; scope är förstaklassigt
TäckningSAP-centrerad; andra påbultadeSAP + icke-SAP + BTP + AI / tjänst, en modell
Hybridkonflikt (BTP × SAP)Svår att uttryckaEn enda korssystemsregel
FotavtryckTung ABAP-tillägg, uppgraderingsviktLättviktstjänst, lågt fotavtryck
Ansluta en ytaEtt utvecklingsprojektLägg till en koppling
Full begäran → provisionering → revisionBred och mogenFokuserad på SoD; kombineras med IAM / IAG för provisionering

Den ärliga slutsatsen: om jobbet är den heltäckande SAP-livscykeln från begäran till revision på klassisk SAP, är AC en tungviktare av en anledning. Om jobbet är ansvarsuppdelning över ett hybridt bestånd - utfört lätt, utan att förkläda varje ny yta som en transaktion - är smartGRC byggt för den formen.

▚ Tekniska detaljer för utvecklare

Så fungerar det, i teorin

Mekanismen, inte en byggspecifikation: hur BTP:s behörighetsdata läses, hur ett scope mappas in i SoD-modellen, och varför ingen shadow-row-förklädnad behövs. XSUAA-anropen nedan är den standardmässiga behörighetsmodellen; mappningen är den del som skiljer sig från en GRC AC-adapter.

1 · Läsvägen (en REST-koppling). En ny systemtyp "BTP (XSUAA)" ligger i systemkatalogen bredvid SAP ACC / S/4HANA. Kopplingen autentiserar med OAuth2 client-credentials mot subkontots token-endpoint och traverserar sedan:

GET /Users?filter=userName eq "..." and origin eq "..."   (SCIM)   -> user + groups[]
GET /Groups?attributes=id,displayName                     (SCIM)   -> rollsamlingar
GET /sap/rest/authorization/v2/rolecollections/<name>               -> role_references[]
GET /sap/rest/authorization/v2/apps/<app>/roletemplates/<t>/roles/<r> -> scopes[].name

Platta ut till en rad per scope: användare → rollsamling → roll → scope

2 · Parsa scope:et. Dela xsappname.object.path.verb vid sista punkten så att flersegmentssökvägar överlever:

aicore!b164.scenarios.batches.write
   object   = aicore!b164.scenarios.batches
   activity = write

3 · Mappa in i smartGRC:s modell. Rakt av, inga förklädnader:

BTP (XSUAA)smartGRC-behörighetsmodell
SubkontoSystem (koppling)
RollsamlingComposite role
RollEnkelroll
ScopeObjekt = xsappname.object.path · Aktivitet = verb

4 · Varför ingen shadow-row. Motorn grindar inte aktivitetsnivåanalys bakom en hårdkodad vitlista av resurstyper, så ett objekt/aktivitet-par som kommer från ett scope analyseras direkt - samma kodväg som en SAP tcode, ingen S_TCODE/TCD-ersättning. En representation, en rad per scope.

5 · Motor vs koppling vs innehåll. Motorn är oförändrad (redan källagnostisk - det är hela poängen). Nytt arbete är kopplingen (OAuth2 CC + SCIM + Authorization v2 REST-klient, fullständigt dokumenterat av offentliga XSUAA API:er) och regeluppsättningen (definiera BTP SoD-funktioner och hybrida BTP×SAP-konflikter värda att leverera som en startuppsättning).

Samma pipeline som varje annan källa: koppling importerar behörigheter → analys → befintliga Access risks / Investigations-vyer. Bevis passar redan: Objekt = app.object.path, Aktivitet = verb.

Där det verkliga arbetet ligger

Tre problem - och bara det mellersta är vallgraven

Allt ovan får det att låta som en kopplingshistoria. Det är det inte. Att få in BTP i ansvarsuppdelning delas upp i tre problem, och de är inte likvärdiga: två är ingenjörskonst, ett är omdöme. Det mellersta är där fördelen faktiskt bor.

1

Anslut och hämta data

Autentisera mot XSUAA, gå användare → rollsamling → roll → scope, landa en rad per scope. Avgränsad ingenjörskonst - XSUAA-API:er är offentliga och dokumenterade.

Ingenjörskonst · grundinsats
2

Definiera vad som faktiskt är riskabelt på BTP

Inget kodningsproblem. Vilka scope-kombinationer är genuint toxiska? Är ett givet subkonto-admin-scope, parat med ett specifikt godkännande i S/4, en verklig konflikt eller bara brus? Att få det rätt är domänkunskap - regeluppsättningen själv blir differentieraren.

Omdöme · vallgraven
3

Rapportera och utreda

Lyft fram konflikter, borra ner till bevis, spåra till avslut. När ett scope är en förstaklassig behörighet är detta vad smartGRC redan gör nativt - samma Access risks- och Investigations-vyer som varje annan källa flödar in i.

Ingenjörskonst · redan nativ

Kopplingen är grundinsats och rapporteringen är redan vår. Det knappa är att veta vilka BTP-behörighetskombinationer som är värda att flagga i första hand - en regeluppsättning som återspeglar hur BTP faktiskt beviljar makt, inte en översättning av en SAP-motsvarighet. Det är innehåll, inte kod, och det är den del som måste förtjänas snarare än levereras.

En koppling vem som helst kan skriva. En BTP-riskmodell bara någon som kan BTP kan definiera. Innehållet är vallgraven.

Så vad ser "toxiskt på BTP" faktiskt ut som? Tre illustrativa konflikter som en BTP-medveten regeluppsättning skulle bära - typer värda att definiera, inte ett levererat regelpaket. Ingen av dem finns i en transaktionsbaserad regeluppsättning, eftersom ingen av dem är en transaktion.

BTP-nativ · självbeviljande av rättigheter
Hantera rollsamlingar (Säkerhetsadministratör) + Vilket privilegierat verksamhetsscope som helst

Den som tilldelar rollsamlingar kan tilldela en till sig själv. Kontroll över behörigheter och användning av dessa behörigheter kollapsar till en enda identitet - det mest BTP-specifika brottet som finns, och helt osynligt för en tcode-baserad regeluppsättning eftersom "bevilja dig själv makt" inte har någon transaktionskod.

BTP-nativ · konfigurera & använda ett gränssnitt
Hantera destinations / connectivity + Kör integrationen som använder dem

En person kan peka en levande utgående anslutning - mål-URL och lagrade autentiseringsuppgifter - vart som helst, och sedan trigga flödet som skickar data genom den. Definiera-och-utför utan ett andra ögonpar, på exakt den yta som flyttar data ut ur beståndet.

Hybrid · BTP × S/4HANA
BTP Administrera automationen / AI-scenariot som föreslår en bokföring + S/4 Godkänn eller bokför det dokumentet

Konfigurera den automatiserade skaparen på BTP och vara den mänskliga kontrollanten i S/4 - korssystemsversionen av en maker-checker-kollaps. Uttryckbar endast om ett scope och en transaktion kan sitta i samma regel, vilket är hela poängen med en källagnostisk motor.

Det är dessa konflikter som avgör om BTP SoD är verklig eller teater. Att skriva dem bra kräver någon som vet hur BTP beviljar makt - vilket är exakt varför regeluppsättningen, inte kopplingen, är där värdet koncentreras.

Den större bilden

Samma modell täcker tjänste- och AI-identiteter

XSUAA utfärdar inte bara tokens till människor. Client-credentials-bindningar autentiserar applikation-till-applikation - tjänstekontona och AI-agenterna som anropar BTP-API:er. Eftersom smartGRC behandlar icke-mänskliga identiteter på samma sätt som den behandlar användare - SoD-analys, flaggning av känslig åtkomst och kontinuerlig övervakning på kontona, inte bara på människorna - är BTP-scopes och AI-/tjänsteidentiteter samma frontlinje, hanterade av samma modell. SAP Audit Log ger aktivitetsspåret för att sluta cirkeln.

Framtidens SoD är inte en bättre förklädnad.

Det är en motor som behandlar en SAP-transaktion, ett BTP-scope och en icke-SAP-behörighet som det de är - förstaklassiga, sida vid sida, i en hybrid analys. Det är vadslagningen smartGRC är byggt på.

Se det live

Se den hybrida SoD-modellen i smartGRC-demot

Ett BTP-scope, en SAP-transaktion och en icke-SAP-behörighet - alla sittande sida vid sida i en analys. Inga förklädnader. Prova arbetsflödet i det live demot.


Relaterad läsning