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.
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.
Prima di iniziare
-
Nella console Google Cloud, vai alla pagina del selettore progetto.
-
Per iniziare a creare un progetto Google Cloud, fai clic su Crea progetto.
-
Assegna un nome al progetto. Prendi nota dell'ID progetto generato.
-
Modifica gli altri campi in base alle tue esigenze.
-
Per creare il progetto, fai clic su Crea.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Build, Cloud Functions, and Cloud KMS.
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:
Nella console Google Cloud, vai alla pagina Account di servizio.
Seleziona il progetto.
Fai clic su
Crea account di servizio.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.(Facoltativo) Nel campo Descrizione account di servizio, inserisci una descrizione per l'account.
Fai clic su Crea e continua.
Fai clic su Seleziona un ruolo, quindi seleziona Autore crittografia/decriptazione CryptoKey Cloud KMS.
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
Nella console Google Cloud, apri Gestione delle chiavi.
Fai clic su **+ Crea keyring **. Nella finestra di dialogo visualizzata, procedi nel seguente modo:
- Assegna al keyring il nome
tokenization-service-kr
. - 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.
- Controlla le scelte perché non puoi eliminare o rinominare i keyring dopo che sono stati creati.
Fai clic su Crea.
Il sistema crea il keyring e ti inoltra alla pagina di creazione della chiave.
- Assegna al keyring il nome
Nella finestra di dialogo Crea chiave, segui questi passaggi:
- Assegna alla chiave il nome
cc-tokenization
. - In corrispondenza di Scopo, seleziona
Symmetric encrypt/decrypt
. Imposta Periodo di rotazione su un valore che preferisci e fai clic su Crea.
- Assegna alla chiave il nome
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.
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 Functions che creerai. Contiene anchepackage.json
, che indica a Cloud Functions quali pacchetti eseguire.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"
Trova la configurazione KMS e applica i valori KMS creati nella sezione precedente:
"location": "global", "key_ring": "tokenization-service-kr", "key_name": "cc-tokenization"
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.
Cerca il valore dell'URL sotto
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 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.
Cerca il valore dell'URL sotto
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 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
.Una volta eseguito il deployment delle funzioni, apri la console di Cloud Functions.
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.
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
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
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.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.
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Conformità allo standard di sicurezza dei dati PCI.
- Utilizzo di OAuth 2.0 per accedere alle API di Google.
- Requisiti PCI DSS.
- Informazioni integrative sulla tokenizzazione PCI DSS.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.