Intégrer un système CRM Salesforce à des fonctions Cloud sécurisées en entreprise

Ce tutoriel décrit une approche permettant de sécuriser les fonctions Cloud appelées à partir de services hébergés à l'extérieur de Google Cloud. Les cas d'utilisation courants incluent l'appel de fonctions Cloud à partir d'applications SaaS (Software as a Service), telles que des systèmes de gestion de la relation client (CRM), des systèmes partenaires ou des applications Web destinées aux consommateurs.

Ce tutoriel est destiné aux architectes, aux responsables produits et aux informaticiens. Il explique comment appeler une fonction Cloud à partir d'une source externe et aborde également les cas d'utilisation courants de Cloud Functions.

Dans ce tutoriel, nous partons du principe que vous connaissez Cloud Functions, Salesforce, Node.js et les API REST.

Objectifs

  • Déployer une fonction Cloud pouvant être appelée par un service externe
  • Contrôler l'accès à la fonction à l'aide des autorisations Identity and Access Management (IAM)
  • Créer une requête JWT (JSON Web Token), puis appeler la fonction Cloud à l'aide de jetons d'ID provenant de services externes
  • Vérifier que seuls les services autorisés peuvent accéder à la fonction sécurisée

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

  • Cloud Functions

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder à la page de sélection du projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez l'API Cloud Functions.

    Activer l'API

Présentation

Cloud Functions vous permet d'exécuter votre code sur Google Cloud tout en appelant des fonctions à la demande ou en réponse à des événements.

Les entreprises disposent souvent d'un large éventail de plates-formes et d'applications dans leur écosystème technologique. L'intégration de ces plates-formes et des données d'entreprise qu'elles hébergent est dans la plupart des cas essentielle à l'agilité de l'entreprise. Sécuriser et protéger les données d'entreprise ainsi que le transfert de données entre les applications représente un enjeu majeur pour les organisations. Lorsque vous intégrez vos applications d'entreprise (telles que le CRM Salesforce) dans Cloud Functions, vous devez sécuriser l'appel de vos fonctions afin de contrôler qui les appelle et de quelle manière.

Les mécanismes de contrôle des accès présentent de nombreux avantages s'ils sont bien conçus. Ils permettent de réduire la surface d'attaque tout en appliquant les principes du moindre privilège. Ces mécanismes établissent également des routines de sécurité et de contrôle et vous permettent de mieux anticiper les coûts, car vous pouvez définir une liste restreinte de demandeurs autorisés.

Pour savoir comment ajouter le contrôle des accès à Cloud Functions, ce tutoriel explique comment appeler une fonction Cloud sécurisée à partir du CRM Salesforce. L'appel de fonction se déclenche lorsqu'un enregistrement client est créé dans la plate-forme du CRM Salesforce et publié dans le système d'enregistrement (un maître client) pour traitement dans Google Cloud. Bien que ce tutoriel soit axé sur l'utilisation du CRM Salesforce, l'approche utilisée pour cette solution peut s'appliquer à l'appel de fonctions Cloud à partir d'autres applications SaaS.

Par souci de simplicité, la fonction Cloud que vous utilisez est fournie dans un dépôt GitHub.

Architecture

Le schéma suivant présente l'architecture et les principales étapes à suivre pour appeler une fonction Cloud sécurisée à partir d'un service externe. Vous pouvez déployer les instances de la fonction Cloud en privé, afin que seuls les utilisateurs et les services autorisés puissent appeler ces fonctions.

Architecture indiquant les étapes à suivre pour s'authentifier et appeler la fonction Cloud.

Les étapes du schéma sont les suivantes :

  1. Le service Salesforce externe demande un jeton d'ID à l'aide d'un jeton JWT signé.
  2. Si le jeton JWT est valide, le serveur d'autorisation Google renvoie un jeton d'ID signé.
  3. Le service Salesforce utilise le jeton d'ID pour envoyer une requête API à la fonction Cloud sécurisée.
  4. Le conteneur de la fonction Cloud valide en interne le jeton d'ID envoyé par le service Salesforce dans l'en-tête de support d'autorisation.
  5. La validité du jeton détermine l'exécution ou non de la fonction Cloud :
    • Si le jeton est valide, le code de la fonction Cloud est exécuté, et une réponse confirmant le bon déroulement de l'opération est renvoyée au service appelant. Si besoin, d'autres services Google Cloud peuvent être appelés à partir de la fonction Cloud.
    • Si le jeton n'est pas valide, une réponse contenant le code d'état HTTP 401 ou 403 est renvoyée. Le code de la fonction Cloud n'est pas exécuté.

Pour les besoins de ce tutoriel, le service externe appelant la fonction Cloud est hébergé sur la plate-forme Salesforce. La création d'un enregistrement client dans le CRM Salesforce déclenche le pipeline et appelle les étapes décrites dans le schéma. Le CRM Salesforce dispose de la clé privée du compte de service Google Cloud et effectue les étapes décrites dans le schéma pour appeler la fonction Cloud sécurisée. Vous pouvez effectuer cette opération à l'aide d'une classe Apex Salesforce.

Lorsqu'un enregistrement client est créé dans le CRM Salesforce, un déclencheur Apex provoque l'exécution asynchrone d'une tâche pour file d'attente dans la classe Apex (GCPManageCustomersService).

Cas d'utilisation courants d'appel de fonctions Cloud sécurisées

Vous pouvez intégrer des fonctions Cloud à votre écosystème, en tant que composantes essentielles de votre processus d'entreprise de bout en bout. Les fonctions Cloud peuvent vous servir à effectuer les tâches suivantes :

  • Insérer des données d'entreprise dans Google Cloud pour assurer le stockage et le traitement analytique (par exemple, pour gérer les enregistrements client depuis des systèmes CRM frontaux).

  • Créer ou mettre à jour les données client conservées dans des magasins de sauvegarde de données, tels que Firestore et Cloud SQL, si ces magasins servent de maîtres client (autrement dit, s'ils sont utilisés en tant que système d'enregistrement).

  • Récupérer des données transactionnelles à partir de magasins de données Google Cloud, telles que des commandes, des demandes de service, des rendez-vous et des informations détaillées sur les produits. Cela peut vous servir à créer des vues d'ensemble de vos clients dans une plate-forme SaaS telle que Salesforce.

  • Transformer les fichiers de données envoyés par des organisations partenaires à des fins d'analyse, de traitement, puis de chargement dans un lac de données ou un entrepôt de données dans Google Cloud.

  • Analyser des données sur les interactions des consommateurs (envoi de formulaires et importation d'images ou de documents vers un site Web, par exemple), afin de générer des insights à l'aide de BigQuery et BigQuery ML.

Dans ce tutoriel, vous allez mettre en œuvre le premier cas d'utilisation : l'insertion de données d'entreprise dans Google Cloud. Lorsque des données client sont créées dans le CRM Salesforce, elles sont envoyées à Google Cloud via l'appel d'une fonction Cloud sécurisée.

Si besoin, le nouvel enregistrement client peut être traité dans Google Cloud. Certains modèles courants incluent l'insertion de l'enregistrement client au sein d'un maître client, tel que Cloud SQL, Firestore ou BigQuery, à des fins de traitement analytique. Ce tutoriel n'évoque pas le traitement de tels enregistrements.

Initialiser l'environnement

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell.

    Ouvrir Cloud Shell

    Dans ce tutoriel, vous allez exécuter toutes les commandes de terminal à partir de Cloud Shell.

  2. Dans Cloud Shell, définissez le projet que vous avez créé ou sélectionné comme projet par défaut. Remplacez project-id par l'ID de votre projet Cloud.

    gcloud config set project project-id
    
  3. Définissez des paramètres par défaut pour la région et la zone :

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

    Dans ce tutoriel, la région par défaut est us-central1 et la zone par défaut est us-central1-a.

Créer une fonction Cloud sécurisée

La première étape consiste à créer la fonction Cloud que vous allez appeler ultérieurement.

Cloner le dépôt source

  1. Dans Cloud Shell, clonez le dépôt GitHub contenant l'exemple de fonction Cloud et les artefacts Salesforce :

    git clone https://github.com/GoogleCloudPlatform/salesforce-cloud-functions-crm-tutorial
    
  2. Accédez au répertoire que vous avez créé en clonant le dépôt :

    cd salesforce-cloudfunc-integration
    

Examiner le code dans le répertoire

Le répertoire contient deux sous-répertoires appelés salesforce et manage-customer-func. Le répertoire salesforce contient les fichiers de code Apex Salesforce suivants :

  • Fichier CustomerAccounts.trigger. Ce fichier contient le code de déclenchement d'une tâche pour file d'attente dans la classe GCPManageCustomersService lors de la création d'un compte client.
  • Classe GCPManageCustomersService. Ce fichier contient le code permettant de demander un jeton d'ID Google en échange d'un jeton JWT généré et d'appeler la fonction Cloud.
  • Fichiers XML de métadonnées Salesforce.

Le répertoire manage-customer-func contient les fichiers de code Node.js associés à la fonction Cloud secureFunction, ainsi que le package de fichiers qui indique les dépendances de la fonction Cloud.

Créer un compte de service pour permettre au service Salesforce externe d'appeler la fonction

Il est recommandé de gérer l'accès aux services et aux ressources déployés sur Google Cloud avec précision, en suivant le principe du moindre privilège. Dans cette section, vous allez créer un compte de service pour que le service SaaS externe puisse accéder à la fonction Cloud.

Console

  1. Dans Cloud Console, accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

  2. Cliquez sur Sélectionner un projet, puis sélectionnez le projet que vous avez créé dans le cadre de ce tutoriel.

  3. Cliquez sur Créer un compte de service.

  4. Saisissez le nom du compte de service (function-invoker-sa).

  5. Cliquez sur Créer.

  6. Sélectionnez le rôle Demandeur Cloud Functions pour ce compte de service, puis cliquez sur Enregistrer.

  7. Cliquez sur Continuer.

  8. Cliquez sur Créer une clé, puis dans Type de clé, sélectionnez P12. Ensuite, cliquez sur Créer.

    Le fichier de clé P12 est téléchargé sur votre disque local.

    Notez le mot de passe par défaut généré par Google Cloud (normalement, il s'agit de notasecret).

  9. Cliquez sur Terminé pour finaliser la création du compte de service.

  10. Dans Cloud Shell, cliquez sur Plus , puis sélectionnez Importer un fichier.

  11. Pour importer le fichier dans Cloud Shell, sélectionnez le fichier de clé project-id-NNNNNN.p12 que vous avez téléchargé précédemment, puis cliquez sur Ouvrir. (La chaîne NNNNNN correspond à un numéro généré dans le nom du fichier de clé.)

  12. Dans Cloud Shell, accédez à votre répertoire d'accueil :

    cd $HOME
    
  13. Modifiez le nom du fichier de clé que vous venez d'importer afin qu'il soit plus facile à retenir et que vous puissiez l'utiliser plus tard dans le cadre de ce tutoriel :

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

gcloud

  1. Accédez à votre répertoire d'accueil :

    cd $HOME
    
  2. Créez une variable d'environnement destinée à contenir le nom du compte de service que vous allez créer :

    export SERVICE_ACCOUNT_NAME=function-invoker-sa
    
  3. Créez un compte de service :

    gcloud beta iam service-accounts create ${SERVICE_ACCOUNT_NAME} \
        --display-name ${SERVICE_ACCOUNT_NAME}
    
  4. Générez une clé P12 pour le compte de service et téléchargez-la :

    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
    

    La clé P12 est téléchargée dans votre répertoire d'accueil ($HOME) dans Cloud Shell. Le résultat affiché dans Cloud Shell indique également l'emplacement où la clé est téléchargée.

Déployer la fonction Cloud

Vous déployez la fonction Cloud en tant que fonction sécurisée. Seuls les utilisateurs et les comptes de service autorisés à accéder à la fonction peuvent l'appeler. À l'étape suivante, vous allez configurer l'accès à IAM pour établir les autorisations.

  1. Dans Cloud Shell, accédez au répertoire manage-customer-func :

    cd manage-customer-func
    
  2. Déployez la fonction :

    gcloud functions deploy secureFunction \
        --runtime nodejs8 \
        --trigger-http
    
  3. Confirmez que la fonction a bien été déployée :

    gcloud functions describe secureFunction
    

    Un déploiement réussi est indiqué par un état "ready" présenté comme ci-dessous :

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

    Notez l'URL httpsTrigger. Vous en aurez besoin plus tard.

Accorder l'accès à la fonction déployée

Ensuite, vous allez attribuer un rôle approprié au compte de service créé, afin d'accéder à la fonction Cloud secureFunction. Vous allez également supprimer le compte allUsers qui a été ajouté automatiquement. En conséquence, seul le compte de service pourra appeler la fonction Cloud.

Console

  1. Dans Cloud Console, accédez à la page "Cloud Functions".

    Accéder à la page "Cloud Functions"

  2. Sélectionnez secureFunction dans la liste des fonctions.

  3. Si le panneau d'informations est fermé, cliquez sur Afficher le panneau d'informations dans la barre d'outils.

  4. Dans l'onglet Autorisations, cliquez sur Ajouter des membres.

  5. Dans la zone Nouveaux membres, saisissez function-invoker-sa pour rechercher le compte de service devant accéder à votre fonction, puis sélectionnez-le.

  6. Dans la liste Sélectionner un rôle, sélectionnez Cloud Functions, puis le rôle Demandeur Cloud Functions.

  7. Cliquez sur Enregistrer.

  8. Dans l'onglet Autorisations, développez les détails du rôle Demandeur Cloud Functions.

  9. Sur la ligne du membre allUsers, cliquez sur le bouton Supprimer , puis à nouveau sur Supprimer pour confirmer. Cette opération empêche l'accès public à cette fonction.

gcloud

  1. Attribuez le rôle Demandeur Cloud Functions au compte de service créé pour lui permettre d'accéder à la fonction déployée :

    gcloud beta functions add-iam-policy-binding secureFunction \
        --member=serviceAccount:${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/cloudfunctions.invoker
    
  2. Supprimez le membre allUsers du rôle Demandeur Cloud Functions :

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

Créer un service Salesforce pour appeler la fonction sécurisée

Dans votre organisation Salesforce, vous devez configurer le code Apex requis pour appeler le flux du processus métier. Pour ce faire, vous allez utiliser l'interface de ligne de commande Salesforce (SFDX). Elle vous permet de déployer le code Salesforce et la configuration requise dans une organisation test. Si vous le souhaitez, vous pouvez ensuite passer ces déploiements de modifications dans des environnements de production.

La liste suivante récapitule les tâches à effectuer dans votre organisation Salesforce. Cette section fournit des instructions détaillées pour chaque tâche.

  1. Configurez la CLI Salesforce.
  2. Créez une organisation test et déployez-y le code du dépôt cloné.
  3. Créez une clé Java Keystore (JKS) à partir de la clé P12 exportée depuis le compte de service Google Cloud. Ensuite, importez la clé JKS dans le service Salesforce.
  4. Renseignez l'objet type de métadonnées personnalisé avec les informations correspondant à votre configuration Google Cloud. Par exemple, renseignez le point de terminaison de la fonction à appeler, l'adresse e-mail du compte de service et le point de terminaison du jeton que le service Salesforce peut utiliser pour demander un jeton d'ID.
  5. Examinez la classe Apex créée et assurez-vous que le nom des champs type de métadonnées personnalisés et le nom de la clé JKS sont correctement référencés dans le code Apex.
  6. Créez un enregistrement client dans le CRM Salesforce. Ce nouvel enregistrement déclenche l'appel du code CustomerAccounts.trigger, qui lance le processus d'envoi des données du nouvel enregistrement client vers Google Cloud.

Configurer la CLI Salesforce

Dans cette section, vous allez installer la CLI Salesforce et configurer l'autorisation correspondante.

Installer la CLI Salesforce

  1. Dans Cloud Shell, accédez au répertoire d'accueil :

    cd $HOME
    
  2. Installez la CLI Salesforce dans votre session Cloud Shell :

    wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
    
  3. Décompressez le fichier tar téléchargé :

    tar -xvf sfdx-linux-amd64.tar.xz
    
  4. Ajoutez le binaire Salesforce au chemin :

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

    Vous pouvez désormais exécuter des commandes dans la CLI Salesforce.

  5. Vérifiez que la CLI est correctement configurée :

    sfdx
    

    Voici le résultat :

    Affichage du terminal montrant le résultat de la commande SFDX, y compris la version, l'utilisation, les commandes et les thèmes.

    Vous pouvez voir les informations concernant la version ainsi qu'une liste de commandes.

  6. Dans la zone Quick Find (Recherche rapide) de l'onglet Setup (Configuration) de votre organisation Salesforce, saisissez Dev Hub, puis sélectionnez Dev Hub (Hub de développement) :

    Recherche de la chaîne

  7. Activez Dev Hub :

    Activation de Dev Hub via le bouton d'activation/de désactivation de Dev Hub.

    L'étape suivante vous permet de configurer une organisation test de déploiement du code pour ce tutoriel.

  8. Dans Cloud Shell, générez un certificat et une paire de clés pour vous authentifier auprès de votre organisation Salesforce à partir de la CLI SFDX :

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

    Vous êtes invité à saisir des informations pour identifier le certificat. Pour ce tutoriel, ces valeurs n'ont pas d'importance. Vous pouvez donc appuyer sur Entrée pour accepter les valeurs par défaut.

  9. Dans Cloud Shell, cliquez sur Plus , puis sélectionnez Télécharger le fichier.

  10. Dans le champ Chemin d'accès complet au fichier, saisissez le nom de fichier suivant, puis cliquez sur Télécharger :

    salesforce.crt
    

    Cette opération déclenche le téléchargement en local du certificat que vous avez généré. Au cours de la procédure suivante, vous allez importer le certificat dans votre organisation Salesforce.

Créer une application connectée dans l'organisation Salesforce (Dev Hub) pour autoriser la CLI Salesforce

  1. En fonction de votre édition de l'organisation Salesforce, utilisez l'une des méthodes ci-dessous pour créer une application connectée :

    • Dans Lightning Experience, utilisez le gestionnaire d'applications pour créer des applications connectées. Dans l'onglet Setup (Configuration) de votre organisation Salesforce, saisissez App dans le champ Quick Find (Recherche rapide), puis sélectionnez App Manager (Gestionnaire d'applications). Cliquez sur New Connected App (Nouvelle application connectée).
    • Dans Salesforce Classic, accédez à l'onglet Setup (Configuration) de votre organisation Salesforce, puis saisissez Apps dans la zone Quick Find (Recherche rapide). Ensuite, sous Build (Développer), puis Create (Créer), sélectionnez Applications. Dans le volet Connected Apps (Applications connectées), cliquez sur New (Nouveau).
  2. Saisissez l'adresse e-mail du contact et toute autre information appropriée sur votre application.

  3. Sélectionnez Enable OAuth Settings (Activer les paramètres OAuth).

  4. Définissez la valeur de Callback URL (URL de rappel) sur http://localhost:1717/OauthRedirect.

  5. Pour activer l'option de signature numérique, cliquez sur Choose File (Choisir le fichier), puis sélectionnez le fichier de certificat salesforce.crt que vous avez téléchargé précédemment.

    Ce certificat sert de clé publique. Il permet d'authentifier et de connecter le client SFDX exécuté dans une session Cloud Shell à l'organisation Salesforce Dev Hub.

  6. Ajoutez les niveaux d'accès OAuth suivants dans Selected OAuth Scopes (Niveaux d'accès OAuth sélectionnés). Pour ce faire, sélectionnez-les, puis cliquez sur la flèche Add pour les ajouter :

    • Access and manage your data (api) (Accéder à vos données et les gérer – API)
    • Perform requests on your behalf at any time (refresh_token, offline_access) (Effectuer des requêtes en votre nom à tout moment – refresh_token, offline_access)
    • Provide access to your data via the web (web) (Fournir un accès à vos données via le Web – Web)

      Niveaux d'accès OAuth sélectionnés dans le tableau de bord Salesforce.

  7. Cliquez sur Save (Enregistrer).

  8. Notez la clé client qui s'affiche.

  9. Cliquez sur Manage (Gérer), puis sur Edit Policies (Modifier les règles) pour modifier les règles OAuth.

  10. Définissez Permitted users (Utilisateurs autorisés) sur Admin Approved Users are Pre-Authorized (Les utilisateurs validés par l'administrateur sont pré-autorisés), puis confirmez votre choix.

  11. Définissez la relaxe IP sur Relax IP Restrictions (Assouplir les restrictions IP).

  12. Cliquez sur Save (Enregistrer).

  13. Cliquez sur Manage Profiles (Gérer les profils) et ajoutez le profil System Administrator (Administrateur système).

    Ainsi, ce profil d'utilisateur peut se connecter à la CLI SFDX.

  14. Cliquez sur Save (Enregistrer).

Terminer la procédure d'autorisation pour la CLI Salesforce

  1. Dans Cloud Shell, créez une variable d'environnement destinée à contenir la clé client créée par l'application connectée à l'étape précédente :

    export CONSUMER_KEY=your-consumer-key
    

    Remplacez your-consumer-key par votre clé client.

  2. Créez une variable d'environnement destinée à contenir le nom d'utilisateur de l'organisation Salesforce créée précédemment dans le cadre de ce tutoriel :

    export SALESFORCE_USERNAME=your-salesforce-username
    

    Remplacez your-salesforce-username par votre nom d'utilisateur Salesforce.

  3. Dans Cloud Shell, authentifiez-vous auprès de votre organisation Salesforce à l'aide d'une autorisation JWT :

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

    Un message de confirmation de l'autorisation s'affiche.

    Pour plus d'informations sur l'autorisation de votre organisation à l'aide du flux basé sur JWT, consultez la page Authorize an Org Using the JWT-Based Flow (Autoriser une organisation à l'aide du flux JWT) de la documentation Salesforce.

Déployer les métadonnées Salesforce dans une organisation test

  1. Dans Cloud Shell, accédez au répertoire du dépôt cloné :

    cd salesforce-cloudfunc-integration
    
  2. Créez une organisation test afin de tester le dépôt que vous avez cloné dans le cadre de ce tutoriel.

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

    Il est recommandé d'utiliser une organisation test à cet effet. Elle offre un espace sécurisé pour tester de nouveaux packages et des dépôts clonés.

  3. Accédez au sous-répertoire salesforce :

    cd salesforce
    
  4. Déployez les métadonnées et le code dans l'organisation test :

    sfdx force:source:push
    
  5. Générez une URL pour l'organisation test :

    sfdx force:org:open
    
  6. Cliquez sur l'URL générée pour accéder à l'organisation test dans votre navigateur.

Créer un fichier keystore JKS contenant la clé P12 exportée

Les certificats et les paires de clés Salesforce sont utilisés pour gérer la communication SSL authentifiée entre le service Salesforce, et les sites Web et serveurs externes. Le service Salesforce doit stocker en toute sécurité la clé P12 du compte de service Google Cloud générée précédemment dans ce tutoriel. Les clés du service Salesforce doivent être stockées au format JKS (Java KeyStore).

  1. Dans Cloud Shell, ajoutez la clé P12 à un fichier keystore JKS appelé salesforce.jks et situé dans votre répertoire d'accueil :

    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. Dans Cloud Shell, cliquez sur Plus , puis sur Télécharger le fichier.

  3. Dans le champ Chemin d'accès complet au fichier, saisissez le nom de fichier suivant, puis cliquez sur Télécharger :

    salesforce.jks
    

    Cette opération permet de télécharger en local le keystore que vous avez généré.

Importer le fichier JKS dans votre organisation test Salesforce

Vous pouvez désormais suivre la procédure d'activation du fournisseur d'identité Salesforce.com et importer la clé JKS.

  1. Accédez à l'onglet Setup (Configuration) de votre organisation Salesforce, puis saisissez Identity dans la zone Quick Find (Recherche rapide). Ensuite, cliquez sur Identity Provider (Fournisseur d'identité) pour accéder à la page de configuration du fournisseur d'identité.

    Accès à la page de configuration du fournisseur d'identité dans le tableau de bord Salesforce.

  2. Cliquez sur Enable Identity Provider (Activer le fournisseur d'identité), puis cliquez sur Save (Enregistrer) pour accepter le certificat.

  3. Accédez à l'onglet Setup (Configuration) de votre organisation Salesforce, puis saisissez Certificate dans la zone Quick Find (Recherche rapide). Ensuite, sélectionnez Certificate and Key Management (Gestion des certificats et des clés).

    Accès à la page de gestion des clés et des certificats dans le tableau de bord Salesforce.

  4. Cliquez sur Import from Keystore (Importer depuis le keystore).

  5. Cliquez sur Choose File (Choisir le fichier) et sélectionnez le fichier JKS que vous avez téléchargé précédemment.

  6. Dans la zone Keystore Password (Mot de passe du keystore), saisissez notasecret.

  7. Cliquez sur Save (Enregistrer).

  8. Assurez-vous que le libellé du certificat est bien google_cloud. Ce libellé est important, car la classe Apex référence le certificat sous ce nom.

Créer des enregistrements d'objets types de métadonnées personnalisés

Lorsque vous déployez le dépôt à l'aide de la CLI Salesforce, un objet type de métadonnées personnalisé est créé. Vous devez renseigner les détails de cet objet en créant un enregistrement, comme indiqué dans cette section. L'enregistrement est référencé dans la classe Apex et est utilisé à des fins de mappage des métadonnées pertinentes à la fonction Cloud que vous appelez à partir du service Salesforce.

  1. Accédez à l'onglet Setup (Configuration) de votre organisation Salesforce, puis saisissez Custom metadata dans la zone Quick Find (Recherche rapide). Ensuite, sélectionnez Custom Metadata Types (Types de métadonnées personnalisés).

    Un type de métadonnées personnalisé appelé GCP Key (Clé GCP) s'affiche.

  2. À côté de GCP Key (Clé GCP), cliquez sur Manage Records (Gérer les enregistrements).

  3. Cliquez sur New (Nouveau) pour créer un enregistrement, puis saisissez les informations suivantes :

    1. Label (Libellé). Saisissez GCP Function Invoker.
    2. Client Email (Adresse e-mail du client). Saisissez l'adresse du compte de service que vous avez créé, au format suivant :

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

      Remplacez project-id par l'ID du projet Cloud utilisé dans le cadre de ce tutoriel.

    3. Function Audience Endpoint (Point de terminaison d'audience de la fonction). Saisissez l'URL du point de terminaison httpsTrigger de la fonction Cloud :

      https://us-central1-project-id.cloudfunctions.net/secureFunction
      
    4. Token Endpoint (Point de terminaison du jeton). Saisissez https://www.googleapis.com/oauth2/v4/token

      Définition du point de terminaison du jeton dans le tableau de bord Salesforce.

  4. Cliquez sur Save (Enregistrer).

Créer un paramètre de site distant dans votre organisation test Salesforce

Vous allez ajouter un paramètre de site distant pour effectuer des appels Apex à la fonction Cloud Google Cloud et aux points de terminaison des jetons à partir de votre organisation test Salesforce.

  1. Accédez à l'onglet Setup (Configuration) de votre organisation Salesforce, puis saisissez Remote dans la zone Quick Find (Recherche rapide). Ensuite, sélectionnez Remote Site Settings (Paramètres du site distant).
  2. Cliquez sur New Remote Site (Nouveau site distant).
  3. Dans le champ Remote Site Name (Nom du site distant), saisissez GCPCloudFunction.
  4. Dans le champ Remote Site URL (URL du site distant), saisissez le point de terminaison httpsTrigger de la fonction Cloud :

    https://us-central1-project-id.cloudfunctions.net/secureFunction
    
  5. Cliquez sur Save (Enregistrer).

  6. Pour créer un autre paramètre de site distant, cliquez sur New Remote Site (Nouveau site distant).

  7. Dans le champ Remote Site Name (Nom du site distant), saisissez GCPToken.

  8. Dans le champ Remote Site URL (URL du site distant), saisissez https://www.googleapis.com.

    Définition du nom et de l'URL du site distant dans le tableau de bord Salesforce.

  9. Cliquez sur Save (Enregistrer).

Tester la fonction Cloud

Pour tester la fonction Cloud, vous devez exécuter deux tests :

  • Déclencher l'appel de la fonction Cloud par le service Salesforce à l'aide d'un jeton valide.
  • Appeler la fonction Cloud Google Cloud sans jeton. Ce test permet de vérifier que la fonction Cloud ne peut être appelée que par les utilisateurs authentifiés.

Appeler la fonction Cloud à partir du service Salesforce à l'aide d'un jeton d'ID valide

  1. Dans votre organisation Salesforce, cliquez sur l'icône de l'App Launcher (Lanceur d'applications).

    Démarrage du lanceur d'applications dans le tableau de bord Salesforce.

  2. Dans la barre de recherche, saisissez Accounts et lancez la recherche.

  3. Dans les résultats, cliquez sur Accounts (Comptes).

  4. Cliquez sur New (Nouveau) pour créer un compte.

  5. Dans le champ Name (Nom), saisissez Test Account (Compte de test).

  6. Cliquez sur Save (Enregistrer).

    La création du compte déclenche la classe Apex, qui appelle la fonction Cloud secureFunction.

Vérifier que la fonction Cloud a bien été appelée

Vous pouvez vérifier que l'enregistrement a bien été reçu par la fonction Cloud en consultant les journaux Cloud Logging.

  • Dans Cloud Shell, affichez les journaux générés par la fonction Cloud secureFunction :

    gcloud functions logs read secureFunction
    

    Si la fonction Cloud a été appelée, le nom de client Test Account que vous avez créé dans le service Salesforce apparaît dans les journaux.

Appeler la fonction Cloud sans jeton

Vous allez maintenant vérifier que seuls les utilisateurs authentifiés et autorisés peuvent accéder à la fonction Cloud.

  1. Envoyez une requête non authentifiée à la fonction Cloud :

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

    La réponse affiche un code d'état HTTP 403 Forbidden confirmant que l'accès est refusé :

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

Effectuer un nettoyage

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Supprimer le projet

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources Salesforce

Vous devez également supprimer l'organisation Salesforce Developer Edition et l'organisation test créée dans le cadre de ce tutoriel.

Désactiver l'organisation Developer Edition

  1. Dans votre organisation Salesforce (Dev Hub), accédez à la page de configuration, puis saisissez Company dans la zone Quick Find (Recherche rapide). Ensuite, sélectionnez Company Information (Informations sur l'entreprise).
  2. Cliquez sur Company Information (Informations sur l'entreprise).
  3. Cliquez sur le bouton Deactivate Org (Désactiver l'organisation).

    Bouton de désactivation de l'organisation sur la page de configuration de Salesforce.

Supprimer l'organisation test

  • Dans Cloud Shell, exécutez la commande suivante pour supprimer votre organisation test Salesforce :

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

Étapes suivantes