Questo documento descrive un'architettura di riferimento per proteggere i dati aziendali sensibili in SAP utilizzando l'API Cloud Data Loss Prevention (DLP) con l'edizione SAP BTP dell'SDK ABAP per Google Cloud.
È essenziale proteggere i dati aziendali sensibili, come le informazioni che consentono l'identificazione personale (PII), archiviati in SAP. La condivisione di dati aziendali sensibili di SAP con persone o sistemi sbagliati può danneggiare la reputazione della tua azienda e comportare perdite finanziarie. L'API DLP offre un modo efficace e flessibile per aggiungere un livello di protezione per i dati sensibili. Questa API può rilevare, classificare e anonimizzare le informazioni sensibili prima che vengano archiviate in SAP o trasmesse da SAP. Ti aiuta a identificare e proteggere in modo proattivo le informazioni riservate, riducendo il rischio di violazioni dei dati e garantendo la conformità alle normative sulla privacy.
Il pubblico di destinazione di questo documento include sviluppatori ABAP, architetti di soluzioni SAP e architetti cloud le cui responsabilità includono la sicurezza dei dati, l'elaborazione dei dati o l'analisi dei dati. Questo documento presuppone che tu abbia familiarità con il trattamento dei dati e la privacy dei dati, Sensitive Data Protection e i relativi concetti, come infoType e i relativi rilevatori.
Architettura
Il seguente diagramma mostra un'architettura di riferimento per una soluzione DLP, che include componenti di un ambiente ABAP SAP BTP e Google Cloud.
Questa architettura della soluzione DLP include i seguenti componenti:
Componente | Sottosistema | Dettagli |
---|---|---|
1 | Origine di input | Agisce come punto di contatto per i dati. |
2 | Assistenza clienti | Una classe ABAP che interagisce con tutti gli altri componenti. Riceve i dati di origine, li invia all'API DLP tramite l'SDK ABAP per Google Cloud per l'elaborazione e li archivia nel datastore SAP. |
3 | ABAP SDK for Google Cloud | La versione SAP BTP dell'SDK ABAP per Google Cloud per accedere all'API DLP. |
4 | DLP API | L'API DLP fornisce vari metodi di trasformazione per l'anonimizzazione delle PII. |
5 | Datastore di destinazione | Un sistema SAP ERP, in esecuzione sul cloud o on-premise, in cui vengono archiviati i dati dopo l'elaborazione e l'anonimizzazione delle PII. |
Prodotti utilizzati
Questa architettura di riferimento utilizza i seguenti prodotti Google Cloud:
Caso d'uso
Questa sezione fornisce esempi di casi d'uso per i quali puoi utilizzare l'API DLP per proteggere i dati aziendali sensibili in SAP.
Conformità alle normative sulla privacy dei dati
Spesso le organizzazioni sono tenute ad anonimizzare i dati sensibili. Esistono molte norme governative, come il GDPR e il DPDP, che richiedono che le PII non vengano memorizzate in determinate condizioni.
Costo
Per una stima del costo delle risorse Google Cloud utilizzate dall'API DLP, consulta la stima precalcolata nel Calcolatore prezzi di Google Cloud.
Design alternativo
Sebbene questo documento si concentri sull'edizione SAP BTP dell'SDK ABAP per Google Cloud, puoi ottenere risultati simili utilizzando l'edizione on-premise o qualsiasi versione cloud dell'SDK ABAP per Google Cloud. In questa configurazione, puoi archiviare i dati sensibili (PII) trattati e anonimizzati nel tuo sistema SAP on-premise.
Deployment
Questa sezione mostra come implementare una soluzione che protegga i dati sensibili durante la creazione di un partner commerciale (persona) nel sistema SAP. In base alla configurazione impostata dalla tua organizzazione, questa soluzione può oscurare, eliminare l'identità o anonimizzare i dati.
Prima di iniziare
Prima di implementare una soluzione basata su questa architettura di riferimento, assicurati di aver completato i seguenti prerequisiti:
Devi disporre di un account e un progetto Google Cloud.
La fatturazione è attivata per il progetto. Per informazioni su come verificare che la fatturazione sia attivata per il tuo progetto, consulta Verificare lo stato di fatturazione dei progetti.
L'edizione SAP BTP di ABAP SDK for Google Cloud è installata e configurata.
L'autenticazione per accedere alle API Google Cloud è configurata. Per informazioni su come configurare l'autenticazione, vedi Configurare l'autenticazione per la versione SAP BTP di ABAP SDK for Google Cloud.
L'API DLP sia abilitata nel progetto Google Cloud.
Implementare un servizio client per l'anonimizzazione delle PII
L'input dell'origine dati viene elaborato in un servizio client che implementi nel tuo ambiente ABAP di SAP BTP. Questo servizio client può essere costituito dai seguenti componenti secondari:
- Configurazione delle regole: memorizza le regole aziendali che devono essere applicate per diversi tipi di campi pertinenti per le PII.
- Modulo proxy DLP: chiama l'API DLP tramite la versione SAP BTP dell'ABAP SDK per Google Cloud.
Configurazione della regola
Nell'ambiente SAP BTP ABAP, crei una tabella di configurazione per mantenere le regole di trasformazione da applicare per diversi tipi di campi pertinenti per le PII. In un ambiente di produzione, puoi utilizzare uno strumento come SAP Fiori per gestire i dati in questa tabella.
Puoi implementare le seguenti regole di esempio:
- Qualsiasi campo con un indirizzo email deve essere sostituito con un valore fittizio.
- Qualsiasi campo con un numero di telefono deve essere mascherato.
- Qualsiasi campo con commenti, note o osservazioni non deve contenere informazioni relative all'indirizzo email.
- Qualsiasi campo con i dati del conto bancario deve essere tokenizzato utilizzando un metodo di anonimizzazione basato su crittografia.
Di seguito è riportata la definizione di una tabella di configurazione di esempio:
define table zgoog_dlp_config {
key client : abap.clnt not null;
key keyword : abap.char(60) not null;
key infotype : abap.char(60) not null;
surrogate_infotype : abap.char(60);
common_alphabhet : abap.char(20);
masking_char : abap.char(1);
number_to_mask : int4;
}
L'esempio seguente mostra le regole di trasformazione di esempio:
lt_dlp_config = VALUE #(
( client = sy-mandt keyword = 'EMAIL' infotype = 'EMAIL_ADDRESS' )
( client = sy-mandt keyword = 'PHONE NUMBER' infotype = 'PHONE_NUMBER' number_to_mask = 5 masking_char = '*' )
( client = sy-mandt keyword = 'REMARKS' infotype = 'EMAIL_ADDRESS' )
( client = sy-mandt keyword = 'REMARKS' infotype = 'PHONE_NUMBER' )
( client = sy-mandt keyword = 'BANK ACCOUNT' infotype = 'FINANCIAL_ACCOUNT_NUMBER' surrogate_infotype = 'ACCOUNT' common_alphabhet = 'ALPHA_NUMERIC' )
).
Modulo proxy DLP
Puoi creare un sottocomponente dedicato denominato Modulo proxy DLP. Questo modulo può essere una classe ABAP o un servizio REST. La sua funzione principale è anonimizzare le PII utilizzando le regole di trasformazione che hai definito in precedenza.
Il modulo proxy DLP utilizza il metodo DEIDENTIFY_CONTENT
della classe /GOOG/CL_DLP_V2
nell'edizione SAP BTP di ABAP SDK for Google Cloud.
Le seguenti sezioni mostrano implementazioni di esempio di come utilizzare il modulo proxy DLP per l'anonimizzazione delle PII in vari scenari.
Sostituzione: sostituisce un valore sensibile rilevato con un valore surrogato specificato
Per sostituire un ID email rilevato con un valore generico:
Crea un oggetto client per la classe
/GOOG/CL_DLP_V2
.Utilizza la tabella di configurazione per determinare il tipo di trasformazione da applicare.
Per mascherare gli ID email, sostituiscili con il valore di sostituzione, ad esempio
EMAIL_ID@EXAMPLE.COM
.Chiama l'API DLP.
Utilizza il metodo
DEIDENTIFY_CONTENT
con tutti i parametri pertinenti, incluso il valore di sostituzione, e restituisce l'output al servizio client.
Il seguente esempio di codice illustra i passaggi precedenti:
DATA: ls_input TYPE /goog/cl_dlp_v2=>ty_055,
ls_transformations TYPE /goog/cl_dlp_v2=>ty_100.
TRY.
DATA(lo_client) = NEW /goog/cl_dlp_v2( iv_key_name = 'CLIENT_KEY' ).
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
"As a developer, you need to read the configuration into mt_dlp_config
TRY.
"As a developer, you need to read the configuration
DATA(ls_dlp_config) = mt_dlp_config[ keyword = iv_input_type ].
"Populate the input parameters to DLP API for replacement
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_input-inspect_config-info_types.ls_transformations-primitive_transformation-replace_config-new_value-string_value = 'REPLACEMENT_VALUE'.
INSERT ls_transformations INTO TABLE ls_input-deidentify_config-info_type_transformations-transformations.
ls_input-item-value = iv_input_value.
"Call DLP API client stub
TRY.
lo_client->deidentify_content(
EXPORTING
iv_p_projects_id = lv_p_projects_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
).
CATCH /goog/cx_sdk INTO DATA(lx_sdk_exception).
ev_message = lx_sdk_exception->get_text( ).
ENDTRY.
IF lo_client->is_success( lv_ret_code ).
ev_message = lv_err_text.
ELSE.
ev_output_value = ls_output-item-value.
ENDIF.
CATCH cx_sy_itab_line_not_found INTO DATA(lx_not_found).
ev_output_value = iv_input_value.
ENDTRY.
"Close the http client
lo_client->close_http_client( ).
CATCH /goog/cx_sdk INTO DATA(lx_sdk).
ev_message = lx_sdk->get_text( ).
ENDTRY.
Sostituisci quanto segue:
CLIENT_KEY
: la chiave client configurata per l'autenticazione.REPLACEMENT_VALUE
: il valore sostitutivo, ad esempioEMAIL_ID@EXAMPLE.COM
.
Oscuramento: elimina tutto o parte di un valore sensibile rilevato
Per eliminare tutto o parte di un valore sensibile rilevato:
Crea un oggetto client per la classe
/GOOG/CL_DLP_V2
.Utilizza la tabella di configurazione per determinare il tipo di trasformazione da applicare.
Specifica se eliminare tutto o parte di un valore sensibile rilevato.
Chiama l'API DLP.
Utilizza il metodo
DEIDENTIFY_CONTENT
con tutti i parametri pertinenti e restituisce l'output al servizio client.
DATA: ls_input TYPE /goog/cl_dlp_v2=>ty_055,
ls_transformations TYPE /goog/cl_dlp_v2=>ty_100,
lo_redact TYPE REF TO data.
DATA(lo_client) = NEW /goog/cl_dlp_v2( iv_key_name = 'CLIENT_KEY' ).
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
"As a developer, you need to read the configuration into mt_dlp_config
TRY.
"Read the configuration
DATA(ls_dlp_config) = mt_dlp_config[ keyword = iv_input_type ].
"Populate the input parameters to DLP API for redaction
CREATE DATA lo_redact TYPE REF TO string.
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_input-inspect_config-info_types.
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_transformations-info_types.
ls_transformations-primitive_transformation-redact_config = lo_redact.
INSERT ls_transformations INTO TABLE ls_input-deidentify_config-info_type_transformations-transformations.
ls_input-item-value = iv_input_value.
"Call DLP API client stub
TRY.
lo_client->deidentify_content(
EXPORTING
iv_p_projects_id = lv_p_projects_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
).
CATCH /goog/cx_sdk INTO lx_sdk_exception.
ev_message = lx_sdk_exception->get_text( ).
ENDTRY.
IF lo_client->is_success( lv_ret_code ).
ev_message = lv_err_text.
ELSE.
ev_output_value = ls_output-item-value.
ENDIF.
CATCH cx_sy_itab_line_not_found INTO lx_not_found.
ev_output_value = iv_input_value.
ENDTRY.
"Close the http client
lo_client->close_http_client( ).
CATCH /goog/cx_sdk INTO DATA(lx_sdk).
ev_message = lx_sdk->get_text( ).
ENDTRY.
Sostituisci CLIENT_KEY
con la chiave client configurata per l'autenticazione.
Mascheramento: sostituisce un numero di caratteri di un valore sensibile con un carattere specificato, ad esempio un hash (#) o un asterisco (*)
Per sostituire i valori con un carattere specificato:
Crea un oggetto client per la classe
/GOOG/CL_DLP_V2
.Utilizza la tabella di configurazione per determinare il tipo di trasformazione da applicare.
Imposta il carattere di mascheramento e il numero di caratteri da mascherare in base alla tabella di configurazione.
Chiama l'API DLP.
Utilizza il metodo
DEIDENTIFY_CONTENT
con tutti i parametri pertinenti, incluso il valore di sostituzione, e restituisce l'output al servizio clienti.
DATA: ls_input TYPE /goog/cl_dlp_v2=>ty_055,
ls_transformations TYPE /goog/cl_dlp_v2=>ty_100.
TRY.
DATA(lo_client) = NEW /goog/cl_dlp_v2( iv_key_name = 'CLIENT_KEY' ).
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
"As a developer, you need to read the configuration into mt_dlp_config
TRY.
"Read the configuration
DATA(ls_dlp_config) = mt_dlp_config[ keyword = iv_input_type ].
"Populate the input parameters to DLP API for masking
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_input-inspect_config-info_types.
ls_transformations-primitive_transformation-character_mask_config-number_to_mask = ls_dlp_config-number_to_mask.
ls_transformations-primitive_transformation-character_mask_config-masking_character = ls_dlp_config-masking_char.
INSERT ls_transformations INTO TABLE ls_input-deidentify_config-info_type_transformations-transformations.
ls_input-item-value = iv_input_value.
"Call DLP API client stub
TRY.
lo_client->deidentify_content(
EXPORTING
iv_p_projects_id = lv_p_projects_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
).
CATCH /goog/cx_sdk INTO lx_sdk_exception.
ev_message = lx_sdk_exception->get_text( ).
ENDTRY.
IF lo_client->is_success( lv_ret_code ).
ev_message = lv_err_text.
ELSE.
ev_output_value = ls_output-item-value.
ENDIF.
CATCH cx_sy_itab_line_not_found INTO lx_not_found.
ev_output_value = iv_input_value.
ENDTRY.
"Close the http client
lo_client->close_http_client( ).
CATCH /goog/cx_sdk INTO DATA(lx_sdk).
ev_message = lx_sdk->get_text( ).
ENDTRY.
Sostituisci CLIENT_KEY
con la chiave client configurata per l'autenticazione.
Tokenizzazione basata sulla crittografia: cripta il valore originale dei dati sensibili utilizzando una chiave crittografica
Per la tokenizzazione basata su crittografia, devi creare una chiave crittografica e una chiave con wrapping. Questa guida utilizza la crittografia con protezione del formato. Questo metodo crea un token con la stessa lunghezza e gli stessi caratteri del valore di input originale.
Per anonimizzare il valore dei dati sensibili utilizzando la mappatura dell'hash criptato:
Crea un oggetto client per la classe
/GOOG/CL_DLP_V2
.Utilizza la tabella di configurazione per determinare il tipo di trasformazione da applicare.
Imposta la chiave crittografica e la chiave con wrapping create in precedenza.
Chiama l'API DLP.
Utilizza il metodo
DEIDENTIFY_CONTENT
con tutti i parametri pertinenti per la crittografia e restituisce l'output al servizio client.
DATA: ls_input TYPE /goog/cl_dlp_v2=>ty_055,
ls_transformations TYPE /goog/cl_dlp_v2=>ty_100,
ls_kms_wrapped_key TYPE /goog/cl_dlp_v2=>ty_123,
ls_crypto_key TYPE /goog/cl_dlp_v2=>ty_040,
ls_crypto_hash_config TYPE /goog/cl_dlp_v2=>ty_039.
TRY.
DATA(lo_client) = NEW /goog/cl_dlp_v2( iv_key_name = 'CLIENT_KEY' ).
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
"As a developer, you need to read the configuration into lt_dlp_config
"As a developer, you need to populate the crypto key name and wrapped key
ls_kms_wrapped_key-crypto_key_name = 'CRYPTO_KEY_NAME'. "Crypto_key_name.
ls_kms_wrapped_key-wrapped_key = 'WRAPPED_KEY_NAME'. "Wrapped_key.
ls_crypto_key-kms_wrapped = ls_kms_wrapped_key.
ls_crypto_hash_config-crypto_key = ls_crypto_key.
TRY.
"Read the configuration
DATA(ls_dlp_config) = mt_dlp_config[ keyword = iv_input_type ].
"Populate the input parameters to DLP API for cryptographic encryption
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_input-inspect_config-info_types.
INSERT VALUE #( name = ls_dlp_config-infotype ) INTO TABLE ls_transformations-info_types. ls_transformations-primitive_transformation-crypto_replace_ffx_fpe_config-crypto_key-kms_wrapped = ls_kms_wrapped_key. ls_transformations-primitive_transformation-crypto_replace_ffx_fpe_config-surrogate_info_type-name = ls_dlp_config-surrogate_infotype. ls_transformations-primitive_transformation-crypto_replace_ffx_fpe_config-common_alphabet = ls_dlp_config-common_alphabhet.
INSERT ls_transformations INTO TABLE ls_input-deidentify_config-info_type_transformations-transformations.
ls_input-item-value = iv_input_value.
"Add the info type identification string to map the subsequent value to relevant infotype
CONCATENATE 'Bank Account' ls_input-item-value INTO ls_input-item-value SEPARATED BY space.
"Call DLP API client stub
TRY.
lo_client->deidentify_content(
EXPORTING
iv_p_projects_id = lv_p_projects_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
).
CATCH /goog/cx_sdk INTO DATA(lx_sdk_exception).
ev_message = lx_sdk_exception->get_text( ).
ENDTRY.
IF lo_client->is_success( lv_ret_code ).
ev_message = lv_err_text.
ELSE.
"Removing the info type identification string added earlier and keeping only the encrypted value
REPLACE ALL OCCURRENCES OF SUBSTRING 'Bank Account' IN ls_output-item-value WITH ''.
REPLACE ALL OCCURRENCES OF SUBSTRING 'ACCOUNT(10):' IN ls_output-item-value WITH ''.
ev_output_value = ls_output-item-value.
ENDIF.
CATCH cx_sy_itab_line_not_found INTO lx_not_found.
ev_output_value = iv_input_value.
ENDTRY.
"Close the http client
lo_client->close_http_client( ).
CATCH /goog/cx_sdk INTO DATA(lx_sdk).
ev_message = lx_sdk->get_text( ).
ENDTRY.
Sostituisci quanto segue:
CLIENT_KEY
: la chiave client configurata per l'autenticazione.CRYPTO_KEY_NAME
: il nome della chiave di crittografia.WRAPPED_KEY_NAME
: il nome della chiave con wrapping.
Trasmettere i dati di input al servizio client
Trasmetti i dati dal sistema di origine dell'input al servizio client. Puoi trasmettere i dati utilizzando una chiamata API, un'applicazione UI frontend, un file locale, un'applicazione di terze parti o qualsiasi altra origine.
Per informazioni sulla creazione di un'app SAP Fiori, consulta Creare un'app SAP Fiori utilizzando il modello di programmazione delle applicazioni RESTful ABAP.
Chiama il modulo proxy DLP
Chiama il modulo proxy DLP dal servizio client, che riceve l'input dell'origine.
Il seguente esempio di codice illustra come chiamare il modulo proxy DLP dal servizio client:
DATA : lv_input TYPE string,
lv_output TYPE String.
"As a developer, you need to populate input data into relevant fields
"Redaction: Deletes all or part of a detected sensitive value
" - Remarks
lv_input = lv_email_address.
zgoog_cl_dlp_proxy=>call_dlp( EXPORTING iv_input_value = lv_input iv_input_type = 'EMAIL'
IMPORTING ev_output_value = lv_output ev_message = ev_message ).
ls_bupa_email_address-email_address = lv_output.
"Masking: Replaces a number of characters of a sensitive value with a specified surrogate character, such as a hash (#) or asterisk (*).
" - Phone Number
lv_input = lv_phone_number.
zgoog_cl_dlp_proxy=>call_dlp( EXPORTING iv_input_value = lv_input iv_input_type = 'PHONE NUMBER'
IMPORTING ev_output_value = lv_output ev_message = ev_message ).
ls_bupa_phone_number-phone_number = lv_output.
"Replacement: Replaces a detected sensitive value with a specified surrogate value.
" - Email ID
lv_input = lv_address_comm_remarks.
zgoog_cl_dlp_proxy=>call_dlp( EXPORTING iv_input_value = lv_input iv_input_type = 'REMARKS'
IMPORTING ev_output_value = lv_output ev_message = ev_message ).
ls_bupa_email_address-address_comm_remarks = lv_output.
"Crypto-based tokenization: Encrypts the original sensitive data value by using a cryptographic key. Sensitive Data Protection supports several types of tokenization,
"including transformations that can be reversed, or "re-identified."
" - Bank account number
lv_input = lv_bank_account.
zgoog_cl_dlp_proxy=>call_dlp( EXPORTING iv_input_value = lv_input iv_input_type = 'BANK ACCOUNT'
IMPORTING ev_output_value = lv_output ev_message = ev_message ).
ls_bupa_bank_details-bank_account = lv_output.
Memorizza i dati nel sistema SAP ERP
Dopo aver anonimizzato i campi pertinenti, nel servizio client, implementa la logica per salvare i dati nello spazio di archiviazione di destinazione. Può trattarsi di un servizio Cloud Storage o del tuo sistema SAP on-premise.
Passaggi successivi
Per eseguire il deployment della soluzione di esempio spiegata in questa guida con il minimo sforzo, utilizza l'esempio di codice fornito su GitHub.
Esplora l'intera gamma di metodi di trasformazione disponibili nell'API DLP per trovare la soluzione più adatta alle tue esigenze specifiche dell'attività.
Per informazioni sull'SDK ABAP per Google Cloud, consulta la Panoramica dell'SDK ABAP per Google Cloud.
Se hai bisogno di aiuto per risolvere i problemi relativi all'SDK ABAP per Google Cloud, segui questi passaggi:
- Fai riferimento alla guida alla risoluzione dei problemi di ABAP SDK for Google Cloud.
- Fai domande e discuti dell'ABAP SDK per Google Cloud con la community nei forum di Cloud.
- Raccogli tutte le informazioni diagnostiche disponibili e contatta l'assistenza clienti Google Cloud. Per informazioni su come contattare l'assistenza clienti, consulta Assistenza per SAP su Google Cloud.
Collaboratori
Autore: Sanchita Mohta | SAP Application Engineer
Altro collaboratore: Vikash Kumar | Technical Writer