Acesso seguro a aplicativos da Web particulares

Neste documento, descrevemos como configurar um gateway seguro do Chrome Enterprise Premium para proteger o acesso aos seus aplicativos da Web particulares.

Um gateway seguro do Chrome Enterprise Premium funciona como um proxy de encaminhamento, aplicando uma estrutura de acesso de confiança zero e oferecendo controle granular e baseado no contexto sobre quem acessa seus aplicativos da Web particulares.

Como funciona a proteção do acesso a aplicativos da Web particulares

Ao estabelecer um túnel seguro e aplicar políticas de acesso baseado no contexto, o gateway seguro mantém os aplicativos particulares protegidos e isolados da exposição à Internet pública. Uma configuração de navegador do lado do cliente direciona o tráfego desses aplicativos pelo endpoint de proxy do gateway seguro. Em seguida, o gateway seguro aplica a política de acesso relevante e, se permitido, encaminha a solicitação para o aplicativo de destino.

O gateway seguro pode proteger aplicativos da Web particulares hospedados nos seguintes ambientes:

  • Google Cloud projeto: o gateway seguro pode acessar diretamente aplicativos em execução na sua rede VPC Google Cloud .

  • NãoGoogle Cloud (data centers locais ou outras nuvens): primeiro, estabeleça uma conexão entre sua rede VPC privada noGoogle Cloud e a rede nãoGoogle Cloud . Isso geralmente é feito usando o Cloud VPN ou o Cloud Interconnect. Em seguida, o gateway seguro usa a conexão para enviar o tráfego à rede VPC particular, que o encaminha para o ambiente nãoGoogle Cloud .

Antes de começar

Antes de configurar o gateway seguro, verifique se você tem o seguinte:

Configurar o ambiente shell

Para simplificar o processo de configuração e interagir com as APIs do gateway seguro, defina as seguintes variáveis de ambiente no shell de trabalho.

  • Parameters gerais

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=PROJECT_ID

    Substitua:

    • PROJECT_ID: o ID do projeto em que o gateway seguro é criado.
  • Parâmetros de gateway seguro

    SECURITY_GATEWAY_ID=SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"

    Substitua:

    • SECURITY_GATEWAY_ID: o ID do gateway seguro que você quer criar. O ID pode ter até 63 caracteres e conter letras minúsculas, números e hífens. O primeiro caractere precisa ser uma letra, e o último pode ser uma letra ou um número.
    • SECURITY_GATEWAY_DISPLAY_NAME: o nome legível do gateway seguro. O nome pode ter até 63 caracteres e incluir caracteres imprimíveis.

Criar um gateway seguro

Um gateway seguro do Chrome Enterprise Premium é um bloco de construção fundamental para estabelecer conexões seguras com seus aplicativos.

gcloud

gcloud beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
  --project=${PROJECT_ID} \
  --location=global \
  --display-name="${SECURITY_GATEWAY_DISPLAY_NAME}"
      

REST

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d '{ "display_name": "SECURITY_GATEWAY_DISPLAY_NAME" }' \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
      

Configurar um aplicativo da Web particular

Antes de definir recursos específicos do aplicativo no gateway seguro, você precisa configurar as permissões e as configurações de rede necessárias para ativar a conectividade e o roteamento adequado.

Conceda permissões à conta de serviço

Para enviar tráfego à sua rede VPC, o gateway de segurança precisa de determinadas permissões do IAM concedidas à conta de serviço delegada. Isso permite que o gateway seguro alcance seus aplicativos particulares, hospedados em uma VPC do Google Cloud ou em um ambiente que não é doGoogle Cloud conectado pelo Cloud VPN ou pelo Cloud Interconnect.

  1. Confira os detalhes do seu gateway seguro para identificar o e-mail da conta de serviço delegada. O e-mail está no campo delegatingServiceAccount da resposta.

    gcloud

    gcloud beyondcorp security-gateways describe ${SECURITY_GATEWAY_ID} \
       --project=${PROJECT_ID} \
       --location=global
                   

    REST

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
                   
  2. Defina variáveis de ambiente para a conta de serviço e o projeto de VPC de destino.
    DELEGATING_SERVICE_ACCOUNT="security-gateway@my-gateway-service-account.iam.gserviceaccount.com" # Replace with actual value
          
  3. Conceda o papel do IAM roles/beyondcorp.upstreamAccess à conta de serviço delegada no projeto de VPC particular.
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
       --role=roles/beyondcorp.upstreamAccess \
       --member=serviceAccount:${DELEGATING_SERVICE_ACCOUNT}
        
    Substitua PRIVATE_VPC_PROJECT_ID pelo ID do projeto da rede VPC em que o app da Web particular está implantado ou em que Cloud VPN/Interconnect está configurada.

Aguarde aproximadamente dois minutos para que a política do Identity and Access Management entre em vigor depois de conceder o papel.

Configurar regras de firewall e roteamento de rede

Para permitir que o tráfego do gateway seguro alcance seus aplicativos da Web particulares, configure regras de firewall, roteamento de rede e configurações de DNS.

Regras de firewall para aplicativos em Google Cloud

Se o aplicativo da Web particular estiver hospedado na rede VPC Google Cloud , como em uma VM do Compute Engine, um serviço do Google Kubernetes Engine com um IP interno ou atrás de um balanceador de carga TCP/UDP interno, configure as regras de firewall da VPCGoogle Cloud . Isso permite o tráfego TCP de entrada dos intervalos de IP do gateway seguro: 34.158.8.0/21 e 136.124.16.0/20.

Regras de firewall para aplicativos em ambientes que não sãoGoogle Cloud

Se o aplicativo Web particular estiver em um data center local ou na rede de outro provedor de nuvem e estiver conectado à sua VPC Google Cloudusando o Cloud VPN ou o Cloud Interconnect, configure regras de firewall no firewall local ou nos controles de segurança de rede equivalentes, como grupos de segurança e ACLs de rede, no outro ambiente de nuvem. Isso permite o tráfego TCP de entrada dos intervalos de IP do gateway seguro.

Configurar o roteamento de ambientes que não são doGoogle Cloud para um gateway seguro

Para facilitar a comunicação bidirecional de aplicativos particulares hospedados em ambientes que não são doGoogle Cloud , como locais ou outras nuvens, sua rede externa precisa criar um caminho de retorno para os seguintes intervalos de IP de gateway seguro: 34.158.8.0/21 e 136.124.16.0/20.

Verifique se a rede particular pode acessar os intervalos de IP do gateway seguro pelo Cloud VPN ou Cloud Interconnect:

  • Roteamento dinâmico: se você estiver usando roteamento dinâmico, como o protocolo de gateway de borda (BGP) com o Cloud Router, verifique se o Cloud Router em Google Cloud divulga explicitamente os intervalos de IP do gateway seguro para seu dispositivo BGP local. Embora o BGP troque dinamicamente muitas rotas, os intervalos de IP do gateway seguro exigem divulgação explícita.

  • Roteamento estático: se você estiver usando rotas estáticas, adicione manualmente rotas para cada um dos intervalos de IP do gateway seguro no equipamento da rede local, como roteador ou firewall. Essas rotas estáticas precisam especificar que o tráfego destinado aos intervalos de IP do gateway seguro precisa ser enviado pela conexão do Cloud VPN ou do Cloud Interconnect.

    Ao usar o roteamento estático, o Cloud VPN precisa estar em uma das seguintes regiões compatíveis:

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

Configuração de DNS para resolução de nome do host particular do gateway seguro

Para que o gateway seguro resolva os nomes de host do aplicativo particular, sua rede VPCGoogle Cloud precisa resolver os nomes de host usando o Cloud DNS. A configuração específica do Cloud DNS depende de onde seus registros de DNS particulares estão hospedados de forma autoritativa:

  • Aplicativos em Google Cloud usando zonas particulares do Cloud DNS: se os aplicativos particulares estiverem hospedados em Google Cloud e os registros DNS forem gerenciados em zonas particulares do Cloud DNS associadas à rede VPC, verifique se as zonas estão configuradas e acessíveis corretamente. O gateway seguro usa os recursos de resolução do Cloud DNS da sua VPC.

  • Aplicativos em ambientes que não são doGoogle Cloud ou que usam servidores DNS externos: se os aplicativos particulares estiverem em ambientes que não são doGoogle Cloud(locais ou outras nuvens) ou se os registros DNS deles forem gerenciados por servidores DNS externos às zonas particulares do Cloud DNS da VPC, configure o Cloud DNS para encaminhar consultas desses domínios particulares. Normalmente, isso envolve a criação de zonas de encaminhamento do Cloud DNS na VPC. Essas zonas direcionam consultas DNS para seus domínios particulares especificados aos servidores DNS particulares autoritativos, como locais ou outras nuvens.

Para instruções detalhadas sobre a configuração de DNS, consulte Criar uma zona de encaminhamento.

Criar um recurso de aplicativo

Para dar acesso a um aplicativo da Web particular, é necessário estabelecer o aplicativo na estrutura de gateway seguro criando um recurso de aplicativo. Esse recurso define como o gateway seguro identifica o tráfego do aplicativo (com base no nome do host) e para onde ele é roteado.

  1. Execute o seguinte comando para definir as variáveis de ambiente necessárias:
       APPLICATION_ID=APPLICATION_ID
       APP_DISPLAY_NAME="APP_DISPLAY_NAME"
       HOST_NAME=HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAME
       
    Substitua:
    • APPLICATION_ID: um ID exclusivo para o recurso de aplicativo.
    • APP_DISPLAY_NAME: o nome legível a ser mostrado.
    • HOST_NAME: o nome do host principal que os usuários acessam (por exemplo, private.local).
    • PRIVATE_NETWORK_RESOURCE_NAME: o nome completo do recurso da rede VPC (por exemplo, projects/my-project/global/networks/my-network).
  2. Crie o recurso do aplicativo.

    gcloud

    Execute o comando a seguir para criar o recurso do aplicativo.

    gcloud beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME},ports=[443]" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}"
            

    Para especificar uma região de saída (por exemplo, ao usar rotas estáticas), adicione a flag --egress-regions:

    gcloud beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME},ports=[443]" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}",egressPolicy=regions=us-central1
            

    Substitua us-central1 pela Google Cloud região (como europe-west1 ou asia-northeast1) que se alinha à sua configuração de roteamento estático regional. Se você não tiver requisitos específicos de roteamento estático regional, poderá omitir a política de saída da sua configuração.

    REST

    Para criar um recurso de aplicativo com a API, siga estas etapas:

    1. Crie um arquivo chamado application.json.

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      Para especificar uma região de saída (por exemplo, ao usar rotas estáticas), adicione um egress_policy à configuração upstream:

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      Substitua us-central1 pela Google Cloud região (como europe-west1 ou asia-northeast1) que se alinha à sua configuração de roteamento estático regional. Se você não tiver requisitos específicos de roteamento estático regional, poderá omitir a política de saída da sua configuração.

    2. Chame o método de API Create.

      curl \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -X POST \
      -d @application.json \
      "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
                

Configurar o modo de proxy do Google Chrome

É possível rotear o tráfego de aplicativos pelo gateway seguro aplicando um arquivo PAC nas configurações do Chrome no Google Admin Console. Para aplicar o arquivo PAC, faça o seguinte:

  1. Crie ou atualize um arquivo PAC.

    • Crie seu primeiro aplicativo criando um arquivo pac_config.js usando o exemplo de arquivo PAC a seguir.

    • Atualize o arquivo pac_config.js atual e adicione os domínios do novo aplicativo à matriz de sites, conforme mostrado no exemplo de arquivo PAC a seguir.

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }

    Substitua HOST_NAME pelo nome do host do seu aplicativo, por exemplo, myapp.example.com.

    Se você estiver usando um arquivo PAC que não é específico para um gateway seguro, mescle os arquivos PAC adicionando os domínios do seu aplicativo à matriz de sites.

  2. Faça upload do arquivo para que ele possa ser baixado publicamente. Por exemplo, é possível fazer upload do arquivo para o Cloud Storage e permitir que ele seja baixado publicamente concedendo a todos os usuários a função Usuário de objetos do Storage no bucket.

  3. Para verificar se o arquivo enviado é a versão mais recente, ajuste o comportamento de armazenamento em cache definindo o cabeçalho Cache-Control como no-cache. Essa configuração impede que navegadores e servidores intermediários armazenem uma cópia do arquivo para que o Chrome baixe a versão mais recente.

    Para mais informações sobre Cache-Control e como ele afeta o armazenamento em cache do navegador, consulte Cabeçalho Cache-Control.

  4. Copie o URL público do arquivo enviado.

Atualizar as configurações do modo de proxy

  1. Acesse o Google Admin Console.
  2. Clique em Dispositivos > Chrome > Configurações.
  3. Selecione a unidade organizacional ou o grupo e clique em Modo de proxy.
  4. Em Modo de proxy, selecione Sempre usar a configuração automática de proxy especificada abaixo e insira o URL do arquivo PAC do Cloud Storage.
  5. Para salvar as configurações do modo de proxy, clique em Salvar.

Configurar uma política de acesso

É possível aplicar uma política de acesso para controlar o acesso no nível do gateway seguro, o que afeta todos os aplicativos associados, ou no nível do aplicativo individual para um controle mais granular.

Atualizar uma política de acesso com segurança

O comando setIamPolicy substitui toda a política atual pela que você fornecer. Para evitar a remoção acidental de permissões atuais, recomendamos usar o seguinte padrão "ler-modificar-gravar". Esse padrão ajuda a evitar a remoção acidental de permissões atuais.

  1. Leitura: primeiro, receba a política de acesso atual.

  2. Modificar: edite o arquivo de política localmente para adicionar ou mudar permissões.

  3. Grave: aplique o arquivo de política atualizado.

Ver a política atual

Recupere a política atual antes de fazer qualquer mudança.

O campo etag na política funciona como um identificador de versão. Isso evita atualizações conflitantes se vários administradores fizerem mudanças simultaneamente.

O comando a seguir recupera a política e a salva em um arquivo chamado policy.json.

gcloud

gcloud beta beyondcorp security-gateways applications get-iam-policy APPLICATION_ID \
  --security-gateway=SECURITY_GATEWAY_ID \
  --project=PROJECT_ID \
  --location=global > policy.json

Substitua:

  • APPLICATION_ID: o ID do recurso do aplicativo
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • PROJECT_ID: o ID do projeto em que o gateway de segurança está configurado

REST

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${API}/${API_VERSION}/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:getIamPolicy" > policy.json

Substitua:

  • PROJECT_ID: o ID do projeto em que o gateway de segurança está configurado
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • APPLICATION_ID: o ID do recurso do aplicativo

O comando cria um arquivo policy.json que contém a política atual.

Modificar o arquivo de política

Abra o arquivo policy.json em um editor de texto. Para conceder a um grupo acesso ao gateway seguro, adicione o grupo à lista members para a função roles/beyondcorp.securityGatewayUser.

O arquivo policy.json é semelhante ao exemplo a seguir:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.securityGatewayUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}

Para adicionar outro grupo, inclua uma nova entrada na matriz members. Inclua uma vírgula após a entrada anterior.

O exemplo a seguir adiciona new-group@example.com:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.securityGatewayUser",
      "members": [
        "group:existing-group@example.com",
        "group:new-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}

Também é possível adicionar outros tipos de membros, como serviceAccount, user, group, principal e principalSet, em vinculações de políticas. Consulte Principais do IAM para mais informações.

Aplicar a política atualizada

Depois de editar e salvar o arquivo policy.json, aplique-o ao recurso usando o comando setIamPolicy. Esse comando usa o etag do seu arquivo para garantir que você atualize a versão correta.

gcloud

gcloud beta beyondcorp security-gateways applications set-iam-policy APPLICATION_ID policy.json \
  --security-gateway=SECURITY_GATEWAY_ID \
  --project=PROJECT_ID \
  --location=global

Substitua:

  • APPLICATION_ID: o ID do recurso do aplicativo
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • PROJECT_ID: o ID do projeto em que o gateway de segurança está configurado

REST

jq '{policy: .}' policy.json | curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d @- \
  "https://${API}/${API_VERSION}/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:setIamPolicy"

Substitua:

  • PROJECT_ID: o ID do projeto em que o gateway de segurança está configurado
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • APPLICATION_ID: o ID do recurso do aplicativo

Adicionar uma política de acesso condicional

Também é possível definir políticas de acesso com condições. As condições especificam requisitos, como o endereço IP de um usuário originado de um local específico.

A política de exemplo a seguir concede acesso somente se o endereço IP de origem estiver em um nível de acesso especificado:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.securityGatewayUser",
      "members": [
        "group:group@example.com"
      ],
      "condition": {
        "expression": "request.auth.access_levels.contains('accessPolicies/1234567890/accessLevels/in_us')",
        "title": "Source IP must be in US"
      }
    }
  ],
  "etag": "BwXN8_d-bOM="
}

Para aplicar essa política, siga as etapas descritas anteriormente.

Instalar a extensão do Chrome Enterprise Premium

A extensão do Chrome Enterprise Premium é parte integrante de um gateway seguro e ajuda na autenticação. Instale a extensão para todos os usuários do gateway seguro. Para informações sobre como implantar a extensão, consulte Ver e configurar apps e extensões. Para instalar a extensão do Chrome Enterprise Premium, faça o seguinte:

  1. Acesse o Google Admin Console.
  2. Clique em Navegador Chrome > Apps e extensões.
  3. Clique na guia Usuários e navegadores.
  4. Para adicionar a extensão do Chrome, clique no botão +.
  5. Pesquise a seguinte extensão e exija que ela seja instalada para todos os usuários na unidade organizacional ou no grupo:

    ekajlcmdfcigmdbphhifahdfjbkciflj
  6. Clique na extensão instalada e, no campo Política para extensões, insira o seguinte valor JSON:

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" }
        }
      }
    }

    Substitua:

    • PROJECT_ID: o ID do projeto em que o gateway de segurança está configurado
    • SECURITY_GATEWAY_ID: o ID do gateway de segurança

  7. Para salvar a configuração, clique em Salvar.

Experiência do usuário final

Quando a configuração é concluída, os usuários finais que acessam o aplicativo SaaS protegido recebem ou têm o acesso negado com base na política de acesso aplicada ao aplicativo.

Como acessar o aplicativo no Chrome

A extensão do Chrome Enterprise Premium é necessária para direcionar o tráfego pelo gateway seguro. A extensão processa a autenticação entre o usuário e o gateway seguro. A extensão é instalada automaticamente pela política do domínio.

Quando os usuários acessam o aplicativo SaaS configurado, o tráfego deles passa pelo gateway seguro, que verifica se eles atendem à política de acesso. Se os usuários passarem nas verificações da política de acesso, eles vão receber acesso ao aplicativo.

Quando o acesso do navegador ao aplicativo é rejeitado pela política de autorização, os usuários recebem uma mensagem Access denied.

A seguir