Como proteger aplicativos cliente-servidor

Este documento fornece uma visão geral de alto nível do conector de cliente do BeyondCorp Enterprise e descreve como ativá-lo.

Visão geral

O BeyondCorp Enterprise é a solução de confiança zero do Google que oferece acesso seguro a aplicativos particulares com proteção integrada contra dados e ameaças. O BeyondCorp Enterprise usa o Chrome para oferecer acesso seguro a todos os aplicativos baseados na Web (HTTPS).

O conector do cliente BeyondCorp Enterprise estende o suporte aos aplicativos não Web, criando uma conexão segura para aplicativos executados em ambientes do Google Cloud e de terceiros com acesso completo de contexto e identidade.

Como funciona

Veja a seguir os principais componentes do conector do cliente:

  • Verificação de endpoints e user agent: o conector cliente é integrado à verificação de endpoints, uma extensão do Chrome com um agente leve nativo que é executado em laptops ou computadores de usuários e relata informações do dispositivo. A verificação de endpoints também funciona como o plano de controle para o usuário final iniciar e interromper conexões com gateways de clientes.

  • Gateways do cliente: componentes regionais do lado do servidor aos quais os clientes podem se conectar. Os gateways do cliente são implantados por administradores. Os gateways se comunicam com o sistema de aplicação do BeyondCorp Enterprise para aplicar verificações contextuais. O sistema de aplicação do BeyondCorp Enterprise usa o Identity-Aware Proxy e o Access Context Manager, um mecanismo flexível de política de confiança zero do BeyondCorp Enterprise.

O tráfego para aplicativos protegidos de dispositivos de usuário final (cliente) é enviado por meio de um canal seguro pelo gateway. É possível se conectar a aplicativos da Web e que não são da Web em execução no Google Cloud ou fora dele. Use o Cloud VPN ou o Cloud Interconnect para se conectar aos aplicativos que não estão no Google Cloud.

Antes de começar

Antes de começar a ativar o conector de cliente do BeyondCorp Enterprise, verifique se você tem o seguinte:

Como ativar o conector de cliente do BeyondCorp Enterprise

Como configurar o Acesso privado a serviços

O conector do cliente usa o acesso particular a serviços para ativar a conectividade entre a rede VPC gerenciada pelo Google e a rede VPC do consumidor. Isso garante que o tráfego dos usuários seja roteado para a rede VPC do consumidor.

  1. O Acesso privado a serviços requer que você reserve um intervalo de endereços IP para que não haja colisões de endereços IP entre sua rede VPC e a rede VPC gerenciada pelo Google. Execute o seguinte comando para alocar um intervalo de IP:

    gcloud compute addresses create RESERVED_RANGE \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --prefix-length=16 \
      --purpose=VPC_PEERING \
      --global
    

    Substitua:

    • RESERVED_RANGE: o nome do intervalo de endereços IP a ser reservado para o peering de VPC. O nome pode conter apenas letras minúsculas, números e hifens.
    • CONSUMER_NETWORK: o nome da sua rede VPC conectada ao aplicativo.
    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
  2. Crie a conexão de peering de VPC executando o seguinte comando:

    gcloud services vpc-peerings connect \
     --network=CONSUMER_NETWORK \
     --project=CONSUMER_PROJECT \
     --ranges=RESERVED_RANGE \
     --service="servicenetworking.googleapis.com"
    

    Substitua:

    • CONSUMER_NETWORK: o nome da sua rede VPC conectada ao aplicativo.
    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • RESERVED_RANGE: o nome do intervalo reservado para o peering de VPC.
  3. Para ver detalhes do intervalo de IP alocado, execute o seguinte comando:

    gcloud compute addresses describe RESERVED_RANGE \
      --global \
      --project=CONSUMER_PROJECT
    

    Substitua:

    • RESERVED_RANGE: o nome do intervalo reservado para o peering de VPC.
    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
  4. Use os valores address e prefixLength do resultado na etapa anterior para representar o intervalo de IP alocado no formato CIDR e, em seguida, execute o seguinte comando para criar uma regra de firewall:

    gcloud compute firewall-rules create "allow-peered-ingress" \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --direction ingress \
      --action allow \
      --source-ranges={Allocated IP range in CIDR format i.e. address/prefixLength} \
      --rules=all
    

    Substitua:

    • CONSUMER_NETWORK: o nome da sua rede VPC conectada ao aplicativo.
    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.

    Para mais informações sobre como configurar regras de firewall, consulte Como usar regras de firewall.

Como configurar os recursos do conector cliente

Há dois tipos de recursos, o serviço do conector cliente e o gateway cliente.

O serviço do conector do cliente é usado para definir uma configuração comum para um grupo de gateways do cliente. Os gateways do cliente se referem ao serviço do conector do cliente. Eles são usados para controlar as regiões em que você quer gerenciar o tráfego dos usuários.

No momento, só é permitido um serviço de conector do cliente por domínio e um gateway de cliente por região e serviço de conector do cliente. Além disso, você só pode usar as seguintes regiões para hospedar o serviço do conector do cliente e os recursos de gateway: asia-east1, europe-west1, us-east1 e us-central1.

  1. Crie o serviço do conector cliente executando o seguinte comando:

    POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d "{ingress:{config:{transport_protocol: \"TCP\", destination_routes:[{address:\"DESTINATION_ADDRESS\", netmask:\"DESTINATION_MASK\"}]}},egress:{peered_vpc:{network_vpc:\"projects/CONSUMER_PROJECT/global/networks/CONSUMER_NETWORK\"}}}" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices?client_connector_service_id=CLIENT_CONNECTOR_SERVICE_NAME
    

    Substitua:

    • DESTINATION_ADDRESS: o endereço do host da sub-rede de destino que hospeda o aplicativo. Por exemplo, se o aplicativo usar 10.0.0.0/28, o endereço será 10.0.0.0.
    • DESTINATION_MASK: a máscara de rede da sub-rede de destino que hospeda o aplicativo. Por exemplo, se o aplicativo usar 10.0.0.0/28, a máscara será 255.255.255.240.
    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • CONSUMER_NETWORK: o nome da sua rede VPC conectada ao aplicativo.
    • SERVICE_LOCATION: a região em que o serviço do conector do cliente será criado.
    • CLIENT_CONNECTOR_SERVICE_NAME: o nome do serviço do conector de cliente.
  2. Para verificar se o serviço do conector cliente foi criado, liste as informações do serviço usando o seguinte comando:

    GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices
    

    Substitua:

    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • SERVICE_LOCATION: a região em que o serviço do conector cliente está localizado.
  3. (Opcional) Remova um serviço de conector cliente executando o seguinte comando:

    DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME
    

    Substitua:

    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • SERVICE_LOCATION: a região em que o serviço do conector cliente está localizado.
    • CLIENT_CONNECTOR_SERVICE_NAME: o nome do serviço do conector de cliente.
  4. Crie um ou mais gateways de clientes executando o seguinte comando quantas vezes forem necessárias:

    POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d "{client_connector_service: \"projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME\"}" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways?client_gateway_id=CLIENT_GATEWAY_NAME
    

    Substitua:

    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • SERVICE_LOCATION: a região em que o serviço do conector cliente está localizado.
    • CLIENT_CONNECTOR_SERVICE_NAME: o nome do serviço do conector de cliente.
    • GATEWAY_LOCATION: a região em que o gateway do cliente será criado.
    • CLIENT_GATEWAY_NAME: o nome do gateway do cliente.

    Esta etapa pode levar vários minutos para ser concluída.

  5. Verifique se os gateways do cliente estão funcionando executando o seguinte comando:

    GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways
    

    Substitua:

    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • GATEWAY_LOCATION: a região em que o gateway do cliente está localizado.
  6. (Opcional) Remova um gateway de cliente executando o seguinte comando:

    DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways/CLIENT_GATEWAY_NAME
    

    Substitua:

    • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
    • GATEWAY_LOCATION: a região em que o gateway do conector do cliente está localizado.
    • CLIENT_GATEWAY_NAME: o nome do gateway do cliente.

Como configurar políticas de acesso baseado no contexto

  1. Determine os principais ou crie um grupo de usuários. Identifique os usuários que exigem acesso a aplicativos não protegidos da Web. Se preferir, crie um grupo de usuários para simplificar a configuração e o gerenciamento.

  2. (Opcional) Crie um nível de acesso no Access Context Manager para definir uma regra de acordo com o contexto, que pode ser usada para restringir o acesso ao app.

  3. Configure uma política do IAM para o recurso de serviço do conector do cliente e conceda ao principal ou ao grupo de usuários o papel (roles/beyondcorp.clientConnectorServiceUser) necessário para acessar os apps que não são da Web. Opcionalmente, é possível especificar uma condição de IAM para provisionar o papel somente quando um nível de acesso for atendido. Para atualizar a política do IAM de um recurso, use o seguinte padrão read-modify-write:

    1. Leia a política atual. O método getIamPolicy() lê a política atual do IAM para o recurso de serviço do conector do cliente em policy.json.

      GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:getIamPolicy > policy.json
      

      Substitua:

      • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
      • SERVICE_LOCATION: a região em que o serviço do conector cliente está localizado.
      • CLIENT_CONNECTOR_SERVICE_NAME: o nome do serviço do conector do cliente.
    2. Edite a política retornada. Atualize as vinculações em policy.json para incluir a nova atribuição de papel do IAM. Você pode fazer isso em um editor de texto ou de maneira programática. Exemplo:

      {
        "policy": {
          "bindings": [
            {
              "role": "roles/beyondcorp.clientConnectorServiceUser",
              "members": [
                "user:EXAMPLE_USER@EXAMPLE.COM",
                "group:EXAMPLE_GROUP@EXAMPLE.COM",
              ],
              "condition":
               {
                 "expression":
      "'accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME' in
      request.auth.access_levels",
                "title": "CONDITION_NAME"
              }
            }
          ]
        }
      }
      
    3. Grave a política atualizada. Use o método setIamPolicy() para gravar a política atualizada do IAM. Exemplo:

      POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @policy.json \
      https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:setIamPolicy
      

      Substitua:

      • CONSUMER_PROJECT: o ID do seu projeto que hospeda o CONSUMER_NETWORK.
      • SERVICE_LOCATION: a região em que o serviço do conector cliente está localizado.
      • CLIENT_CONNECTOR_SERVICE_NAME: o nome do serviço do conector de cliente.

Como instalar o agente do conector do cliente em dispositivos de endpoint (Windows ou macOS)

  1. Ative a extensão Verificação de endpoints seguindo as etapas em Configurar a Verificação de endpoints nos seus dispositivos.

  2. Depois que a Verificação de endpoints estiver em execução, a extensão Verificação de endpoints exibirá um botão INICIAR CONEXO para o usuário atualizado. Para acessar o aplicativo não protegido, os usuários podem clicar no botão INICIAR CONEXO.

Quando um usuário inicia uma conexão pela primeira vez, a verificação de endpoints solicita que ele faça o download e instale os binários do conector cliente. Outra opção é fazer o download dos binários do conector cliente nos seguintes URLs:

Depois que uma conexão é estabelecida, um usuário pode acessar o recurso protegido. Os usuários podem escolher encerrar a conexão clicando no botão END CONNECTION.