Permitir o acesso a recursos protegidos a partir de um endereço IP interno

Esta página descreve como permitir tráfego de endereços IP internos numa rede VPC para perímetros de serviço através de regras de entrada e saída.

Vista geral

Pode usar os VPC Service Controls para especificar condições que permitam que intervalos de endereços IP específicos da rede VPC acedam aos projetos e às redes VPC protegidos. Esta funcionalidade permite-lhe realizar as seguintes tarefas:

  • Suporte condições de nível de acesso básico para permitir intervalos de endereços IP internos de redes VPC.

  • Permitir a utilização destas condições de nível de acesso para chamadas de API de entrada ou saída para dentro ou para fora do limite do perímetro de serviço.

Esta funcionalidade oferece as seguintes vantagens:

  • Pode especificar condições nas configurações do VPC Service Controls para permitir o acesso a partir de um endereço IP interno numa rede VPC.

  • Os fluxos de trabalho que requerem chamadas API para passar por vários perímetros de serviço podem restringir o acesso para permitir apenas algumas sub-redes, em vez de permitir toda a rede VPC ou projeto.

  • Pode configurar diferentes recursos a partir da sua infraestrutura no local para poder aceder apenas a recursos Google Cloud específicos. Tem de usar o intervalo de endereços IP da sub-rede associado a estes recursos no local e à rede VPC da zona de destino como parte do nível de acesso.

A Figura 1 mostra um exemplo de configuração que permite o acesso a um serviço protegido específico a partir de um endereço IP interno autorizado.

Limitações da utilização do endereço IP interno

Quando usa um endereço IP interno nos VPC Service Controls, aplicam-se as seguintes limitações:

  • Só pode ativar um endereço IP interno com níveis de acesso básicos e não com níveis de acesso personalizados.

  • Recomendamos que não negue os níveis de acesso com condições baseadas no endereço IP interno, pois tal pode causar comportamentos inesperados.

  • As limitações na adição de redes VPC a perímetros de serviço também se aplicam.

  • Quando o VPC Service Controls regista um registo de auditoria de política recusada, oculta o nome da rede VPC como __UNKNOWN__ no registo de auditoria.

  • As redes VPC para as quais o SUBNET_MODE está definido como custom, mas não têm sub-redes, não são suportadas. A ativação do endereço IP interno requer que uma rede VPC contenha, pelo menos, uma sub-rede.

  • Só pode especificar 500 redes VPC em todos os níveis de acesso na sua política de acesso.

  • Quando elimina uma rede VPC referenciada por um nível de acesso ou um perímetro de serviço e, em seguida, recria outra rede VPC com o mesmo nome, os VPC Service Controls não ativam automaticamente os endereços IP internos na rede VPC recriada. Para ultrapassar esta limitação, crie uma rede VPC com um nome diferente e adicione-a ao perímetro.

  • Não pode usar um endereço IP interno para permitir o acesso a serviços geridos pela Google. Por exemplo, o Cloud SQL.

  • Se usar um nível de acesso com condições baseadas no endereço IP interno com uma regra de saída, recomendamos que não adicione outras condições como o tipo de dispositivo ou a identidade do utilizador ao nível de acesso.

  • O endereço IP interno não corresponde aos níveis de acesso referentes a regiões geográficas.

Use o endereço IP interno nos níveis de acesso

  1. Especifique o nome da rede de VPC e o intervalo de endereços IP no campo vpcNetworkSources da condição do nível de acesso básico.

    • Nome da rede da VPC. Tem de definir o nome da rede VPC no seguinte formato:

      //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME
      

      Por exemplo, //compute.googleapis.com/projects/my-project/global/networks/my-vpc.

    • Intervalo de endereços IP. O intervalo de endereços IP especificado no campo VpcSubNetwork de VpcNetworkSource tem de seguir a especificação da sub-rede IP do bloco CIDR. Pode usar qualquer intervalo de endereços IP que seja um intervalo IPv4 válido para sub-redes.

  2. Use este nível de acesso com condições de permissão no IngressSource ou EgressSource.

Usando um cenário de exemplo, as secções seguintes explicam como realizar estes passos para ativar um endereço IP interno.

Um exemplo de utilização de um endereço IP interno para configurar o acesso à sub-rede

No exemplo seguinte, tem dois projetos:

  1. Projeto anfitrião de rede: Project1 aloja uma rede VPC: default. As duas VMs em Project1, VM1 e VM2 usam esta rede como uma interface de rede para enviar tráfego.

  2. Projeto do Cloud Storage: Project2 contém um contentor do Cloud Storage.

Pode usar os VPC Service Controls para permitir apenas que VM1 de Project1 aceda ao contentor do Cloud Storage em Project2 através de um endereço IP interno. Para conseguir esta configuração, tem de seguir os passos abaixo:

  1. Cria um perímetro de serviço sp1 em torno de Project1 e outro perímetro de serviço sp2 em torno de Project2.

  2. Em seguida, pode adicionar regras de entrada e saída aos perímetros de serviço para permitir apenas o acesso da sub-rede do VM1 ao contentor do Cloud Storage.

O diagrama seguinte mostra a configuração descrita neste exemplo.

Configure uma política de acesso ao nível da organização

  1. Certifique-se de que tem uma política de acesso ao nível da organização. Se não tiver uma política de acesso neste nível, execute o seguinte comando da CLI gcloud:

    gcloud access-context-manager policies create \
        --organization=ORGANIZATION_ID --title=POLICY_TITLE
    

    Substitua o seguinte:

    • ORGANIZATION_ID: o ID numérico da sua organização.

    • POLICY_TITLE: um título legível para humanos para a sua política de acesso.

    Para mais informações, consulte o artigo Crie uma política de acesso ao nível da organização.

  2. Obtenha o nome da sua política de acesso.

  3. Para definir esta política como a sua política de acesso predefinida, execute o seguinte comando da CLI gcloud:

    gcloud config set access_context_manager/policy POLICY_NAME
    

    Substitua POLICY_NAME pelo nome numérico da sua política de acesso.

    Para mais informações, consulte o artigo Defina a política de acesso predefinida para a ferramenta de linha de comandos gcloud.

Crie perímetros para proteger o projeto anfitrião de rede e o projeto do Cloud Storage

  1. Para criar um perímetro sp1 em torno de Project1, execute o seguinte comando da CLI gcloud:

    gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Substitua o seguinte:

    • PROJECT_NUMBER: o número do projeto do projeto anfitrião da rede. Por exemplo, projects/111.

    • POLICY_NAME: o nome numérico da sua política de acesso. Por exemplo, 1234567890.

  2. Para criar um perímetro sp2 em torno de Project2 que restrinja o serviço do Cloud Storage, execute o seguinte comando da CLI gcloud:

    gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Substitua o seguinte:

    • PROJECT_NUMBER: O número do projeto do projeto do Cloud Storage. Por exemplo, projects/222.

    • POLICY_NAME: o nome numérico da sua política de acesso. Por exemplo, 1234567890.

Para mais informações sobre como criar um perímetro de serviço, consulte o artigo Crie um perímetro de serviço.

Depois de criar estes dois perímetros, o contentor do Cloud Storage deixa de estar acessível a partir das duas VMs.

Crie um nível de acesso com uma condição de acesso baseada no endereço IP interno

Crie um nível de acesso que permita apenas o tráfego proveniente da sub-rede do VM1.

  1. Crie um ficheiro YAML que defina as suas condições de acesso. O exemplo seguinte mostra apenas os atributos necessários para ativar um endereço IP interno:

    echo """
    - vpcNetworkSources:
      - vpcSubnetwork:
          network: VPC_NETWORK_NAME
          vpcIpSubnetworks:
          - IP_RANGE
    
    """ > level.yaml
    

    Substitua o seguinte:

    • VPC_NETWORK_NAME: o nome da rede VPC onde reside o VM1. Por exemplo, //compute.googleapis.com/projects/Project1/global/networks/default.

    • IP_RANGE: O intervalo de endereços IP da sub-rede. Por exemplo, 10.10.0.0/24.

    Use o nome da rede VPC e os formatos de intervalo de endereços IP explicados anteriormente.

    Para mais informações sobre o ficheiro YAML, consulte o basic-level-specficheiro YAML.

  2. Para criar um nível de acesso através do ficheiro YAML, execute o seguinte comando da CLI gcloud:

    gcloud access-context-manager levels create LEVEL_NAME \
        --title="TITLE" --basic-level-spec=FILE_NAME
    

    Substitua o seguinte:

    • LEVEL_NAME: um nome exclusivo para o nível de acesso. Por exemplo, allowvm1.

    • TITLE: um título curto e legível para o nível de acesso. Por exemplo, allowvm1.

    • FILE_NAME: o ficheiro YAML que define as condições de acesso para o nível de acesso. Por exemplo, level.yaml.

    Para mais informações, consulte o artigo Criar um nível de acesso básico.

Configure uma política de entrada para permitir o tráfego de API de entrada para o contentor do Cloud Storage

Para permitir apenas o acesso a partir de VM1, configure uma política de entrada no perímetro sp2 para permitir que o tráfego da API Cloud Storage entre no perímetro.

  1. Crie um ficheiro YAML que defina a sua política de entrada.

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    

    Substitua o seguinte:

    • POLICY_NAME: o nome numérico da sua política de acesso. Por exemplo, 1234567890.

    • ACCESS_LEVEL_NAME: o nome do seu nível de acesso. Por exemplo, allowvm1.

    Para mais informações acerca do ficheiro YAML, consulte a referência das regras de entrada.

  2. Para atualizar a política de entrada de um perímetro de serviço, execute o seguinte comando da CLI gcloud:

    gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
    

    Substitua o seguinte:

    • PERIMETER: o nome do seu perímetro de serviço que protege o projeto do Cloud Storage. Por exemplo, sp2.

    • FILE_NAME: o ficheiro YAML que define a sua política de entrada. Por exemplo, ingress.yaml.

    Para mais informações, consulte o artigo Atualizar políticas de entrada e saída para um perímetro de serviço.

Configure uma política de saída para permitir o tráfego de API de saída para o contentor do Cloud Storage

Além disso, configure uma política de saída no perímetro do sp1 para permitir que o tráfego da API Cloud Storage saia do perímetro.

  1. Crie um ficheiro YAML que defina a sua política de saída. Certifique-se de que define o campo sourceRestriction como SOURCE_RESTRICTION_ENABLED no ficheiro YAML.

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
        sourceRestriction: SOURCE_RESTRICTION_ENABLED
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > egress.yaml
    

    Substitua o seguinte:

    • POLICY_NAME: o nome numérico da sua política de acesso. Por exemplo, 1234567890.

    • ACCESS_LEVEL_NAME: o nome do seu nível de acesso. Por exemplo, allowvm1.

    Para mais informações acerca do ficheiro YAML, consulte a referência das regras de saída.

  2. Para atualizar a política de saída de um perímetro de serviço, execute o seguinte comando:

    gcloud access-context-manager perimeters update PERIMETER --set-egress-policies=FILE_NAME
    

    Substitua o seguinte:

    • PERIMETER: o nome do seu perímetro de serviço que protege o projeto de anfitrião de rede. Por exemplo, sp1.

    • FILE_NAME: o ficheiro YAML que define a sua política de saída. Por exemplo, egress.yaml.

    Para mais informações, consulte o artigo Atualizar políticas de entrada e saída para um perímetro de serviço.

Depois de configurar as políticas de entrada e saída, o contentor do Cloud Storage é acessível a partir do VM1, enquanto o contentor do Cloud Storage não é acessível a partir do VM2.

Recomendações

  • Quando ativa um endereço IP interno, recomendamos que desative o encaminhamento de IP para as suas VMs. O encaminhamento de IP permite que uma VM na mesma rede VPC envie pedidos usando um endereço IP diferente, o que representa um risco de roubo de identidade de endereço IP.

  • Se quiser ativar o encaminhamento de IP, recomendamos que use as seguintes configurações para reduzir o risco de roubo de identidade do endereço IP:

    • Use a Restrict VM IP Forwardingrestrição da política da organização (constraints/compute.vmCanIpForward) para garantir que apenas as VMs autorizadas podem ativar o encaminhamento de IP.

    • Use origens para regras de firewall para restringir os endereços IP que podem comunicar com as VMs que têm o encaminhamento de IP ativado. Conclua as seguintes tarefas:

      • Configure regras de firewall de entrada para permitir tráfego de entrada apenas a partir de um intervalo de endereços IP específico para as VMs que têm o encaminhamento de IP ativado.

      • Configure regras de firewall de saída para permitir tráfego de saída apenas para um intervalo de endereços IP específico das VMs que têm o encaminhamento de IP ativado.