Tokenizzazione di dati sensibili dei titolari della carta per PCI DSS

Last reviewed 2023-05-05 UTC

Questo tutorial mostra come configurare un servizio di tokenizzazione delle carte di credito e di debito con accesso controllato su Cloud Functions. Per configurare il servizio, l'articolo utilizza i seguenti servizi Google Cloud: Identity and Access Management (IAM) e Cloud Key Management Service (KMS).

La tokenizzazione è il processo di sostituzione di un valore segnaposto innocuo, o token, con informazioni sensibili come i dati della carta di credito. La Parte 3 dello standard PCI DSS (Payment Card Industry Data Security Standard) richiede che la maggior parte dei dati memorizzati su una carta di credito sia trattata come informazioni sensibili.

Un token di per sé è privo di significato, tranne che come mezzo per cercare dati tokenizzati in un determinato contesto. Tuttavia, devi comunque assicurarti che i token non contengano informazioni specifiche dell'utente e che non possano essere decriptati direttamente. In questo modo, se perdi il controllo sui token delle carte di pagamento dei tuoi clienti, nessuno potrà utilizzarli per compromettere i dati del titolare.

Un servizio per la gestione di informazioni sensibili

Hai a disposizione molte opzioni per la piattaforma o il servizio per l'hosting dell'ambiente dei dati del titolare della carta (CDE). Questo tutorial illustra un deployment di esempio utilizzando Cloud Functions e ti aiuta nei passaggi successivi per una soluzione pronta per la produzione.

Cloud Functions è una piattaforma serverless che ospita ed esegue codice e consente di avviare rapidamente un'applicazione che scala senza intervento. Tieni presente che in un CDE conforme allo standard PCI DSS, devi limitare tutto il traffico in entrata e in uscita alle connessioni autorizzate. Questi controlli granulari non sono attualmente disponibili per Cloud Functions. Pertanto, devi implementare i controlli di compensazione altrove, ad esempio nell'applicazione, o scegliere una piattaforma diversa. Lo stesso servizio di tokenizzazione può essere eseguito in modo containerizzato, ad esempio un gruppo di istanze gestite con scalabilità automatica o un cluster Kubernetes. Questi sarebbero ambienti di produzione da preferire con controlli di rete VPC completi.

Cloud KMS è il servizio di gestione delle chiavi di Google Cloud. Cloud KMS ospita le chiavi di crittografia, le ruota regolarmente e cripta o decripta i dati degli account archiviati.

In questo tutorial viene utilizzato IAM per fornire controlli rigorosi su tutte le risorse utilizzate nel servizio di tokenizzazione. Devi avere un account di servizio speciale che dispone di token con scadenza frequente per concedere l'accesso a Cloud KMS ed eseguire il tokenizzatore.

La figura seguente illustra l'architettura dell'app di tokenizzazione creata in questo tutorial.

architettura dell'app di tokenizzazione

Obiettivi

  • Crea un account di servizio.
  • Configurare Cloud KMS.
  • Creare due funzioni Cloud Functions.
  • Creare un token di autenticazione.
  • Chiama il tokenizzatore.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

  1. Nella console Google Cloud, vai alla pagina del selettore progetto.

    Vai al selettore progetti

  2. Per iniziare a creare un progetto Google Cloud, fai clic su Crea progetto.

  3. Assegna un nome al progetto. Prendi nota dell'ID progetto generato.

  4. Modifica gli altri campi in base alle tue esigenze.

  5. Per creare il progetto, fai clic su Crea.

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Cloud Build, Cloud Functions, and Cloud KMS.

    Abilita le API

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Crea l'account di servizio

L'account di servizio di runtime predefinito per Cloud Functions ha il ruolo Editor, che consente l'accesso ampio a molti servizi Google Cloud. Sebbene si tratti del modo più rapido per sviluppare le funzioni, Google consiglia di utilizzare l'account di servizio predefinito solo per test e sviluppo. Crea un account di servizio per limitare le API che la funzione può utilizzare in base al principio del privilegio minimo. Per creare un account di servizio:

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona il progetto.

  3. Fai clic su Crea account di servizio.

  4. Nel campo Nome account di servizio, inserisci Tokenization Service User. La console Google Cloud compila il campo ID account di servizio in base a questo nome.

  5. (Facoltativo) Nel campo Descrizione account di servizio, inserisci una descrizione per l'account.

  6. Fai clic su Crea e continua.

  7. Fai clic su Seleziona un ruolo, quindi seleziona Autore crittografia/decriptazione CryptoKey Cloud KMS.

  8. Per completare la creazione dell'account di servizio, fai clic su Fine.

    Ora hai un utente con account di servizio con il seguente indirizzo email:

    tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com

Configura Cloud KMS

  1. Nella console Google Cloud, apri Gestione delle chiavi.

    Vai alla pagina Chiavi di crittografia

  2. Fai clic su **+ Crea keyring **. Nella finestra di dialogo visualizzata, procedi nel seguente modo:

    1. Assegna al keyring il nome tokenization-service-kr.
    2. In Posizione del keyring, seleziona globale. Questa è una scelta comune che basta per questo tutorial. Tuttavia, prima di prendere qualsiasi decisione relativa all'architettura di produzione, assicurati di comprendere le differenze tra le varie località di Cloud KMS.
    3. Controlla le scelte perché non puoi eliminare o rinominare i keyring dopo che sono stati creati.
    4. Fai clic su Crea.

      Creazione di un keyring

    Il sistema crea il keyring e ti inoltra alla pagina di creazione della chiave.

  3. Nella finestra di dialogo Crea chiave, segui questi passaggi:

    1. Assegna alla chiave il nome cc-tokenization.
    2. In corrispondenza di Scopo, seleziona Symmetric encrypt/decrypt.
    3. Imposta Periodo di rotazione su un valore che preferisci e fai clic su Crea.

    Informazioni di tracciamento sulle tue chiavi

Creare funzioni Cloud Functions

Questo tutorial presuppone che utilizzerai Cloud Shell. Se utilizzi un terminale diverso, assicurati di avere la versione più recente di Google Cloud CLI.

  1. Nella console Google Cloud, apri Cloud Shell:

    Vai a Cloud Shell

  2. Clona il repository del progetto GitHub e passa alla cartella di lavoro:

    git clone https://github.com/GoogleCloudPlatform/community gcp-community
    cd gcp-community/tutorials/pci-tokenizer/
    

    La cartella gcs-cf-tokenizer contiene il file index.js, che è l'origine di due diverse funzioni Cloud Functions che creerai. Contiene anche package.json, che indica a Cloud Functions quali pacchetti eseguire.

  3. Applica la configurazione KMS Copia il file del modello di configurazione e aprilo per la modifica:

    cp config/default.json config/local.json
    nano config/local.json
    

    Il runtime Node.js richiede di definire esplicitamente l'ID progetto Google Cloud:

    "project_id":              "YOUR_PROJECT_ID"
  4. Trova la configurazione KMS e applica i valori KMS creati nella sezione precedente:

    "location":                "global",
    "key_ring":                "tokenization-service-kr",
    "key_name":                "cc-tokenization"
    
  5. Esegui il deployment della funzione tokenizzazione.

    gcloud functions deploy tokenize --runtime=nodejs18 --trigger-http \
        --entry-point=kms_crypto_tokenize --memory=256MB \
        --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \
        --no-allow-unauthenticated --source=.
    

    Questa funzione trasforma i dati della carta di credito in un token.

  6. Cerca il valore dell'URL sotto httpsTrigger nell'output del comando gcloud functions deploy. Memorizza il valore dell'URL nella variabile di ambiente TOK_URL:

    TOK_URL="TOK_URL"

    Utilizzerai la variabile di ambiente TOK_URL per chiamare la funzione tokenize.

  7. Esegui il deployment della funzione di detokenizzazione in modalità KMS.

    gcloud functions deploy detokenize --runtime=nodejs18 --trigger-http \
        --entry-point=kms_crypto_detokenize --memory=256MB \
        --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \
        --no-allow-unauthenticated --source=.
    

    Questa funzione inverte il processo di tokenizzazione.

  8. Cerca il valore dell'URL sotto httpsTrigger nell'output del comando gcloud functions deploy. Memorizza il valore dell'URL nella variabile di ambiente DETOK_URL:

    DETOK_URL="DETOK_URL"

    Utilizzerai la variabile di ambiente DETOK_URL per chiamare la funzione di detokenizzazione.

    Hai creato due funzioni Cloud Functions separate: una per trasformare il numero della carta in un token e l'altra per invertire il processo. I diversi punti di ingresso indirizzano l'esecuzione alla funzione di avvio corretta nel file index.js.

  9. Una volta eseguito il deployment delle funzioni, apri la console di Cloud Functions.

    Apri la console di Cloud Functions

  10. Verifica che le funzioni siano state create. Se tutto è andato a buon fine, vedrai le due funzioni con un segno di spunta accanto a ciascuna.

    Verifica della creazione delle funzioni Cloud Functions

Crea un token di autenticazione

L'opzione no-allow-unauthenticated nel comando gcloud functions deploy indica che un chiamante che richiama le funzioni deve presentare un token di autenticazione per rivendicare l'identità del chiamante. Il chiamante deve avere l'autorizzazione cloudfunctions.functions.invoke. I seguenti ruoli predefiniti hanno questa autorizzazione: Invoker di Cloud Functions, Amministratore di Cloud Functions e Sviluppatore di Cloud Functions.

  • Crea il token di autenticazione:

    AUTH_TOKEN=$(gcloud auth print-identity-token)
    echo $AUTH_TOKEN
    

Questi comandi generano una stringa del token di autenticazione, la memorizzano nella variabile di ambiente $AUTH_TOKEN, quindi visualizzano il token. Successivamente, chiami le funzioni Cloud Functions di cui hai eseguito il deployment con il token.

Chiama il tokenizzatore

  1. Crea alcuni dati di esempio da passare al tokenizzatore:

    export TOK_CC=4000300020001000
    export TOK_MM=11
    export TOK_YYYY=2028
    export TOK_UID=543210
    
  2. Genera un token di autenticazione come descritto nella sezione precedente, quindi chiama il tokenizzatore:

    CC_TOKEN=$(curl -s \
    -X POST "$TOK_URL" \
    -H "Content-Type:application/json" \
    -H "Authorization: Bearer $AUTH_TOKEN" \
    --data '{"cc": "'$TOK_CC'", "mm": "'$TOK_MM'", "yyyy": "'$TOK_YYYY'", "user_id": "'$TOK_UID'"}' \
    )
    echo $CC_TOKEN
    

    Viene visualizzata la stringa di tokenizzazione che rappresenta i dati della carta di credito. Questa stringa è stata archiviata nella variabile di ambiente CC_TOK. Puoi recuperare le informazioni della carta richiamando lo strumento di detokenizzazione.

  3. Inverti la tokenizzazione con il comando seguente.

    DETOK_DATA=$(curl -s \
    -X POST "$DETOK_URL" \
    -H  "Content-Type:application/json" \
    -H "Authorization: Bearer $AUTH_TOKEN" \
    --data '{"user_id": "'$TOK_UID'", "token": "'$CC_TOKEN'"}' \
    )
    echo -e "$DETOK_DATA\n"
    

    L'output sarà simile al seguente:

    {"cc":"4000300020001000","mm":"11","yyyy":"2028","userid":"543210"}
    

    Questi dati sono i dati originariamente inviati nel tokenizzatore, decriptati e recuperati dalla tua app.

Espandi in questo tutorial

Il codice campione su GitHub è un ottimo inizio, ma c'è ancora molto da considerare prima di passare alla produzione.

Se scegli di utilizzare Cloud Functions per la tokenizzazione delle carte di pagamento, potresti dover svolgere un ulteriore lavoro per soddisfare il tuo questionario di autovalutazione o di qualificata Security Assessor. In particolare, le sezioni PCI DSS 1.2 e 1.3 richiedono controlli rigorosi sul traffico in entrata e in uscita. Cloud Functions e App Engine non offrono un firewall configurabile a due vie, quindi devi creare controlli di compensazione o eseguire il deployment del servizio di tokenizzazione su Compute Engine o Google Kubernetes Engine. Se vuoi esplorare la containerizzazione, il codice GitHub è compatibile con Docker e contiene la documentazione di supporto.

Questo codice campione esegue anche il pull delle dipendenze npm (gestore di pacchetti Node.js) al momento del deployment. Nell'ambiente di produzione, fissa sempre le dipendenze a versioni specifiche controllate. Raggruppa quindi queste versioni con l'app stessa o pubblicale da una posizione privata e attendibile. Entrambi gli approcci consentono di evitare tempi di inattività derivanti da un'interruzione del repository npm pubblico o da un attacco della catena di fornitura che infetta i pacchetti che si presumeva fossero sicuri. Se precompila e accoppi l'app completa, il tempo di deployment in genere diminuisce, il che significa avvii più veloci e una scalabilità più fluida.

Esegui la pulizia

Per eseguire la pulizia delle singole risorse utilizzate in questo tutorial, puoi eliminare il progetto.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi