SAP Cloud Connector : Connecter les systemes On-Premise depuis ABAP Cloud

Catégorie
Integration
Publié
Auteur
Johannes

Le SAP Cloud Connector (SCC) est le composant central pour la communication securisee entre SAP BTP et les systemes On-Premise. Il permet aux applications ABAP Cloud d’acceder aux systemes backend du reseau d’entreprise sans avoir a les exposer directement sur Internet.

Pourquoi le Cloud Connector ?

Dans les paysages hybrides avec SAP S/4HANA Cloud et des systemes On-Premise, le besoin d’echanger des donnees se presente regulierement :

ScenarioExemple
Recuperer des donnees de baseLire la fiche article depuis SAP ECC
Synchroniser des donnees transactionnellesTransmettre des commandes au SAP On-Premise
Integrer des systemes legacyRecuperer des donnees d’anciens systemes non-SAP
Appels RFCExecuter des modules fonction dans le systeme On-Premise
Consommer des services ODataUtiliser les services Gateway On-Premise

Le Cloud Connector resout plusieurs defis :

AspectSans Cloud ConnectorAvec Cloud Connector
ReseauOn-Premise accessible publiquementOn-Premise reste protege
FirewallOuvrir des ports entrantsUniquement connexion sortante
SecuriteAcces Internet directTunnel avec chiffrement
ConfigurationURL/IP dans le codeVirtual Hosts abstraction
CertificatsGestion manuelleAdministration centralisee

Architecture

Le Cloud Connector fonctionne comme un reverse proxy et etablit une connexion sortante chiffree vers SAP BTP :

┌─────────────────────────────────────────────────────────────────────────┐
│ SAP BTP (Cloud) │
│ ┌──────────────┐ ┌─────────────────┐ ┌────────────────────────┐ │
│ │ ABAP Cloud │───>│ Connectivity │───>│ Cloud Connector │ │
│ │ Application │ │ Service │ │ Service (Destination) │ │
│ └──────────────┘ └─────────────────┘ └───────────┬────────────┘ │
│ │ │
└─────────────────────────────────────────────────────────│───────────────┘
Tunnel chiffre TLS
(connexion sortante)
┌─────────────────────────────────────────────────────────│───────────────┐
│ Reseau d'entreprise (On-Premise) │ │
│ ┌─────────────────┐ ┌──────────────────────────────┴─────────────┐ │
│ │ SAP ECC │<───│ SAP Cloud Connector │ │
│ │ S/4HANA │ │ │ │
│ │ Gateway │ │ - Mapping : Virtual Host → Internal Host │ │
│ │ Autres systemes │ │ - Access Control Lists │ │
│ └─────────────────┘ │ - Audit Logging │ │
│ └────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘

Composants principaux

ComposantFonction
Cloud ConnectorLogiciel On-Premise, etablit le tunnel vers BTP
Connectivity ServiceService BTP, gere les connexions tunnel
Destination ServiceService BTP, stocke les configurations de connexion
Virtual HostAlias pour les systemes On-Premise (par ex. sapecc.internal:443)

Installation et configuration de base

1. Installer le Cloud Connector

Le Cloud Connector est installe sur un serveur dans le reseau d’entreprise :

┌──────────────────────────────────────────────────────────────┐
│ Installation du Cloud Connector │
├──────────────────────────────────────────────────────────────┤
│ Plateformes : │
│ ├── Windows Server (installeur MSI) │
│ ├── Linux (paquets RPM/DEB) │
│ └── Docker (image conteneur) │
│ │
│ Configuration requise : │
│ ├── Java Runtime 8 ou superieur │
│ ├── 2 GB RAM (recommande : 4 GB) │
│ ├── Acces HTTPS sortant vers BTP │
│ └── Acces aux systemes On-Premise │
│ │
│ Ports standards : │
│ ├── 8443 : UI Administration │
│ └── 8444 : Cluster HA (optionnel) │
└──────────────────────────────────────────────────────────────┘

2. Connecter le Subaccount

Apres l’installation, le Cloud Connector est lie au Subaccount BTP :

┌──────────────────────────────────────────────────────────────┐
│ Administration Cloud Connector │
│ https://scc-server:8443 │
├──────────────────────────────────────────────────────────────┤
│ Definir la connexion Subaccount │
│ │
│ Region : cf-eu10 (Europe - Francfort) │
│ Subaccount : my-subaccount-id │
│ Nom d'affichage : Production Cloud Connector │
│ Utilisateur : [email protected]
│ Mot de passe : ******** │
│ │
│ Location ID : PROD_LOCATION (optionnel, pour multi-SCC) │
│ │
│ [Connecter] │
└──────────────────────────────────────────────────────────────┘

3. Virtual Host et Resource Mapping

Les Virtual Hosts abstraient les adresses systeme internes :

┌──────────────────────────────────────────────────────────────┐
│ Mapping Cloud to On-Premise │
├──────────────────────────────────────────────────────────────┤
│ Backend Type : SAP ABAP System │
│ Protocol : HTTPS │
│ │
│ ┌─ Virtual Host (cote Cloud) ───────────────────────────┐ │
│ │ Virtual Host : sapecc │ │
│ │ Virtual Port : 443 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Internal Host (On-Premise) ──────────────────────────┐ │
│ │ Internal Host : sapecc.corp.local │ │
│ │ Internal Port : 44300 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ Principal Propagation : [x] Active │
│ Host in Request Header : Internal Host │
└──────────────────────────────────────────────────────────────┘

4. Autoriser les Resources (chemins URL)

Tous les chemins ne sont pas automatiquement autorises. Vous devez definir explicitement les Resources :

┌──────────────────────────────────────────────────────────────┐
│ Resources pour sapecc:443 │
├──────────────────────────────────────────────────────────────┤
│ ┌─ Resource 1 ────────────────────────────────────────────┐ │
│ │ URL Path : /sap/opu/odata/ │ │
│ │ Access Policy : Path and all sub-paths │ │
│ │ Description : Services OData │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Resource 2 ────────────────────────────────────────────┐ │
│ │ URL Path : /sap/bc/srt/ │ │
│ │ Access Policy : Path and all sub-paths │ │
│ │ Description : SOAP Web Services │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Resource 3 ────────────────────────────────────────────┐ │
│ │ URL Path : /sap/bc/adt/ │ │
│ │ Access Policy : Path and all sub-paths │ │
│ │ Description : Services ADT (optionnel) │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

Destination dans le BTP Cockpit

Apres la configuration du Cloud Connector, une Destination doit etre creee dans le BTP Cockpit :

┌──────────────────────────────────────────────────────────────┐
│ Configuration de la Destination │
├──────────────────────────────────────────────────────────────┤
│ Name : SAP_ECC_ODATA │
│ Type : HTTP │
│ URL : http://sapecc:443 │
│ Proxy Type : OnPremise │
│ Authentication : PrincipalPropagation │
│ │
│ ┌─ Additional Properties ─────────────────────────────────┐ │
│ │ sap-client : 100 │ │
│ │ HTML5.DynamicDestination : true │ │
│ │ WebIDEEnabled : true │ │
│ │ WebIDEUsage : odata_abap │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ Location ID : PROD_LOCATION (si configure) │
└──────────────────────────────────────────────────────────────┘

Options d’authentification

TypeDescriptionCas d’utilisation
PrincipalPropagationLe contexte utilisateur est transmisSSO, verification des autorisations dans le backend
BasicAuthenticationUtilisateur techniqueSysteme-a-systeme sans contexte utilisateur
NoAuthenticationPas d’authentificationServices publics (rare)

Appeler un service OData On-Premise

Configurer le Communication Arrangement

Pour l’utilisation dans ABAP Cloud, un Communication Arrangement est necessaire :

┌──────────────────────────────────────────────────────────────┐
│ Communication Arrangement │
├──────────────────────────────────────────────────────────────┤
│ Scenario : SAP_COM_0276 (Destination Service) │
│ │
│ Communication System : BTP_CONNECTIVITY │
│ ├── Host : destination-configuration.cfapps.eu10.hana... │
│ ├── Port : 443 │
│ └── Auth : OAuth 2.0 │
│ │
│ Outbound Services : │
│ └── Destination Service API : Actif │
└──────────────────────────────────────────────────────────────┘

Code ABAP : Appeler un service OData

CLASS zcl_onprem_odata_client DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
TYPES:
BEGIN OF ty_material,
matnr TYPE string,
maktx TYPE string,
meins TYPE string,
mtart TYPE string,
END OF ty_material,
tt_materials TYPE STANDARD TABLE OF ty_material WITH EMPTY KEY.
METHODS get_materials
IMPORTING iv_plant TYPE string OPTIONAL
RETURNING VALUE(rt_result) TYPE tt_materials
RAISING cx_http_dest_provider_error
cx_web_http_client_error.
PRIVATE SECTION.
CONSTANTS c_destination TYPE string VALUE 'SAP_ECC_ODATA'.
ENDCLASS.
CLASS zcl_onprem_odata_client IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
TRY.
DATA(lt_materials) = get_materials( iv_plant = '1000' ).
out->write( |Articles trouves : { lines( lt_materials ) }| ).
LOOP AT lt_materials INTO DATA(ls_material).
out->write( |{ ls_material-matnr } - { ls_material-maktx }| ).
ENDLOOP.
CATCH cx_http_dest_provider_error INTO DATA(lx_dest).
out->write( |Erreur destination : { lx_dest->get_text( ) }| ).
CATCH cx_web_http_client_error INTO DATA(lx_http).
out->write( |Erreur HTTP : { lx_http->get_text( ) }| ).
ENDTRY.
ENDMETHOD.
METHOD get_materials.
" 1. Recuperer la destination du Cloud Connector
DATA(lo_destination) = cl_http_destination_provider=>create_by_cloud_destination(
i_name = c_destination
i_authn_mode = if_a4c_cp_service=>user_propagation ).
" 2. Creer le client HTTP
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination(
i_destination = lo_destination ).
" 3. Configurer la requete OData
DATA(lo_request) = lo_client->get_http_request( ).
" Chemin du service OData (par ex. service Material dans ECC)
DATA(lv_path) = '/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV/A_MaterialStock'.
" Ajouter le filtre
IF iv_plant IS NOT INITIAL.
lv_path = lv_path && |?$filter=Plant eq '{ iv_plant }'|.
ENDIF.
lo_request->set_uri_path( lv_path ).
lo_request->set_header_field(
i_name = 'Accept"
i_value = 'application/json' ).
" 4. Executer la requete
DATA(lo_response) = lo_client->execute( if_web_http_client=>get ).
DATA(lv_status) = lo_response->get_status( )-code.
IF lv_status = 200.
DATA(lv_json) = lo_response->get_text( ).
" 5. Parser le JSON (noter le wrapper OData)
DATA: BEGIN OF ls_odata_response,
d TYPE ty_odata_results,
END OF ls_odata_response,
BEGIN OF ty_odata_results,
results TYPE tt_materials,
END OF ty_odata_results.
/ui2/cl_json=>deserialize(
EXPORTING json = lv_json
CHANGING data = ls_odata_response ).
rt_result = ls_odata_response-d-results.
ELSE.
DATA(lv_error) = lo_response->get_text( ).
lo_client->close( ).
RAISE EXCEPTION TYPE cx_web_http_client_error.
ENDIF.
lo_client->close( ).
ENDMETHOD.
ENDCLASS.

OData avec Service Consumption Model

Pour des appels type-safe, un Service Consumption Model peut etre genere :

" 1. Creer le Service Consumption Model dans ADT :
" - Other ABAP Repository Objects → Connectivity → Service Consumption Model
" - URL du service OData : http://sapecc:443/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV/$metadata
" - Genere : classe proxy et types de donnees
" 2. Utilisation du proxy genere
CLASS zcl_material_service DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS get_materials
RETURNING VALUE(rt_result) TYPE zt_material
RAISING /iwbep/cx_cp_remote.
ENDCLASS.
CLASS zcl_material_service IMPLEMENTATION.
METHOD get_materials.
" Le proxy utilise automatiquement la destination configuree
DATA(lo_client) = NEW zsc_material_stock_srv( ).
" Appel type-safe avec structures generees
DATA(lt_filter) = VALUE /iwbep/if_cp_filter_node=>ty_t_filter(
( property = 'Plant' value = '1000' ) ).
rt_result = lo_client->get_a_material_stock(
it_filter = lt_filter ).
ENDMETHOD.
ENDCLASS.

RFC via Cloud Connector

En plus des services HTTP, le Cloud Connector peut aussi tunneliser les connexions RFC :

┌──────────────────────────────────────────────────────────────┐
│ Cloud to On-Premise (RFC) │
├──────────────────────────────────────────────────────────────┤
│ Backend Type : SAP ABAP System │
│ Protocol : RFC │
│ │
│ Virtual Host : sapecc-rfc │
│ Virtual Port : <genere> │
│ │
│ Internal Host : sapecc.corp.local │
│ Instance Number : 00 │
│ System ID : ECC │
│ │
│ Principal Propagation : [x] Active │
└──────────────────────────────────────────────────────────────┘
" Appel RFC via Cloud Connector
METHOD call_onprem_bapi.
DATA: lt_return TYPE STANDARD TABLE OF bapiret2.
" Destination RFC du Destination Service
DATA(lv_destination) = cl_rfc_destination_provider=>create_by_cloud_destination(
i_name = 'SAP_ECC_RFC' ).
CALL FUNCTION 'BAPI_MATERIAL_GET_ALL"
DESTINATION lv_destination
EXPORTING
plant = '1000"
TABLES
return = lt_return
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
" Gestion des erreurs
ENDIF.
ENDMETHOD.

Aspects de securite

Access Control Lists

Le Cloud Connector offre un controle d’acces granulaire :

┌──────────────────────────────────────────────────────────────┐
│ Access Control │
├──────────────────────────────────────────────────────────────┤
│ System : sapecc:443 │
│ │
│ Resources : │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Path │ Policy │ Description │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ /sap/opu/odata/sap/ │ Subpaths │ APIs OData │ │
│ │ /sap/bc/srt/rfc/ │ Subpaths │ RFC via HTTP │ │
│ │ /sap/bc/adt/ │ Exact + Sub │ ADT (Dev) │ │
│ │ / │ BLOQUE │ Root bloque │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Note : N'autoriser que les chemins necessaires ! │
└──────────────────────────────────────────────────────────────┘

Configurer le Principal Propagation

Le Principal Propagation permet le Single Sign-On entre Cloud et On-Premise :

┌──────────────────────────────────────────────────────────────┐
│ Configuration Principal Propagation │
├──────────────────────────────────────────────────────────────┤
│ 1. Generer le certificat X.509 dans le Cloud Connector │
│ Cloud Connector Admin → Configuration → On Premise → │
│ Principal Propagation → CN: <subaccount> │
│ │
│ 2. Importer le certificat dans le systeme On-Premise │
│ Transaction STRUST → SSL Server Standard → Import │
│ │
│ 3. Configurer le Rule-Based User Mapping (CERTRULE) │
│ - Mapper l'attribut utilisateur Cloud sur l'utilisateur │
│ On-Premise │
│ - par ex. email → utilisateur SAP │
│ │
│ 4. Configurer le service ICF (SICF) │
│ - Activer SSL │
│ - Autoriser Client Certificate Login │
└──────────────────────────────────────────────────────────────┘

Audit Logging

Tous les acces sont journalises :

┌──────────────────────────────────────────────────────────────┐
│ Cloud Connector Audit Log │
├──────────────────────────────────────────────────────────────┤
│ Timestamp │ User │ System │ Path │
│ ─────────────────────┼────────────┼───────────┼─────────────│
│ 2026-02-14 10:23:45 │ user@comp │ sapecc │ /sap/opu/.. │
│ 2026-02-14 10:23:12 │ tech_user │ sapecc │ /sap/bc/.. │
│ 2026-02-14 10:22:58 │ user@comp │ sapecc │ /sap/opu/.. │
└──────────────────────────────────────────────────────────────┘

Haute disponibilite

Pour les scenarios productifs, une configuration haute disponibilite est recommandee :

┌────────────────────────────────────────────────────────────────────────┐
│ Configuration Haute Disponibilite │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Master │ │ Shadow │ │
│ │ Cloud Conn. │<──>│ Cloud Conn. │ │
│ │ (Actif) │HA │ (Standby) │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ └─────────┬─────────┘ │
│ │ │
│ ┌─────────┴─────────┐ │
│ │ On-Premise │ │
│ │ Backend │ │
│ └───────────────────┘ │
│ │
│ - Master et Shadow synchronisent la configuration │
│ - En cas de panne du Master, Shadow prend automatiquement le relais │
│ - Meme connexion Subaccount │
└────────────────────────────────────────────────────────────────────────┘

Gestion des erreurs et depannage

Erreurs frequentes

ErreurCauseSolution
404 Not FoundResource non autorisee dans SCCAjouter le chemin URL dans Resources
502 Bad GatewaySysteme On-Premise inaccessibleVerifier la connexion reseau
403 ForbiddenAutorisation manquanteVerifier Access Control / Principal Propagation
Connection refusedCloud Connector hors ligneVerifier le statut SCC, redemarrer
SSL Handshake ErrorProbleme de certificatVerifier les certificats dans STRUST

Code de diagnostic

CLASS zcl_scc_diagnostics DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
CLASS-METHODS check_connectivity
IMPORTING iv_destination TYPE string
RETURNING VALUE(rv_status) TYPE string.
ENDCLASS.
CLASS zcl_scc_diagnostics IMPLEMENTATION.
METHOD check_connectivity.
TRY.
" Recuperer la destination
DATA(lo_destination) = cl_http_destination_provider=>create_by_cloud_destination(
i_name = iv_destination
i_authn_mode = if_a4c_cp_service=>service_specific ).
" Envoyer une requete simple
DATA(lo_client) = cl_web_http_client_manager=>create_by_http_destination(
i_destination = lo_destination ).
DATA(lo_request) = lo_client->get_http_request( ).
lo_request->set_uri_path( '/' ).
DATA(lo_response) = lo_client->execute( if_web_http_client=>get ).
DATA(lv_status) = lo_response->get_status( )-code.
lo_client->close( ).
rv_status = |HTTP { lv_status } - Connexion reussie|.
CATCH cx_http_dest_provider_error INTO DATA(lx_dest).
rv_status = |Erreur destination : { lx_dest->get_text( ) }|.
CATCH cx_web_http_client_error INTO DATA(lx_http).
rv_status = |Erreur HTTP : { lx_http->get_text( ) }|.
ENDTRY.
ENDMETHOD.
ENDCLASS.

Logs du Cloud Connector

Dans l’UI Admin du Cloud Connector sous Monitor -> Connections :

┌──────────────────────────────────────────────────────────────┐
│ Connection Log │
├──────────────────────────────────────────────────────────────┤
│ 2026-02-14 10:30:15 INFO - Tunnel etabli │
│ 2026-02-14 10:30:14 INFO - Connexion a Connectivity Svc │
│ 2026-02-14 10:30:12 INFO - Demarrage du Cloud Connector │
│ │
│ Niveau de trace : INFO | DEBUG | WARNING | ERROR │
└──────────────────────────────────────────────────────────────┘

Bonnes pratiques

ThemeRecommandation
Droits minimauxN’autoriser que les chemins URL necessaires dans Resources
Environnements separesCloud Connectors dedies pour DEV/QA/PROD
Utiliser Location IDPour plusieurs SCC dans le meme Subaccount
Configuration HAToujours Master + Shadow pour les systemes productifs
MonitoringSAP Cloud ALM pour le monitoring de connectivite
CertificatsRenouveler avant expiration (configurer des alertes)
Audit LogsVerifier regulierement, envisager l’integration SIEM
Mises a jourMettre a jour regulierement le Cloud Connector
Principal PropagationPreferez pour la verification des autorisations dans le backend
TimeoutsConfigurer des valeurs appropriees dans les Destinations

Resume

Le SAP Cloud Connector est indispensable pour les scenarios hybrides :

  • Connexion securisee : Tunnel chiffre, pas de ports entrants
  • Controle granulaire : Access Control Lists, Audit Logging
  • Authentification flexible : Principal Propagation, Basic Auth
  • Haute disponibilite : Configuration Master/Shadow pour les systemes productifs
  • Diversite de protocoles : HTTP, RFC, LDAP, Mail

Sujets connexes