Tokenizzazione dei dati sensibili dei titolari di carte per PCI DSS

Last reviewed 2025-04-28 UTC

Questo documento mostra come configurare un servizio di tokenizzazione di carte di credito e di debito con controllo dell'accesso su Cloud Run Functions. Per configurare il servizio, il deployment descritto in questo documento utilizza i seguenti Google Cloud servizi: 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 venga trattata come informazioni sensibili.

Un token di per sé non ha significato, se non come mezzo per cercare dati tokenizzati in un contesto specifico. Tuttavia, devi comunque assicurarti che i token non contengano informazioni specifiche dell'utente e che non siano decriptabili direttamente. In questo modo, se perdi il controllo sui token delle carte di pagamento dei tuoi clienti, nessuno può utilizzarli per compromettere i dati dei titolari delle carte.

Un servizio per la gestione di informazioni sensibili

Hai a disposizione molte opzioni per la piattaforma o il servizio su cui ospitare il tuo ambiente dati dei titolari delle carte (CDE). Questo documento ti guida attraverso un deployment di esempio utilizzando Cloud Run Functions e ti aiuta a eseguire i passaggi successivi verso una soluzione pronta per la produzione.

Cloud Run Functions è una piattaforma serverless che ospita ed esegue codice ed è un luogo ideale per avviare rapidamente un'applicazione che si scalda senza intervento. Tieni presente che in un CDE conforme a PCI DSS devi limitare tutto il traffico in entrata e in uscita alle connessioni autorizzate. Questi controlli granulari non sono attualmente disponibili per Cloud Run Functions. Pertanto, devi implementare controlli compensativi altrove (ad esempio nella tua applicazione) o scegliere una piattaforma diversa. Lo stesso servizio di tokenizzazione può essere eseguito in un modo containerizzato, ad esempio un gruppo di istanze gestite con scalabilità automatica o un cluster Kubernetes. Questi sarebbero ambienti di produzione preferibili con i relativi controlli completi della rete VPC.

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 dell'account archiviati.

IAM viene utilizzato in questo documento per fornire controlli rigorosi su tutte le risorse utilizzate nel servizio di tokenizzazione. Per concedere l'accesso a Cloud KMS ed eseguire il tokenizzatore, devi disporre di un service account speciale con token che scadono di frequente.

La figura seguente illustra l'architettura dell'app di tokenizzazione che crei in questo documento.

architettura dell'app di tokenizzazione

Obiettivi

  • Creare un account di servizio.
  • Configurare Cloud KMS.
  • Creare due funzioni Cloud Run.
  • Creare un token di autenticazione.
  • Chiamare il tokenizer.

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 Google Cloud utenti potrebbero avere diritto a una prova senza costi.

Prima di iniziare

  1. Assicurati di disporre del ruolo IAM Project Creator (roles/resourcemanager.projectCreator). Scopri come concedere i ruoli.
  2. Nella Google Cloud console, vai alla pagina di selezione del progetto.

    Vai al selettore di progetti

  3. Fai clic su Create project (Crea progetto).

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

  5. Modifica gli altri campi in base alle esigenze.

  6. Fai clic su Create (Crea).

  7. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  8. Abilita le API Cloud Build, Cloud Run Functions e Cloud KMS.

    Ruoli necessari per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita le API

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Liberare spazio.

Creare il account di servizio

Il service account di runtime predefinito per Cloud Run Functions ha il ruolo Editor, che consente un ampio accesso a molti Google Cloud servizi. Sebbene questo sia il modo più rapido per sviluppare funzioni, Google consiglia di utilizzare il 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 Google Cloud console, vai alla pagina Service account.

    Vai a Service account

  2. Seleziona il progetto.

  3. Fai clic su Crea service account.

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

  5. (Facoltativo) Nel campo Descrizione service account, inserisci una descrizione del account di servizio.

  6. Fai clic su Crea e continua.

  7. Fai clic su Seleziona un ruolo, quindi seleziona Cloud KMS CryptoKey Encrypter/Decrypter.

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

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

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

Configurare Cloud KMS

  1. Nella Google Cloud console, 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. Per Località keyring, seleziona globale. Questa è una scelta comune che è sufficiente per questo deployment di esempio. Prima di prendere decisioni sull'architettura di produzione, tuttavia, assicurati di comprendere le differenze tra le varie località Cloud KMS.
    3. Controlla attentamente le tue scelte, perché non puoi eliminare o rinominare i keyring dopo averli creati.
    4. Fai clic su Crea.

    Il sistema crea il keyring e ti reindirizza alla pagina di creazione delle chiavi.

  3. Nella finestra di dialogo Crea chiave, procedi nel seguente modo:

    1. Assegna alla chiave il nome cc-tokenization.
    2. Per Scopo, seleziona Symmetric encrypt/decrypt.
    3. Imposta Periodo di rotazione su un valore a tua scelta e fai clic su Crea.

Creare Cloud Run Functions

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

  1. Nella Google Cloud console, 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 Run che creerai. Contiene anche package.json, che indica a Cloud Run Functions quali pacchetti eseguire.

  3. Applica la configurazione di 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' Google Cloud ID progetto:

    "project_id":              "YOUR_PROJECT_ID"
  4. Trova la configurazione di KMS e applica i valori di KMS che hai creato nella sezione precedente:

    "location":                "global",
    "key_ring":                "tokenization-service-kr",
    "key_name":                "cc-tokenization"
    
  5. Esegui il deployment della funzione di 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 in httpsTrigger nell'output del comando gcloud functions deploy. Archivia 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 in httpsTrigger nell'output del comando gcloud functions deploy. Archivia 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 Run separate: una per trasformare il numero carta in un token e un'altra per invertire il processo. I diversi entry point indirizzano l'esecuzione alla funzione di avvio corretta nel file index.js.

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

    Apri la console Cloud Run 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.

Creare 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 dichiarare la propria identità. Il chiamante deve disporre dell'autorizzazione cloudfunctions.functions.invoke. I seguenti ruoli predefiniti dispongono di questa autorizzazione: Cloud Functions Invoker, Cloud Functions Admin e Cloud Functions Developer.

  • Crea il token di autenticazione:

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

Questi comandi generano una stringa di token di autenticazione, la archiviano nella variabile di ambiente $AUTH_TOKEN e poi visualizzano il token. In un secondo momento, chiamerai le funzioni Cloud Run di cui hai eseguito il deployment con il token.

Chiamare il tokenizer

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

    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 tokenizer:

    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 i dati della carta richiamando il detokenizzatore.

  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 è simile al seguente:

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

    Questi dati sono quelli inviati originariamente al tokenizer, decriptati e recuperati dalla tua app.

Espandere questo esempio

Il codice campione su GitHub è un ottimo punto di partenza, ma ci sono altri aspetti da considerare prima di passare alla produzione.

Se scegli di utilizzare Cloud Run Functions per la tokenizzazione delle carte di pagamento, potresti dover lavorare di più per soddisfare il tuo Qualified Security Assessor o il questionario di autovalutazione. In particolare, le sezioni 1.2 e 1.3 di PCI DSS richiedono controlli rigorosi sul traffico in entrata e in uscita. Cloud Run Functions e App Engine non offrono un firewall configurabile bidirezionale, quindi devi creare controlli compensativi 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 (Node.js package manager) durante il deployment. Nell'ambiente di produzione, blocca sempre le dipendenze su versioni specifiche verificate. Quindi, raggruppa queste versioni con l'app stessa o pubblicale da un luogo attendibile e privato. Entrambi gli approcci ti aiutano a evitare tempi di inattività dovuti a un'interruzione del repository npm pubblico o a un attacco alla supply chain che infetta i pacchetti che ritenevi sicuri. Se precompili e raggruppi l'app completa, in genere il tempo di deployment diminuisce, il che significa avvii più rapidi e scalabilità più fluida.

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questo deployment di esempio, puoi eliminare il progetto che contiene le risorse.

  1. Nella Google Cloud console, 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 progetto, quindi fai clic su Chiudi per eliminare il progetto.

Passaggi successivi