Acesso seguro a aplicações SaaS

Esta página explica o processo de proteção das suas aplicações SaaS através do gateway seguro do Chrome Enterprise Premium.

Um gateway seguro do Chrome Enterprise Premium funciona como um proxy de encaminhamento, aplicando uma estrutura de acesso de confiança zero e oferecendo um controlo detalhado e sensível ao contexto sobre quem acede às suas aplicações SaaS.

Como funciona a proteção do acesso a aplicações de SaaS

Segue-se uma vista geral de nível superior de como um gateway seguro protege as suas aplicações SaaS:

  1. As definições do navegador do lado do cliente encaminham o tráfego da aplicação através de um proxy de gateway seguro.
  2. O gateway seguro verifica as políticas de acesso sensível ao contexto para autorizar o acesso do cliente (utilizador e dispositivo).
  3. Se o acesso do cliente for permitido, a gateway encaminha o tráfego para a aplicação através de endereços IP de origem únicos atribuídos a essa gateway e Google Cloud região. Estes endereços IP atribuídos são reservados exclusivamente para o gateway que criar e não podem ser usados por outros utilizadores ou gateways. Para controlar o acesso, pode adicionar estes endereços IP de origem dedicados a uma lista de autorizações na sua aplicação SaaS.

Antes de começar

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

Limitações

Um gateway seguro do Chrome Enterprise Premium tem as seguintes limitações:

  • Conetividade IPv6: o gateway seguro do Chrome Enterprise Premium não suporta aplicações SaaS que usam conetividade IPv6.
  • Fornecedor de identidade como uma aplicação SaaS: um fornecedor de identidade não pode ser configurado como uma aplicação SaaS para ser protegido pela gateway segura, se a autenticação do utilizador final com a gateway segura depender do mesmo IdP.

Configure o ambiente shell

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

  • Parâmetros gerais

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=PROJECT_ID
    APPLICATION_ID=APPLICATION_ID
    APPLICATION_DISPLAY_NAME="APPLICATION_DISPLAY_NAME"
    HOST_NAME=HOST_NAME

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto onde o gateway seguro é criado.
    • APPLICATION_ID: o ID da sua aplicação, como github. O nome pode ter até 63 carateres e pode conter letras minúsculas, números e hífenes. O primeiro caráter tem de ser uma letra e o último caráter pode ser uma letra ou um número.
    • APPLICATION_DISPLAY_NAME: o nome legível por humanos a apresentar.
    • HOST_NAME: o nome do anfitrião da sua aplicação. Por exemplo, github.com. O nome de anfitrião pode ter até 253 carateres e tem de seguir um dos seguintes formatos:

      • Um endereço IPv4 válido
      • Um endereço IPv6 válido
      • Um nome de DNS válido
      • Um asterisco (*)
      • Um asterisco (*) seguido de um nome DNS válido
  • Parâmetros do gateway seguro

    SECURITY_GATEWAY_ID=SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"

    Substitua o seguinte:

    • SECURITY_GATEWAY_ID: o ID do gateway seguro. O ID pode ter até 63 carateres e pode conter letras minúsculas, números e hífenes. O primeiro caráter deve ser uma letra e o último caráter pode ser uma letra ou um número.
    • SECURITY_GATEWAY_DISPLAY_NAME: O nome legível por humanos do gateway seguro. O nome pode ter até 63 carateres e só pode conter carateres imprimíveis.

Crie um gateway seguro

Um gateway seguro do Chrome Enterprise Premium é uma base fundamental para estabelecer ligações seguras às suas aplicações. Atribui um projeto e uma rede dedicados, oferecendo isolamento e segurança.

Para criar um recurso de gateway seguro, use um dos seguintes métodos.

gcloud

Execute o seguinte comando. Para a flag --hubs, especifique uma ou mais regiões da seguinte lista.

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

REST

Chame o método da API Create com os detalhes da gateway no corpo do pedido. Para o objeto hubs, especifique uma ou mais regiões da seguinte lista.

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

O hubs representa os recursos regionais necessários para ativar a conetividade de saída para a aplicação de destino. Pode ter um hub para cada região e cada hub fornece dois endereços IP. Pode especificar as seguintes regiões:

  • 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

Configure uma aplicação SaaS

Depois de criar um gateway seguro, pode configurar as suas aplicações SaaS para usar o gateway seguro para acesso seguro.

  1. Obtenha os endereços IP atribuídos pelo gateway seguro para cada hub. São atribuídos dois endereços IP a uma região.

    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}"
        

    Segue-se um exemplo de resposta GET de um gateway seguro com hubs. No exemplo, são criados hubs nas regiões us-central1 e us-east1, e todos os endereços IP devolvidos na resposta têm de ser permitidos na aplicação SaaS.

    gcloud

    createTime: 'CREATE_TIME'
    displayName: My security gateway
    hubs:
      us-central1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
      us-east1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
    name: projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}
    state: RUNNING
    updateTime: 'UPDATE_TIME'
        

    REST

    {
      "securityGateways": [
        {
          "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}",
          "createTime": "CREATE_TIME",
          "updateTime": "UPDATE_TIME",
          "displayName": "My security gateway",
          "state": "RUNNING",
          "hubs": {
            "us-central1": {
              "internetGateway": {
                "assignedIps": [
                  "IP_ADDRESS_1",
                  "IP_ADDRESS_2",
                ]
              }
            },
            "us-east1": {
              "internetGateway": {
                "assignedIps": [
                  "IP_ADDRESS_1",
                  "IP_ADDRESS_2",
                ]
              }
            }
          }
        }
      ]
    }
        
  2. Adicione os endereços IP à lista de autorizações de IP da sua aplicação SaaS. Por exemplo, para uma aplicação GitHub, pode seguir este guia: Gerir endereços IP permitidos para a sua organização.

Crie um recurso de aplicação

As informações seguintes explicam o processo de configuração e configuração de um recurso de aplicação de gateway seguro.

Crie um recurso de aplicação de gateway seguro em Google Cloud

O recurso de aplicação Google Cloud é um sub-recurso do recurso de gateway seguro. Crie um recurso de aplicação chamando a API Create.

gcloud

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

REST

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d "{ \"display_name\": \"${APPLICATION_DISPLAY_NAME}\", \"endpoint_matchers\": [{hostname: \"${HOST_NAME}\", ports: [443]}] }" \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
      

Configure o modo proxy do Google Chrome

Pode encaminhar o tráfego de aplicações através do gateway seguro aplicando um ficheiro PAC nas definições do Chrome na consola do administrador Google. Para aplicar o ficheiro PAC, faça o seguinte:

  1. Crie ou atualize um ficheiro PAC.

    • Crie a sua primeira aplicação criando um ficheiro pac_config.js com o seguinte exemplo de ficheiro PAC.

    • Atualize o ficheiro pac_config.js existente e adicione os domínios da sua nova aplicação à matriz de sites, conforme mostrado no seguinte exemplo de ficheiro PAC.

    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 anfitrião da sua aplicação, por exemplo, myapp.example.com.

    Se estiver a usar um ficheiro PAC existente que não seja específico de um gateway seguro, junte os ficheiros PAC adicionando os domínios da sua aplicação à matriz de sites.

  2. Carregue o ficheiro para que seja transferível publicamente. Por exemplo, pode carregar o ficheiro para o Cloud Storage e tornar o ficheiro publicamente transferível concedendo a todos os utilizadores a função Storage Object User no contentor.

  3. Para verificar se o ficheiro carregado é a versão mais recente, pode ajustar o respetivo comportamento de colocação em cache definindo o cabeçalho Cache-Control como no-cache. Esta definição impede que os navegadores e os servidores intermédios armazenem uma cópia do ficheiro, para que o Chrome transfira a versão mais recente.

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

  4. Copie o URL público do ficheiro carregado.

Atualize as definições do modo de proxy

  1. Aceda à consola do administrador Google.
  2. Clique em Dispositivos > Chrome > Definições.
  3. Selecione a unidade organizacional ou o grupo e, de seguida, clique em Modo proxy.
  4. No Modo de proxy, selecione Usar sempre a configuração automática do proxy indicada abaixo e introduza o URL do ficheiro PAC do Cloud Storage.
  5. Para guardar as definições do modo de proxy, clique em Guardar.

Configure uma política de acesso

Pode aplicar uma política de acesso para controlar o acesso ao nível do gateway seguro, o que afeta todas as aplicações associadas, ou ao nível da aplicação individual para um controlo mais detalhado.

Atualize uma política de acesso em segurança

O comando setIamPolicy substitui toda a política existente pela que indicar. Para evitar a remoção acidental de autorizações existentes, recomendamos que use o seguinte padrão "ler-modificar-escrever". Este padrão ajuda a evitar a remoção acidental de autorizações existentes.

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

  2. Modificar: edite o ficheiro de política localmente para adicionar ou alterar autorizações.

  3. Escrita: aplique o ficheiro de políticas atualizado.

Obtenha a política atual

Recupere a política atual antes de fazer alterações.

O campo etag na política funciona como um identificador de versão. Impede atualizações em conflito se vários administradores fizerem alterações em simultâneo.

O comando seguinte obtém a política e guarda-a num ficheiro com o nome 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 o seguinte:

  • APPLICATION_ID: o ID do recurso da aplicação
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • PROJECT_ID: o ID do projeto onde 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 o seguinte:

  • PROJECT_ID: o ID do projeto onde o gateway de segurança está configurado
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • APPLICATION_ID: o ID do recurso da aplicação

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

Modifique o ficheiro de política

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

O ficheiro policy.json é semelhante ao seguinte exemplo:

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

Para adicionar um grupo adicional, adicione uma nova entrada à matriz members. Inclua uma vírgula após a entrada anterior.

O exemplo seguinte 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 pode adicionar outros tipos de membros, como serviceAccount, user, group, principal e principalSet, em associações de políticas. Consulte o artigo Principais do IAM para mais informações.

Aplique a política atualizada

Depois de editar e guardar o ficheiro policy.json, aplique-o ao recurso através do comando setIamPolicy. Este comando usa o etag do seu ficheiro para garantir que atualiza 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 o seguinte:

  • APPLICATION_ID: o ID do recurso da aplicação
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • PROJECT_ID: o ID do projeto onde 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 o seguinte:

  • PROJECT_ID: o ID do projeto onde o gateway de segurança está configurado
  • SECURITY_GATEWAY_ID: o ID do gateway de segurança
  • APPLICATION_ID: o ID do recurso da aplicação

Adicione uma política de acesso condicional

Também pode definir políticas de acesso com condições. As condições especificam requisitos, como o endereço IP de um utilizador originário de uma localização específica.

A política de exemplo seguinte concede acesso apenas se o endereço IP de origem estiver num 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 esta política, siga os passos descritos anteriormente.

Instale 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 utilizadores do gateway seguro. Para ver informações sobre a implementação da extensão, consulte o artigo Veja e configure apps e extensões. Para instalar a extensão do Chrome Enterprise Premium, faça o seguinte:

  1. Aceda à consola do administrador Google.
  2. Clique em Navegador Chrome > Apps e extensões.
  3. Clique no separador Utilizadores e navegadores.
  4. Para adicionar a extensão do Chrome, clique no botão +.
  5. Pesquise a seguinte extensão e, em seguida, exija que seja instalada para todos os utilizadores na unidade organizacional ou no grupo:

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

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

    Substitua o seguinte:

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

  7. Para guardar a configuração, clique em Guardar.

Experiência do utilizador final

Quando a configuração estiver concluída, os utilizadores finais que acedem à aplicação SaaS protegida têm o acesso concedido ou recusado com base na política de acesso aplicada à aplicação.

Aceder à aplicação no Chrome

A extensão do Chrome Enterprise Premium é necessária para direcionar o tráfego através do gateway seguro. A extensão processa a autenticação entre o utilizador e o gateway seguro. A extensão é instalada automaticamente através da política de domínio.

Quando os utilizadores acedem à aplicação SaaS que configurou, o respetivo tráfego passa pelo gateway seguro, que verifica se cumprem a política de acesso. Se os utilizadores passarem nas verificações da política de acesso, é-lhes concedido acesso à aplicação.

Quando o acesso do navegador à aplicação é rejeitado pela política de autorização, os utilizadores recebem uma mensagem Access denied.

O que se segue?