CRM-Lösung von Salesforce mithilfe von geschützten Cloud Functions-Funktionen in Unternehmen einbinden

In dieser Anleitung erfahren Sie, wie Sie Cloud Functions-Funktionen schützen, die von Diensten außerhalb von Google Cloud aufgerufen werden. Gängige Anwendungsfälle sind das Aufrufen von Cloud Functions-Funktionen über SaaS-Anwendungen (Software as a Service) wie CRM-Systeme (Customer-Relationship-Management), Partnersysteme oder Webanwendungen für Nutzer.

Diese Anleitung richtet sich an Architekten, Produktinhaber und IT-Experten. Es wird beschrieben, wie eine Cloud Functions-Funktion aus einer externen Quelle aufgerufen wird. Außerdem werden gängige Anwendungsfälle für Cloud Functions-Funktionen erläutert.

In dieser Anleitung wird davon ausgegangen, dass Sie mit Cloud Functions, Salesforce, Node.js und REST APIs vertraut sind.

Ziele

  • Eine Cloud Functions-Funktion bereitstellen, die von einem externen Dienst aufgerufen werden kann
  • Sie steuern den Zugriff auf die Funktion mithilfe von Berechtigungen zur Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM).
  • JSON-Webtoken-(JWT)-Anfrage erstellen und dann die Cloud Functions-Funktion über ID-Tokens externer Dienste aufrufen
  • Prüfen, ob nur autorisierte Dienste auf die geschützte Funktion zugreifen können

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

  • Cloud Functions

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.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Aktivieren Sie die Cloud Functions API.

    Aktivieren Sie die API

Einführung

Mit Cloud Functions-Funktionen können Sie Ihren Code in Google Cloud ausführen und die Funktionen bei Bedarf oder als Reaktion auf Ereignisse aufrufen.

Unternehmen nutzen oft viele verschiedene Plattformen, Anwendungen und Technologien. Diese verschiedenen Plattformen und alle darin enthaltenen Geschäftsdaten zusammenzuführen, ist oftmals der Schlüssel zu mehr geschäftlicher Flexibilität. Der Schutz und die Absicherung von Unternehmensdaten und ihrer Übertragung zwischen Anwendungen sind für Organisationen von entscheidender Bedeutung. Wenn Sie Ihre Unternehmensanwendungen (z. B. Salesforce CRM) in Cloud Functions einbinden, sollten Sie den Aufruf Ihrer Funktionen sichern, um zu steuern, wie und von wem diese Funktionen aufgerufen werden.

Eine gut durchdachte Zugriffssteuerung bietet viele Vorteile. Sie hilft dabei, die Angriffsfläche zu reduzieren, und verwendet das Prinzip der geringsten Berechtigung. Außerdem werden Sicherheits- und Kontrollmechanismen festgelegt. Auch werden die Kosten vorhersehbarer, da Sie die Liste der zulässigen Aufrufer einschränken können.

In dieser Anleitung geht es um die Steuerung des Zugriffs auf Cloud Functions-Funktionen. Zur Erläuterung wird gezeigt, wie Sie eine geschützte Cloud Functions-Funktion aus dem Salesforce CRM aufrufen. Die Funktion wird aufgerufen, wenn ein neuer Kundendatensatz in der Salesforce CRM-Plattform erstellt und zur Verarbeitung an das Erfassungssystem (die Haupt-Kundendatenbank) in Google Cloud gesendet wird. In dieser Anleitung wird Salesforce CRM verwendet, aber mit dem erläuterten Ansatz können Sie Cloud Functions-Funktionen auch aus anderen SaaS-Anwendungen aufrufen.

Der Einfachheit halber wird die von Ihnen verwendete Cloud Functions-Funktion in einem GitHub-Repository bereitgestellt.

Architektur

In der folgenden Abbildung werden die Architektur und die wichtigsten Schritte zum Aufrufen einer geschützten Cloud Functions-Funktion aus einem externen Dienst beschrieben. Sie können Instanzen der Cloud Functions-Funktion privat bereitstellen, sodass nur autorisierte Nutzer und Dienste diese Funktionen aufrufen können.

Diagramm: Architektur dieses Ansatzes mit den Schritten für die Authentifizierung und den Aufruf der Cloud Functions-Funktion

Die Schritte im Diagramm sind:

  1. Der externe Salesforce-Dienst fordert mithilfe eines signierten JWT ein ID-Token an.
  2. Wenn das JWT gültig ist, wird vom Google-Autorisierungsserver ein signiertes ID-Token zurückgegeben.
  3. Der Salesforce-Dienst verwendet das ID-Token, um eine API-Anfrage an die geschützte Cloud Functions-Funktion zu senden.
  4. Der Cloud Functions-Container prüft intern das ID-Token, das vom Salesforce-Dienst im Header "Authorization Bearer" gesendet wird.
  5. Die Cloud Functions-Funktion wird nur dann ausgeführt, wenn das Token gültig ist:
    • Wenn das Token gültig ist, wird der Code der Cloud Functions-Funktion ausgeführt und eine Erfolgsantwort an den aufrufenden Dienst zurückgegeben. Je nach Bedarf können über die Cloud Functions-Funktion auch andere Google Cloud-Dienste aufgerufen werden.
    • Wenn das Token ungültig ist, wird der HTTP-Statuscode 401 oder 403 zurückgegeben und der Code der Cloud Functions-Funktion wird nicht ausgeführt.

In dieser Anleitung wird der externe Dienst, der die Cloud Functions-Funktion aufruft, auf der Salesforce-Plattform gehostet. Durch das Erstellen eines Kundendatensatzes in Salesforce CRM werden die Pipeline ausgelöst und die im Diagramm beschriebenen Schritte aufgerufen. Salesforce CRM hat den privaten Schlüssel des Google Cloud-Dienstkontos und führt die im Diagramm beschriebenen Schritte aus, um die geschützte Cloud Functions-Funktion aufzurufen. Dazu verwenden Sie eine Salesforce Apex-Klasse.

Wenn ein Kundendatensatz in Salesforce CRM erstellt wird, führt ein Apex-Trigger dazu, dass ein Warteschlangenjob in der Apex-Klasse (GCPManageCustomersService) asynchron ausgeführt wird.

Häufige Anwendungsfälle für das Aufrufen geschützter Cloud Functions-Funktionen

Sie können Cloud Functions-Funktionen in Ihre Umgebung einbinden, um sie als Baustein in Ihrem End-to-End-Geschäftsprozess zu nutzen. Sie können Cloud Functions-Funktionen für Aufgaben wie die folgenden verwenden:

  • Geschäftsdaten in Google Cloud zum Speichern und Analysieren einfügen, z. B. Kundendatensätze aus Front-End-CRM-Systemen.

  • Kundendaten in Back-up-Speichern wie Firestore und Cloud SQL erstellen oder aktualisieren, wenn diese Speicher als Haupt-Kundendatenbank (d. h. als Erfassungssystem) dienen.

  • Transaktionsdaten wie Bestellungen, Dienstleistungsanfragen, Dienstleistungstermine und Produktdetails aus Datenspeichern in Google Cloud abrufen. Sie können dies tun, um eine umfassende Kundenansicht auf einer SaaS-Plattform wie Salesforce zu erstellen.

  • Datendateien von Partnerorganisationen umwandeln, die geparst, verarbeitet und dann in einen Data Lake oder ein Data Warehouse in Google Cloud geladen werden müssen.

  • Nutzerinteraktionsdaten wie Formulareinreichungen oder Bild- oder Dokument-Uploads auf einer Website parsen, um mit BigQuery und BigQuery ML Erkenntnisse zu generieren.

In dieser Anleitung implementieren Sie den ersten Anwendungsfall – das Einfügen von Geschäftsdaten in Google Cloud. Wenn Kundendaten in Salesforce CRM erstellt werden, werden sie durch Aufrufen einer geschützten Cloud Functions-Funktion an Google Cloud gesendet.

Der neue Kundendatensatz kann nach Bedarf in Google Cloud verarbeitet werden. Einige gängige Muster umfassen das Einfügen des Kundendatensatzes in eine Haupt-Kundendatenbank für die analytische Verarbeitung, beispielsweise Cloud SQL, Firestore oder BigQuery. Diese Anleitung enthält keinen Abschnitt über das Verarbeiten dieser Datensätze.

Umgebung initialisieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren:

    Zu Cloud Shell

    Für alle Terminalbefehle in dieser Anleitung wird Cloud Shell verwendet.

  2. Legen Sie in Cloud Shell das Projekt fest, das Sie erstellt oder als Standardprojekt ausgewählt haben. Ersetzen Sie project-id durch Ihre Cloud-Projekt-ID.

    gcloud config set project project-id
    
  3. Weisen Sie Standardeinstellungen für Region und Zone zu:

    gcloud config set run/region us-central1
    gcloud config set compute/zone us-central1-a
    

    In dieser Anleitung verwenden Sie us-central1 als Standardregion und us-central1-a als Standardzone.

Geschützte Cloud Functions-Funktion erstellen

Im ersten Schritt erstellen Sie die Cloud Functions-Funktion, die Sie später aufrufen.

Quell-Repository klonen

  1. Klonen Sie in Cloud Shell das GitHub-Repository, das die Beispielartefakte der Cloud Functions-Funktion und von Salesforce enthält:

    git clone https://github.com/GoogleCloudPlatform/salesforce-cloud-functions-crm-tutorial
    
  2. Wechseln Sie in das Verzeichnis, das durch Klonen des Repositorys erstellt wurde:

    cd salesforce-cloudfunc-integration
    

Code im Verzeichnis prüfen

Das Verzeichnis enthält zwei Verzeichnisse: salesforce und manage-customer-func. Das Verzeichnis salesforce enthält die folgenden Salesforce Apex-Codedateien:

  • Datei CustomerAccounts.trigger. Diese Datei enthält Code, der beim Erstellen eines neuen Kundenkontos einen Job in der Warteschlange in der Klasse GCPManageCustomersService auslöst.
  • Klasse GCPManageCustomersService. Diese Datei enthält Code zum Anfragen eines Google-ID-Tokens im Austausch für ein generiertes JWT und ruft die Cloud Functions-Funktion auf.
  • Salesforce-XML-Metadatendateien.

Das Verzeichnis manage-customer-func enthält die Node.js-Codedateien für die Cloud Functions-Funktion namens secureFunction sowie die Paketdateien, die die Abhängigkeiten für die Cloud Functions-Funktion beschreiben.

Ein Dienstkonto für den externen Salesforce-Dienst erstellen, um die Funktion aufzurufen

Es wird empfohlen, den Zugriff auf in Google Cloud bereitgestellte Dienste und Ressourcen nach dem Prinzip der geringsten Berechtigung zu verwalten. In diesem Abschnitt erstellen Sie ein Dienstkonto für den externen SaaS-Dienst, der auf die Cloud Functions-Funktion zugreift.

Console

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

    Zur Seite "Dienstkonten"

  2. Klicken Sie auf Projekt auswählen und wählen Sie das Projekt aus, das Sie für diese Anleitung erstellt haben.

  3. Klicken Sie auf Dienstkonto erstellen.

  4. Geben Sie den Dienstkontonamen function-invoker-sa ein.

  5. Klicken Sie auf Erstellen.

  6. Wählen Sie die Rolle Cloud Functions-Aufrufer für dieses Dienstkonto aus und klicken Sie dann auf Speichern.

  7. Klicken Sie auf Weiter.

  8. Klicken Sie auf Schlüssel erstellen, wählen Sie P12 als Schlüsseltyp aus und klicken Sie dann auf Erstellen.

    Die P12-Schlüsseldatei wird auf Ihr lokales Laufwerk heruntergeladen.

    Notieren Sie sich das von Google Cloud generierte Standardpasswort (normalerweise notasecret).

  9. Klicken Sie auf Fertig, um die Erstellung des Dienstkontos abzuschließen.

  10. Klicken Sie in Cloud Shell auf Mehr und wählen Sie Datei hochladen aus.

  11. Wählen Sie zum Hochladen der Datei in Cloud Shell die Schlüsseldatei project-id-NNNNNN.p12aus, die Sie zuvor heruntergeladen haben. Klicken Sie dann auf Öffnen. (Der String NNNNNN besteht aus einer Reihe von Zahlen, die als Teil des Schlüsseldateinamens generiert werden.)

  12. Wechseln Sie in Cloud Shell zu Ihrem Basisverzeichnis:

    cd $HOME
    
  13. Benennen Sie die soeben hochgeladene Schlüsseldatei in einen einfacheren Namen um, den Sie später in der Anleitung verwenden können:

    mv ${DEVSHELL_PROJECT_ID}-NNNNNN.p12 external-service-invoker-sa.p12
    

gcloud

  1. Gehen Sie zu Ihrem Basisverzeichnis:

    cd $HOME
    
  2. Erstellen Sie eine Umgebungsvariable, die den Namen des zu erstellenden Dienstkontos enthält:

    export SERVICE_ACCOUNT_NAME=function-invoker-sa
    
  3. Erstellen Sie ein Dienstkonto:

    gcloud beta iam service-accounts create ${SERVICE_ACCOUNT_NAME} \
        --display-name ${SERVICE_ACCOUNT_NAME}
    
  4. Generieren Sie einen P12-Schlüssel für das Dienstkonto und laden Sie ihn herunter:

    gcloud iam service-accounts keys create ~/external-service-invoker-sa.p12 \
        --key-file-type p12 \
        --iam-account ${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com
    

    Der P12-Schlüssel wird in Ihr Basisverzeichnis ($HOME) in Cloud Shell heruntergeladen. Die Ausgabe in Cloud Shell zeigt auch den Speicherort des Schlüssels an.\

Cloud Functions-Funktion bereitstellen

Sie stellen die Cloud Functions-Funktion als geschützte Funktion bereit. Die Funktion kann nur von Nutzern und Dienstkonten mit Zugriffsberechtigung aufgerufen werden. Sie richten im nächsten Schritt den IAM-Zugriff ein, um die Berechtigungen festzulegen.

  1. Wechseln Sie in Cloud Shell zum Verzeichnis manage-customer-func:

    cd manage-customer-func
    
  2. Die Funktion bereitstellen:

    gcloud functions deploy secureFunction \
        --runtime nodejs8 \
        --trigger-http
    
  3. Prüfen Sie, ob die Funktion erfolgreich bereitgestellt wurde:

    gcloud functions describe secureFunction
    

    Eine erfolgreiche Bereitstellung wird durch einen Bereitschaftsstatus angezeigt, der in etwa so angegeben wird:

    status:  ACTIVE
    timeout:  60s
    httpsTrigger:
      url: https://us-central1-[PROJECT_ID].cloudfunctions.net/secureFunction
    

    Notieren Sie sich die URL httpsTrigger. Sie benötigen sie später.

Der bereitgestellten Funktion Zugriff gewähren

Als Nächstes weisen Sie dem erstellten Dienstkonto eine entsprechende Rolle zu, um auf die Cloud Functions-Funktion secureFunction zuzugreifen. Sie entfernen auch das automatisch hinzugefügte Konto allUsers. Dadurch kann nur das Dienstkonto die Cloud Functions-Funktion aufrufen.

Console

  1. Öffnen Sie in der Cloud Console die Seite "Cloud Functions".

    Zur Seite "Cloud-Functions"

  2. Wählen Sie in der Liste der Funktionen secureFunction aus.

  3. Wenn das Infofeld nicht geöffnet ist, klicken Sie in der Symbolleiste auf Infofeld ansehen.

  4. Klicken Sie im Tab Berechtigungen auf Mitglieder hinzufügen.

  5. Geben Sie im Feld Neue Mitglieder function-invoker-sa ein, um nach dem Dienstkonto zu suchen, das Zugriff auf Ihre Funktion benötigt. Wählen Sie dann das Dienstkonto aus.

  6. Wählen Sie in der Liste Rolle auswählen die Option Cloud Functions und dann die Rolle Cloud Functions-Aufrufer aus.

  7. Klicken Sie auf Speichern.

  8. Erweitern Sie im Tab Berechtigungen die Rolle Cloud Functions-Aufrufer.

  9. Klicken Sie in der Zeile für das Mitglied allUsers auf die Schaltfläche Löschen und dann zur Bestätigung auf Entfernen. Dadurch wird der öffentliche Zugriff für diese Funktion entfernt.

gcloud

  1. Weisen Sie dem von Ihnen erstellten Dienstkonto die Rolle Cloud Functions-Aufrufer zu, damit es auf die bereitgestellte Funktion zugreifen kann:

    gcloud beta functions add-iam-policy-binding secureFunction \
        --member=serviceAccount:${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/cloudfunctions.invoker
    
  2. Entfernen Sie das Mitglied allUsers aus der Rolle Cloud Functions-Aufrufer:

    gcloud beta functions remove-iam-policy-binding secureFunction \
        --member=allUsers \
        --role=roles/cloudfunctions.invoker
    

Salesforce-Dienst zum Aufrufen der geschützten Funktion erstellen

In Ihrer Salesforce-Organisation müssen Sie den Apex-Code einrichten, der zum Aufrufen des Geschäftsprozessablaufs erforderlich ist. Verwenden Sie die Salesforce-Befehlszeile (SFDX), um den Salesforce-Code und die erforderliche Konfiguration in einer Scratch-Organisation bereitzustellen. Wenn Sie möchten, können Sie diese bereitgestellten Änderungen später in Produktionsumgebungen hochstufen.

In der folgenden Liste sind die Aufgaben zusammengefasst, die Sie in Ihrer Salesforce-Organisation ausführen müssen. Die detaillierte Anleitung in diesem Abschnitt führt Sie durch die einzelnen Aufgaben.

  1. Richten Sie die Salesforce-Befehlszeile ein.
  2. Erstellen Sie eine Scratch-Organisation und übertragen Sie den Code per Push aus dem geklonten Repository in diese Organisation.
  3. Erstellen Sie einen JKS-Schlüssel (Java Keystore) aus dem exportierten P12-Schlüssel des Google Cloud-Dienstkontos und importieren Sie den JKS-Schlüssel in den Salesforce-Dienst.
  4. Füllen Sie das benutzerdefinierte Metadatentypobjekt mit Daten, die zum Einrichten von Google Cloud relevant sind. Dazu gehören der Endpunkt der aufzurufenden Funktion, die E-Mail-Adresse des Dienstkontos und der Token-Endpunkt, mit dem der Salesforce-Dienst ein ID-Token anfordern kann.
  5. Prüfen Sie die erstellte Apex-Klasse. Die Feldnamen der benutzerdefinierten Metadatentypen und der JKS-Schlüsselname im Apex-Code müssen korrekt referenziert sein.
  6. Erstellen Sie einen Kundendatensatz in Salesforce CRM. Dadurch wird der Code CustomerAccounts.trigger aufgerufen, der den Prozess zum Senden der neuen Kundendatensatzdaten an Google Cloud startet.

Salesforce-Befehlszeile einrichten

In diesem Abschnitt installieren Sie die Salesforce-Befehlszeile und richten die Autorisierung dafür ein.

Salesforce-Befehlszeile installieren

  1. Wechseln Sie in Cloud Shell zum Basisverzeichnis:

    cd $HOME
    
  2. Installieren Sie die Salesforce-Befehlszeile in Ihrer Cloud Shell-Sitzung:

    wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
    
  3. Dekomprimieren Sie die heruntergeladene TAR-Datei:

    tar -xvf sfdx-linux-amd64.tar.xz
    
  4. Fügen Sie dem Pfad das Salesforce-Binärprogramm hinzu:

    export PATH="$PATH:${HOME}/sfdx-cli-v7.8.1-8f830784cc-linux-x64/bin"
    

    Sie können jetzt Befehle über die Salesforce-Befehlszeile ausführen.

  5. Die Befehlszeile muss korrekt eingerichtet sein:

    sfdx
    

    Die Ausgabe sieht so aus:

    Terminalliste mit der Ausgabe des sfdx-Befehls, einschließlich Version, Nutzung, Befehlen und Themen.

    Ihnen werden die Versionsinformationen und eine Liste der Befehle angezeigt.

  6. Geben Sie unter Einrichtung in Ihrer Salesforce-Organisation im Feld Schnellsuche den Wert Dev Hub ein und wählen Sie dann Dev Hub aus:

    Suche nach "Dev" im Salesforce-Dashboard.

  7. Dev Hub aktivieren:

    Dev Hub mit der Umschaltoption "Dev Hub" aktivieren.

    Mit diesem Schritt können Sie eine Scratch-Organisation einrichten, um den Code in der Anleitung bereitzustellen.

  8. Generieren Sie in Cloud Shell ein Zertifikat und ein Schlüsselpaar, um sich über die SFDX-Befehlszeile bei Ihrer Salesforce-Organisation zu authentifizieren:

    openssl req -x509 -sha256 -nodes -days 36500 -newkey \
       rsa:2048 -keyout salesforce.key -out \
       salesforce.crt
    

    Sie werden aufgefordert, Details zur Identifizierung des Zertifikats einzugeben. Für diese Anleitung sind diese Werte nicht wichtig. Drücken Sie die Eingabetaste, um die Standardwerte zu akzeptieren.

  9. Klicken Sie in Cloud Shell auf Mehr und wählen Sie Datei herunterladen aus.

  10. Geben Sie im Feld Voll qualifizierter Dateipfad den folgenden Dateinamen ein und klicken Sie dann auf Herunterladen:

    salesforce.crt
    

    Dadurch wird das von Ihnen generierte Zertifikat auf Ihren lokalen Computer heruntergeladen. Sie laden das Zertifikat im nächsten Verfahren in Ihre Salesforce-Organisation hoch.

Verbindungsanwendung in der Salesforce-Organisation (Dev Hub) erstellen, um die Salesforce-Befehlszeile zu autorisieren

  1. Führen Sie je nach Salesforce-Organisationsversion einen der folgenden Schritte aus, um eine verbundene Anwendung zu erstellen:

    • Verwenden Sie den App Manager, um in Lightning Experience verbundene Apps zu erstellen. Geben Sie unter Einrichtung in Ihrer Salesforce-Organisation im Feld Schnellsuche den Wert App ein und wählen Sie App Manager aus. Klicken Sie auf Neue verbundene App.
    • Geben Sie in Salesforce Classic unter Einrichtung in Ihrer Salesforce-Organisation im Feld Schnellsuche den Wert Apps ein und wählen Sie Apps (unter Build und dann Erstellen). Klicken Sie im Bereich Verbundene Apps auf Neu.
  2. Geben Sie die Kontakt-E-Mail-Adresse und weitere Informationen für Ihre Anwendung ein.

  3. Wählen Sie OAuth-Einstellungen aktivieren aus.

  4. Geben Sie für Callback-URL den Wert http://localhost:1717/OauthRedirect ein.

  5. Um die Option zur Verwendung digitaler Signaturen zu aktivieren, klicken Sie auf Datei auswählen und wählen Sie dann die Zertifikatdatei salesforce.crt aus, die Sie zuvor heruntergeladen haben.

    Dieses Zertifikat dient als öffentlicher Schlüssel zur Authentifizierung und Verbindung des in einer Cloud Shell-Sitzung ausgeführten SFDX-Clients mit der Salesforce Dev Hub-Organisation.

  6. Fügen Sie die folgenden OAuth-Bereiche zu Ausgewählte OAuth-Bereiche hinzu. Klicken Sie dazu darauf und klicken Sie dann auf den Hinzufügen-Pfeil, um sie auszuwählen:

    • Daten aufrufen und verwalten (api)
    • Anfragen jederzeit in Ihrem Namen ausführen (refresh_token, offline_access)
    • Zugriff auf Ihre Daten über das Web gewähren (web)

      Im Salesforce-Dashboard ausgewählte OAuth-Bereiche.

  7. Klicken Sie auf Speichern.

  8. Notieren Sie sich den angezeigten Consumer-Key.

  9. Klicken Sie auf Verwalten und dann auf Richtlinien bearbeiten, um OAuth-Richtlinien zu ändern.

  10. Setzen Sie Berechtigte Nutzer auf Vom Administrator genehmigte Nutzer sind vorautorisiert und bestätigen Sie die Auswahl.

  11. Setzen Sie die IP-Lockerung auf IP-Einschränkungen lockern.

  12. Klicken Sie auf Speichern.

  13. Klicken Sie auf Profile verwalten und fügen Sie das Profil Systemadministrator hinzu.

    Dadurch können sich Nutzer, die dieses Profil annehmen, bei der SFDX-Befehlszeile anmelden.

  14. Klicken Sie auf Speichern.

Autorisierungsschritte für die Salesforce-Befehlszeile ausführen

  1. Erstellen Sie in Cloud Shell eine Umgebungsvariable für den Consumer-Key, der im vorherigen Schritt von der verbundenen App erstellt wurde:

    export CONSUMER_KEY=your-consumer-key
    

    Ersetzen Sie your-consumer-key durch Ihren Consumer-Key.

  2. Erstellen Sie eine Umgebungsvariable, die den Nutzernamen der Salesforce-Organisation enthält, die Sie zuvor in dieser Anleitung erstellt haben:

    export SALESFORCE_USERNAME=your-salesforce-username
    

    Ersetzen Sie your-salesforce-username durch Ihren Salesforce-Nutzernamen.

  3. Authentifizieren Sie sich in Cloud Shell mit einer JWT-Zuweisung bei Ihrer Salesforce-Organisation:

    sfdx force:auth:jwt:grant \
        -u ${SALESFORCE_USERNAME} \
        -f $(pwd)/salesforce.key -i ${CONSUMER_KEY}
    

    Sie erhalten eine Nachricht, dass Sie autorisiert wurden.

    Weitere Informationen zum Autorisieren Ihrer Organisation mit dem JWT-basierten Ablauf finden Sie in der Salesforce-Dokumentation unter Organisation mit dem JWT-basierten Ablauf autorisieren.

Salesforce-Metadaten an eine Scratch-Organisation per Push übertragen

  1. Wechseln Sie in Cloud Shell zum Verzeichnis des geklonten Repositorys:

    cd salesforce-cloudfunc-integration
    
  2. Erstellen Sie eine Scratch-Organisation, um das Repository zu testen, das Sie für diese Anleitung geklont haben.

    sfdx force:org:create \
        --setdefaultusername \
        --definitionfile salesforce/config/project-scratch-def.json \
        --targetdevhubusername ${SALESFORCE_USERNAME} \
        --setalias gcp-func-test-scratch-org
    

    Es empfiehlt sich, eine Scratch-Organisation für diesen Zweck zu verwenden, die einen sicheren Bereich zum Testen neuer Pakete und geklonter Repositories bietet.

  3. Wechseln Sie in das Unterverzeichnis salesforce:

    cd salesforce
    
  4. Übertragen Sie die Metadaten und den Code per Push an die Scratch-Organisation:

    sfdx force:source:push
    
  5. Generieren Sie eine URL für die Scratch-Organisation:

    sfdx force:org:open
    
  6. Klicken Sie auf die generierte URL, um die Scratch-Organisation in Ihrem Browser aufzurufen.

JKS-Keystore-Datei erstellen, die den exportierten P12-Schlüssel enthält

Salesforce-Zertifikate und -Schlüsselpaare werden für die authentifizierte SSL-Kommunikation zwischen dem Salesforce-Dienst und externen Websites und Servern verwendet. Der Salesforce-Dienst muss den P12-Schlüssel des Google Cloud-Dienstkontos sicher speichern, den Sie zuvor in dieser Anleitung generiert haben. Schlüssel im Salesforce-Dienst müssen im JKS-Format (Java KeyStore) gespeichert werden.

  1. Fügen Sie in Cloud Shell den P12-Schlüssel einer JKS-Schlüsselspeicherdatei namens salesforce.jks in Ihrem Basisverzeichnis hinzu:

    keytool \
        -importkeystore \
        -srckeystore $HOME/external-service-invoker-sa.p12 \
        -destkeystore $HOME/salesforce.jks \
        -srcstoretype pkcs12 \
        -srcstorepass notasecret \
        -deststorepass notasecret \
        -deststoretype jks \
        -destalias google_cloud \
        -srcalias privatekey
    
  2. Klicken Sie in Cloud Shell auf Mehr und wählen Sie dann Datei herunterladen aus.

  3. Geben Sie im Feld Voll qualifizierter Dateipfad den folgenden Dateinamen ein und klicken Sie dann auf Herunterladen:

    salesforce.jks
    

    Dadurch wird der von Ihnen generierte Schlüsselspeicher auf Ihren lokalen Computer heruntergeladen.

JKS-Datei in Ihre Salesforce-Scratch-Organisation importieren

Sie können jetzt die Schritte zum Aktivieren des Salesforce.com-Identitätsanbieters ausführen und den JKS-Schlüssel hochladen.

  1. Geben Sie unter Einrichtung in Ihrer Salesforce-Organisation im Feld Schnellsuche den Wert Identity ein. Klicken Sie dann auf Identitätsanbieter, um die Einrichtungsseite des Identitätsanbieters aufzurufen.

    Im Salesforce-Dashboard die Einrichtungsseite des Identitätsanbieters aufrufen.

  2. Klicken Sie auf Identitätsanbieter aktivieren und dann auf Speichern, um das Zertifikat zu akzeptieren.

  3. Geben Sie unter Einrichtung im Feld Schnellsuche den Wert Certificate ein. Wählen Sie Zertifikat- und Schlüsselverwaltung aus.

    Im Salesforce-Dashboard die Seite für die Zertifikat- und Schlüsselverwaltung aufrufen.

  4. Klicken Sie auf Aus Schlüsselspeicher importieren.

  5. Klicken Sie auf Datei auswählen und wählen Sie die JKS-Datei aus, die Sie zuvor heruntergeladen haben.

  6. Geben Sie im Feld Schlüsselspeicher-Passwort den Wert notasecret ein.

  7. Klicken Sie auf Speichern.

  8. Achten Sie darauf, dass das Zertifikatlabel google_cloud ist. Das Label ist wichtig, da die Apex-Klasse mit diesem Namen auf das Zertifikat verweist.

Benutzerdefinierte Metadatentyp-Objektdatensätze erstellen

Wenn Sie das Repository über die Salesforce-Befehlszeile hochladen, wird ein benutzerdefiniertes Metadatentypobjekt für Sie erstellt. Sie müssen Details in dieses Objekt einfügen. Erstellen Sie dazu einen Datensatz, wie in diesem Abschnitt gezeigt. Der Datensatz wird in der Apex-Klasse referenziert und verwendet, um relevante Metadaten der Cloud Functions-Funktion zuzuordnen, die Sie aus dem Salesforce-Dienst aufrufen.

  1. Geben Sie unter Einrichtung in Ihrer Salesforce-Scratch-Organisation im Feld Schnellsuche den Wert Custom metadata ein und wählen Sie dann Benutzerdefinierte Metadatentypen aus.

    Sie sehen einen benutzerdefinierten Metadatentyp namens GCP-Schlüssel.

  2. Klicken Sie neben GCP-Schlüssel auf Einträge verwalten.

  3. Klicken Sie auf Neu, um einen neuen Eintrag zu erstellen, und geben Sie Folgendes ein:

    1. Label. Geben Sie GCP Function Invoker ein.
    2. Client-E-Mail. Geben Sie die Adresse des von Ihnen erstellten Dienstkontos im folgenden Format ein:

      function-invoker-sa@project-id.iam.gserviceaccount.com.

      Ersetzen Sie project-id durch die ID Ihres Cloud-Projekts für diese Anleitung.

    3. Function Audience Endpoint. Geben Sie die URL des httpsTrigger-Endpunkts der Cloud Functions-Funktion ein:

      https://us-central1-project-id.cloudfunctions.net/secureFunction
      
    4. Tokenendpunkt. Geben Sie https://www.googleapis.com/oauth2/v4/token ein.

      Tokenendpunkt im Salesforce-Dashboard festlegen.

  4. Klicken Sie auf Speichern.

Remote-Website-Einstellung in Ihrer Salesforce-Scratch-Organisation erstellen

Sie fügen eine Remote-Website-Einstellung hinzu, um Apex-Zusatzinformationen an die Cloud Functions-Funktion von Google Cloud und Tokenendpunkte aus Ihrer Salesforce-Scratch-Organisation zu senden.

  1. Geben Sie unter Einrichtung in Ihrer Salesforce-Organisation im Feld Schnellsuche den Wert Remote ein und wählen Sie dann Remote-Website-Einstellungen aus.
  2. Klicken Sie auf Neue Remote-Website.
  3. Geben Sie als Name der Remote-Website GCPCloudFunction ein.
  4. Geben Sie für URL der Remote-Website den Endpunkt httpsTrigger der Cloud Functions-Funktion ein:

    https://us-central1-project-id.cloudfunctions.net/secureFunction
    
  5. Klicken Sie auf Speichern.

  6. Erstellen Sie eine weitere Remote-Website-Einstellung. Klicken Sie auf Neue Remote-Website.

  7. Geben Sie als Name der Remote-Website GCPToken ein.

  8. Geben Sie als URL der Remote-Website https://www.googleapis.com ein.

    Name und URL der Remote-Website im Salesforce-Dashboard festlegen

  9. Klicken Sie auf Speichern.

Cloud Functions-Funktion testen

Führen Sie zum Testen der Cloud Functions-Funktion zwei Tests aus:

  • Lösen Sie den Salesforce-Dienst aus, um die Cloud Functions-Funktion mit einem gültigen Token aufzurufen.
  • Rufen Sie die Cloud Functions-Funktion von Google Cloud ohne Token auf. Dadurch wird sichergestellt, dass die Cloud Functions-Funktion nur aufgerufen werden kann, wenn Sie authentifiziert sind.

Cloud Functions-Funktion mit einem gültigen ID-Token aus dem Salesforce-Dienst aufrufen

  1. Klicken Sie in Ihrer Salesforce-Organisation auf das Symbol App Launcher.

    App Launcher im Salesforce-Dashboard starten.

  2. Suchen Sie in der Suchleiste nach Accounts.

  3. Klicken Sie in den Ergebnissen auf Konten.

  4. Klicken Sie auf Neu, um ein neues Konto zu erstellen.

  5. Geben Sie als Name Testkonto ein.

  6. Klicken Sie auf Speichern.

    Durch das Erstellen des Kontos wird die Apex-Klasse ausgelöst, die die Cloud Functions-Funktion secureFunction aufruft.

Prüfen, ob die Cloud Functions-Funktion aufgerufen wurde

Prüfen Sie die Cloud Logging-Logs, ob der Datensatz erfolgreich von der Cloud Functions-Funktion empfangen wurde.

  • Rufen Sie in Cloud Shell die von der Cloud Functions-Funktion secureFunction generierten Logs auf:

    gcloud functions logs read secureFunction
    

    Wenn die Cloud Functions-Funktion aufgerufen wurde, sehen Sie in den Logs den Kundennamen Test Account, den Sie im Salesforce-Dienst erstellt haben.

Cloud Functions-Funktion ohne Token aufrufen

Sie können jetzt prüfen, ob nur authentifizierte und autorisierte Nutzer auf die Cloud Functions-Funktion zugreifen können.

  1. Stellen Sie eine nicht authentifizierte Anfrage an die Cloud Functions-Funktion:

    curl https://us-central1-${DEVSHELL_PROJECT_ID}.cloudfunctions.net/secureFunction
    

    Die Antwort ist der HTTP-Statuscode 403 Forbidden, der bestätigt, dass der Zugriff verweigert wird:

    <html><head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>403 Forbidden</title>
    </head>
    <body text=#000000 bgcolor=#ffffff>
    <h1>Error: Forbidden</h1>
    <h2>Your client does not have permission to get URL <code>/secureFunction</code> from this server.</h2>
    <h2></h2>
    </body></html>
    

Bereinigen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das für die Anleitung erstellte Projekt löschen.

Projekt löschen

  1. Wechseln Sie in der 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.

Salesforce-Ressourcen löschen

Außerdem sollten Sie die Salesforce Developer Edition-Organisation und die zugehörige Scratch-Organisation löschen, die Sie für diese Anleitung erstellt haben.

Developer Edition-Organisation deaktivieren

  1. Geben Sie unter "Einrichtung" in Ihrer Salesforce-(Dev Hub)-Organisation im Feld Schnellsuche den Wert Company ein und wählen Sie Unternehmensinformationen aus.
  2. Klicken Sie auf Unternehmensinformationen.
  3. Klicken Sie auf die Schaltfläche Organisation deaktivieren.

    Die Schaltfläche &quot;Organisation deaktivieren&quot; auf der Salesforce-Einrichtungsseite.

Scratch-Organisation löschen

  • Führen Sie in Cloud Shell den folgenden Befehl aus, um Ihre Salesforce-Scratch-Organisation zu löschen:

    sfdx force:org:delete -u gcp-func-test-scratch-org
    

Nächste Schritte