In dieser Anleitung erfahren Sie, wie Sie einen Tokenisierungsdienst mit Zugriffssteuerung für Kredit- und Debitkarten in Cloud Functions einrichten. Zum Einrichten des Dienstes werden in diesem Artikel die folgenden Google Cloud-Dienste verwendet: Identity and Access Management (IAM) und Cloud Key Management Service (KMS).
Bei der Tokenisierung wird ein ungefährlicher Platzhalterwert bzw. Token für vertrauliche Informationen wie Kreditkartendaten verwendet. Gemäß Teil 3 des Datensicherheitsstandards der Zahlungskartenindustrie (Payment Card Industry Data Security Standard, PCI DSS) müssen die meisten auf einer Kreditkarte gespeicherten Daten als vertrauliche Informationen behandelt werden.
Ein Token an sich ist bedeutungslos, es sei denn, es dient zum Ermitteln von tokenisierten Daten in einem bestimmten Kontext. Sie müssen jedoch trotzdem dafür sorgen, dass Ihre Token keine nutzerspezifischen Informationen enthalten und nicht direkt entschlüsselt werden können. Auf diese Weise vermeiden Sie, dass die Tokens zum Manipulieren der Daten des Karteninhabers genutzt werden können, sollten Sie den Zugriff auf die Tokens der Zahlungskarten Ihrer Kunden verlieren.
Dienst zur Verwaltung vertraulicher Informationen
Sie haben viele Möglichkeiten, die Plattform oder den Dienst zum Hosten der Umgebung für Daten von Karteninhabern (Cardholder Data Environment, CDE) zu verwenden. Diese Anleitung führt Sie durch eine Beispielbereitstellung mit Cloud Functions und hilft Ihnen bei den nächsten Schritten auf dem Weg zu einer produktionsreifen Lösung.
Cloud Functions ist eine serverlose Plattform zum Hosten und Ausführen von Code. Sie ermöglicht das schnelle Starten von Anwendungen und bietet automatische Skalierung. Beachten Sie, dass Sie bei einer PCI DSS-konformen CDE den gesamten eingehenden und ausgehenden Traffic auf autorisierte Verbindungen beschränken müssen. Solche fein abgestimmten Kontrollen sind derzeit für Cloud Functions nicht verfügbar. Daher müssen Sie an anderer Stelle (z. B. in der Anwendung) Kompensationskontrollen implementieren oder eine andere Plattform auswählen. Derselbe Tokenisierungsdienst kann containerbasiert ausgeführt werden, beispielsweise über eine verwaltete Instanzgruppe mit automatischer Skalierung oder einen Kubernetes-Cluster. Dies sind die bevorzugten Produktionsumgebungen mit den zugehörigen vollständigen VPC-Netzwerkkontrollen.
Cloud KMS ist der Key Management Service von Google Cloud. Cloud KMS hostet Ihre Verschlüsselungsschlüssel, rotiert sie regelmäßig und verschlüsselt oder entschlüsselt gespeicherte Kontodaten.
IAM wird in dieser Anleitung verwendet, um strenge Kontrollen für alle Ressourcen bereitzustellen, die im Tokenisierungsdienst verwendet werden. Sie benötigen ein spezielles Dienstkonto mit häufig auslaufenden Tokens, um Zugriff auf Cloud KMS zu gewähren und den Tokenizer auszuführen.
Die folgende Abbildung zeigt die Architektur der Tokenisierungs-Anwendung, die Sie in dieser Anleitung erstellen.
Lernziele
- Erstellen Sie ein Dienstkonto.
- Cloud KMS einrichten
- Zwei Cloud Functions-Funktionen erstellen
- Erstellen Sie ein Authentifizierungstoken.
- Rufen Sie den Tokenizer auf.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
-
Rufen Sie in der Google Cloud Console die Seite für die Projektauswahl auf.
-
Klicken Sie auf Projekt erstellen, um mit der Erstellung eines Google Cloud-Projekts zu starten.
-
Benennen Sie Ihr Projekt. Notieren Sie sich die erstellte Projekt-ID.
-
Bearbeiten Sie die anderen Felder nach Bedarf.
-
Klicken Sie auf Erstellen, um das Projekt zu erstellen.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Build, Cloud Functions, and Cloud KMS APIs aktivieren.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Erstellen Sie das Dienstkonto:
Das Standardlaufzeitdienstkonto für Cloud Functions hat die Rolle „Bearbeiter“, die umfassenden Zugriff auf viele Google Cloud-Dienste ermöglicht. Dies ist der schnellste Weg zum Entwickeln von Funktionen. Google empfiehlt jedoch, das Standarddienstkonto nur zu Test- und Entwicklungszwecken zu verwenden. Sie erstellen ein Dienstkonto, um die APIs einzuschränken, die die Funktion gemäß dem Prinzip der geringsten Berechtigung verwenden kann. So erstellen Sie ein Dienstkonto:
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Wählen Sie Ihr Projekt aus.
Klicken Sie auf
Dienstkonto erstellen.Geben Sie im Feld Name des Dienstkontos
Tokenization Service User
ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.Optional: Im Feld Beschreibung des Dienstkontos können Sie eine entsprechende Beschreibung eingeben.
Klicken Sie auf Erstellen und fortfahren.
Klicken Sie auf Rolle auswählen und wählen Sie Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.
Klicken Sie zum Abschließen der Erstellung des Dienstkontos auf Fertig.
Sie haben jetzt einen Dienstkontonutzer mit der folgenden E-Mail-Adresse:
tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com
Cloud KMS einrichten
Öffnen Sie in der Google Cloud Console die Seite Schlüsselverwaltung.
Klicken Sie auf **+ Schlüsselbund erstellen **. Führen Sie im angezeigten Dialogfeld die folgenden Schritte aus:
- Nennen Sie den Schlüsselbund
tokenization-service-kr
. - Wählen Sie unter Key ring location (Schlüsselbund-Speicherort) die Option global (Global) aus. Für diese Anleitung ist diese gängige Auswahl ausreichend. Bevor Sie Entscheidungen zur Produktionsarchitektur treffen, sollten Sie sich jedoch mit den Unterschieden zwischen den verschiedenen Cloud KMS-Standorten vertraut machen.
- Überprüfen Sie Ihre Auswahl noch einmal. Sie können die Schlüsselbunde weder löschen noch umbenennen, nachdem sie erstellt wurden.
Klicken Sie auf Erstellen.
Das System erstellt den Schlüsselbund und leitet Sie zur Seite für die Schlüsselerstellung weiter.
- Nennen Sie den Schlüsselbund
Führen Sie im Dialogfeld Schlüssel erstellen die folgenden Aufgaben aus:
- Geben Sie dem Schlüssel den Namen
cc-tokenization
. - Wählen Sie als Zweck die Option
Symmetric encrypt/decrypt
aus. Wählen Sie unter Rotationszeitraum den gewünschten Wert aus und klicken Sie auf Erstellen.
- Geben Sie dem Schlüssel den Namen
Cloud Functions erstellen
In dieser Anleitung wird davon ausgegangen, dass Sie Cloud Shell verwenden. Wenn Sie ein anderes Terminal verwenden, muss die aktuelle Version der Google Cloud CLI installiert sein.
Öffnen Sie Cloud Shell in der Google Cloud Console:
Klonen Sie das GitHub-Projekt-Repository und verschieben Sie es in den Arbeitsordner:
git clone https://github.com/GoogleCloudPlatform/community gcp-community cd gcp-community/tutorials/pci-tokenizer/
Der Ordner
gcs-cf-tokenizer
enthält die Dateiindex.js
. Sie ist die Quelle für zwei verschiedene Cloud Functions-Funktionen, die Sie erstellen werden. Der Ordner enthält auch die Dateipackage.json
, die Cloud Functions mitteilt, welche Pakete auszuführen sind.Wenden Sie die KMS-Konfiguration an. Kopieren Sie die Konfigurationsvorlagendatei und öffnen Sie sie zum Bearbeiten:
cp config/default.json config/local.json nano config/local.json
Für die Node.js-Laufzeit müssen Sie die Google Cloud-Projekt-ID explizit definieren:
"project_id": "YOUR_PROJECT_ID"
Suchen Sie die KMS-Konfiguration und wenden Sie die KMS-Werte an, die Sie im vorherigen Abschnitt erstellt haben:
"location": "global", "key_ring": "tokenization-service-kr", "key_name": "cc-tokenization"
Stellen Sie die Tokenisierungsfunktion bereit.
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=.
Diese Funktion wandelt die Kreditkartendaten in ein Token um.
Suchen Sie in der Ausgabe des Befehls
gcloud functions deploy
nach dem Wert der URL unterhttpsTrigger
. Speichern Sie den Wert der URL in der UmgebungsvariableTOK_URL
:TOK_URL="TOK_URL"
Sie verwenden die Umgebungsvariable
TOK_URL
zum Aufrufen der Funktiontokenize
.Stellen Sie die Funktion zum Aufheben der Tokenisierung im KMS-Modus bereit.
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=.
Diese Funktion kehrt den Tokenisierungsprozess um.
Suchen Sie in der Ausgabe des Befehls
gcloud functions deploy
nach dem Wert der URL unterhttpsTrigger
. Speichern Sie den Wert der URL in der UmgebungsvariableDETOK_URL
:DETOK_URL="DETOK_URL"
Zum Aufrufen der Funktion zum Aufheben der Tokenisierung verwenden Sie die Umgebungsvariable
DETOK_URL
.Sie haben zwei separate Cloud Functions-Funktionen erstellt: eine zum Umwandeln der Kartennummer in ein Token und eine weitere zum Umkehren des Vorgangs. Die verschiedenen Einstiegspunkte leiten die Ausführung an die entsprechende Startfunktion in der Datei
index.js
weiter.Öffnen Sie nach der Bereitstellung der Funktionen die Cloud Functions-Konsole.
Überprüfen Sie, ob die Cloud Functions-Funktionen erstellt wurden. Wenn der Vorgang erfolgreich war, werden beide Funktionen mit einem Häkchen daneben angezeigt.
Authentifizierungstoken erstellen
Die Option no-allow-unauthenticated
im Befehl gcloud functions deploy
bedeutet, dass ein Aufrufer, der die Funktionen aufruft, ein Authentifizierungstoken angeben muss, um seine Identität zu bestätigen. Der Aufrufer muss die Berechtigung cloudfunctions.functions.invoke
haben. Die folgenden vordefinierten Rollen haben diese Berechtigung: Cloud Functions-Aufrufer, Cloud Functions-Administrator und Cloud Functions-Entwickler.
Erstellen Sie das Authentifizierungstoken:
AUTH_TOKEN=$(gcloud auth print-identity-token) echo $AUTH_TOKEN
Diese Befehle generieren einen Authentifizierungstoken-String, speichern ihn in der Umgebungsvariable $AUTH_TOKEN
und zeigen dann das Token an. Später rufen Sie die Cloud Functions-Funktionen auf, die Sie mit dem Token bereitgestellt haben.
Tokenizer aufrufen
Erstellen Sie einige Beispieldaten, um sie an den Tokenizer zu übergeben:
export TOK_CC=4000300020001000 export TOK_MM=11 export TOK_YYYY=2028 export TOK_UID=543210
Generieren Sie ein Authentifizierungstoken, wie im vorherigen Abschnitt beschrieben, und rufen Sie dann den Tokenizer auf:
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
Der Tokenisierungsstring, der die Kreditkartendaten darstellt, wird angezeigt. Dieser String wurde in der Umgebungsvariable
CC_TOK
gespeichert. Zum Abrufen der Kartendaten rufen Sie den Detokenizer auf.Kehren Sie die Tokenisierung mit dem folgenden Befehl um.
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"
Die Ausgabe sollte in etwa so aussehen:
{"cc":"4000300020001000","mm":"11","yyyy":"2028","userid":"543210"}
Dies sind die Daten, die ursprünglich an den Tokenizer gesendet und nun von Ihrer App entschlüsselt und abgerufen wurden.
In dieser Anleitung maximieren
Der Beispielcode auf GitHub ist ein guter Anfang. Bevor Sie zur Produktion übergehen, sind jedoch weitere Überlegungen notwendig.
Wenn Sie Cloud Functions für die Tokenisierung von Zahlungskarten verwenden, sind möglicherweise weitere Maßnahmen erforderlich, um die Anforderungen des qualifizierten Sicherheitsprüfers (Qualified Security Assessor) oder den Fragebogen zur Selbstbewertung (Self-Assessment Questionnaire) zu erfüllen. Insbesondere erfordern die PCI DSS-Abschnitte 1.2 und 1.3 strenge Kontrollen des eingehenden und ausgehenden Traffics. Cloud Functions und App Engine bieten keine Firewall, die in beide Richtungen konfigurierbar ist. Daher müssen Sie entweder Kompensationskontrollen erstellen oder den Tokenisierungsdienst in Compute Engine oder Google Kubernetes Engine bereitstellen. Beachten Sie in Bezug auf Containerisierung, dass der GitHub-Code Docker-kompatibel ist und ergänzende Dokumentation enthält.
Dieser Beispielcode ruft auch die npm-Abhängigkeiten (Node.js-Paketmanager) für die Bereitstellung ab. In der Produktionsumgebung müssen Abhängigkeiten immer an bestimmte geprüfte Versionen angehängt werden. Bündeln Sie diese Versionen dann mit der App selbst oder stellen Sie sie von einem privaten und vertrauenswürdigen Ort aus bereit. Mit beiden Methoden können Sie Ausfallzeiten vermeiden, die durch einen Ausfall des öffentlichen npm-Repositorys entstehen oder auch durch Supply-Chain-Angriffe, bei denen als sicher erachtete Pakete infiziert werden. Wenn Sie die gesamte App vorab erstellen und bündeln, verringert sich die Bereitstellungszeit in der Regel, wodurch kürzere Startzeiten und eine reibungslosere Skalierung erzielt werden.
Bereinigen
Löschen Sie das Projekt, um die einzelnen Ressourcen zu bereinigen, die Sie in dieser Anleitung verwendet haben.
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Compliance mit dem PCI-Datensicherheitsstandard
- Mit OAuth 2.0 auf Google APIs zugreifen
- PCI DSS-Anforderungen
- Zusätzliche Informationen zur PCI DSS-Tokenisierung
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center