Questo documento mostra come configurare un servizio di tokenizzazione di carte di credito e debito controllato dall'accesso sulle funzioni Cloud Run. Per configurare il servizio, il deployment 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 direttamente decrittografabili. In questo modo, se perdi il controllo dei token delle carte di pagamento dei tuoi clienti, nessuno può utilizzarli per compromettere i dati del titolare della carta.
Un servizio per la gestione di informazioni sensibili
Hai molte opzioni per la piattaforma o il servizio per ospitare il tuo ambiente dati del titolare della carta (CDE). Questo documento ti guida attraverso un deployment di esempio utilizzando Cloud Run Functions e ti aiuta nei 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 adatta 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 le funzioni Cloud Run. Pertanto, devi implementare controlli compensativi altrove (ad esempio nella tua applicazione) o scegliere un'altra piattaforma. 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 gli 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 tokenizer, devi disporre di un account di servizio speciale con token che scadono frequentemente.
La figura seguente illustra l'architettura dell'app di tokenizzazione che crei in questo documento.
Obiettivi
- Crea un account di servizio.
- Configura Cloud KMS.
- Crea due funzioni Cloud Run.
- Crea un token di autenticazione.
- Chiama il tokenizer.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Prima di iniziare
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Cloud Run functions, and Cloud KMS APIs.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Crea il account di servizio
Il service account di runtime predefinito per le funzioni Cloud Run ha il ruolo Editor, che consente un ampio accesso a molti servizi. Google Cloud Sebbene questo sia il modo più rapido per sviluppare funzioni, Google consiglia di utilizzare ilaccount di serviziot predefinito solo per i test e lo sviluppo. Crea un account di servizio per limitare le API che la funzione può utilizzare in conformità al principio del privilegio minimo. Per creare un service account:
Nella console Google Cloud , vai alla pagina Service Accounts.
Seleziona il progetto.
Fai clic su
Crea service account.Nel campo Nome account di servizio, inserisci
Tokenization Service User
. La console Google Cloud compila il campo ID service account in base a questo nome.(Facoltativo) Nel campo Descrizione service account, inserisci una descrizione per ilaccount di serviziot.
Fai clic su Crea e continua.
Fai clic su Seleziona un ruolo e poi seleziona Autore crittografia/decrittografia CryptoKey Cloud KMS.
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
Configura Cloud KMS
Nella console Google Cloud , apri Key Management.
Fai clic su + Crea keyring. Nella finestra di dialogo visualizzata, procedi nel seguente modo:
- Assegna al keyring il nome
tokenization-service-kr
. - Per Posizione keyring, seleziona Globale. Questa è una scelta comune che è sufficiente per questo deployment di esempio. Prima di prendere qualsiasi decisione sull'architettura di produzione, assicurati di comprendere le differenze tra le varie località Cloud KMS.
- Controlla bene le tue scelte, perché non puoi eliminare o rinominare i portachiavi dopo la loro creazione.
- Fai clic su Crea.
Il sistema crea il keyring e ti reindirizza alla pagina di creazione delle chiavi.
- Assegna al keyring il nome
Nella finestra di dialogo Crea chiave, procedi nel seguente modo:
- Assegna alla chiave il nome
cc-tokenization
. - Per Scopo, seleziona
Symmetric encrypt/decrypt
. Imposta Periodo di rotazione sul valore che preferisci e fai clic su Crea.
- Assegna alla chiave il nome
Creare funzioni Cloud Run
Questo documento presuppone che utilizzerai Cloud Shell. Se utilizzi un terminale diverso, assicurati di avere l'ultima versione di Google Cloud CLI.
Nella console Google Cloud , apri Cloud Shell:
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 fileindex.js
, che è l'origine di due diverse funzioni Cloud Run che creerai. Contiene anchepackage.json
, che indica a Cloud Run Functions quali pacchetti eseguire.Applica la configurazione KMS: copia il file modello di configurazione e aprilo per modificarlo:
cp config/default.json config/local.json nano config/local.json
Il runtime Node.js richiede di definire in modo esplicito l'ID progetto Google Cloud :
"project_id": "YOUR_PROJECT_ID"
Trova la configurazione KMS e applica i valori KMS che hai creato nella sezione precedente:
"location": "global", "key_ring": "tokenization-service-kr", "key_name": "cc-tokenization"
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.
Cerca il valore dell'URL in
httpsTrigger
nell'output del comandogcloud functions deploy
. Memorizza il valore dell'URL nella variabile di ambienteTOK_URL
:TOK_URL="TOK_URL"
Utilizzerai la variabile di ambiente
TOK_URL
per chiamare la funzionetokenize
.Esegui il deployment della funzione detokenize 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.
Cerca il valore dell'URL in
httpsTrigger
nell'output del comandogcloud functions deploy
. Memorizza il valore dell'URL nella variabile di ambienteDETOK_URL
:DETOK_URL="DETOK_URL"
Utilizzerai la variabile di ambiente
DETOK_URL
per chiamare la funzione detokenize.Hai creato due funzioni Cloud Run separate: una per trasformare il numero di carta in un token e un'altra per invertire il processo. I diversi punti di ingresso indirizzano l'esecuzione alla funzione di avvio corretta nel file
index.js
.Una volta eseguito il deployment delle funzioni, apri la console Cloud Run Functions.
Verifica che le funzioni siano state create. Se tutto è andato bene, vedrai le tue due funzioni con un segno di spunta accanto a ciascuna.
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 confermare la propria identità. Il chiamante deve disporre dell'autorizzazione cloudfunctions.functions.invoke
. I seguenti
ruoli predefiniti dispongono di questa autorizzazione:
Invoker di Cloud Functions, Amministratore Cloud Functions e Sviluppatore Cloud Functions.
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 memorizzano nella variabile di ambiente $AUTH_TOKEN
e poi visualizzano il token. In un secondo momento, chiami
le funzioni Cloud Run di cui hai eseguito il deployment con il token.
Chiama il tokenizer
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
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.Inverti la tokenizzazione con il seguente comando.
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 originariamente inviati al tokenizer, decriptati e recuperati dalla tua app.
Approfondisci 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 fare più lavoro per soddisfare il tuo Qualified Security Assessor o il questionario di autovalutazione. Nello specifico, le sezioni 1.2 e 1.3 dello standard PCI DSS richiedono controlli rigorosi sul traffico in entrata e in uscita. Le funzioni Cloud Run 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. Poi raggruppa queste versioni con l'app stessa o pubblicale da una posizione privata e attendibile. 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 lanci più rapidi e scalabilità più fluida.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo esempio di deployment, puoi eliminare il progetto che contiene le risorse.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Conformità allo standard di sicurezza dei dati PCI.
- Utilizzare OAuth 2.0 per accedere alle API di Google.
- Requisiti PCI DSS.
- Supplemento informativo sulla tokenizzazione PCI DSS.
- Per ulteriori architetture di riferimento, diagrammi e best practice, esplora il Cloud Architecture Center.