Nesta página, descrevemos como permitir o tráfego de endereços IP internos em uma rede VPC para perímetros de serviço usando regras de entrada e saída.
Visão geral
É possível usar o VPC Service Controls para especificar condições que permitam que intervalos de endereços IP específicos da rede VPC acessem os projetos e as redes VPC protegidos. Com esse recurso, é possível fazer o seguinte:
Oferecer suporte a condições do nível de acesso básico para permitir intervalos de endereços IP internos de redes VPC.
Permitir o uso dessas condições de nível de acesso para chamadas de API de entrada ou saída para dentro ou fora do limite do perímetro de serviço.
Esse recurso oferece os seguintes benefícios:
É possível especificar condições nas configurações do VPC Service Controls para permitir o acesso de um endereço IP interno em uma rede VPC.
Fluxos de trabalho que exigem chamadas de API para passar por vários perímetros de serviço podem restringir o acesso para permitir apenas algumas sub-redes em vez da rede ou do projeto VPC inteiro.
É possível configurar diferentes recursos do ambiente local para acessar apenas recursos específicos do Google Cloud . É preciso usar o intervalo de endereços IP da sub-rede associado a esses recursos locais e a 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 de um endereço IP interno autorizado.
Limitações do uso de endereços IP internos
Ao usar um endereço IP interno no VPC Service Controls, as seguintes limitações se aplicam:
Só é possível ativar um endereço IP interno com níveis de acesso básicos, não com níveis de acesso personalizados.
Recomendamos que você não negue níveis de acesso com condições baseadas em endereços IP internos, porque isso pode causar comportamentos inesperados.
As limitações ao adicionar redes VPC a perímetros de serviço também se aplicam.
Quando o VPC Service Controls faz um registro de auditoria de política negada, ele encobre o nome da rede VPC como
__UNKNOWN__no registro de auditoria.As redes VPC em que o
SUBNET_MODEestá definido comocustom, mas não têm sub-redes, não são compatíveis. Para ativar o endereço IP interno, uma rede VPC precisa conter pelo menos uma sub-rede.Só é possível especificar 500 redes VPC em todos os níveis de acesso na sua política.
Quando você exclui uma rede VPC referenciada por um nível de acesso ou um perímetro de serviço e recria outra rede VPC com o mesmo nome, o VPC Service Controls não ativa automaticamente os endereços IP internos na rede VPC recriada. Para superar essa limitação, crie uma rede VPC com um nome diferente e adicione-a ao perímetro.
Não é possível usar um endereço IP interno para permitir o acesso de serviços gerenciados pelo Google. Por exemplo, o Cloud SQL.
Se você usar um nível de acesso com condições baseadas em endereços IP internos e uma regra de saída, recomendamos não adicionar outras condições, como tipo de dispositivo ou identidade do usuário, ao nível de acesso.
O endereço IP interno não corresponde aos níveis de acesso referentes a regiões geográficas.
Usar o endereço IP interno nos níveis de acesso
Especifique o nome da rede VPC e o intervalo de endereços IP no campo
vpcNetworkSourcesda condição básica de nível de acesso.Nome da rede VPC. Defina 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
VpcSubNetworkdeVpcNetworkSourceprecisa seguir a especificação de sub-rede IP do bloco CIDR. É possível usar qualquer intervalo de endereços IP que seja um intervalo IPv4 válido para sub-redes.
Use esse nível de acesso com condições de permissão em
IngressSourceouEgressSource.
Usando um cenário de exemplo, as seções a seguir explicam como realizar essas etapas para ativar um endereço IP interno.
Exemplo de como usar um endereço IP interno para configurar o acesso à sub-rede
No exemplo a seguir, você tem dois projetos:
Projeto host de rede:
Project1hospeda uma rede VPC:default. As duas VMs emProject1,VM1eVM2usam essa rede como uma interface de rede para enviar tráfego.Projeto do Cloud Storage:
Project2contém um bucket do Cloud Storage.
É possível usar o VPC Service Controls para permitir que apenas a VM1 de Project1 acesse o bucket do Cloud Storage em Project2 usando um endereço IP interno.
Para fazer essa configuração, siga estas etapas:
Você cria um perímetro de serviço
sp1em torno deProject1e outro perímetro de serviçosp2em torno deProject2.Em seguida, adicione regras de entrada e saída aos perímetros de serviço para permitir apenas o acesso da sub-rede da
VM1ao bucket do Cloud Storage.
O diagrama a seguir mostra a configuração descrita neste exemplo.
Configurar uma política de acesso no nível da organização
Garanta que você tenha uma política de acesso no nível da organização. Se você não tiver uma política de acesso nesse nível, execute o seguinte comando da gcloud CLI:
gcloud access-context-manager policies create \ --organization=ORGANIZATION_ID --title=POLICY_TITLESubstitua:
ORGANIZATION_ID: o ID numérico da sua organização.
POLICY_TITLE: um título legível por humanos para sua política de acesso.
Para mais informações, consulte Criar uma política de acesso no nível da organização.
Para definir essa política como padrão, execute o seguinte comando da gcloud CLI:
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 Definir a política de acesso padrão para a ferramenta de linha de comando
gcloud.
Criar perímetros para proteger o projeto host da rede e o projeto do Cloud Storage
Para criar um perímetro
sp1ao redor deProject1, execute o seguinte comando da gcloud CLI:gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \ --restricted-services=storage.googleapis.com --policy=POLICY_NAMESubstitua:
PROJECT_NUMBER: o número do projeto host da rede. Por exemplo,
projects/111.POLICY_NAME: o nome numérico da sua política de acesso. Por exemplo,
1234567890.
Para criar um perímetro
sp2ao redor deProject2que restringe o serviço do Cloud Storage, execute o seguinte comando da gcloud CLI:gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \ --restricted-services=storage.googleapis.com --policy=POLICY_NAMESubstitua:
PROJECT_NUMBER: o número 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 Criar um perímetro de serviço.
Depois de criar esses dois perímetros, o bucket do Cloud Storage não poderá mais ser acessado pelas duas VMs.
Criar um nível de acesso com uma condição de acesso baseada em endereço IP interno
Crie um nível de acesso que permita apenas o tráfego da sub-rede da VM1.
Crie um arquivo YAML que defina suas condições de acesso. A amostra a seguir mostra apenas os atributos necessários para ativar um endereço IP interno:
echo """ - vpcNetworkSources: - vpcSubnetwork: network: VPC_NETWORK_NAME vpcIpSubnetworks: - IP_RANGE """ > level.yamlSubstitua:
VPC_NETWORK_NAME: o nome da rede VPC em que fica a
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 os formatos explicados anteriormente para o intervalo de endereços IP e o nome da rede VPC.
Para mais informações sobre o arquivo YAML, consulte Arquivo YAML
basic-level-spec.Para criar um nível de acesso usando o arquivo YAML, execute o seguinte comando da gcloud CLI:
gcloud access-context-manager levels create LEVEL_NAME \ --title="TITLE" --basic-level-spec=FILE_NAMESubstitua:
LEVEL_NAME: um nome exclusivo para o nível de acesso. Por exemplo,
allowvm1.TITLE: um título curto e legível por humanos para o nível de acesso. Por exemplo,
allowvm1.FILE_NAME: o arquivo YAML que define suas condições de acesso para o nível de acesso. Por exemplo,
level.yaml.
Para mais informações, consulte Criar um nível de acesso básico.
Configurar uma política de entrada para permitir o tráfego de API de entrada para o bucket do Cloud Storage
Se quiser permitir o acesso apenas da 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.
Crie um arquivo YAML que defina 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.yamlSubstitua:
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 sobre o arquivo YAML, consulte a Referência de regras de entrada.
Para atualizar a política de entrada de um perímetro de serviço, execute o seguinte comando da gcloud CLI:
gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
Substitua:
PERIMETER: o nome do perímetro de serviço que protege o projeto do Cloud Storage. Por exemplo,
sp2.FILE_NAME: o arquivo YAML que define sua política de entrada. Por exemplo,
ingress.yaml.
Para mais informações, consulte Como atualizar políticas de entrada e saída de um perímetro de serviço.
Configurar uma política de saída para permitir o tráfego de API de saída para o bucket do Cloud Storage
Além disso, configure uma política de saída no perímetro sp1 para permitir que o tráfego da API Cloud Storage saia do perímetro.
Crie um arquivo YAML que defina sua política de saída. Verifique se você definiu o campo
sourceRestrictioncomoSOURCE_RESTRICTION_ENABLEDno arquivo 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.yamlSubstitua:
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 sobre o arquivo YAML, consulte a Referência de regras de saída.
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:
PERIMETER: o nome do perímetro de serviço que protege o projeto host da rede. Por exemplo,
sp1.FILE_NAME: o arquivo YAML que define sua política de saída. Por exemplo,
egress.yaml.
Para mais informações, consulte Como atualizar políticas de entrada e saída de um perímetro de serviço.
Depois de configurar as políticas de entrada e saída, o bucket do Cloud Storage fica acessível da VM1, mas não da VM2.
Recomendações
Ao ativar um endereço IP interno, recomendamos que você desative o encaminhamento de IP para suas VMs. O encaminhamento de IP permite que uma VM na mesma rede VPC envie solicitações usando um endereço IP diferente, o que representa risco de spoofing de endereço IP.
Se você quiser ativar o encaminhamento de IP, recomendamos usar as seguintes configurações para reduzir o risco de spoofing de endereços IP:
Use a restrição da política da organização
Restrict VM IP Forwarding(constraints/compute.vmCanIpForward) para garantir que apenas VMs autorizadas possam ativar o encaminhamento de IP.Use origens para regras de firewall e restrinja os endereços IP que podem se comunicar com as VMs que têm encaminhamento de IP ativado. Realize as tarefas a seguir:
Configure regras de firewall de entrada para permitir o tráfego de entrada apenas 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 o 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.