Converter em tokens dados confidenciais do titular do cartão para a PCI DSS

Last reviewed 2025-04-28 UTC

Este documento mostra como configurar um serviço de tokenização de cartões de crédito e débito controlado por acesso em funções do Cloud Run. Para configurar o serviço, a implementação neste documento usa os seguintes Google Cloud serviços: Identity and Access Management (IAM) e Cloud Key Management Service (KMS).

A tokenização é o processo de substituição de um valor de marcador de posição benigno ou um token por informações confidenciais, como dados de cartões de crédito. A Parte 3 da Norma de Segurança de Dados do Setor de Cartões de Pagamento (PCI DSS) exige que a maioria dos dados armazenados num cartão de crédito seja tratada como informações confidenciais.

Um token por si só não tem significado, exceto como meio de procurar dados tokenizados num contexto específico. No entanto, continua a ter de garantir que os seus tokens não contêm informações específicas do utilizador e que não são diretamente descritografáveis. Desta forma, se perder o controlo sobre os tokens dos cartões de pagamento dos seus clientes, ninguém pode usar os tokens para comprometer os dados dos titulares dos cartões.

Um serviço para processar informações confidenciais

Tem muitas opções para a plataforma ou o serviço que aloja o seu ambiente de dados do titular do cartão (CDE). Este documento explica uma implementação de exemplo com funções do Cloud Run e ajuda nos passos seguintes para uma solução pronta para produção.

O Cloud Run Functions é uma plataforma sem servidor que aloja e executa código. É um local conveniente para iniciar rapidamente uma aplicação que é dimensionada sem intervenção. Tenha em atenção que, num CDE em conformidade com a norma PCI DSS, tem de limitar todo o tráfego de entrada e saída a ligações autorizadas. Atualmente, estes controlos detalhados não estão disponíveis para as funções do Cloud Run. Por conseguinte, tem de implementar controlos de compensação noutro local (como na sua aplicação) ou escolher uma plataforma diferente. O mesmo serviço de tokenização pode ser executado de forma contentorizada, como um grupo de instâncias gerido de escala automática ou um cluster do Kubernetes. Estes seriam ambientes de produção preferíveis com os respetivos controlos completos da rede VPC.

O Cloud KMS é o serviço de gestão de chaves da Google Cloud. O Cloud KMS aloja as suas chaves de encriptação, faz a rotação das mesmas regularmente e encripta ou desencripta os dados da conta armazenados.

O IAM é usado neste documento para fornecer controlos rigorosos em todos os recursos usados no serviço de tokenização. Precisa de uma conta de serviço especial com tokens que expiram frequentemente para conceder acesso ao Cloud KMS e executar o tokenizador.

A figura seguinte ilustra a arquitetura da app de tokenização que cria neste documento.

Arquitetura da app de conversão em tokens

Objetivos

  • Crie uma conta de serviço.
  • Configure o Cloud KMS.
  • Crie duas funções do Cloud Run.
  • Crie um token de autenticação.
  • Chame o tokenizador.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Antes de começar

  1. Ensure that you have the Project Creator IAM role (roles/resourcemanager.projectCreator). Learn how to grant roles.
  2. In the Google Cloud console, go to the project selector page.

    Go to project selector

  3. Click Create project.

  4. Name your project. Make a note of your generated project ID.

  5. Edit the other fields as needed.

  6. Click Create.

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Cloud Build, Cloud Run functions, and Cloud KMS APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Crie a conta de serviço

A conta de serviço de tempo de execução predefinida para as funções do Cloud Run tem a função Editor, que permite um acesso amplo a muitos Google Cloud serviços. Embora seja a forma mais rápida de desenvolver funções, a Google recomenda a utilização da conta de serviço predefinida apenas para testes e desenvolvimento. Cria uma conta de serviço para limitar as APIs que a função pode usar de acordo com o princípio do menor privilégio. Para criar uma conta de serviço, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione o seu projeto.

  3. Clique em Criar conta de serviço.

  4. No campo Nome da conta de serviço, introduza Tokenization Service User. A Google Cloud consola preenche o campo ID da conta de serviço com base neste nome.

  5. Opcional: no campo Descrição da conta de serviço, introduza uma descrição para a conta de serviço.

  6. Clique em Criar e continuar.

  7. Clique em Selecionar uma função e, de seguida, selecione Encriptador/desencriptador de CryptoKey do Cloud KMS.

  8. Para concluir a criação da conta de serviço, clique em Concluído.

    Agora, tem um utilizador de conta de serviço com o seguinte endereço de email:

    tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com

Configure o Cloud KMS

  1. Na Google Cloud consola, abra Gestão de chaves.

    Aceda à página Chaves criptográficas

  2. Clique em + Criar conjunto de chaves. Na caixa de diálogo apresentada, faça o seguinte:

    1. Dê o nome tokenization-service-kr ao conjunto de chaves.
    2. Para Localização do porta-chaves, selecione global. Esta é uma escolha comum que é suficiente para esta implementação de exemplo. No entanto, antes de tomar decisões sobre a arquitetura de produção, certifique-se de que compreende as diferenças entre as várias localizações do Cloud KMS.
    3. Confirme as suas escolhas, porque não pode eliminar nem mudar o nome dos conjuntos de chaves depois de os criar.
    4. Clique em Criar.

    O sistema cria o conjunto de chaves e encaminha-o para a página de criação de chaves.

  3. Na caixa de diálogo Criar chave, faça o seguinte:

    1. Atribua o nome cc-tokenization à chave.
    2. Para Finalidade, selecione Symmetric encrypt/decrypt.
    3. Defina o Período de rotação para um valor à sua escolha e clique em Criar.

Crie funções do Cloud Run

Este documento pressupõe que vai usar o Cloud Shell. Se usar um terminal diferente, certifique-se de que tem a versão mais recente da CLI Google Cloud.

  1. Na Google Cloud consola, abra o Cloud Shell:

    Aceda ao Cloud Shell

  2. Clone o repositório do projeto do GitHub e mova-o para a pasta de trabalho:

    git clone https://github.com/GoogleCloudPlatform/community gcp-community
    cd gcp-community/tutorials/pci-tokenizer/
    

    A pasta gcs-cf-tokenizer contém o ficheiro index.js, que é a origem de duas funções do Cloud Run diferentes que vai criar. Também contém package.json, que indica às funções do Cloud Run que pacotes executar.

  3. Aplique a configuração do KMS: copie o ficheiro do modelo de configuração e abra-o para edição:

    cp config/default.json config/local.json
    nano config/local.json
    

    O tempo de execução do Node.js requer que defina explicitamente o Google Cloud ID do projeto:

    "project_id":              "YOUR_PROJECT_ID"
  4. Encontre a configuração do KMS e aplique os valores do KMS que criou na secção anterior:

    "location":                "global",
    "key_ring":                "tokenization-service-kr",
    "key_name":                "cc-tokenization"
    
  5. Implemente a função tokenize.

    gcloud functions deploy tokenize --runtime=nodejs18 --trigger-http \
        --entry-point=kms_crypto_tokenize --memory=256MB \
        --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \
        --no-allow-unauthenticated --source=.
    

    Esta função transforma as informações do cartão de crédito num token.

  6. Procure o valor do URL em httpsTrigger no resultado do comando gcloud functions deploy. Armazene o valor do URL na variável de ambiente TOK_URL:

    TOK_URL="TOK_URL"

    Vai usar a variável de ambiente TOK_URL para chamar a função tokenize.

  7. Implemente a função de anulação da tokenização no modo KMS.

    gcloud functions deploy detokenize --runtime=nodejs18 --trigger-http \
        --entry-point=kms_crypto_detokenize --memory=256MB \
        --service-account=tokenization-service-user@YOUR_PROJECT_ID.iam.gserviceaccount.com \
        --no-allow-unauthenticated --source=.
    

    Esta função inverte o processo de tokenização.

  8. Procure o valor do URL em httpsTrigger no resultado do comando gcloud functions deploy. Armazene o valor do URL na variável de ambiente DETOK_URL:

    DETOK_URL="DETOK_URL"

    Vai usar a variável de ambiente DETOK_URL para chamar a função detokenize.

    Criou duas funções do Cloud Run separadas: uma para transformar o número do cartão num token e outra para reverter o processo. Os pontos de entrada diferentes direcionam a execução para a função de início adequada no ficheiro index.js.

  9. Quando as funções forem implementadas, abra a consola de funções do Cloud Run.

    Abra a consola de funções do Cloud Run

  10. Verifique se as funções foram criadas. Se tudo correr bem, vê as duas funções com uma marca de verificação junto a cada uma.

Crie um token de autenticação

A opção no-allow-unauthenticated no comando gcloud functions deploy significa que um autor da chamada que invoca as funções tem de apresentar um token de autenticação para afirmar a identidade do autor da chamada. O autor da chamada tem de ter a autorização cloudfunctions.functions.invoke. As seguintes funções predefinidas têm esta autorização: Cloud Functions Invoker, Cloud Functions Admin e Cloud Functions Developer.

  • Crie o token de autenticação:

    AUTH_TOKEN=$(gcloud auth print-identity-token)
    echo $AUTH_TOKEN
    

Estes comandos geram uma string de token de autenticação, armazenam-na na variável de ambiente $AUTH_TOKEN e, em seguida, apresentam o token. Mais tarde, chama as funções do Cloud Run que implementou com o token.

Chame o tokenizador

  1. Crie alguns dados de amostra para transmitir ao tokenizador:

    export TOK_CC=4000300020001000
    export TOK_MM=11
    export TOK_YYYY=2028
    export TOK_UID=543210
    
  2. Gere um token de autenticação conforme descrito na secção anterior e, de seguida, chame o tokenizador:

    CC_TOKEN=$(curl -s \
    -X POST "$TOK_URL" \
    -H "Content-Type:application/json" \
    -H "Authorization: Bearer $AUTH_TOKEN" \
    --data '{"cc": "'$TOK_CC'", "mm": "'$TOK_MM'", "yyyy": "'$TOK_YYYY'", "user_id": "'$TOK_UID'"}' \
    )
    echo $CC_TOKEN
    

    É apresentada a string de tokenização que representa os dados do cartão de crédito. Esta string foi armazenada na variável de ambiente CC_TOK. Pode obter as informações do cartão invocando o processo de anulação da tokenização.

  3. Inverta a tokenização com o seguinte comando.

    DETOK_DATA=$(curl -s \
    -X POST "$DETOK_URL" \
    -H  "Content-Type:application/json" \
    -H "Authorization: Bearer $AUTH_TOKEN" \
    --data '{"user_id": "'$TOK_UID'", "token": "'$CC_TOKEN'"}' \
    )
    echo -e "$DETOK_DATA\n"
    

    O resultado tem um aspeto semelhante ao seguinte:

    {"cc":"4000300020001000","mm":"11","yyyy":"2028","userid":"543210"}
    

    Estes dados são os que foram originalmente enviados para o tokenizador, desencriptados e obtidos pela sua app.

Desenvolva este exemplo

O código de exemplo no GitHub é um excelente ponto de partida, mas há mais aspetos a considerar antes de passar para a produção.

Se optar por usar funções do Cloud Run para a tokenização de cartões de pagamento, pode ter de fazer mais trabalho para satisfazer o seu avaliador de segurança qualificado ou questionário de autoavaliação. Especificamente, as secções 1.2 e 1.3 da PCI DSS requerem controlos rigorosos sobre o tráfego recebido e enviado. As funções do Cloud Run e o App Engine não oferecem uma firewall configurável bidirecional. Por isso, tem de criar controlos compensatórios ou implementar o serviço de tokenização no Compute Engine ou no Google Kubernetes Engine. Se quiser explorar a contentorização, o código do GitHub é compatível com o Docker e contém documentação de apoio técnico.

Este código de exemplo também extrai as dependências do npm (gestor de pacotes do Node.js) na implementação. No seu ambiente de produção, fixe sempre as dependências a versões validadas específicas. Em seguida, agrupe estas versões com a própria app ou disponibilize-as a partir de uma localização privada e fidedigna. Qualquer uma das abordagens ajuda a evitar tempos de inatividade resultantes de uma indisponibilidade no repositório npm público ou de um ataque à cadeia de fornecimento que infeta pacotes que considerava seguros. Se criar previamente e agrupar a app completa, o tempo de implementação diminui normalmente, o que significa lançamentos mais rápidos e uma expansão mais fluida.

Limpar

Para evitar incorrer em custos na sua conta Google Cloud pelos recursos usados neste exemplo de implementação, pode eliminar o projeto que contém os recursos.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

O que se segue?