Vista geral da segurança das apps

ID da região

O REGION_ID é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após fevereiro de 2020, REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criadas antes desta data, o ID da região é opcional no URL.

Saiba mais acerca dos IDs de regiões.

A segurança é uma funcionalidade essencial do Google Cloud, mas ainda existem passos que deve dar para proteger a sua app do App Engine e identificar vulnerabilidades.

Use as seguintes funcionalidades para garantir que a sua app do App Engine está segura. Para saber mais acerca do modelo de segurança da Google e dos passos disponíveis que pode seguir para proteger os seus Google Cloud projetos, consulte Segurança da Google Cloud Platform.

Pedidos HTTPS

Use pedidos HTTPS para aceder à sua app do App Engine de forma segura. Consoante a forma como a sua app está configurada, tem as seguintes opções:

appspot.com domínios
  • Use o prefixo do URL https para enviar um pedido HTTPS para o serviço do seu projeto, por exemplo:default Google Cloud
    https://PROJECT_ID.REGION_ID.r.appspot.com
  • Para segmentar recursos específicos na sua app do App Engine, use a sintaxe -dot- para separar cada recurso que quer segmentar, por exemplo:
    https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

  • Para converter um URL HTTP num URL HTTPS, substitua os pontos entre cada recurso por -dot-, por exemplo:
    http://SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com
    https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com

Para mais informações sobre URLs HTTPS e recursos de segmentação, consulte o artigo Como os pedidos são encaminhados.

Domínios personalizados

Para enviar pedidos HTTPS com o seu domínio personalizado, pode usar os certificados SSL geridos aprovisionados pelo App Engine. Para mais informações, consulte o artigo Proteger domínios personalizados com SSL.

Controladores de apps

Para forçar o HTTPS para os controladores da sua app, pode especificar o elemento secure: always para cada controlador no seu app.yaml, por exemplo:

handlers:
- url: /.*
  script: auto
  secure: always
  redirect_http_response_code: 301

A utilização de secure: always redireciona todo o tráfego HTTP para um URL HTTPS com o mesmo caminho. Consulte a referência de configuração app.yaml para mais informações.

Controlo de acesso

Em cada Google Cloud projeto, configure o controlo de acesso para determinar quem pode aceder aos serviços no projeto, incluindo o App Engine. Pode atribuir funções diferentes a contas diferentes para garantir que cada conta tem apenas as autorizações necessárias para suportar a sua app. Para obter detalhes, consulte o artigo Configurar o controlo de acesso.

Firewall do App Engine

A firewall do App Engine permite-lhe controlar o acesso à sua app do App Engine através de um conjunto de regras que podem permitir ou recusar pedidos dos intervalos especificados de endereços IP. Não lhe é faturado o tráfego nem a largura de banda bloqueados pela firewall. Crie uma firewall para:

Permitir apenas tráfego de uma rede específica
Certifique-se de que apenas um determinado intervalo de endereços IP de redes específicas pode aceder à sua app. Por exemplo, crie regras para permitir apenas o intervalo de endereços IP da rede privada da sua empresa durante a fase de testes da app. Em seguida, pode criar e modificar as regras da firewall para controlar o âmbito do acesso ao longo do processo de lançamento, permitindo que apenas determinadas organizações, quer dentro da sua empresa ou externamente, acedam à sua app à medida que se torna disponível publicamente.
Permita apenas tráfego de um serviço específico
Certifique-se de que todo o tráfego para a sua app do App Engine é primeiro encaminhado através de proxy através de um serviço específico. Por exemplo, se usar um firewall de app Web (WAF) de terceiros para encaminhar pedidos dirigidos à sua app, pode criar regras de firewall para recusar todos os pedidos, exceto os que são encaminhados a partir do seu WAF.
Bloqueie endereços IP abusivos
Embora Google Cloud tenha muitos mecanismos implementados para evitar ataques, pode usar a firewall do App Engine para bloquear o tráfego para a sua app a partir de endereços IP que apresentem intenções maliciosas ou proteger a sua app contra ataques de negação de serviço e formas semelhantes de abuso. Pode adicionar endereços IP ou sub-redes a uma lista de exclusão, para que os pedidos encaminhados a partir desses endereços e sub-redes sejam recusados antes de chegarem à sua app do App Engine.

Para ver detalhes sobre a criação de regras e a configuração da firewall, consulte o artigo Controlar o acesso a apps com firewalls.

Controlos de entrada

Esta secção descreve como usar as definições de entrada para restringir o acesso à rede à sua app do App Engine. Ao nível da rede, por predefinição, qualquer recurso na Internet pode aceder à sua app do App Engine no respetivo URL appspot ou num domínio personalizado configurado no App Engine. Por exemplo, o URL appspot.com pode ter o seguinte formato: SERVICE_ID.PROJECT_ID.REGION_ID.r.appspot.com.

Pode alterar esta definição predefinida especificando uma definição diferente para a entrada. Todos os caminhos de entrada, incluindo o URL appspot.com predefinido, estão sujeitos à sua definição de entrada. A entrada é definida ao nível do serviço.

Definições de entrada disponíveis

Estão disponíveis as seguintes definições:

Definição Descrição
Internos Mais restritiva. Permite pedidos de recursos anexados às redes VPC do projeto, como:
Os pedidos destas origens permanecem na rede Google, mesmo que acedam ao seu serviço no URL appspot.com. Os pedidos de outras origens, incluindo a Internet, não podem aceder ao seu serviço no URL appspot.com ou nos domínios personalizados. Não existe suporte para multi-tenancy, ou seja, vários domínios de confiança no mesmo projeto.
Interno e Cloud Load Balancing Permite pedidos dos seguintes recursos:
  • Recursos permitidos pela definição interna mais restritiva
  • Balanceador de carga de aplicações externo
Use a definição de balanceamento de carga interno e na nuvem para aceitar pedidos de um balanceador de carga de aplicações externo, mas não diretamente da Internet. Os pedidos para o URL appspot.com ignoram o Application Load Balancer externo, pelo que esta definição impede que os pedidos externos alcancem o URL appspot.com.
Tudo Menos restritivas. Permite todos os pedidos, incluindo pedidos diretamente da Internet para o URL appspot.com.

Aceder a serviços internos

Aplicam-se as seguintes considerações:

  • Para pedidos de uma VPC partilhada, o tráfego só é considerado interno se a app do App Engine for implementada no projeto anfitrião da VPC partilhada. Se a app do App Engine for implementada num projeto de serviço de VPC partilhada, apenas o tráfego de redes pertencentes ao próprio projeto da app é interno. Todo o outro tráfego, incluindo o tráfego de outras VPCs partilhadas, é externo.

  • Quando acede a serviços internos, chame-os como faria normalmente através dos respetivos URLs públicos, quer seja o URL appspot.com predefinido ou um domínio personalizado configurado no App Engine.

  • Para pedidos de instâncias de VMs do Compute Engine ou outros recursos em execução numa rede VPC no mesmo projeto, não é necessária nenhuma configuração adicional.

  • Para pedidos de outros serviços do App Engine ou de funções do Cloud Run ou do Cloud Run no mesmo projeto, ligue o serviço ou a função a uma rede da VPC e encaminhe toda a saída através do conetor, conforme descrito no artigo Ligar a uma rede da VPC partilhada.

  • Os pedidos de recursos em redes VPC no mesmo projeto são classificados como internos, mesmo que o recurso de origem tenha um endereço IP público.

  • Os pedidos de recursos no local ligados à rede VPC através da VPN do Google Cloud são considerados internal.

Veja as definições de carregamento

Consola

  1. Aceda à página App Engine Services.

    Aceda à página Serviços

  2. Localize a coluna Ingress. Para cada serviço, o valor nesta coluna mostra a definição de entrada como Tudo (predefinição), Interno + Equilíbrio de carga ou Interno.

gcloud

Para ver a definição de entrada de um serviço através da CLI gcloud:

gcloud app services describe SERVICE

Substitua SERVICE pelo nome do seu serviço.

Por exemplo, para ver as definições de entrada e outras informações para a execução do serviço predefinido:

gcloud app services describe default

Edite as definições de entrada

Consola

  1. Aceda à página App Engine Services.

    Aceda à página Serviços

  2. Selecione o serviço que quer editar.

  3. Clique em Editar definição de entrada.

  4. Selecione a definição de entrada pretendida no menu e clique em Guardar.

gcloud

Para atualizar a definição de entrada para um serviço através da CLI gcloud:

gcloud app services update SERVICE --ingress=INGRESS

Substituição:

  • SERVICE: o nome do seu serviço.
  • INGRESS: o controlo de entrada que quer aplicar. Uma das seguintes opções: all, internal-only ou internal-and-cloud-load-balancing.

Por exemplo:

  • Para atualizar o serviço predefinido de uma app do App Engine para aceitar tráfego apenas do Cloud Load Balancing e das redes VPC que estão no mesmo projeto:

    gcloud app services update default --ingress=internal-and-cloud-load-balancing
  • Para atualizar um serviço denominado "internal-requests" para aceitar tráfego apenas de redes VPC que estejam no mesmo projeto:

    gcloud app services update internal-requests --ingress=internal-only

Definições de saída

Se usar o Acesso a VPC sem servidor, pode especificar a definição de saída para o seu serviço do App Engine.

Por predefinição, apenas os pedidos a endereços IP internos e nomes DNS internos são encaminhados através de um conetor de acesso a VPC sem servidor. Pode especificar a definição de saída para o seu serviço no ficheiro app.yaml.

As definições de saída não são compatíveis com o serviço URL Fetch. Se ainda não o fez, desative a predefinição de obtenção de URL usando sockets e interrompa qualquer utilização explícita do pacote urlfetch. A utilização da biblioteca urlfetch ignora as definições de saída e os pedidos não são encaminhados através de um conetor do Acesso a VPC sem servidor.

Para configurar o comportamento de saída do seu serviço do App Engine:

  1. Adicione o atributo egress_setting ao campo vpc_access_connector do ficheiro app.yaml do serviço:

    vpc_access_connector:
      name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
      egress_setting: EGRESS_SETTING

    Substituição:

    • PROJECT_ID com o seu Google Cloud ID do projeto
    • REGION com a região em que o conector se encontra
    • CONNECTOR_NAME com o nome do conetor
    • EGRESS_SETTING com uma das seguintes opções:
      • private-ranges-only Predefinição. Apenas os pedidos aos intervalos de endereços IP RFC 1918 e RFC 6598 ou aos nomes DNS internos são encaminhados para a sua rede VPC. Todos os outros pedidos são encaminhados diretamente para a Internet.
      • all-traffic Todos os pedidos de saída do seu serviço são encaminhados para a sua rede VPC. Os pedidos ficam sujeitos às regras de firewall, DNS e encaminhamento da sua rede VPC. Tenha em atenção que o encaminhamento de todos os pedidos de saída para a sua rede VPC aumenta a quantidade de saída processada pelo conetor do Acesso a VPC sem servidor e pode incorrer em custos.
  2. Implemente o serviço:

    gcloud app deploy
    

Análise de segurança

O Google Cloud Web Security Scanner descobre vulnerabilidades ao rastrear a sua app do App Engine, seguindo todos os links no âmbito dos seus URLs de início e tentando exercer o maior número possível de entradas do utilizador e processadores de eventos.

Para usar o verificador de segurança, tem de ser proprietário do Google Cloud projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Configurar o controlo de acesso.

Pode executar análises de segurança a partir da Google Cloud consola para identificar vulnerabilidades de segurança na sua app do App Engine. Para obter detalhes sobre a execução do Security Scanner, consulte o artigo Usar o Web Security Scanner.