Implemente uma arquitetura sem servidor segura com as funções do Cloud Run

Last reviewed 2023-08-06 UTC

As arquiteturas sem servidor permitem-lhe desenvolver software e serviços sem aprovisionar nem manter servidores. Pode usar arquiteturas sem servidor para criar aplicações para uma vasta gama de serviços.

Este documento fornece orientações fundamentadas para engenheiros de DevOps, arquitetos de segurança e programadores de aplicações sobre como ajudar a proteger aplicações sem servidor que usam funções do Cloud Run (2.ª geração). O documento faz parte de um projeto de segurança que consiste no seguinte:

  • Um repositório do GitHub que contém um conjunto de configurações e scripts do Terraform.
  • Um guia para a arquitetura, a conceção e os controlos de segurança que implementa com o esquema (este documento).

Embora possa implementar este plano sem implementar primeiro o Google Cloud plano de bases empresariais, este documento pressupõe que já configurou um conjunto básico de controlos de segurança, conforme descrito no Google Cloud plano de bases empresariais. A arquitetura descrita neste documento ajuda a adicionar controlos adicionais à sua base para ajudar a proteger as aplicações sem servidor.

Para ajudar a definir os principais controlos de segurança relacionados com aplicações sem servidor, a Cloud Security Alliance (CSA) publicou os 12 principais riscos críticos para aplicações sem servidor. Os controlos de segurança usados neste plano foram concebidos para abordar os riscos relevantes para os vários exemplos de utilização descritos neste documento.

Exemplos de utilização sem servidor

O plano detalhado suporta os seguintes exemplos de utilização:

As diferenças entre as funções do Cloud Run e o Cloud Run incluem o seguinte:

  • As funções do Cloud Run são acionadas por eventos, como alterações aos dados numa base de dados ou a receção de uma mensagem de um sistema de mensagens, como o Pub/Sub. O Cloud Run é acionado por pedidos, como pedidos HTTP.
  • As funções do Cloud Run estão limitadas a um conjunto de runtimes suportados. Pode usar o Cloud Run com qualquer linguagem de programação.
  • As funções do Cloud Run gerem contentores e a infraestrutura que controlam o servidor Web ou o tempo de execução da linguagem para que se possa focar no seu código. O Cloud Run oferece-lhe a flexibilidade de executar estes serviços para que tenha controlo da configuração do contentor.

Para mais informações sobre as diferenças entre o Cloud Run e as funções do Cloud Run, consulte o artigo Escolher uma opção de Google Cloud computação.

Arquitetura

Este esquema usa uma arquitetura de VPC partilhada, na qual as funções do Cloud Run são implementadas num projeto de serviço e podem aceder a recursos localizados noutras redes VPC.

O diagrama seguinte mostra uma arquitetura de alto nível, que é descrita mais detalhadamente nas arquiteturas de exemplo que se seguem.

A arquitetura para o esquema sem servidor que usa funções do Cloud Run.

A arquitetura apresentada no diagrama anterior usa uma combinação dos seguintes Google Cloud serviços e funcionalidades:

  • As funções do Cloud Run permitem-lhe executar funções como um serviço e gerem a infraestrutura em seu nome. Por predefinição, esta arquitetura implementa funções do Cloud Run apenas com um endereço IP interno e sem acesso à Internet pública.
  • O evento de acionamento é o evento que aciona as funções do Cloud Run. Conforme descrito mais detalhadamente nas arquiteturas de exemplo, isto pode ser um evento do Cloud Storage, um intervalo agendado ou uma alteração no BigQuery.
  • O Artifact Registry armazena os contentores de origem da sua aplicação de funções do Cloud Run.
  • A VPC partilhada permite-lhe ligar um conetor do Acesso a VPC sem servidor no projeto de serviço ao projeto anfitrião. Implementa uma rede de VPC partilhada separada para cada ambiente (produção, não produção e desenvolvimento). Esta estrutura de rede oferece isolamento de rede entre os diferentes ambientes. Uma rede de VPC partilhada permite-lhe gerir centralmente os recursos de rede numa rede comum, ao mesmo tempo que delega responsabilidades administrativas para o projeto de serviço.
  • O conetor do Acesso a VPC sem servidor liga a sua aplicação sem servidor à sua rede VPC através do Acesso a VPC sem servidor. O Acesso a VPC sem servidor ajuda a garantir que os pedidos da sua aplicação sem servidor para a rede VPC não são expostos à Internet. O acesso a VPC sem servidor permite que as funções do Cloud Run comuniquem com outros serviços, sistemas de armazenamento e recursos que suportam os VPC Service Controls.

    Pode configurar o Acesso a VPC sem servidor no projeto anfitrião da VPC partilhada ou num projeto de serviço. Por predefinição, este esquema implementa o acesso a VPC sem servidor no projeto anfitrião da VPC partilhada para se alinhar com o modelo de VPC partilhada de centralização dos recursos de configuração de rede. Para mais informações, consulte o artigo Comparação de métodos de configuração.

  • Os VPC Service Controls criam um perímetro de segurança que isola os serviços e os recursos das funções do Cloud Run através da configuração da autorização, dos controlos de acesso e da troca de dados segura. Este perímetro foi concebido para isolar a sua aplicação e serviços geridos através da configuração de controlos de acesso e monitorização adicionais, e para separar a sua governação do Google Cloud da aplicação. A sua governação inclui a gestão de chaves e o registo.

  • O serviço de consumo é a aplicação sobre a qual as funções do Cloud Run atuam. O serviço de consumo pode ser um servidor interno ou outro serviço, como o Cloud SQL. Google Cloud Consoante o seu exemplo de utilização, este serviço pode estar atrás da firewall de nova geração do Google Cloud, noutra sub-rede, no mesmo projeto de serviço que as funções do Cloud Run ou noutro projeto de serviço.

  • O Secure Web Proxy foi concebido para proteger o tráfego Web de saída, se necessário. Permite políticas flexíveis e detalhadas com base em identidades na nuvem e aplicações Web. Este projeto usa o proxy Web seguro para políticas de acesso detalhadas ao tráfego Web de saída durante a fase de criação das funções do Cloud Run. O projeto adiciona uma lista de URLs permitidos à regra da política de segurança do gateway.

  • O Cloud NAT fornece uma ligação de saída à Internet, se necessário. O Cloud NAT suporta a tradução de endereços de rede de origem (SNAT) para recursos de computação sem endereços IP públicos. Os pacotes de resposta de entrada usam a tradução de endereços de rede de destino (DNAT). Pode desativar o Cloud NAT se as funções do Cloud Run não precisarem de acesso à Internet. O Cloud NAT implementa a política de rede de saída anexada ao proxy Web seguro.

  • O Cloud Key Management Service (Cloud KMS) armazena as chaves de encriptação geridas pelo cliente (CMEKs) usadas pelos serviços neste projeto, incluindo a sua aplicação sem servidor, o Artifact Registry e as funções do Cloud Run.

  • O Secret Manager armazena os segredos das funções do Cloud Run. O esquema monta segredos como um volume para oferecer um nível de segurança mais elevado do que a transmissão de segredos como variáveis de ambiente.

  • A gestão de identidade e de acesso (IAM) e o Resource Manager ajudam a restringir o acesso e a isolar recursos. Os controlos de acesso e a hierarquia de recursos seguem o princípio do menor privilégio.

  • O Cloud Logging recolhe todos os registos dos Google Cloud serviços para armazenamento e obtenção pelas suas ferramentas de análise e investigação.

  • O Cloud Monitoring recolhe e armazena informações de desempenho e métricas sobre os Google Cloud serviços.

Exemplo de arquitetura com uma aplicação sem servidor que usa o Cloud Storage

O diagrama seguinte mostra como pode executar uma aplicação sem servidor que acede a um servidor interno quando ocorre um evento específico no Cloud Storage.

Exemplo de arquitetura sem servidor com o Cloud Storage.

Além dos serviços descritos na secção Arquitetura, esta arquitetura de exemplo usa uma combinação dos seguintes serviços e funcionalidades: Google Cloud

  • O Cloud Storage emite um evento quando qualquer recurso na nuvem, aplicação ou utilizador cria um objeto Web num contentor.
  • O Eventarc encaminha eventos de diferentes recursos. O Eventarc encripta eventos em trânsito e em repouso.
  • O Pub/Sub coloca em fila os eventos que são usados como entrada e acionador para as funções do Cloud Run.
  • As regras de firewall da nuvem privada virtual (VPC) controlam o fluxo de dados para a sub-rede que aloja os seus recursos, como um servidor interno.
  • O servidor interno é executado no Compute Engine ou no Google Kubernetes Engine e aloja a sua aplicação interna. Se implementar as funções do Cloud Run seguras com o exemplo de servidor interno, implementa um servidor Apache com uma página HTML Hello World. Este exemplo simula o acesso a uma aplicação interna que executa VMs ou contentores.

Exemplo de arquitetura com o Cloud SQL

O diagrama seguinte mostra como pode executar uma aplicação sem servidor que acede a um serviço alojado do Cloud SQL a um intervalo regular que é definido no Cloud Scheduler. Pode usar esta arquitetura quando tiver de recolher registos, agregar dados, etc.

Exemplo de arquitetura sem servidor com o Cloud SQL.

Além dos serviços descritos na secção Arquitetura, esta arquitetura de exemplo usa uma combinação dos seguintes serviços e funcionalidades: Google Cloud

Arquitetura de exemplo com o armazém de dados do BigQuery

O diagrama seguinte mostra como pode executar uma aplicação sem servidor que é acionada quando ocorre um evento no BigQuery (por exemplo, quando são adicionados dados ou é criada uma tabela).

Exemplo de arquitetura sem servidor com o BigQuery.

Além dos serviços descritos na secção Arquitetura, esta arquitetura de exemplo usa uma combinação dos seguintes serviços e funcionalidades: Google Cloud

Estrutura da organização

O Resource Manager permite-lhe agrupar logicamente os recursos por projeto, pasta e organização.

O diagrama seguinte mostra uma hierarquia de recursos com pastas que representam diferentes ambientes, como bootstrap, common, production, non-production (ou testes) e desenvolvimento. Esta hierarquia de recursos baseia-se na hierarquia descrita no projeto de bases empresariais. Implementa os projetos especificados no esquema nas seguintes pastas: Common, Production, Non-production e Dev.

A estrutura da organização para o projeto sem servidor.

As secções seguintes descrevem este diagrama mais detalhadamente.

Pastas

Usa pastas para isolar o ambiente de produção e os serviços de administração dos ambientes de não produção e de testes. A tabela seguinte descreve as pastas do esquema de bases empresariais que são usadas por este esquema.

Pasta Descrição
Bootstrap Contém os recursos necessários para implementar o projeto das bases empresariais.
Common Contém serviços centralizados para a organização, como o projeto de segurança.
Production Contém projetos com recursos na nuvem que foram testados e estão prontos a ser usados pelos clientes. Neste esquema, a pasta Production contém o projeto de serviço e o projeto de anfitrião.
Non-production Contém projetos com recursos na nuvem que estão atualmente a ser testados e preparados para lançamento. Neste plano, a pasta Non-production contém o projeto de serviço e o projeto de anfitrião.
Development Contém projetos com recursos na nuvem que estão atualmente em desenvolvimento. Neste plano, a pasta Development contém o projeto de serviço e o projeto anfitrião.

Pode alterar os nomes destas pastas para se alinharem com a estrutura de pastas da sua organização, mas recomendamos que mantenha uma estrutura semelhante. Para mais informações, consulte o artigo Estrutura da organização. Para outras estruturas de pastas, consulte o artigo Decida uma hierarquia de recursos para a sua Google Cloud zona de destino.

Projetos

Isola os recursos no seu ambiente através de projetos. A tabela seguinte descreve os projetos necessários na organização. Pode alterar os nomes destes projetos, mas recomendamos que mantenha uma estrutura de projeto semelhante.

Projeto Descrição
Projeto anfitrião da VPC partilhada

Este projeto inclui as regras de entrada de firewall e todos os recursos que tenham endereços IP internos (conforme descrito em Estabeleça ligação a uma rede VPC). Quando usa a VPC partilhada, designa um projeto como projeto anfitrião e anexa-lhe um ou mais projetos de serviço.

Quando aplica o código do Terraform, especifica o nome deste projeto e o esquema implementa o conetor de acesso à VPC sem servidor, o Cloud NAT e o Cloud Secure Web Proxy.

Projeto de serviço da VPC partilhada

Este projeto inclui a sua aplicação sem servidor, as funções do Cloud Run e o conetor do Acesso a VPC sem servidor. Associa o projeto de serviço ao projeto anfitrião para que o projeto de serviço possa participar na rede VPC partilhada.

Quando aplica o código do Terraform, especifica o nome deste projeto. O projeto implementa funções e serviços do Cloud Run necessários para o seu exemplo de utilização, como o Cloud SQL, o Cloud Scheduler, o Cloud Storage ou o BigQuery.

Quando aplica o código Terraform, especifica o nome deste projeto e o esquema implementa o Cloud KMS. Se usar o módulo Secure Serverless Harness no esquema sem servidor para funções do Cloud Run, o Artifact Registry também é implementado.

Projeto de segurança

Este projeto inclui os seus serviços específicos de segurança, como o Cloud KMS e o Secret Manager.

O nome predefinido do projeto de segurança é prj-bu1-p-sec. Se implementar este plano após implementar o plano de bases de segurança, o projeto de segurança é criado além do projeto de segredos do plano de bases empresariais (prj-bu1-p-env-secrets). Para mais informações sobre os projetos do plano de bases empresariais, consulte Projetos.

Se implementar várias instâncias deste projeto detalhado sem o projeto detalhado de bases empresariais, cada instância tem o seu próprio projeto de segurança.

Mapeamento de funções e grupos para projetos

Tem de conceder a diferentes grupos de utilizadores na sua organização acesso aos projetos que compõem a arquitetura sem servidor. A tabela seguinte descreve as recomendações de plano para grupos de utilizadores e atribuições de funções nos projetos que criar. Pode personalizar os grupos para corresponderem à estrutura existente da sua organização, mas recomendamos que mantenha uma segregação de funções e atribuição de funções semelhante.

Grupo Projeto Funções
Administrador sem servidor
grp-gcp-serverless-admin@example.com
Projeto de serviço
Administrador de segurança sem servidor
grp-gcp-serverless-security-admin@example.com
Projeto de segurança
Programador de funções do Cloud Run
grp-gcp-secure-cloud-run-developer@example.com
Projeto de segurança
Utilizador das funções do Cloud Run
grp-gcp-secure-cloud-run-user@example.com
Projeto de serviço da VPC partilhada

Controlos de segurança

Esta secção aborda os controlos de segurança no Google Cloud que usa para ajudar a proteger a sua arquitetura sem servidor. Os principais princípios de segurança a ter em consideração são os seguintes:

  • Acesso seguro de acordo com o princípio do menor privilégio, concedendo aos principais apenas os privilégios necessários para realizar tarefas.
  • Ligações de rede seguras através da conceção de limites de confiança, que inclui segmentação de rede, políticas da organização e políticas de firewall.
  • Configuração segura para cada um dos serviços.
  • Identifique os requisitos regulamentares ou de conformidade para a infraestrutura que aloja cargas de trabalho sem servidor e atribua um nível de risco.
  • Configure uma monitorização e um registo suficientes para suportar as pistas de auditoria para as operações de segurança e a gestão de incidentes.

Controlos do sistema de compilação

Quando implementa a sua aplicação sem servidor, usa o Artifact Registry para armazenar as imagens de contentores e os ficheiros binários. O Artifact Registry suporta CMEK para que possa encriptar o repositório com as suas próprias chaves de encriptação.

Regras de rede e de firewall

As regras de firewall da nuvem virtual privada (VPC) controlam o fluxo de dados para os perímetros. Cria regras de firewall que negam todas as saídas, exceto para ligações específicas da porta TCP 443 de nomes de domínio especiais restricted.googleapis.com. A utilização do domínio restricted.googleapis.com tem as seguintes vantagens:

  • Ajuda a reduzir a superfície de ataque da sua rede através do acesso privado à Google quando as cargas de trabalho comunicam com as APIs Google e os serviços Google.
  • Garante que usa apenas serviços que suportam os VPC Service Controls.

Além disso, cria um registo DNS para resolver *.googleapis.com para restricted.googleapis.com.

Para mais informações, consulte o artigo Configurar o acesso privado à Google.

Controlos de perímetro

Conforme mostrado na secção Arquitetura, coloca os recursos da aplicação sem servidor num perímetro de segurança dos VPC Service Controls separado. Este perímetro ajuda a reduzir o impacto generalizado de uma violação de sistemas ou serviços. No entanto, este perímetro de segurança não se aplica ao processo de compilação de funções do Cloud Run quando o Cloud Build compila automaticamente o seu código numa imagem de contentor e envia essa imagem para o Artifact Registry. Neste cenário, crie uma regra de entrada para a conta de serviço do Cloud Build no perímetro de serviço.

Política de acesso

Para ajudar a garantir que apenas determinados responsáveis (utilizadores ou serviços) podem aceder a recursos e dados, ative os grupos e as funções da IAM.

Para ajudar a garantir que apenas recursos específicos podem aceder aos seus projetos, ative uma política de acesso para a sua organização Google. Para mais informações, consulte o artigo Atributos do nível de acesso.

Contas de serviço e controlos de acesso

As contas de serviço são contas para aplicações ou cargas de trabalho de computação em vez de para utilizadores finais individuais. Para implementar o princípio do menor privilégio e o princípio da separação de funções, crie contas de serviço com autorizações detalhadas e acesso limitado aos recursos. As contas de serviço são as seguintes:

Gestão de chaves

Para validar a integridade e ajudar a proteger os seus dados em repouso, usa CMEKs com o Artifact Registry, as funções do Cloud Run, o Cloud Storage e o Eventarc. As CMEKs oferecem-lhe um maior controlo sobre a sua chave de encriptação. São usadas as seguintes CMEKs:

  • Uma chave de software para o Artifact Registry que atesta o código da sua aplicação sem servidor.
  • Uma chave de encriptação para encriptar as imagens de contentores que as funções do Cloud Run implementam.
  • Uma chave de encriptação para eventos do Eventarc que encripta o canal de mensagens em repouso.
  • Uma chave de encriptação para ajudar a proteger os dados no Cloud Storage.

Quando aplica a configuração do Terraform, especifica a localização da CMEK, que determina a localização geográfica onde as chaves são armazenadas. Tem de se certificar de que as CMEKs estão na mesma região que os seus recursos. Por predefinição, as CMEKs são rodadas a cada 30 dias.

Gestão de segredos

As funções do Cloud Run suportam o Secret Manager para armazenar os segredos que a sua aplicação sem servidor pode exigir. Estes segredos podem incluir chaves de API e nomes de utilizadores e palavras-passe de bases de dados. Para expor o segredo como um volume montado, use as variáveis de objeto service_configs no módulo principal.

Quando implementar este esquema com o esquema de bases empresariais, tem de adicionar os seus segredos ao projeto de segredos antes de aplicar o código do Terraform. O projeto vai conceder a função de avaliador de segredos do Secret Manager (roles/secretmanager.secretAccessor) à conta de serviço das funções do Cloud Run. Para mais informações, consulte o artigo Usar segredos.

Políticas da organização

Este projeto adiciona restrições às restrições da política da organização que o projeto de bases empresariais usa. Para mais informações acerca das restrições usadas no esquema detalhado das bases empresariais, consulte as restrições da política da organização.

A tabela seguinte descreve as restrições adicionais da política da organização definidas no módulo Segurança das funções do Cloud Run seguro deste projeto.

Restrição de política Descrição Valor recomendado
Definições de entrada permitidas (Funções do Cloud Run) constraints/cloudfunctions.allowedIngressSettings

Permitir tráfego de entrada apenas de serviços internos ou do balanceador de carga HTTP(S) externo.

A predefinição é ALLOW_ALL.

ALLOW_INTERNAL_ONLY
Exigir conetor de VPC (funções do Cloud Run) constraints/cloudfunctions.requireVPCConnector

Exigir a especificação de um conetor do Acesso a VPC sem servidor quando implementar uma função. Quando esta restrição é aplicada, as funções têm de especificar um conetor do Acesso a VPC sem servidor.

A predefinição é false.

true
Definições de saída do conetor de VPC permitidas (funções do Cloud Run) cloudfunctions.allowedVpcConnectorEgressSettings

Exigir que todo o tráfego de saída das funções do Cloud Run use um conetor do Acesso a VPC sem servidor.

A predefinição é PRIVATE_RANGES_ONLY.

ALL_TRAFFIC

Controlos operacionais

Pode ativar o registo e as funcionalidades do nível premium do Security Command Center, como as estatísticas de estado de segurança e a deteção de ameaças. Estes controlos ajudam a fazer o seguinte:

  • Monitorize o acesso aos dados.
  • Certifique-se de que a auditoria adequada está implementada.
  • Apoiar as operações de segurança e as capacidades de gestão de incidentes da sua organização.

Registo

Para ajudar a cumprir os requisitos de auditoria e obter estatísticas sobre os seus projetos, pode configurar o Google Cloud Observability com registos de dados para os serviços que quer acompanhar. Implemente o Cloud Logging nos projetos antes de aplicar o código Terraform para garantir que o esquema pode configurar o registo para a firewall, o equilibrador de carga e a rede VPC.

Depois de implementar o esquema, recomendamos que configure o seguinte:

Para todos os serviços nos projetos, certifique-se de que os seus registos incluem informações sobre gravações de dados e acesso administrativo. Para mais informações sobre as práticas recomendadas de registo, consulte o artigo Controlos de deteção.

Monitorização e alertas

Depois de implementar o esquema, pode configurar alertas para notificar o seu centro de operações de segurança (SOC) de que ocorreu um evento de segurança. Por exemplo, pode usar alertas para informar os seus analistas de segurança quando uma autorização foi alterada numa função do IAM. Para mais informações sobre a configuração de alertas do Security Command Center, consulte o artigo Configurar notificações de deteção.

O painel de controlo de monitorização das funções do Cloud Run ajuda a monitorizar o desempenho e o estado das suas funções do Cloud Run. Oferece uma variedade de métricas e registos que pode usar para identificar e resolver problemas. O painel de controlo também inclui várias funcionalidades que podem ajudar a melhorar o desempenho das suas funções, como a capacidade de definir alertas e quotas.

Para mais informações, consulte o artigo Monitorizar funções do Cloud Run.

Para exportar alertas, consulte os seguintes documentos:

Depuração e resolução de problemas

Pode executar testes de conetividade para ajudar a depurar problemas de configuração de rede entre as funções do Cloud Run e os recursos na sua sub-rede. Os testes de conetividade simulam o caminho esperado de um pacote e fornecem detalhes sobre a conetividade, incluindo a análise de conetividade de recurso para recurso.

Os testes de conectividade não estão ativados pelo código do Terraform. Tem de os configurar separadamente. Para mais informações, consulte o artigo Crie e execute testes de conetividade.

Modos de implementação do Terraform

A tabela seguinte descreve as formas como pode implementar este projeto, e que módulos do Terraform se aplicam a cada modo de implementação.

Modo de implementação Módulos do Terraform

Implemente este projeto após implementar o projeto de bases empresariais (recomendado).

Esta opção implementa os recursos para este projeto no mesmo perímetro do VPC Service Controls que é usado pelo projeto de bases empresariais. Para mais informações, consulte o artigo Como personalizar a Foundation v3.0.0 para a implementação de funções seguras do Cloud Run.

Esta opção também usa o projeto de segredos que criou quando implementou o esquema de base empresarial.

Use estes módulos do Terraform:

Instale este projeto sem instalar o projeto de bases de segurança.

Esta opção requer que crie um perímetro dos VPC Service Controls.

Use estes módulos do Terraform:

Reunir tudo num só lugar

Para implementar a arquitetura descrita neste documento, faça o seguinte:

  1. Reveja o ficheiro README para o projeto para garantir que cumpre todos os pré-requisitos.
  2. No seu ambiente de teste, para ver o esquema em ação, implemente um dos exemplos. Estes exemplos correspondem aos exemplos de arquitetura descritos em Arquitetura. Como parte do processo de testes, considere fazer o seguinte:
    1. Use o Security Command Center para analisar os projetos em função dos requisitos de conformidade comuns.
    2. Substitua a aplicação de exemplo por uma aplicação real (por exemplo, 1) e execute um cenário de implementação típico.
    3. Trabalhe com as equipas de engenharia e operações de aplicações na sua empresa para testar o respetivo acesso aos projetos e verificar se conseguem interagir com a solução da forma esperada.
  3. Implemente o projeto no seu ambiente.

O que se segue?