Neste tutorial, mostramos como configurar um serviço de tokenização de cartão de crédito e débito controlado por acesso no Cloud Functions. Para configurar o serviço, o artigo usa estes serviços do Google Cloud: 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). Neste tutorial, você receberá orientações sobre o processo de implantação de uma amostra usando o Cloud Functions e os próximos passos em direção a uma solução pronta para produção.
O Cloud 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 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 contentorizada, como um grupo de instâncias gerenciadas de escalonamento automático ou um cluster do Kubernetes. Esses seriam ambientes de produção preferíveis com seus controles de rede VPC completos.
O Cloud KMS é o serviço de gerenciamento de chave 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 tutorial 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 tutorial.
Objetivos
- Crie uma conta de serviço
- Configure o Cloud KMS.
- Crie duas Funções do Cloud.
- Crie um token de autenticação.
- Chame o tokenizador.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
-
No console do Google Cloud, acesse a página do seletor de projetos.
-
Para começar a criar um projeto do Google Cloud, clique em Criar projeto.
-
Escolha o nome do projeto. Anote o código do projeto gerado.
-
Edite os outros campos conforme necessário.
-
Para criar o projeto, clique em Criar.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Build, Cloud Functions, and Cloud KMS.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Criar a conta de serviço
A conta de serviço do ambiente de execução padrão do Cloud Functions tem o papel de editor, que permite acesso amplo a muitos serviços do Google Cloud. 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 do menor privilégio. Para criar uma conta de serviço, faça o seguinte:
No Console do Google Cloud, acesse a página Contas de serviço.
Selecione o projeto.
Clique em
Criar conta de serviço.No campo Nome da conta de serviço, insira
Tokenization Service User
. O Console do Google Cloud preenche o campo ID da conta de serviço com base nesse nome.Opcional: preencha o campo Descrição da conta de serviço.
Clique em Criar e continuar.
Clique em Selecionar um papel e selecione Criptografador/Descriptografador do Cloud KMS CryptoKey.
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
No Console do Google Cloud, abra o Gerenciamento de chaves.
Clique em **+ Criar keyring **. Na caixa de diálogo exibida, faça o seguinte:
- Nomeie o keyring como
tokenization-service-kr
. - Para Localização do keyring, selecione Global. Essa é uma escolha comum que é suficiente para este tutorial. No entanto, antes de tomar decisões relacionadas à arquitetura de produção, compreenda as diferenças entre os vários locais do Cloud KMS.
- Verifique cuidadosamente suas opções porque não é possível excluir ou renomear os keyrings depois de criá-los.
Clique em Criar
O sistema cria o keyring e encaminha você para a página de criação de chaves.
- Nomeie o keyring como
Na caixa de diálogo Criar chave, execute as ações a seguir:
- Nomeie a chave como
cc-tokenization
. - Em Finalidade, selecione
Symmetric encrypt/decrypt
. Defina o período de rotação como um valor escolhido e clique em Criar.
- Nomeie a chave como
Criar Cloud Functions
Este tutorial pressupõe que você estará usando o Cloud Shell. Se você usa um terminal diferente, verifique se tem a versão mais recente da Google Cloud CLI.
No Console do Google Cloud, abra o Cloud Shell:
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 arquivoindex.js
, que é a fonte de duas Funções do Cloud diferentes que você criará. Ela também contém opackage.json
, que informa às Funções do Cloud quais pacotes devem ser executados.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 ID do projeto do Google Cloud:
"project_id": "YOUR_PROJECT_ID"
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"
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.
Procure o valor do URL em
httpsTrigger
na saída do comandogcloud functions deploy
. Armazene o valor do URL na variável de ambienteTOK_URL
:TOK_URL="TOK_URL"
Use a variável de ambiente
TOK_URL
para chamar a funçãotokenize
.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.
Procure o valor do URL em
httpsTrigger
na saída do comandogcloud functions deploy
. Armazene o valor do URL na variável de ambienteDETOK_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 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
.Quando as funções forem implantadas, abra o console do Cloud Functions.
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 Functions implantado com o token.
Chamar o tokenizador
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
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.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 tutorial
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 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 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 código de amostra 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 confiável. 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.
Limpeza
Para limpar os recursos individuais usados neste tutorial, exclua o projeto.
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
A seguir
- Conformidade com o padrão de segurança de dados do PCI.
- Como usar o OAuth 2.0 para acessar as APIs do Google.
- Requisitos do PCI DSS.
- Suplemento de informações de tokenização do PCI DSS.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.