Configurar o VPC Service Controls

O VPC Service Controls é um recurso do Google Cloud em que é possível configurar um perímetro seguro para evitar a exfiltração de dados. Neste guia, explicamos como usar o VPC Service Controls com o Cloud Functions para aumentar a segurança das suas funções.

Para limitações dessa integração, consulte a documentação do VPC Service Controls.

Configuração no nível da organização

Para usar o VPC Service Controls com o Cloud Functions, configure um perímetro de serviço no nível da organização. Ao configurar políticas da organização apropriadas, você garante que as verificações do VPC Service Controls sejam aplicadas ao usar o Cloud Functions e que os desenvolvedores só possam implantar serviços compatíveis com o VPC Service Controls. Saiba mais sobre herança e violações ao definir uma política da organização.

Configure um perímetro do VPC Service Controls

Para configurar um perímetro de serviço, é preciso ter os papéis de Visualizador da organização (roles/resourcemanager.organizationViewer) e Editor do Access Context Manager (roles/accesscontextmanager.policyEditor).

Siga o Guia de início rápido do VPC Service Controls para:

  1. criar um perímetro de serviço;

  2. adicionar um ou mais projetos ao perímetro;

  3. Restrinja a API Cloud Functions (1ª geração) ou a API Cloud Functions e a API Cloud Run Admin (2ª geração).

Depois de configurar o perímetro de serviço, todas as chamadas para a API restrita são verificadas para garantir que sejam originadas de dentro do mesmo perímetro.

Opcional: ativar o acesso do perímetro para máquinas de desenvolvimento

Como as verificações do VPC Service Controls são aplicadas à API Cloud Functions, as chamadas à API Cloud Functions resultam em erro, a menos que sejam originadas do perímetro de serviço. Assim, para gerenciar funções com a API Cloud Functions, a IU do Cloud Functions no Console do Google Cloud ou a Google Cloud CLI, escolha uma das seguintes opções:

  • Use uma máquina dentro do perímetro do VPC Service Controls. Por exemplo, use uma VM do Compute Engine ou um computador no local conectado à rede VPC via VPN.

  • Conceda aos desenvolvedores de funções acesso ao perímetro. Por exemplo, crie níveis de acesso que permitam o acesso ao perímetro com base no endereço IP ou na identidade do usuário. Consulte Como conceder acesso a recursos protegidos de fora do perímetro para mais informações.

Configure políticas da organização

Para gerenciar as políticas da organização, é necessário o papel de Administrador da política da organização (roles/orgpolicy.policyAdmin).

Para estar alinhado ao VPC Service Controls e evitar a exfiltração de dados, estabeleça as seguintes políticas da organização que controlam as configurações de rede que podem ser permitidas para o Cloud Functions no perímetro de serviço.

Restrinja configurações de entrada permitidas

A política organizacional cloudfunctions.allowedIngressSettings controla as configurações de entrada que os desenvolvedores podem usar para o Cloud Functions. Configure esta política para exigir que os desenvolvedores usem o valor ALLOW_INTERNAL_ONLY:

Console

  1. Acesse a página Configurações de entrada permitidas da política no Console do Google Cloud:

    Acessar a política da organização

  2. Clique em Gerenciar política.

  3. Na página Editar política, selecione Personalizar.

  4. Em Aplicação da política, selecione Substituir.

  5. Em Valores da política, selecione Personalizada.

  6. Em Tipo de política, selecione Permitir.

  7. Em Valores personalizados, digite ALLOW_INTERNAL_ONLY.

  8. Clique em Definir política.

gcloud

Use o comando gcloud resource-manager org-policies allow:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \
  --organization ORGANIZATION_ID

ORGANIZATION_ID é o ID da organização.

Assim que essa política da organização estiver em vigor, todas as funções precisarão usar o valor ALLOW_INTERNAL_ONLY nas configurações de entrada. Isso significa que as funções HTTP só podem aceitar tráfego proveniente de uma rede VPC dentro do perímetro de serviço. As implantações de função que especificam um valor diferente não funcionarão.

Exigir conector VPC

A política da organização cloudfunctions.requireVPCConnector controla se um conector de acesso VPC sem servidor é necessário para as funções. Defina a política da organização para aplicar essa restrição:

Console

  1. Acesse a página Exigir conector VPC da política no Console do Google Cloud:

    Acessar a política da organização

  2. Clique em Gerenciar política.

  3. Na página Editar política, selecione Personalizar.

  4. Em Aplicação, selecione Ativada.

  5. Clique em Definir política.

gcloud

Use o comando gcloud resource-manager org-policies enable-enforce:

gcloud resource-manager org-policies enable-enforce \
  cloudfunctions.requireVPCConnector \
  --organization ORGANIZATION_ID

ORGANIZATION_ID é o ID da organização.

Assim que essa política da organização estiver em vigor, todas as funções deverão usar um conector de acesso VPC sem servidor. As implantações de função que não especificam um conector não vão funcionar.

Restringir as configurações de saída do conector VPC permitidas

A política organizacional cloudfunctions.allowedVpcConnectorEgressSettings controla as configurações de saída que os desenvolvedores têm permissão para usar no Cloud Functions. Defina a política da organização para permitir apenas o valor ALL_TRAFFIC:

Console

  1. Acesse a página Configurações de saída do Conector VPC permitidas da política no Console do Google Cloud:

    Acessar a política da organização

  2. Clique em Gerenciar política.

  3. Na página Editar política, selecione Personalizar.

  4. Em Aplicação da política, selecione Substituir.

  5. Em Valores da política, selecione Personalizada.

  6. Em Tipo de política, selecione Permitir.

  7. Em Valores personalizados, digite ALL_TRAFFIC.

  8. Clique em Definir política.

gcloud

Use o comando gcloud resource-manager org-policies allow:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \
  --organization ORGANIZATION_ID

ORGANIZATION_ID é o ID da organização.

Assim que essa política da organização estiver em vigor, todas as funções deverão usar o valor ALL_TRAFFIC para as configurações de saída. Isso significa que as funções precisam rotear todo o tráfego de saída pela rede VPC. As implantações de função que especificam um valor diferente não funcionarão.

Combinado com a política da organização cloudfunctions.requireVPCConnector, isso força todo o tráfego de saída a atravessar a rede VPC em que está sujeito às regras de firewall e roteamento configuradas.

Configuração no nível do projeto

Para projetos individuais no perímetro de serviço, realize outras configurações para usar o VPC Service Controls.

Configurar redes VPC

Para acessar as APIs e os serviços do Google e, ao mesmo tempo, reduzir os riscos de exfiltração de dados, as solicitações precisam ser enviadas para o intervalo de IP virtual (VIP, na sigla em inglês) restrito, 199.36.153.4/30 (restricted.googleapis.com).

Para cada rede VPC de um projeto, siga estas etapas para bloquear o tráfego de saída, exceto o tráfego para o intervalo VIP restrito:

  1. Configure as regras de firewall para impedir que os dados saiam da rede VPC:

    • Crie uma regra de saída de negação que bloqueie todo o tráfego de saída.

    • Crie uma regra de saída de permissão em que seja possível rotear o tráfego para 199.36.153.4/30 na porta 443 do TCP. Confira se ele tem uma prioridade antes da regra de saída de negação criada. Isso permite a saída somente para o intervalo VIP restrito.

  2. Configure o DNS para resolver *.googleapis.com em restricted.googleapis.com.

  3. Configure o DNS com um mapeamento de registro A *.cloudfunctions.net no intervalo de IP 199.36.153.4/30. Faça isso com o Cloud DNS:

    gcloud dns managed-zones create ZONE_NAME \
    --visibility=private \
    --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \
    --description=none \
    --dns-name=cloudfunctions.net
    
    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=ZONE_NAME \
    --ttl=300
    
    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
  4. Ative o Acesso privado do Google para a sub-rede do conector de VPC.

Nesta etapa, as solicitações provenientes da rede VPC:

  • não podem sair da rede VPC, impedindo a saída fora do perímetro de serviço;
  • só podem alcançar APIs e serviços do Google que verificam o VPC Service Controls, evitando a exfiltração pelas APIs do Google.

Conceder à conta de serviço do Cloud Build acesso ao perímetro do VPC Service Controls

O Cloud Functions usa o Cloud Build para criar o código-fonte em um contêiner executável. Para usar o Cloud Functions com o VPC Service Controls, você precisa configurar sua conta de serviço do Cloud Build (seja padrão ou personalizada) para ter acesso ao perímetro de serviço.

Encontrar o nome da conta de serviço

Se você estiver usando a conta de serviço padrão do Cloud Build, encontre o nome dela da seguinte maneira:

  1. Use a página do IAM no console do Google Cloud para encontrar a conta de serviço do Cloud Build.

    Abrir o IAM

  2. Verifique se o projeto correto aparece na lista suspensa.

  3. Pesquisar por cloudbuild.gserviceaccount.com. O endereço de e-mail no formulário PROJECT_NUMBER@cloudbuild.gserviceaccount.com é o nome da conta de serviço.

Se você tiver uma conta de serviço personalizada do Cloud Build, use esse nome.

Conceder à conta de serviço acesso ao perímetro de serviço

Depois de descobrir o nome da conta de serviço, siga o guia em Limitar o acesso por usuário ou conta de serviço para criar um nível de acesso para a conta de serviço. Consulte Como adicionar um nível de acesso a um perímetro atual para incluir o nível de acesso no perímetro de serviço.

Implante funções que sigam o VPC Service Controls

Assim que o VPC Service Controls estiver configurado para o Cloud Functions, confira se todas as funções implantadas no perímetro de serviço obedecem às políticas da organização especificadas. Isso significa que:

  • Todas as funções precisam usar um conector acesso VPC sem servidor. Consulte Como se conectar a uma rede VCP para mais informações.
  • Todas as funções precisam permitir somente o tráfego de fontes internas. Consulte Configurações de entrada para mais informações.
  • Todas as funções precisam rotear todo o tráfego de saída pela rede VPC. Consulte Configurações de saída para mais informações.

As implantações de funções que não atenderem a esses critérios vão falhar.

Inspecione as funções atuais para garantir a conformidade com o VPC Service Controls

Depois de configurar o VPC Service Controls, as funções novas criadas em projetos dentro do perímetro de serviço são automaticamente verificadas para fins de conformidade. No entanto, para evitar a interrupção das cargas de trabalho em andamento, as funções atuais continuam funcionando e podem não estar em conformidade com as políticas da organização.

Recomenda-se inspecionar as funções atuais e atualizar ou implantar novamente as funções, conforme necessário. Para facilitar esse processo, crie um script que use a API Cloud Functions para listar as funções e destacar as que não especificam as configurações de rede adequadas.

Como usar o VPC Service Controls com funções fora de um perímetro

As seções precedente se aplicam ao cenário em que você implanta o Cloud Functions em um perímetro de serviço do VPC Service Controls.

Se você precisar implantar uma função fora de um perímetro de serviço, mas a função exigir acesso a recursos dentro de um perímetro, use a seguinte configuração:

  1. Conceder à conta de serviço do Cloud Build acesso ao perímetro do VPC Service Controls
  2. Conceda à conta de serviço do ambiente de execução a função para o perímetro. Para isso, você pode: criar um nível de acesso e adicionar o nível de acesso ao perímetro de serviço; ou criar uma política de entrada no perímetro.
  3. Conecte a função a uma rede VPC.
  4. Encaminhe todo o tráfego de saída da função pela rede VPC. Consulte Configurações de saída para mais informações.

Depois de concluir essa configuração, a função poderá alcançar os recursos protegidos pelo perímetro.