Como integrar o CRM do Salesforce com o Cloud Functions protegido nas empresas

Neste tutorial, você encontra uma abordagem para ajudar a proteger o Cloud Functions invocado de serviços hospedados fora do Google Cloud. São casos de uso comum a invocação do Cloud Functions de apps de software como serviço (SaaS), como sistemas de gerenciamento de relacionamento com o cliente (CRM), sistemas de parceiros ou apps da Web voltados ao consumidor.

Este tutorial é voltado a arquitetos, proprietários de produtos e profissionais de TI. Nele você encontra informações sobre como invocar uma Função do Cloud a partir de uma fonte externa, além de discussões de casos de uso comuns voltado à implantação do Cloud Functions.

Esse tutorial presume que há familiarização com o Cloud Functions, o Salesforce, o Node.js e as APIs REST.

Objetivos

  • Implantar uma Função do Cloud que pode ser invocada por um serviço externo.
  • Controle o acesso à função usando as permissões de gerenciamento de identidade e acesso (IAM, na sigla em inglês).
  • Crie uma solicitação JSON Web Token (JWT) e invoque a Função do Cloud usando tokens de ID de serviços externos.
  • Verifique se apenas os serviços autorizados têm acesso à função protegida.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • Cloud Functions

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a API Cloud Functions.

    Ative a API

Introdução

O Cloud Functions oferece uma maneira de executar seu código no Google Cloud e invocar as funções sob demanda ou como resposta a eventos.

As empresas contam, no geral, com uma ampla variedade de plataformas e apps em seu ecossistema tecnológico. A integração dessas plataformas e dos dados da empresa armazenados nelas geralmente é fundamental para a agilidade dos negócios. Proteger e salvaguardar dados corporativos e a movimentação de dados entre apps é fundamental para as organizações. Ao integrar seus apps corporativos, como o CRM do Salesforce, com o Cloud Functions, é necessário adotar medidas para proteger a invocação das funções a fim de controlar como e por quem elas são invocadas.

Há muitos benefícios em um mecanismo de controle de acesso bem projetado. Ele ajuda a reduzir a superfície de ataque e emprega os princípios de privilégio mínimo. Além disso, estabelece mecanismos de segurança e controle e ajuda a tornar os custos mais previsíveis, uma vez que é possível limitar a lista de invocadores permitidos.

Para saber como adicionar controle de acesso ao Cloud Functions, confira este tutorial sobre como invocar uma Função do Cloud protegida do CRM do Salesforce. A função é invocada quando um novo registro de cliente é criado na plataforma do CRM do Salesforce e postado para processamento no sistema de registro (um mestre de cliente) do Google Cloud. Embora este tutorial seja voltado ao uso do CRM do Salesforce, a abordagem usada nesta solução pode ser aplicada a como chamar o Cloud Functions de outros apps SaaS.

Para simplificar, a Função do Cloud usada é fornecida em um repositório do GitHub.

Arquitetura

A figura a seguir descreve a arquitetura e as principais etapas para invocar uma Função do Cloud protegida de um serviço externo. É possível implantar, de forma privada, instâncias da Função do Cloud para que apenas usuários e serviços autorizados possam invocar essas funções.

Arquitetura dessa abordagem, indicando as etapas envolvidas na autenticação
e na chamada da Função do Cloud.

As etapas no diagrama são as seguintes:

  1. O serviço externo do Salesforce solicita um token de ID usando um JWT assinado.
  2. Se o JWT for válido, um token de ID assinado será retornado do servidor de autorização do Google.
  3. O serviço do Salesforce usa o token de ID para realizar uma solicitação de API para a Função do Cloud protegida.
  4. O contêiner da Função do Cloud valida internamente o token de ID enviado no cabeçalho Authorization Bearer pelo serviço do Salesforce.
  5. A Função do Cloud é executada com base na validade do token:
    • Se o token for válido, o código da Função do Cloud será executado e uma resposta de sucesso será retornada ao serviço de chamada. Outros serviços do Google Cloud podem ser invocados da Função do Cloud, conforme necessário.
    • Se o token não for válido, uma resposta de código de status HTTP 401 ou 403 será retornada, e o código da Função do Cloud não será executado.

Para os fins deste tutorial, o serviço externo que chama a Função do Cloud está hospedado na plataforma do Salesforce. A criação de um registro de cliente no CRM do Salesforce aciona o pipeline e invoca as etapas descritas no diagrama. O CRM do Salesforce tem a chave privada da conta de serviço do Google Cloud e executa as etapas descritas no diagrama para chamar a Função do Cloud protegida. Para isso, use uma classe Apex do Salesforce.

Quando um registro de cliente é criado no CRM do Salesforce, um gatilho Apex faz com que um job que pode ser colocado em fila na classe Apex (GCPManageCustomersService) seja executado de forma assíncrona.

Casos de uso comuns de invocação do Cloud Functions protegido

É possível integrar o Cloud Functions ao seu ecossistema, onde ele pode servir de base no seu processo corporativo completo. O Cloud Functions pode ser usado para as seguintes tarefas:

  • Inserir dados da empresa no Google Cloud para armazenamento e processamento analítico, como registros de clientes de sistemas de CRM de front-end.

  • Criar ou atualizar dados de clientes mantidos em armazenamentos de backup, como o Firestore e o Cloud SQL, quando esses armazenamentos funcionam como mestres de clientes (ou seja, o sistema de registro).

  • Recuperar dados transacionais, como pedidos, solicitações de serviço, agendamentos de serviço e detalhes do produto, de armazenamentos de dados no Google Cloud. Isso pode ser realizado para criar visualizações em 360 graus do cliente em uma plataforma SaaS, como o Salesforce.

  • Transformar arquivos de dados recebidos de organizações parceiras, que devem ser analisados, processados e carregados em um data lake ou em um armazenamento de dado no Google Cloud.

  • Analisar dados de interação do cliente, como envios de formulários ou uploads de imagens ou documentos em um site, para gerar insights usando o BigQuery e o BigQuery ML.

Neste tutorial, você implementará o primeiro caso de uso: como inserir dados da empresa no Google Cloud. Quando os dados do cliente são criados no CRM do Salesforce, eles são enviados ao Google Cloud através da invocação de uma Função do Cloud protegida.

O novo registro do cliente pode ser processado conforme necessário no Google Cloud. Alguns padrões comuns incluem a inserção do registro do cliente em um mestre do cliente para processamento analítico, como Cloud SQL, Firestore ou BigQuery. O presente tutorial não inclui uma seção sobre como processar esses registros.

Como inicializar seu ambiente

  1. No Console do Cloud, clique em Ativar o Cloud Shell.

    Abra o Cloud Shell

    Use o Cloud Shell para todos os comandos do terminal neste tutorial.

  2. No Cloud Shell, defina o projeto criado ou selecionado como projeto padrão. Substitua project-id pelo código do projeto do Cloud.

    gcloud config set project project-id
    
  3. Atribua configurações padrão para região e zona:

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

    Neste tutorial, use us-central1 e us-central1-a como a região e a zona padrão, respectivamente.

Como criar a Função do Cloud protegida

A primeira etapa é criar a Função do Cloud que será posteriormente invocada.

Clonar o repositório de origem

  1. No Cloud Shell, clone o repositório do GitHub que contém a Função do Cloud de amostra e os artefatos do Salesforce:

    git clone https://github.com/GoogleCloudPlatform/salesforce-cloud-functions-crm-tutorial
    
  2. Altere para o diretório criado ao clonar o repositório:

    cd salesforce-cloudfunc-integration
    

Revisar o código no diretório

O diretório contém dois diretórios, chamados salesforce e manage-customer-func. O diretório salesforce tem os seguintes arquivos de código Apex do Salesforce:

  • arquivo CustomerAccounts.trigger. Ele contém um código que aciona um job que pode ser colocado em fila na classe GCPManageCustomersService quando uma nova conta de cliente é criada.
  • classe GCPManageCustomersService. Esse arquivo contém o código para solicitar um token de ID do Google em troca de um JWT gerado, bem como invoca a Função do Cloud.
  • Arquivos de metadados XML do Salesforce.

O diretório manage-customer-func tem os arquivos de código do Node.js para a Função do Cloud chamada secureFunction, em conjunto com os arquivos de empacotamento que descrevem as dependências da Função do Cloud.

Criar uma conta de serviço do serviço externo do Salesforce para invocar a função

É uma prática recomendada o gerenciamento rigoroso do acesso a serviços e recursos implantados no Google Cloud seguindo o princípio de privilégio mínimo. Nesta seção, você criará uma conta de serviço do serviço SaaS externo que tem acesso à Função do Cloud.

Console

  1. No Console do Cloud, acesse a página Contas de serviço:

    Acessar a página "Contas de serviço"

  2. Clique em Selecionar um projeto e selecione o projeto criado para este tutorial.

  3. Clique em Criar conta de serviço.

  4. Insira o nome da conta de serviço function-invoker-sa.

  5. Clique em Criar

  6. Selecione o papel Invocador do Cloud Functions para essa conta de serviço e, em seguida, clique em Salvar.

  7. Clique em Continuar.

  8. Clique em Criar chave, selecione P12 para Tipo de chave e, em seguida, clique em Criar.

    O download do arquivo de chave P12 é realizado no disco local.

    Anote a senha padrão gerada pelo Google Cloud (geralmente notasecret).

  9. Clique em Concluído para concluir a criação da conta de serviço.

  10. No Cloud Shell, clique em Mais e selecione Fazer upload do arquivo.

  11. Para fazer upload do arquivo para o Cloud Shell, selecione o arquivo de chave project-id-NNNNNN.p12 que você baixou anteriormente e clique em Abrir. (A string NNNNNN é um conjunto de números gerados como parte do nome do arquivo de chave.)

  12. No Cloud Shell, acesse o diretório principal:

    cd $HOME
    
  13. Renomeie o arquivo de chave carregado para usar um nome mais simples que possa ser usado posteriormente no tutorial:

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

gcloud

  1. Acesse o diretório principal:

    cd $HOME
    
  2. Crie uma variável de ambiente para manter o nome da conta de serviço que será criada:

    export SERVICE_ACCOUNT_NAME=function-invoker-sa
    
  3. Crie uma conta de serviço:

    gcloud beta iam service-accounts create ${SERVICE_ACCOUNT_NAME} \
        --display-name ${SERVICE_ACCOUNT_NAME}
    
  4. Gere uma chave P12 para a conta de serviço e faça o download dela:

    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
    

    O download da chave P12 é realizado no diretório principal ($HOME) do Cloud Shell. A saída observada no Cloud Shell também indica o local onde foi realizado o download da chave.\

Implante a Função do Cloud

Implante a Função do Cloud como uma função protegida. Somente usuários e contas de serviço que receberam permissão para acessá-la poderão invocar a função. Você configurará o acesso do IAM na próxima etapa para estabelecer as permissões.

  1. No Cloud Shell, mude para o diretório manage-customer-func:

    cd manage-customer-func
    
  2. Implante a função:

    gcloud functions deploy secureFunction \
        --runtime nodejs8 \
        --trigger-http
    
  3. Verifique se a função foi implantada:

    gcloud functions describe secureFunction
    

    Uma implantação bem-sucedida é indicada por um status pronto semelhante ao seguinte:

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

    Anote o URL httpsTrigger. Ele será necessário mais tarde.

Conceder acesso à função implantada

Em seguida, atribua um papel apropriado à conta de serviço criada para acessar a Função do Cloud secureFunction. Remova, além disso, a conta do allUsers que é adicionada automaticamente. Como resultado, apenas a conta de serviço pode invocar a Função do Cloud.

console

  1. No Console do Cloud, abra a página do Cloud Functions.

    Acessar a página do Cloud Functions

  2. Selecione secureFunction na lista de funções.

  3. Se o painel de informações não estiver aberto, clique em Mostrar painel de informações na barra de ferramentas.

  4. Na guia Permissões, clique em Adicionar membros.

  5. Na caixa Novos membros, insira function-invoker-sa para procurar pela conta de serviço que precisa acessar sua função e, em seguida, selecione a conta de serviço.

  6. Na lista Selecionar um papel, selecione Cloud Functions e, em seguida, o papel Invocador do Cloud Functions.

  7. Clique em Salvar.

  8. Na guia Permissões, expanda o papel Invocador do Cloud Functions.

  9. Na linha do membro allUsers, clique no botão Excluir e, então, em Remover para confirmar. O acesso público é então removido dessa função.

gcloud

  1. Atribua o papel Invocador da Função do Cloud à conta de serviço criada para permitir o acesso à função implantada:

    gcloud beta functions add-iam-policy-binding secureFunction \
        --member=serviceAccount:${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/cloudfunctions.invoker
    
  2. Remova o membro allUsers do papel Invocador da Função do Cloud:

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

Como criar um serviço do Salesforce para invocar a função protegida

Na sua organização do Salesforce, é preciso configurar o código Apex necessário para invocar o fluxo do processo corporativo. Use a CLI do Salesforce (SFDX) para implantar o código do Salesforce e a configuração necessária em uma organização de rascunho. Se quiser, poderá promover essas alterações implantadas posteriormente em ambientes de produção.

A lista a seguir resume as tarefas que devem ser executadas na sua organização do Salesforce. As instruções detalhadas nesta seção abordam de forma pormenorizada cada tarefa.

  1. Configure a CLI do Salesforce.
  2. Crie uma organização de rascunho e envie o código do repositório clonado para essa organização.
  3. Crie uma chave Java Keystore (JKS) a partir da chave exportada P12 da conta de serviço do Google Cloud e importe a chave JKS para o serviço do Salesforce.
  4. Preencha o objeto do tipo de metadados personalizados com dados relevantes para sua configuração do Google Cloud. Isso inclui o endpoint da função a ser invocada, o e-mail da conta de serviço e o endpoint do token que pode ser usado pelo serviço do Salesforce para solicitar um token de ID.
  5. Revise a classe Apex criada e verifique se os nomes do campo de tipo de metadados personalizados e o nome da chave JKS estão referenciados corretamente no código Apex.
  6. Crie um registro de cliente no CRM do Salesforce. Isso invoca o código CustomerAccounts.trigger, que inicia o processo de envio dos novos dados de registro do cliente para o Google Cloud.

Configurar a CLI do Salesforce

Nesta seção, você instalará a CLI do Salesforce e configurará suaa autorização.

Instalar a CLI do Salesforce

  1. No Cloud Shell, acesse o diretório principal:

    cd $HOME
    
  2. Instale a CLI do Salesforce na sessão do Cloud Shell:

    wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
    
  3. Descompacte o arquivo .tar baixado:

    tar -xvf sfdx-linux-amd64.tar.xz
    
  4. Adicione o binário do Salesforce ao caminho:

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

    Agora já é possível executar comandos usando a CLI do Salesforce.

  5. Verifique se a CLI foi configurada corretamente:

    sfdx
    

    A saída é a seguinte:

    Listagem de terminal exibindo a saída do comando sfdx, incluindo versão, uso, comandos e tópicos.

    Serão exibidas as informações da versão e uma lista de comandos.

  6. Em Configuração na sua organização do Salesforce, na caixa Pesquisa rápida, insira Dev Hub e selecione Dev Hub:

    Pesquisa por "Dev" no painel do Salesforce.

  7. Ative o Dev Hub:

    Como ativar o Dev Hub usando a chave alternada "Dev Hub".

    Esta etapa permite configurar uma organização de rascunho para implantar o código no tutorial.

  8. No Cloud Shell, gere um certificado e um par de chaves para autenticar sua organização do Salesforce a partir da CLI do SFDX:

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

    Você será solicitado a inserir detalhes para identificar o certificado. Para este tutorial, esses valores não são importantes. Dessa forma, pressione Enter para aceitar os padrões.

  9. No Cloud Shell, clique em Mais e selecione Fazer o download do arquivo.

  10. Na caixa Caminho do arquivo totalmente qualificado, insira o seguinte nome de arquivo e clique em Fazer o download:

    salesforce.crt
    

    Com isso, o certificado gerado é baixado na sua máquina local. Faça upload do certificado em sua organização do Salesforce no próximo procedimento.

Criar um app de conexão na organização do Salesforce (Dev Hub) para autorizar a CLI do Salesforce

  1. Dependendo da edição da organização do Salesforce, use uma das etapas a seguir para criar um app conectado:

    • No Lightning Experience, use o App Manager para criar apps conectados. Em Configuração em sua organização do Salesforce, na caixa Pesquisa rápida, insira App e selecione App Manager. Clique em Novo app conectado.
    • Na versão Classic do Salesforce, em Configuração em sua organização do Salesforce, na caixa Pesquisa rápida, insira Apps e selecione Apps (em Versão e, em seguida, Criar). No painel Apps conectados, clique em Novo.
  2. Insira o e-mail de contato e outras informações relevantes no app.

  3. Selecione Ativar configurações do OAuth.

  4. Para o valor de URL de callback, insira http://localhost:1717/OauthRedirect.

  5. Para ativar a opção de usar assinaturas digitais, clique em Escolher arquivo e selecione o arquivo de certificado salesforce.crt baixado anteriormente.

    Esse certificado serve como a chave pública usada para autenticar e conectar o cliente de SFDX em execução em uma sessão do Cloud Shell à organização Dev Hub do Salesforce.

  6. Clique nos seguintes escopos do OAuth para adicioná-los aos Escopos do OAuth selecionados e, em seguida, clique na seta Adicionar para selecioná-los:

    • Acessar e gerenciar seus dados (API)
    • Faça solicitações em seu nome a qualquer momento (refresh_token, offline_access)
    • Fornecer acesso aos dados pela Web (Web)

      Escopos do OAuth selecionados no painel de controle do Salesforce.

  7. Clique em Salvar.

  8. Anote o token do cliente exibido.

  9. Clique em Gerenciar e, em seguida, em Editar políticas para alterar as políticas do OAuth.

  10. Defina Usuários permitidos como Os usuários aprovados pelo administrador são pré-autorizados e confirme.

  11. Defina o relaxamento de IP como Relaxar restrições de IP.

  12. Clique em Salvar.

  13. Clique em Gerenciar perfis e adicione o perfil Administrador do sistema.

    Isso permite aos usuários que adotam esse perfil fazer login na CLI do SFDX.

  14. Clique em Salvar.

Concluir as etapas de autorização da CLI do Salesforce

  1. No Cloud Shell, crie uma variável de ambiente para manter o token do cliente criado pelo Connected App na etapa anterior:

    export CONSUMER_KEY=your-consumer-key
    

    Substitua your-consumer-key pelo token do cliente.

  2. Crie uma variável de ambiente para manter o nome de usuário da organização do Salesforce criada anteriormente neste tutorial:

    export SALESFORCE_USERNAME=your-salesforce-username
    

    Substitua your-salesforce-username pelo seu nome de usuário do Salesforce.

  3. No Cloud Shell, autentique-se na sua organização do Salesforce com uma concessão JWT:

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

    Será exibida uma mensagem indicando que a autorização foi concedida.

    Para mais informações sobre como autorizar sua organização usando o fluxo baseado em JWT, consulte Autorizar uma organização usando o fluxo baseado em JWT na documentação do Salesforce.

Enviar os metadados do Salesforce para uma organização de rascunho

  1. No Cloud Shell, acesse o diretório do repositório clonado:

    cd salesforce-cloudfunc-integration
    
  2. Crie uma organização de rascunho para testar o repositório clonado para este tutorial.

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

    Recomenda-se usar uma organização de rascunho para essa finalidade, que fornece um espaço seguro para testar novos pacotes e repositórios clonados.

  3. Acesse o subdiretório salesforce:

    cd salesforce
    
  4. Envie os metadados e o código para a organização de rascunho:

    sfdx force:source:push
    
  5. Gere um URL para a organização de rascunho:

    sfdx force:org:open
    
  6. Clique no URL gerado para acessar a organização de rascunho no seu navegador.

Criar um arquivo de keystore JKS com a chave P12 exportada

Os certificados e pares de chaves do Salesforce são usados para a comunicação SSL autenticada entre o serviço do Salesforce e os sites e servidores externos. O serviço do Salesforce precisa armazenar com segurança a chave P12 da conta de serviço do Google Cloud gerada anteriormente neste tutorial. As chaves no serviço do Salesforce precisam ser armazenadas no formato JKS (Java KeyStore).

  1. No Cloud Shell, adicione a chave P12 a um arquivo de keystore JKS chamado salesforce.jks no diretório principal:

    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. No Cloud Shell, clique em Mais e em Fazer o download do arquivo.

  3. Na caixa Caminho do arquivo totalmente qualificado, insira o seguinte nome de arquivo e clique em Fazer o download:

    salesforce.jks
    

    Com isso, é feito o download do keystore gerado no seu computador local.

Importar o arquivo JKS para a organização de rascunho do Salesforce

Conclua as etapas, então, para ativar o provedor de identidade do Salesforce.com e fazer upload da chave JKS.

  1. Em Configuração em sua organização do Salesforce, na caixa Pesquisa rápida, insira Identity e clique em Provedor de identidade para acessar a página de configuração do Provedor de identidade.

    Como acessar a página de configuração do provedor de identidade no painel do Salesforce.

  2. Clique em Ativar provedor de identidade e, em seguida, em Salvar para aceitar o certificado.

  3. Em Configuração, na caixa Pesquisa rápida, insira Certificate e selecione Gerenciamento de certificados e chaves.

    Como acessar a página de gerenciamento de chaves e certificação no painel do Salesforce.

  4. Clique em Importar do Keystore.

  5. Clique em Escolher arquivo e selecione o arquivo JKS baixado anteriormente.

  6. Na caixa Senha do Keystore, digite notasecret.

  7. Clique em Salvar.

  8. Verifique se o rótulo do certificado é chamado de google_cloud. O rótulo é importante uma vez que esse nome é usado pela classe Apex na referência ao certificado.

Criar registros de objeto do tipo metadados personalizados

O envio do repositório através da CLI do Salesforce cria um objeto de tipo de metadado personalizado para você. É necessário preencher os detalhes nesse objeto criando um registro, conforme indicado nesta seção. O registro é referenciado na classe Apex e usado para mapear metadados relevantes na Função do Cloud chamada a partir do serviço do Salesforce.

  1. Em Configuração na organização de rascunho do Salesforce, na caixa Pesquisa rápida, insira Custom metadata e selecione Tipos de metadados personalizados.

    Será exibido um tipo de metadados personalizados chamado Chave da GCP.

  2. Ao lado de Chave da GCP, clique em Gerenciar registros.

  3. Clique em Novo para criar um novo registro e, em seguida, insira:

    1. Rótulo. Insira GCP Function Invoker.
    2. E-mail do cliente. Insira o endereço da conta de serviço criada no seguinte formato:

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

      Substitua project-id pelo código do projeto do Cloud para este tutorial.

    3. Endpoint do segmento da função. Insira o URL do endpoint httpsTrigger da Função do Cloud:

      https://us-central1-project-id.cloudfunctions.net/secureFunction
      
    4. Endpoint do token. Insira https://www.googleapis.com/oauth2/v4/token

      Como configurar o endpoint do token no painel do Salesforce.

  4. Clique em Salvar.

Criar uma configuração de site remoto na organização de rascunho do Salesforce

Adicione uma Configuração de site remoto para fazer chamadas do Apex à Função do Cloud do Google Cloud e aos endpoints do token da organização de rascunho do Salesforce.

  1. Em Configuração em sua organização do Salesforce, na caixa Pesquisa rápida, insira Remote e selecione Configurações de site remoto.
  2. Clique em Novo site remoto.
  3. Em Nome do site remoto, insira GCPCloudFunction.
  4. Em URL do site remoto, insira o endpoint httpsTrigger da Função do Cloud:

    https://us-central1-project-id.cloudfunctions.net/secureFunction
    
  5. Clique em Salvar.

  6. Crie outra configuração de site remoto clicando em Novo site remoto.

  7. Em Nome do site remoto, insira GCPToken.

  8. Em URL do site remoto, insira https://www.googleapis.com.

    Como definir o nome e o URL do site remoto no painel do Salesforce.

  9. Clique em Salvar.

Como testar a Função do Cloud

Para testar a Função do Cloud, execute dois testes:

  • Acione o serviço do Salesforce para invocar a Função do Cloud usando um token válido.
  • Invoque a Função do Cloud do Google Cloud sem nenhum token. Isso confirma que a Função do Cloud não pode ser chamada, a menos que você esteja autenticado.

Invocar a Função do Cloud a partir do serviço do Salesforce usando um token de ID válido

  1. Na organização do Salesforce, clique no ícone do Acesso rápido aos apps.

    Como iniciar o Acesso rápido aos apps no painel do Salesforce.

  2. Na barra de pesquisa, pesquise Accounts.

  3. Nos resultados, clique em Contas.

  4. Clique em Nova para criar uma nova conta.

  5. Em Nome, insira Conta de teste.

  6. Clique em Salvar.

    A criação da conta aciona a classe Apex, que invoca a Função do Cloud secureFunction.

Verificar se a Função do Cloud foi invocada

Você confirma que o registro foi recebido com sucesso pela Função do Cloud analisando os registros do Cloud Logging.

  • No Cloud Shell, visualize os registros gerados pela Função do Cloud secureFunction:

    gcloud functions logs read secureFunction
    

    Se a Função do Cloud foi invocada, será exibido o nome do cliente Test Account criado no serviço do Salesforce nos registros.

Invocar a Função do Cloud sem nenhum token

Agora é possível verificar se apenas usuários autenticados e autorizados podem acessar a Função do Cloud.

  1. Faça uma solicitação não autenticada para a Função do Cloud:

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

    A resposta é um código de status HTTP 403 Forbidden que confirma que o acesso foi negado:

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

Limpeza

A maneira mais fácil de eliminar o faturamento é excluir o projeto criado para o tutorial.

Exclua o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos do Salesforce

Além disso, é necessário excluir a organização da Edição para desenvolvedor do Salesforce e a organização de rascunho associada criada para este tutorial.

Desativar a organização da Edição para desenvolvedor

  1. Em "Configuração" na organização do Salesforce (Dev Hub), na caixa Pesquisa rápida, insira Company e selecione Informações da empresa.
  2. Clique em Informações da empresa.
  3. Clique no botão Desativar organização.

    O botão &quot;Desativar organização&quot; na página de configuração do Salesforce.

Excluir a organização de rascunho

  • No Cloud Shell, execute o seguinte comando para excluir a organização de rascunho do Salesforce:

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

A seguir