Definir as configurações de rede (1ª geração)
Com as configurações de rede do Cloud Run functions, é possível controlar a entrada e a saída de redes de e para funções individuais. Use, por exemplos, as configurações de rede para os seguintes casos de uso:
- Proteja suas funções implementando o controle de acesso com base em rede.
- Faça com que o tráfego de saída da função adote regras de firewall, DNS e roteamento associadas à rede VPC.
- Associe o tráfego de saída da função a um endereço IP estático.
Para mais informações sobre os casos de uso, consulte a seção Exemplos de casos de uso.
Configurações de entrada
As configurações de entrada controlam se os recursos fora do projeto do Google Cloud ou do perímetro de serviço do VPC Service Controls podem invocar uma função.
Para estar sujeito à política de um perímetro do VPC Service Controls, um recurso precisa pertencer ao serviço a ser restrito. Para o Cloud Run functions (1ª geração), o serviço restrito é a API Cloud Functions.
Limitações
As funções internas ativadas por HTTP só podem ser invocadas por solicitações HTTP criadas em uma rede VPC, como as do Kubernetes Engine, do Compute Engine e do ambiente flexível do App Engine, ou feitas por recursos do Cloud Scheduler, do Cloud Tasks, do Workflows ou do BigQuery que estão no mesmo projeto ou perímetro do VPC Service Controls. Isso significa que as solicitações HTTP criadas ou encaminhadas pelo Pub/Sub ou pelo Eventarc não podem acionar essas funções. Os acionadores de eventos são sempre considerados "internos" e são permitidos, independentemente da configuração de entrada.
Definir configurações de entrada
Para restringir recursos de fora do projeto ou perímetro, especifique um dos seguintes valores de configuração de entrada:
- Permitir todo o tráfego: padrão. Todas as solicitações de entrada para a função são permitidas, tanto da Internet como de recursos dentro do mesmo projeto.
Permitir somente o tráfego interno: só é permitido o tráfego do Cloud Scheduler, do Cloud Tasks, do Eventarc, do Workflows, do BigQuery e de redes VPC no mesmo projeto ou perímetro do VPC Service Controls. Todas as outras solicitações são negadas com um erro
404
.Para solicitações de uma VPC compartilhada, observe as seguintes considerações:
- O tráfego será considerado interno se a função for implantada no projeto host da VPC compartilhada.
- O tráfego é considerado interno se o host da VPC compartilhada e todos os projetos de serviço forem colocados dentro do mesmo perímetro do VPC Service Controls.
- Todo o restante do tráfego das redes VPC compartilhadas é negado.
Permitir o tráfego interno e o tráfego do Cloud Load Balancing: é permitido o tráfego do Cloud Scheduler, do Cloud Tasks, do Eventarc, de fluxos de trabalho, do BigQuery e de redes VPC no mesmo projeto ou perímetro do VPC Service Controls. É permitido também o tráfego do Cloud Load Balancing.
É possível especificar configurações de entrada ao implantar ou atualizar uma função usando o console do Google Cloud, a Google Cloud CLI ou o Terraform:
Console
Abra a página de visão geral do Functions no console do Google Cloud:
Clique em Criar função. Como alternativa, clique em uma função atual para acessar a página de informações dela e clique em Editar.
Expanda as configurações avançadas clicando em Ambiente de execução, build....
Na seção Conexões, selecione um valor para Configurações de entrada.
gcloud
Use o comando gcloud functions deploy
para implantar ou atualizar a função e especifique a sinalização --ingress-settings
:
gcloud functions deploy FUNCTION_NAME
--trigger-http
--ingress-settings INGRESS_SETTINGS
FLAGS...
em que:
FUNCTION_NAME
é o nome da função.INGRESS_SETTINGS
é um dos valores aceitos para configurações de entrada. Os valores possíveis são:all
internal-only
internal-and-gclb
: permite o tráfego interno e o tráfego enviado para um IP público exposto pelo Cloud Load Balancing. Bloqueia o tráfego enviado paracloudfunctions.net
ou qualquer domínio personalizado configurado no Cloud Run functions. Impede que os usuários burlem controles de acesso (Cloud Armor, IAP) configurados por meio do Cloud Load Balancing.
FLAGS...
refere-se a outras sinalizações passadas para o comandodeploy
.
Terraform
Opcional. Para atualizar o campo de configurações de entrada do arquivo main.tf
do
recurso do Terraform, inclua o argumento ingress_settings
que
você quer implantar. ou atualizar. Fazer alterações nas configurações de entrada recria a função.
No arquivo
main.tf
, localize o recurso de que você quer restringir as configurações de entrada e atualize-o para a configuração desejada, por exemplo:resource "google_cloudfunctions_function" "function" { name = "function" location = "us-central1" description = "Sample function" ingress_settings = "INGRESS_SETTINGS" }
em que INGRESS_SETTINGS é um dos valores aceitos para as configurações de entrada. Os valores possíveis são:
ALLOW_ALL
(padrão): todas as solicitações de entrada para a função são permitidas, tanto da Internet como de recursos dentro do mesmo projeto.ALLOW_INTERNAL_ONLY
: só é permitido o tráfego do Cloud Scheduler, do Cloud Tasks, do Eventarc, do Workflows e de redes VPC no mesmo projeto ou perímetro do VPC Service Controls.ALLOW_INTERNAL_AND_GCLB
: permite o tráfego interno e o tráfego enviado para um IP público exposto pelo Cloud Load Balancing. Bloqueia o tráfego enviado paracloudfunctions.net
ou qualquer domínio personalizado configurado no Cloud Run functions. Impede que usuários burlem controles de acesso (Cloud Armor, IAP) configurados no Cloud Load Balancing.
Se você usa o Google Cloud Armor com o Cloud Load Balancing, pode criar políticas de segurança que filtram condições com base no tráfego, como o endereço IP de uma solicitação recebida, o intervalo de IPs, o código de região ou os cabeçalhos de solicitações. Para mais informações, consulte a Visão geral da política de segurança do Google Cloud Armor.
Configuração de saída
As configurações de saída controlam o roteamento de solicitações HTTP de saída das funções. Para especificar as configurações de saída, é necessário conectar a função a uma rede VPC usando um conector de acesso VPC sem servidor. As configurações de saída controlam quando o tráfego é roteado pelo conector na rede VPC.
Limitações
O acesso VPC sem servidor é compatível apenas com o roteamento do tráfego IPv4. O tráfego IPv6 não é aceito, mesmo que você tenha rotas IPv6 na sua rede VPC.
Para aumentar a segurança, o Google Cloud bloqueia os pacotes de saída para endereços IP externos na porta 25 de destino TCP.
As funções ou serviços do usuário que invocam funções ou serviços protegidos por uma rede VPC precisam encaminhar essas invocações por meio de um conector da VPC.
Definir configurações de saída
Para configurações de saída, especifique o seguinte:
Rotear solicitações somente para IPs privados por meio do conector da VPC: padrão. O tráfego será roteado pela rede VPC somente se os pacotes que transportam o tráfego tiverem destinos que correspondam ao seguinte:
Os pacotes são roteados do Cloud Run functions para a Internet, e não por qualquer rede VPC.
Rotear todo o tráfego pelo conector VPC: o tráfego é sempre roteado pela rede VPC associada ao conector, para todos os destinos de pacote. Use essa opção nas seguintes circunstâncias:
- Se você precisar enviar tráfego para intervalos de sub-redes VPC com intervalos de endereços IP externos usados de modo privado. Para mais informações sobre intervalos de sub-rede VPC, consulte Intervalos IPv4 válidos na visão geral de sub-redes.
- Se você precisar enviar tráfego para um endpoint do Private Service Connect para APIs do Google que tenham um endereço IP externo usado de modo particular. Para mais informações sobre endpoints do Private Service Connect para APIs do Google, consulte Acessar APIs do Google por endpoints.
- Se você precisar enviar tráfego para qualquer outro destino de endereço IP externo usado de modo privado e roteável na rede VPC do conector. Exemplos de outros destinos que abrangem endereços IP externos utilizados de modo particular podem incluir intervalos de sub-rede de peering, intervalos de sub-rede de peering criados a partir de intervalos de endereços IP alocados para serviços e esses destinos que podem ser acessados usando rotas personalizadas na rede VPC.
Se a rede VPC incluir uma rota padrão, os pacotes ainda poderão ser roteados para a Internet depois de serem processados pelo conector se você configurar um gateway do Cloud NAT para fornecer serviços NAT à sub-rede usada pelo conector. Esses pacotes estão sujeitos às rotas na sua rede VPC e às regras de firewall que se aplicam à rede VPC. Use a configuração de rota e firewall para controlar a saída da Internet para todas as solicitações de saída enviadas pela função por meio de um conector de acesso VPC sem servidor.
Especifique as configurações de saída ao implantar ou atualizar a função usando o console do Google Cloud ou a Google Cloud CLI:
Console
Abra a página de visão geral do Functions no console do Google Cloud:
Clique em Criar função. Como alternativa, clique em uma função atual para acessar a página de informações dela e clique em Editar.
Expanda as configurações avançadas clicando em Ambiente de execução, build....
Na seção Conexões, em Configurações de saída, selecione um conector de acesso VPC sem servidor.
Selecione a configuração de saída apropriada com base em como você quer rotear o tráfego de saída por meio do conector.
gcloud
Use o comando gcloud functions deploy
para implantar ou atualizar a função e especifique a sinalização --egress-settings
:
gcloud functions deploy FUNCTION_NAME
--vpc-connector CONNECTOR_NAME
--egress-settings EGRESS_SETTINGS
FLAGS...
em que:
FUNCTION_NAME
é o nome da função.CONNECTOR_NAME
é o nome do conector de acesso VPC sem servidor a ser usado. Para mais informações, consulte a documentação dagcloud
.EGRESS_SETTINGS
é um dos valores aceitos para as configurações de saída: consulte a documentação dagcloud
.FLAGS...
refere-se a outras sinalizações passadas para o comandodeploy
.
Exemplos de casos de uso
Os exemplos a seguir demonstram como configurar o acesso à rede em vários cenários comuns.
Como criar uma função que não pode ser chamada por clientes externos
É possível proteger suas funções HTTP permitindo que elas sejam chamadas apenas por recursos no mesmo projeto do Google Cloud ou no perímetro de serviço do VPC Service Controls.
Implemente sua função e permita somente o tráfego interno. Use o Console do Google Cloud ou a Google Cloud CLI:
Console
Abra a página de visão geral do Functions no console do Google Cloud:
Clique em Criar função. Como alternativa, clique em uma função atual para acessar a página de informações dela e clique em Editar.
Expanda as configurações avançadas clicando em Ambiente de execução, build....
Na seção Conexões, em Configurações de entrada, selecione Permitir somente tráfego interno.
gcloud
Use o comando
gcloud functions deploy
:gcloud functions deploy FUNCTION_NAME \ --ingress-settings internal-only \ FLAGS...
Depois de implantar a função, as solicitações originadas de fora do projeto do Google Cloud serão impedidas de acessar a função. Se você usar o VPC Service Controls, as solicitações de fora do perímetro de serviço serão bloqueadas. As instâncias de VM dentro do perímetro de projeto ou serviço ainda podem acessar a função fazendo solicitações para o endpoint HTTPS.
Se quiser usar outra função para chamar essa função restrita, a função de chamada precisa rotear a saída por meio da rede VPC.
Como usar as configurações de saída e entrada para restringir o acesso
É possível incorporar entrada e saída nos serviços para adicionar uma camada adicional de restrição.
Clone o repositório
cloud-run-sample
do GitHub e mude para o diretóriovpc-sample
:git clone https://github.com/GoogleCloudPlatform/cloud-run-samples cd vpc-sample
Instalar dependências do Python
pip3 install -r requirements.txt
É possível abrir o arquivo
main.py
no diretóriovpc-sample
para ver a função que você está implantando:Implante a função:
gcloud functions deploy restricted-function
--runtime=python38
--trigger-http
--no-allow-unauthenticated
--ingress-settings=internal-only
--entry-point=hello_worldConfigure um conector de acesso VPC sem servidor:
gcloud compute networks vpc-access connectors create serverless-connector
--region=SERVICE_REGION
--range=10.8.0.0/28em que
SERVICE_REGION
é uma região do conector. Ela precisa corresponder à região do serviço sem servidor. Se o serviço estiver na regiãous-central
oueurope-west
, useus-central1
oueurope-west1
.Crie a imagem do contêiner:
gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
em que
PROJECT_ID
é o ID do projeto.Isso cria uma imagem de contêiner que invoca
get_hello_world
quando implantada do arquivomain.py
:Use o comando
gcloud run deploy run-function
para implantar o contêiner do Cloud Run:gcloud run deploy run-function
--image gcr.io/PROJECT_ID
/restricted-function-caller
--no-allow-unauthenticated
--update-env-vars=URL=https://SERVICE_REGION
-PROJECT_ID
.cloudfunctions.net/restricted-function-caller
--vpc-egress=all
--vpc-connector=serverless-connector
--region=SERVICE_REGION
em que:
PROJECT_ID
é o ID do projeto.SERVICE_REGION
: uma região para o conector. Ela precisa corresponder à região do serviço sem servidor. Se o serviço estiver na regiãous-central
oueurope-west
, useus-central1
oueurope-west1
.
O serviço
run-function
do Cloud Run agora está definido para enviar uma solicitaçãoGET
do conector VPC para a função restrita à rede.
Como rotear a saída da função pela rede VPC
As redes VPC no Google Cloud podem ter uma variedade de configurações e recursos de rede. Ao rotear o tráfego de saída da função para a rede VPC, você garante que o tráfego de saída do Cloud Run functions siga as regras de firewall, DNS, roteamento e outras da sua rede VPC, bem como pode usar produtos como o Cloud NAT.
Configure uma rede VPC. Configure uma rede VPC atual ou crie uma nova seguindo o guia em Como usar redes VPC.
Configure um conector de acesso VPC sem servidor. As Cloud Run functions precisam de um conector de acesso VPC sem servidor para rotear o tráfego para sua rede VPC. Crie um conector e defina as permissões adequadas seguindo as instruções em Como conectar a uma rede VPC.
Implante uma função que use o conector e roteie todas as saídas pelo conector. Use o Console do Google Cloud ou a ferramenta de linha de comando
gcloud
:Console
Abra a página de visão geral do Functions no console do Google Cloud:
Clique em Criar função. Como alternativa, clique em uma função atual para acessar a página de informações dela e clique em Editar.
Expanda as configurações avançadas clicando em Ambiente de execução, build....
Na seção Conexões, em Configurações de saída, selecione o conector de acesso VPC sem servidor e Rotear todo o tráfego pelo conector de VPC.
gcloud
Use o comando
gcloud functions deploy
:gcloud functions deploy FUNCTION_NAME \ --vpc-connector CONNECTOR_NAME \ --egress-settings all \ FLAGS...
Depois de implantar a função, todo o tráfego proveniente da função é roteado pela rede VPC e segue as regras definidas na rede VPC. Observação: a função não pode acessar a Internet pública, a menos que você configure o Cloud NAT. Observe também que o Cloud NAT precisa mapear todos os intervalos de IP principais e secundários de todas as sub-redes para o gateway NAT, a fim de incluir a sub-rede do conector no mapeamento.
Como vincular a saída da função a um endereço IP estático
Em alguns casos, recomenda-se que o tráfego proveniente da função seja vinculado a um endereço IP estático. Isso é útil, por exemplo, se você chamar um serviço externo em que só é possível fazer solicitações de endereços IP especificados explicitamente.
Roteie a saída da função pela rede VPC. Consulte a seção anterior, Como rotear a saída da função pela rede VPC.
Configure o Cloud NAT e defina um endereço IP estático. Siga as orientações em Especificar intervalos de sub-rede do NAT e Especificar endereço IP do NAT para configurar o Cloud NAT na sub-rede vinculada ao conector de acesso VPC sem servidor da função. Seu Cloud NAT precisa mapear todos os intervalos de IP primário e secundário de todas as sub-redes para o gateway NAT a fim de incluir a sub-rede do conector no mapeamento.
Balanceamento de carga multirregional
É possível implantar uma função em regiões diferentes e permitir que a solicitação seja enviada para a região íntegra mais próxima. Para isso, você precisa configurar um grupo de endpoints de rede (NEG, na sigla em inglês) sem servidor para a função e conectá-lo a um balanceador de carga, conforme descrito em Como configurar um balanceador de carga HTTP(S) com NEGs sem servidor.