Como proteger aplicativos que não são do Google Cloud usando o conector de apps do BeyondCorp Enterprise

Esta página descreve como configurar e usar o conector de apps do BeyondCorp Enterprise.

Visão geral

É possível usar o conector de aplicativos do BeyondCorp Enterprise para fornecer acesso baseado em identidade e contexto a aplicativos HTTPS executados em ambientes que não são do Google Cloud e no local. O conector de apps do BeyondCorp Enterprise é uma interface segura e autenticada entre o plano de aplicação do BeyondCorp Enterprise e os aplicativos executados em ambientes locais ou não no Google Cloud.

O conector de aplicativos do BeyondCorp Enterprise é um proxy TCP que conecta os ambientes do Google Cloud e da organização. O proxy TCP tem um componente voltado para o usuário final hospedado no Google Cloud e um componente para aplicativos hospedado no ambiente da organização. Para usar o conector de aplicativos do BeyondCorp Enterprise, não é necessário abrir firewalls ou configurar conexões de VPN do Cloud site a site.

Antes de começar

Para usar o conector de apps do BeyondCorp Enterprise, você precisa ter o seguinte:

No momento, só é possível usar o conector de apps do BeyondCorp Enterprise com aplicativos HTTPS.

Cada agente do conector de app do BeyondCorp Enterprise requer uma VM Linux que esteja executando o Docker. Recomendamos as seguintes distribuições do Linux:

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 ou posterior

Recomendamos no mínimo 2 CPUs com 2 GB de RAM para o hardware de VM do Linux.

Configuração e implantação do conector de aplicativos do BeyondCorp Enterprise

Veja a seguir as principais etapas necessárias para configurar e implantar o conector de aplicativo BeyondCorp Enterprise:

  • Como configurar o projeto do Google Cloud
  • Como instalar um agente remoto do conector de app
  • Como conectar um aplicativo remoto a uma VPC
  • Como configurar um balanceador de carga HTTP(S) externo
  • Como ativar o Identity-Aware Proxy

Como configurar o projeto do Google Cloud

Para configurar um projeto do Google Cloud para usar com o conector de apps do BeyondCorp Enterprise, ative a API BeyondCorp Enterprise. Para ativar a API, siga estas etapas:

  1. Configure a variável de ambiente necessária executando o seguinte comando:

    PROJECT_ID=my-project
    

    Substitua my-project pelo ID do projeto do Google Cloud.

  2. Ative a API executando o seguinte comando:

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

Como instalar um agente remoto do conector de app

Implante uma VM de agente remoto do conector para cada ambiente de rede que hospede um aplicativo que você quer proteger com o BeyondCorp Enterprise. Você precisa ter uma VM dedicada ou qualquer servidor Bare Metal com o Docker instalado para cada agente remoto que criar.

Para criar um agente remoto, siga estas etapas:

  1. Crie uma instância de VM no ambiente do aplicativo.
  2. Instale o agente remoto:

    1. Verifique se o DNS está configurado corretamente e se você consegue acessar o aplicativo executando curl.
    2. Instale o Docker Engine.
    3. Execute o seguinte comando na VM do agente remoto:
      curl https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    4. Siga as instruções na tela para criar um alias para bce-connctl, a CLI do agente remoto.
    5. Configure as variáveis de ambiente necessárias executando os seguintes comandos:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      

      Substitua:

      • my-project: o ID do projeto do Google Cloud.
      • us-central1: a região em que a conexão e os gateways serão implantados.
      • my-connector: o nome do conector.
    6. Registre o conector executando o seguinte comando na CLI bce-connctl:

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

      Siga as instruções exibidas na tela para copiar e colar o script de inscrição e concluir a inscrição do conector. Para executar o script de inscrição, você precisa ter permissões OWNER no projeto.

      Quando o script de inscrição é concluído, o ambiente de execução sincroniza automaticamente a configuração do conector.

  3. Verifique a instalação do agente remoto:

    1. Execute este comando para garantir que o serviço esteja em execução:
      sudo systemctl status beyondcorp
      
    2. O agente remoto consiste em três contêineres do Docker: bce-control-runtime, bce-logagent e bce-connector. Verifique se os três contêineres estão em execução usando o seguinte comando:
      docker ps --filter name=bce
      
    3. (Opcional) Para verificar os arquivos de registro dos contêineres do Docker, execute o seguinte comando:
      docker logs -f CONTAINER_NAME
      
      Substitua CONTAINER_NAME pelo nome do contêiner do Docker.

Como conectar um aplicativo remoto a uma VPC

Antes de concluir as etapas a seguir, instale o SDK da CLI do gcloud e faça login com uma conta que tenha o papel beyondcorp.admin.

  1. Configure as variáveis de ambiente necessárias executando os seguintes comandos:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Substitua:

    • my-connector: o nome do conector, definido em uma etapa anterior.
    • my-connection: um nome exclusivo para a conexão.
    • my-project: o ID do projeto do Google Cloud.
    • us-central1: a região em que a conexão e os gateways serão implantados.
    • APP_HOST: o endereço IP no local ou um FQDN que hospeda seu aplicativo.
    • APP_PORT: o número da porta a ser conectada ao aplicativo.
  2. Para criar uma conexão entre o aplicativo e a VPC, execute o seguinte comando:

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
       --project=$PROJECT_ID \
       --location=$REGION \
       --application-endpoint=$APP_ENDPOINT \
       --type=tcp \
       --connectors=$CONNECTOR_NAME \
       --display-name=$CONNECTION_NAME
    

    Observe que essa etapa pode levar vários minutos para ser concluída.

  3. Depois de criar a conexão, execute os seguintes comandos para recuperar os URIs do gateway:

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/"bce-ps7"}"
    

    O GATEWAY_URI_L7 é usado para criar uma regra de encaminhamento. O conector de apps do BeyondCorp Enterprise usa o Private Service Connect para vincular o projeto do consumidor aos recursos gerenciados nos projetos gerenciados do Google.

Como configurar um balanceador de carga HTTP(S) externo

Só é possível conectar apps HTTPS a um balanceador de carga HTTP(S) externo. Os aplicativos HTTP não são compatíveis.

  1. Configure as variáveis de ambiente necessárias executando os seguintes comandos:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Substitua:

    • web-app: o prefixo anexado aos nomes de todos os recursos do balanceador de carga.
    • my-project: o ID do projeto do Google Cloud.
    • us-central1: a região em que a conexão e os gateways serão implantados.
    • app.example.com: o nome de domínio do seu aplicativo.
  2. Crie um serviço de back-end baseado no NEG e o conecte a um anexo de serviço do Private Service Connect executando os seguintes comandos:

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    
    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  3. Crie um certificado gerenciado pelo Google para seu domínio executando os seguintes comandos:

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  4. Crie um balanceador de carga HTTP(S) externo com base no back-end da etapa anterior executando os seguintes comandos:

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    Depois que o balanceador de carga HTTP(S) externo é criado, seu aplicativo pode ser acessado pela Internet por esse endereço IP.

  5. Depois que o balanceador de carga HTTP(S) externo for criado, será necessário associar o endereço IP ao nome de domínio para que o Google Cloud possa provisionar um certificado SSL. Use as instruções do seu provedor de DNS para associar o endereço IP ao nome DNS. Execute o seguinte comando para verificar o status do provisionamento:

    1. Mostre o endereço IP a ser configurado no provedor de DNS:
        echo "Load Balancer ip address - $LB_IP"
        
    2. Depois de definir o DNS, verifique se o nome de domínio é resolvido para o endereço IP executando o seguinte comando:
        dig $DOMAIN_NAME
        
    3. Para ver o status do provisionamento, execute o seguinte comando:

      gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
      

    Depois que o certificado SSL for provisionado, você poderá acessar o aplicativo usando o nome DNS.

Como ativar o Identity-Aware Proxy

Siga a documentação do Identity-Aware Proxy para configurar o Identity-Aware Proxy. Depois de configurar o Identity-Aware Proxy, use o OAuth CLIENT_ID e o OAuth CLIENT_SECRET para ativar o Identity-Aware Proxy para o serviço de back-end seguindo estas etapas:

  1. Defina as variáveis de ambiente com base no ID do cliente e na chave secreta do cliente OAuth:

    CLIENT_ID=replace-with-client-id
    CLIENT_SECRET=replace-with-client-secret
    

    Substitua:

    • replace-with-client-id: o valor do OAuth CLIENT_ID do Console do Cloud.
    • replace-with-client-secret: o valor do OAuth CLIENT_SECRET do Console do Cloud.
  2. Ative o Identity-Aware Proxy executando o seguinte comando:

      gcloud compute backend-services update $LB_PREFIX-backend-service \
         --global \
         --iap=enabled,oauth2-client-id=$CLIENT_ID,oauth2-client-secret=$CLIENT_SECRET
    
  3. Conceda aos usuários acesso ao seu aplicativo executando o seguinte comando:

    gcloud iap web add-iam-policy-binding \
        --resource-type=backend-services \
        --service=$LB_PREFIX-backend-service \
        --member="user:user-ldap@mydomain.com" \
        --role="roles/iap.httpsResourceAccessor"
    

    Substitua user-ldap@mydomain.com pela conta de usuário apropriada.

Agora seu aplicativo no local deve ser publicado na Internet e protegido pelo BeyondCorp Enterprise.