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 :
| Scenario | Exemple |
|---|---|
| Recuperer des donnees de base | Lire la fiche article depuis SAP ECC |
| Synchroniser des donnees transactionnelles | Transmettre des commandes au SAP On-Premise |
| Integrer des systemes legacy | Recuperer des donnees d’anciens systemes non-SAP |
| Appels RFC | Executer des modules fonction dans le systeme On-Premise |
| Consommer des services OData | Utiliser les services Gateway On-Premise |
Le Cloud Connector resout plusieurs defis :
| Aspect | Sans Cloud Connector | Avec Cloud Connector |
|---|---|---|
| Reseau | On-Premise accessible publiquement | On-Premise reste protege |
| Firewall | Ouvrir des ports entrants | Uniquement connexion sortante |
| Securite | Acces Internet direct | Tunnel avec chiffrement |
| Configuration | URL/IP dans le code | Virtual Hosts abstraction |
| Certificats | Gestion manuelle | Administration 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
| Composant | Fonction |
|---|---|
| Cloud Connector | Logiciel On-Premise, etablit le tunnel vers BTP |
| Connectivity Service | Service BTP, gere les connexions tunnel |
| Destination Service | Service BTP, stocke les configurations de connexion |
| Virtual Host | Alias 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
| Type | Description | Cas d’utilisation |
|---|---|---|
PrincipalPropagation | Le contexte utilisateur est transmis | SSO, verification des autorisations dans le backend |
BasicAuthentication | Utilisateur technique | Systeme-a-systeme sans contexte utilisateur |
NoAuthentication | Pas d’authentification | Services 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 genereCLASS 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 ConnectorMETHOD 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
| Erreur | Cause | Solution |
|---|---|---|
404 Not Found | Resource non autorisee dans SCC | Ajouter le chemin URL dans Resources |
502 Bad Gateway | Systeme On-Premise inaccessible | Verifier la connexion reseau |
403 Forbidden | Autorisation manquante | Verifier Access Control / Principal Propagation |
Connection refused | Cloud Connector hors ligne | Verifier le statut SCC, redemarrer |
SSL Handshake Error | Probleme de certificat | Verifier 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
| Theme | Recommandation |
|---|---|
| Droits minimaux | N’autoriser que les chemins URL necessaires dans Resources |
| Environnements separes | Cloud Connectors dedies pour DEV/QA/PROD |
| Utiliser Location ID | Pour plusieurs SCC dans le meme Subaccount |
| Configuration HA | Toujours Master + Shadow pour les systemes productifs |
| Monitoring | SAP Cloud ALM pour le monitoring de connectivite |
| Certificats | Renouveler avant expiration (configurer des alertes) |
| Audit Logs | Verifier regulierement, envisager l’integration SIEM |
| Mises a jour | Mettre a jour regulierement le Cloud Connector |
| Principal Propagation | Preferez pour la verification des autorisations dans le backend |
| Timeouts | Configurer 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
- SAP Destination Service - Gestion centralisee des destinations
- HTTP Client dans ABAP - Appeler des APIs REST
- RFC dans ABAP Cloud - Appels RFC via Destinations
- Consommer des Web Services SOAP - Integration basee sur WSDL