Vertrauliche Informationen von Karteninhabern für PCI DSS tokenisieren

Last reviewed 2023-05-05 UTC

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.

Architektur der Tokenisierungs-Anwendung

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Rufen Sie in der Google Cloud Console die Seite für die Projektauswahl auf.

    Zur Projektauswahl

  2. Klicken Sie auf Projekt erstellen, um mit der Erstellung eines Google Cloud-Projekts zu starten.

  3. Benennen Sie Ihr Projekt. Notieren Sie sich die erstellte Projekt-ID.

  4. Bearbeiten Sie die anderen Felder nach Bedarf.

  5. Klicken Sie auf Erstellen, um das Projekt zu erstellen.

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. Cloud Build, Cloud Functions, and Cloud KMS APIs aktivieren.

    Aktivieren Sie die APIs

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:

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie Ihr Projekt aus.

  3. Klicken Sie auf Dienstkonto erstellen.

  4. 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.

  5. Optional: Im Feld Beschreibung des Dienstkontos können Sie eine entsprechende Beschreibung eingeben.

  6. Klicken Sie auf Erstellen und fortfahren.

  7. Klicken Sie auf Rolle auswählen und wählen Sie Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler aus.

  8. 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

  1. Öffnen Sie in der Google Cloud Console die Seite Schlüsselverwaltung.

    Zur Seite "Kryptografische Schlüssel"

  2. Klicken Sie auf **+ Schlüsselbund erstellen **. Führen Sie im angezeigten Dialogfeld die folgenden Schritte aus:

    1. Nennen Sie den Schlüsselbund tokenization-service-kr.
    2. 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.
    3. Überprüfen Sie Ihre Auswahl noch einmal. Sie können die Schlüsselbunde weder löschen noch umbenennen, nachdem sie erstellt wurden.
    4. Klicken Sie auf Erstellen.

      Schlüsselbund erstellen

    Das System erstellt den Schlüsselbund und leitet Sie zur Seite für die Schlüsselerstellung weiter.

  3. Führen Sie im Dialogfeld Schlüssel erstellen die folgenden Aufgaben aus:

    1. Geben Sie dem Schlüssel den Namen cc-tokenization.
    2. Wählen Sie als Zweck die Option Symmetric encrypt/decrypt aus.
    3. Wählen Sie unter Rotationszeitraum den gewünschten Wert aus und klicken Sie auf Erstellen.

    Informationen zu Ihren Schlüsseln erfassen

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.

  1. Öffnen Sie Cloud Shell in der Google Cloud Console:

    Zu Cloud Shell

  2. 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 Datei index.js. Sie ist die Quelle für zwei verschiedene Cloud Functions-Funktionen, die Sie erstellen werden. Der Ordner enthält auch die Datei package.json, die Cloud Functions mitteilt, welche Pakete auszuführen sind.

  3. 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"
  4. 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"
    
  5. 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.

  6. Suchen Sie in der Ausgabe des Befehls gcloud functions deploy nach dem Wert der URL unter httpsTrigger. Speichern Sie den Wert der URL in der Umgebungsvariable TOK_URL:

    TOK_URL="TOK_URL"

    Sie verwenden die Umgebungsvariable TOK_URL zum Aufrufen der Funktion tokenize.

  7. 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.

  8. Suchen Sie in der Ausgabe des Befehls gcloud functions deploy nach dem Wert der URL unter httpsTrigger. Speichern Sie den Wert der URL in der Umgebungsvariable DETOK_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.

  9. Öffnen Sie nach der Bereitstellung der Funktionen die Cloud Functions-Konsole.

    Zur Cloud Functions-Konsole

  10. Überprüfen Sie, ob die Cloud Functions-Funktionen erstellt wurden. Wenn der Vorgang erfolgreich war, werden beide Funktionen mit einem Häkchen daneben angezeigt.

    Erstellung der Cloud Functions-Funktionen prüfen

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

  1. 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
    
  2. 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.

  3. 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.

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte