Tokenização de dados confidenciais do titular do cartão para PCI DSS

Last reviewed 2025-04-28 UTC

Este documento mostra como configurar um serviço de tokenização de cartão de crédito e débito controlado por acesso no Cloud Run functions. Para configurar o serviço, a implantação neste documento usa estes Google Cloud serviços: Identity and Access Management (IAM) e Cloud Key Management Service (KMS).

A tokenização é o processo de substituir um valor benigno de marcador, ou token, por informações confidenciais, como dados de cartão de crédito. A parte 3 do Padrão de Segurança de Dados do Setor de Cartões de Pagamento (PCI DSS, na sigla em inglês) exige que a maioria dos dados armazenados em um cartão de crédito seja tratada como informações confidenciais.

Um token em si não faz sentido, exceto como um meio de pesquisar dados tokenizados em um contexto específico. No entanto, você ainda precisa garantir que seus tokens não contenham nenhuma informação específica do usuário e que eles não sejam diretamente decodificáveis. Dessa forma, se você perder o controle sobre os tokens de cartão de pagamento de seus clientes, ninguém poderá usar os tokens para comprometer os dados do titular do cartão.

Um serviço para lidar com informações confidenciais

Você tem muitas opções para a plataforma ou o serviço hospedar seu ambiente de dados do titular do cartão (CDE, na sigla em inglês). Este documento orienta você em uma implantação de amostra usando o Cloud Run functions e ajuda nos próximos passos em direção a uma solução pronta para produção.

O Cloud Run functions é uma plataforma sem servidor que hospeda e executa código, além de ser um local conveniente para iniciar rapidamente um aplicativo que é escalonável sem intervenção. Lembre-se de que, em um CDE compatível com PCI DSS, você precisa limitar todo o tráfego de entrada e saída para conexões autorizadas. No momento, esses controles refinados não estão disponíveis para o Cloud Run functions. Portanto, é preciso implementar controles de compensação em outro lugar (como em seu aplicativo) ou escolher uma plataforma diferente. O mesmo serviço de tokenização pode ser executado de forma a conteinerizada, como um escalonamento automático grupo gerenciado de instâncias ou um cluster do Kubernetes. Esses seriam ambientes de produção preferíveis com seus controles de rede VPC completos.

O Cloud KMS é Google Cloudo serviço de gerenciamento de chaves do Google Cloud. O Cloud KMS hospeda as chaves de criptografia, roteia-as regularmente, e criptografa ou descriptografa os dados da conta armazenados.

O IAM é usado neste documento para fornecer controles rígidos sobre todos os recursos usados no serviço de tokenização. Você precisa de uma conta de serviço especial com tokens que expiram com frequência para conceder acesso ao Cloud KMS e para executar o tokenizador.

A figura a seguir ilustra a arquitetura do aplicativo de tokenização que você cria neste documento.

arquitetura de aplicativo de tokenização

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, você vai usar os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso, use a calculadora de preços.

Novos usuários do Google Cloud podem estar qualificados para um teste sem custo financeiro.

Antes de começar

  1. Verifique se você tem o papel do IAM de criador de projetos (roles/resourcemanager.projectCreator). Saiba como conceder papéis.
  2. No Google Cloud console do, acesse a página Seletor de Projetos.

    Acessar o seletor de projetos

  3. Clique em Criar projeto.

  4. Escolha o nome do projeto. Anote o ID do projeto gerado.

  5. Edite os outros campos conforme necessário.

  6. Clique em Criar.

  7. Verifique se o faturamento está ativado para o Google Cloud projeto.

  8. Ative as APIs do Cloud Build, do Cloud Run functions e do Cloud KMS.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar as APIs

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpar.

Criar a conta de serviço

A conta de serviço do ambiente de execução padrão do Cloud Run functions tem o papel de editor, que permite acesso amplo a muitos Google Cloud serviços. Embora essa seja a maneira mais rápida de desenvolver funções, o Google recomenda usar a conta de serviço padrão somente para teste e desenvolvimento. Você cria uma conta de serviço para limitar as APIs que a função pode usar de acordo com o princípio de privilégio mínimo. Para criar uma conta de serviço, faça o seguinte:

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

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

  2. Selecione o projeto.

  3. Clique em Criar conta de serviço.

  4. No campo Nome da conta de serviço, insira Tokenization Service User. O Google Cloud console do Cloud preenche o campo ID da conta de serviço com base nesse nome.

  5. Opcional: preencha o campo Descrição da conta de serviço.

  6. Clique em Criar e continuar.

  7. Clique em Selecionar um papel e selecione Criptografador/Descriptografador do Cloud KMS CryptoKey.

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

    Agora você tem um usuário da conta de serviço com o endereço de e-mail a seguir:

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

Configurar o Cloud KMS

  1. No Google Cloud console do, abra o Gerenciamento de chaves.

    Acessar a página "Chaves criptográficas"

  2. Clique em + Criar keyring. Na caixa de diálogo exibida, execute as ações a seguir:

    1. Nomeie o keyring como tokenization-service-kr.
    2. Para Localização do keyring, selecione Global. Essa é uma escolha comum que é suficiente para esta implantação de exemplo. No entanto, antes de tomar decisões relacionadas à arquitetura de produção, compreenda as diferenças entre os vários locais do Cloud KMS.
    3. Verifique suas escolhas, porque não é possível excluir ou renomear keyrings depois que eles são criados.
    4. Clique em Criar.

    O sistema cria o keyring e encaminha você para a página de criação de chaves.

  3. Na caixa de diálogo Criar chave, execute as ações a seguir:

    1. Nomeie a chave como cc-tokenization.
    2. Em Finalidade, selecione Symmetric encrypt/decrypt.
    3. Defina o período de rotação como um valor escolhido e clique em Criar.

Criar funções do Cloud Run

Este documento pressupõe que você esteja usando o Cloud Shell. Se você usa um terminal diferente, verifique se tem a versão mais recente da Google Cloud CLI.

  1. No Google Cloud console do, abra o Cloud Shell:

    Acesse o 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 arquivo index.js, que é a fonte de duas funções do Cloud Run diferentes que você criará. Ela também contém o package.json, que informa às funções do Cloud Run quais pacotes devem ser executados.

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

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

    No ambiente de execução do Node.js, é necessário definir 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 criados na seção anterior:

    "location":                "global",
    "key_ring":                "tokenization-service-kr",
    "key_name":                "cc-tokenization"
    
  5. Implante a função de tokenização.

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

    Essa função transforma as informações do cartão de crédito em um token.

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

    TOK_URL="TOK_URL"

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

  7. Implante a função de detokenizaçã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=.
    

    Essa função reverte o processo de tokenização.

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

    DETOK_URL="DETOK_URL"

    Use a variável de ambiente DETOK_URL para chamar a função de detokenização.

    Você criou duas funções do Cloud Run separadas: uma para transformar o número do cartão em um token e outra para reverter o processo. Os diferentes pontos de entrada direcionam a execução para a função inicial apropriada no arquivo index.js.

  9. Quando as funções forem implantadas, abra o console do Cloud Run functions.

    Abrir o console do Cloud Run functions

  10. Verifique se as funções foram criadas. Se tudo correr bem, você verá suas duas funções com uma marca de seleção ao lado de cada uma.

Criar 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 precisa apresentar um token de autenticação para declarar a identidade do autor da chamada. O autor da chamada precisa ter a permissão cloudfunctions.functions.invoke. Os seguintes papéis predefinidos têm essa permissão: invocador do Cloud Functions, administrador do Cloud Functions e desenvolvedor do Cloud Functions.

  • Crie o token de autenticação:

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

Esses comandos geram uma string de token de autenticação, armazenam-na na variável de ambiente $AUTH_TOKEN e exibem o token. Posteriormente, você chamará o Cloud Run functions implantado com o token.

Chamar o tokenizador

  1. Crie alguns dados de amostra para passar para o 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 seção anterior e 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
    

    A string de tokenização que representa os dados do cartão de crédito é exibida. Essa string foi armazenada na variável de ambiente CC_TOK. É possível recuperar as informações do cartão invocando o detokenizador.

  3. Reverta a tokenização com o comando a seguir.

    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"
    

    A saída tem uma aparência semelhante à seguinte:

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

    Esses dados foram originalmente enviados para o tokenizador, descriptografados e recuperados pelo seu aplicativo.

Expandir neste exemplo

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

Se você optar por usar o Cloud Run functions para a tokenização do cartão de pagamento, talvez seja necessário trabalhar mais para satisfazer seu assessor de segurança qualificado ou o questionário de autoavaliação. Especificamente, as seções 1.2 e 1.3 do PCI DSS exigem controles rígidos sobre o tráfego de entrada e de saída. O Cloud Run functions e o Google App Engine não oferecem um firewall configurável de duas vias, portanto, é preciso criar controles de compensação ou implantar o serviço de tokenização no Compute Engine ou no Google Kubernetes Engine. Se você quiser explorar a contentorização, o código do GitHub é compatível com o Docker e contém documentação de suporte.

Esse exemplo de código também extrai as dependências do npm (gerenciador de pacotes Node.js) na implantação. Em seu ambiente de produção, sempre fixe as dependências em versões específicas selecionadas. Em seguida, agrupe essas versões com o próprio aplicativo ou exiba-as em um local particular e de confiança. Qualquer abordagem ajuda a evitar a inatividade resultante de uma indisponibilidade no repositório npm público ou de um ataque à cadeia de suprimentos que infecta pacotes que eram considerados seguros. Se você pré-criar e agrupar o aplicativo completo, seu tempo de implantação normalmente diminuirá, o que significa lançamentos mais rápidos e escalonamento mais suave.

Limpar

Para evitar cobranças na sua Google Cloud conta do pelos recursos usados nesta implantação de exemplo, exclua o projeto que contém os recursos.

  1. No Google Cloud console, 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 Desligar para excluir o projeto.

A seguir