Créer des IAM Business Catalogs - Gestion des autorisations dans ABAP Cloud

Catégorie
Security
Publié
Auteur
Johannes

Les Business Catalogs sont l’élément central de la gestion des autorisations dans ABAP Cloud. Ils regroupent des applications et des services en unités logiques qui peuvent ensuite être assignées à des rôles. Cet article montre comment créer vos propres Business Catalogs pour vos applications.

Le concept IAM dans ABAP Cloud

Dans ABAP Cloud, la gestion des autorisations repose sur Identity and Access Management (IAM). Il diffère fondamentalement du concept d’autorisation ABAP classique :

┌──────────────────────────────────────────────────────────────────────────┐
│ IAM-Konzept in ABAP Cloud │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ │
│ │ IAM App │ ◄── Entwickler erstellt │
│ │ (Technische App-ID) │ │
│ └────────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ IAM Business Catalog │ ◄── Entwickler erstellt │
│ │ (Bündelt Apps/Services)│ │
│ └────────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ IAM Business Role │ ◄── Administrator erstellt │
│ │ Template │ │
│ └────────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Business User │ ◄── Administrator weist zu │
│ │ (Endanwender) │ │
│ └─────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘

Composants en aperçu

ComposantCréé parDescription
IAM AppDéveloppeurReprésentation technique d’une application
IAM Business CatalogDéveloppeurRegroupement logique d’applications et de services
Business Role TemplateAdministrateurModèle pour les rôles basés sur les Catalogs
Business RoleAdministrateurRôle concret avec des valeurs (par ex. code société)
Business UserRH/AdminUtilisateur final auquel des rôles sont assignés

Différence avec ABAP classique

AspectABAP classiqueABAP Cloud
Objets d’autorisationSU21ADT Authorization Objects
Gestion des rôlesPFCGIAM Business Role App
Gestion des utilisateursSU01Maintain Business Users App
CataloguesPFCG-MenüIAM Business Catalogs
TransportCTSBasé Git avec Software Components

Créer une IAM App

L’IAM App est la base technique. Elle est générée automatiquement lors de la création d’un Service Binding, ou peut être créée manuellement.

Génération automatique

Lors de la création d’un Service Binding, une IAM App est automatiquement générée :

Service Binding: ZUI_TRAVEL_O4
└── IAM App: ZUI_TRAVEL_O4_ODATA_V4 (automatisch generiert)

Création manuelle dans ADT

  1. New → Other ABAP Repository Object
  2. Cloud Identity and Access Management → IAM App
  3. Attribuer un ID et une description
<!-- IAM App Definition -->
<?xml version="1.0" encoding="utf-8"?>
<iam:iamApp
xmlns:iam="http://www.sap.com/iam"
iamAppId="ZTRAVEL_MANAGE">
<iamAppDescription>Travel Management Application</iamAppDescription>
<!-- Zugeordnete Service Bindings -->
<serviceBinding>ZUI_TRAVEL_O4</serviceBinding>
<!-- Zugeordnete Business Services -->
<businessService>
<serviceId>ZUI_TRAVEL_O4</serviceId>
<serviceVersion>0001</serviceVersion>
</businessService>
</iam:iamApp>

IAM App pour plusieurs services

Une IAM App peut regrouper plusieurs services :

<?xml version="1.0" encoding="utf-8"?>
<iam:iamApp
xmlns:iam="http://www.sap.com/iam"
iamAppId="ZTRAVEL_FULL">
<iamAppDescription>Complete Travel Management Suite</iamAppDescription>
<!-- Hauptanwendung -->
<serviceBinding>ZUI_TRAVEL_O4</serviceBinding>
<!-- Value Help Service -->
<serviceBinding>ZUI_TRAVEL_VH_O4</serviceBinding>
<!-- Report Service -->
<serviceBinding>ZUI_TRAVEL_REPORT_O4</serviceBinding>
</iam:iamApp>

Créer un IAM Business Catalog

Le Business Catalog regroupe les IAM Apps en une unité logique qui peut ensuite être assignée à des rôles.

Étape 1 : Créer un Business Catalog

  1. Dans ADT : New → Other ABAP Repository Object
  2. Cloud Identity and Access Management → IAM Business Catalog
  3. Attribuer un ID et une description

Étape 2 : Définition du Catalog

<?xml version="1.0" encoding="utf-8"?>
<iam:catalog
xmlns:iam="http://www.sap.com/iam"
catalogId="ZTRAVEL_BC">
<catalogDescription>Travel Management - Business Catalog</catalogDescription>
<!-- Enthaltene IAM Apps -->
<catalogApps>
<iamApp>ZTRAVEL_MANAGE</iamApp>
<iamApp>ZTRAVEL_APPROVE</iamApp>
</catalogApps>
</iam:catalog>

Étape 3 : Structure de Catalog pour grandes applications

Pour les applications plus importantes, une structure hiérarchique est recommandée :

Travel Management System
├── ZTRAVEL_BC_MANAGER (Manager-Funktionen)
│ ├── ZTRAVEL_MANAGE (Reisen verwalten)
│ ├── ZTRAVEL_APPROVE (Genehmigen)
│ └── ZTRAVEL_REPORT (Reports)
├── ZTRAVEL_BC_EMPLOYEE (Mitarbeiter-Funktionen)
│ ├── ZTRAVEL_CREATE (Reise anlegen)
│ └── ZTRAVEL_VIEW (Eigene Reisen anzeigen)
└── ZTRAVEL_BC_ADMIN (Admin-Funktionen)
├── ZTRAVEL_CONFIG (Konfiguration)
└── ZTRAVEL_MASTER (Stammdaten)

Exemple : Plusieurs Catalogs

<!-- Manager Catalog -->
<?xml version="1.0" encoding="utf-8"?>
<iam:catalog
xmlns:iam="http://www.sap.com/iam"
catalogId="ZTRAVEL_BC_MANAGER">
<catalogDescription>Travel Management - Manager Functions</catalogDescription>
<catalogApps>
<iamApp>ZTRAVEL_MANAGE</iamApp>
<iamApp>ZTRAVEL_APPROVE</iamApp>
<iamApp>ZTRAVEL_REPORT</iamApp>
</catalogApps>
</iam:catalog>
<!-- Employee Catalog -->
<?xml version="1.0" encoding="utf-8"?>
<iam:catalog
xmlns:iam="http://www.sap.com/iam"
catalogId="ZTRAVEL_BC_EMPLOYEE">
<catalogDescription>Travel Management - Employee Functions</catalogDescription>
<catalogApps>
<iamApp>ZTRAVEL_CREATE</iamApp>
<iamApp>ZTRAVEL_VIEW</iamApp>
</catalogApps>
</iam:catalog>

Restriction Types et Fields

Les Restriction Types permettent de restreindre les autorisations à certaines valeurs organisationnelles (par ex. code société, organisation commerciale).

Définir un Restriction Type

<?xml version="1.0" encoding="utf-8"?>
<iam:restrictionType
xmlns:iam="http://www.sap.com/iam"
restrictionTypeId="ZTRAVEL_RT">
<restrictionTypeDescription>Travel Authorization Restrictions</restrictionTypeDescription>
<!-- Restriction Fields -->
<restrictionField>
<fieldName>ZAGENCY</fieldName>
<fieldDescription>Travel Agency</fieldDescription>
<dataElement>ZAGENCY_ID</dataElement>
</restrictionField>
<restrictionField>
<fieldName>ZREGION</fieldName>
<fieldDescription>Region</fieldDescription>
<dataElement>ZREGION_CODE</dataElement>
</restrictionField>
<restrictionField>
<fieldName>ACTVT</fieldName>
<fieldDescription>Activity</fieldDescription>
<dataElement>ACTIV_AUTH</dataElement>
</restrictionField>
</iam:restrictionType>

Lier Restriction Type avec Catalog

<?xml version="1.0" encoding="utf-8"?>
<iam:catalog
xmlns:iam="http://www.sap.com/iam"
catalogId="ZTRAVEL_BC_MANAGER">
<catalogDescription>Travel Management - Manager Functions</catalogDescription>
<catalogApps>
<iamApp>ZTRAVEL_MANAGE</iamApp>
</catalogApps>
<!-- Restriction Type Zuordnung -->
<restrictionTypes>
<restrictionType>ZTRAVEL_RT</restrictionType>
</restrictionTypes>
</iam:catalog>

Vérifier les Restriction Fields dans l’application

Dans votre application RAP, vous devez prendre en compte les Restriction Fields dans l’implémentation d’Authorization :

CLASS lhc_travel DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION
IMPORTING keys REQUEST requested_authorizations FOR Travel RESULT result.
ENDCLASS.
CLASS lhc_travel IMPLEMENTATION.
METHOD get_instance_authorizations.
" Instanzdaten lesen
READ ENTITIES OF zi_travel IN LOCAL MODE
ENTITY Travel
FIELDS ( AgencyID Region )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
LOOP AT travels ASSIGNING FIELD-SYMBOL(<travel>).
DATA(is_update_allowed) = abap_false.
DATA(is_delete_allowed) = abap_false.
" Prüfung gegen Restriction Fields
IF requested_authorizations-%update = if_abap_behv=>mk-on.
AUTHORITY-CHECK OBJECT 'ZTRAVEL"
ID 'ZAGENCY' FIELD <travel>-AgencyID
ID 'ZREGION' FIELD <travel>-Region
ID 'ACTVT' FIELD '02'. " Ändern
IF sy-subrc = 0.
is_update_allowed = abap_true.
ENDIF.
ENDIF.
IF requested_authorizations-%delete = if_abap_behv=>mk-on.
AUTHORITY-CHECK OBJECT 'ZTRAVEL"
ID 'ZAGENCY' FIELD <travel>-AgencyID
ID 'ZREGION' FIELD <travel>-Region
ID 'ACTVT' FIELD '06'. " Löschen
IF sy-subrc = 0.
is_delete_allowed = abap_true.
ENDIF.
ENDIF.
APPEND VALUE #(
%tky = <travel>-%tky
%update = COND #(
WHEN is_update_allowed = abap_true
THEN if_abap_behv=>auth-allowed
ELSE if_abap_behv=>auth-unauthorized )
%delete = COND #(
WHEN is_delete_allowed = abap_true
THEN if_abap_behv=>auth-allowed
ELSE if_abap_behv=>auth-unauthorized )
) TO result.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

Activités standard (ACTVT)

ValeurActivité
01Créer
02Modifier
03Afficher
06Supprimer
16Exécuter

Intégration avec Fiori Launchpad

Tuile Launchpad avec IAM App

L’IAM App contrôle quelles tuiles sont affichées dans le Fiori Launchpad :

┌──────────────────────────────────────────────────────────────────────────┐
│ Fiori Launchpad Integration │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ │
│ │ IAM Business Catalog │ │
│ │ ZTRAVEL_BC_MANAGER │ │
│ └────────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Business Role │ │
│ │ ZTRAVEL_MANAGER_ROLE │ │
│ └────────────┬────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────┐ │
│ │ Fiori Launchpad │ │
│ │ ┌─────┐ ┌─────┐ │ │
│ │ │ App │ │ App │ │ ◄── Nur sichtbar, wenn │
│ │ │ 1 │ │ 2 │ │ Rolle zugewiesen │
│ │ └─────┘ └─────┘ │ │
│ └─────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘

Catalog dans le Launchpad Designer

Après le transport du Business Catalog, l’administrateur peut l’assigner dans le Launchpad Designer :

  1. Fiori Launchpad Designer ouvrir
  2. Catalog sélectionner
  3. Target Mappings configurer
  4. Tiles définir

Lier l’App Descriptor (manifest.json)

Dans l’application UI5, l’action d’objet sémantique doit être définie :

{
"sap.app": {
"id": "ztravel.manage",
"title": "{{appTitle}}",
"crossNavigation": {
"inbounds": {
"manage-travel": {
"semanticObject": "Travel",
"action": "manage",
"signature": {
"parameters": {},
"additionalParameters": "allowed"
}
}
}
}
}
}

Créer un Business Role Template

L’administrateur utilise le Business Catalog pour créer des Business Role Templates.

Fiori App : Maintain Business Roles

  1. App Maintain Business Roles ouvrir
  2. Create from Template ou Create from Business Catalogs
  3. Sélectionner Business Catalog (par ex. ZTRAVEL_BC_MANAGER)
  4. Gérer Restriction Values

Définir Restriction Values

Business Role: ZTRAVEL_MANAGER_EU
├── Business Catalog: ZTRAVEL_BC_MANAGER
├── Restrictions:
│ ├── ZAGENCY: 1000, 1001, 1002 (EU-Agenturen)
│ ├── ZREGION: EU
│ └── ACTVT: 01, 02, 03, 06 (Alle Aktivitäten)
└── Assigned Users: user1, user2, user3

Plusieurs rôles pour différentes régions

ZTRAVEL_MANAGER_EU → Region EU, Agenturen 1000-1002
ZTRAVEL_MANAGER_US → Region US, Agenturen 2000-2002
ZTRAVEL_MANAGER_APAC → Region APAC, Agenturen 3000-3002

Débogage et dépannage

Problème : App non visible dans le Launchpad

  1. Business Catalog activé ?

    • Vérifier si le Catalog a été transporté et est actif
  2. Business Role assigné ?

    • App “Display Business Users” → vérifier utilisateur
    • Le rôle doit contenir le Catalog
  3. Target Mapping configuré ?

    • Vérifier Launchpad Designer
    • Semantic Object et Action doivent correspondre

Problème : Authorization Check échoue

  1. Restriction Values gérés ?

    • Vérifier les Restriction Values dans Business Role
    • Saisir toutes les valeurs organisationnelles pertinentes
  2. AUTHORITY-CHECK correct ?

    " Debug-Ausgabe
    AUTHORITY-CHECK OBJECT 'ZTRAVEL"
    ID 'ZAGENCY' FIELD lv_agency
    ID 'ZREGION' FIELD lv_region
    ID 'ACTVT' FIELD '02'.
    IF sy-subrc <> 0.
    " Log für Debugging
    DATA(lv_msg) = |Auth failed: Agency={ lv_agency }, Region={ lv_region }|.
    " Application Logging verwenden
    ENDIF.
  3. Objet d’autorisation présent ?

    • Vérifier dans ADT si Authorization Object existe
    • Les Fields doivent correspondre avec Restriction Type

Activer Authorization Trace

Pour une analyse détaillée :

" In der Anwendung vor dem AUTHORITY-CHECK
cl_abap_authority_check=>activate_auth_trace( ).
AUTHORITY-CHECK OBJECT 'ZTRAVEL"
ID 'ZAGENCY' FIELD lv_agency
ID 'ACTVT' FIELD '02'.
DATA(lt_trace) = cl_abap_authority_check=>get_auth_trace( ).
cl_abap_authority_check=>deactivate_auth_trace( ).
" Trace auswerten
LOOP AT lt_trace INTO DATA(ls_trace).
" ls_trace enthält Details zur Prüfung
ENDLOOP.

Bonnes pratiques

1. Catalogs granulaires

Créer des Catalogs séparés pour différents groupes d’utilisateurs :

ZPROJECT_BC_VIEWER → Nur Anzeige
ZPROJECT_BC_EDITOR → Anzeige + Bearbeitung
ZPROJECT_BC_ADMIN → Vollzugriff + Konfiguration

2. Convention de nommage cohérente

{PREFIX}_{BEREICH}_BC_{FUNKTION}
Exemples :
ZTRAVEL_BC_MANAGER → Travel Management für Manager
ZMM_BC_PURCHASER → Materials Management für Einkäufer
ZSD_BC_SALES_REP → Sales für Vertriebsmitarbeiter

3. Réutiliser les Restriction Types

Définir des Restriction Types réutilisables pour les niveaux organisationnels :

<!-- Allgemeiner Org-Restriction Type -->
<iam:restrictionType restrictionTypeId="ZORG_RT">
<restrictionField>
<fieldName>BUKRS</fieldName>
<fieldDescription>Company Code</fieldDescription>
</restrictionField>
<restrictionField>
<fieldName>WERKS</fieldName>
<fieldDescription>Plant</fieldDescription>
</restrictionField>
<restrictionField>
<fieldName>VKORG</fieldName>
<fieldDescription>Sales Organization</fieldDescription>
</restrictionField>
</iam:restrictionType>

4. Documentation

Documenter les Business Catalogs pour les administrateurs :

Catalog IDDescriptionRestrictions nécessairesGroupe cible
ZTRAVEL_BC_MANAGERReisemanagementZAGENCY, ZREGIONManager
ZTRAVEL_BC_EMPLOYEEReiseantragkeineAlle Mitarbeiter

5. Test avec différents utilisateurs

" Unit Test für Authorization
CLASS ltcl_authorization DEFINITION FOR TESTING RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS test_manager_auth FOR TESTING.
METHODS test_employee_auth FOR TESTING.
ENDCLASS.
CLASS ltcl_authorization IMPLEMENTATION.
METHOD test_manager_auth.
" Test mit Manager-Berechtigungen
AUTHORITY-CHECK OBJECT 'ZTRAVEL"
ID 'ZAGENCY' FIELD '1000"
ID 'ACTVT' FIELD '02'.
cl_abap_unit_assert=>assert_equals(
act = sy-subrc
exp = 0
msg = 'Manager should have change authorization"
).
ENDMETHOD.
METHOD test_employee_auth.
" Test mit Employee-Berechtigungen (nur Anzeige)
AUTHORITY-CHECK OBJECT 'ZTRAVEL"
ID 'ZAGENCY' FIELD '1000"
ID 'ACTVT' FIELD '02'.
" Dieser Test würde fehlschlagen, wenn als Employee ausgeführt
ENDMETHOD.
ENDCLASS.

Résumé

Le concept IAM dans ABAP Cloud offre une gestion des autorisations moderne et flexible :

ComposantResponsabilitéCréation
IAM AppAssociation de servicesADT (Développeur)
Business CatalogRegroupement d’AppsADT (Développeur)
Restriction TypeRestrictions organisationnellesADT (Développeur)
Business RoleAttribution de valeursFiori App (Admin)
User AssignmentAttribution de rôlesFiori App (Admin)

La séparation claire entre développement (qu’est-ce qui est possible ?) et administration (qui peut faire quoi ?) permet une gestion des autorisations sécurisée et maintenable.

Thèmes connexes