Este exemplo mostra como pode migrar redes VPC de um projeto anfitrião existente, que já se encontra num perímetro de serviço, para perímetros separados.
Neste exemplo, o projeto anfitrião consiste em duas redes de VPC. Dois projetos de serviço alojam os respetivos recursos do Cloud Storage.
O diagrama seguinte mostra a configuração do perímetro de um projeto anfitrião de exemplo antes da migração:
O diagrama de arquitetura mostra os seguintes componentes:
- Projeto do anfitrião. O projeto anfitrião contém duas redes de VPC:
VPC1
eVPC2
. - Projetos de serviços. Os projetos de serviço
service-project-1
eservice-project-2
contêm contentores do Cloud Storage e estão protegidos pelo perímetro de serviço. - Perímetro. O perímetro de serviço
perimeter-1
protege todo o projeto anfitrião e os projetos de serviço. A VMVM1
na rede VPCVPC1
e a VMVM2
na rede VPCVPC2
podem aceder a recursos emservice-project-1
eservice-project-2
.
O diagrama seguinte mostra a configuração do perímetro do projeto anfitrião após a migração.
O diagrama de arquitetura mostra os seguintes componentes:
- Perimeter-1. Este perímetro protege a rede VPC
VPC1
e o projeto de serviçoservice-project-1
. A VMVM1
pode aceder ao contentor do Cloud Storage emservice-project-1
, mas não consegue aceder ao contentor do Cloud Storage emservice-project-2
. - Perimeter-2. Este perímetro protege a rede VPC
VPC2
e o projeto de serviçoservice-project-2
. A VMVM2
pode aceder ao contentor do Cloud Storage emservice-project-2
, mas não consegue aceder ao contentor do Cloud Storage emservice-project-1
.
Neste exemplo de migração, as alterações de configuração são feitas no modo de execução de ensaio e, em seguida, validadas antes de aplicar a configuração de execução de ensaio. Este processo garante que as redes e os recursos da VPC estão protegidos e que o tráfego de produção de VPC1
para service-project-1
e de VPC2
para service-project-2
não é interrompido durante a migração.
O processo de migração consiste nos seguintes passos:
- Obtenha as redes VPC e os detalhes do perímetro
- Configure uma configuração de perímetro de execução de ensaio
- Valide a configuração do teste de execução
- Aplique a configuração de execução de ensaio
Obtenha as redes VPC e os detalhes do perímetro
Neste exemplo, antes de iniciar a migração, tem de obter a lista de redes VPC e os detalhes do perímetro.
Apresente as redes VPC no projeto anfitrião
O comando seguinte apresenta as redes VPC no network-host-project:
gcloud compute networks list --project=network-host-project
Este exemplo produz o seguinte resultado:
NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 vpc1 AUTO REGIONAL vpc2 AUTO REGIONAL
Obtenha os detalhes do perímetro
O comando seguinte obtém os detalhes do perímetro:
gcloud access-context-manager perimeters describe perimeter-1
Este exemplo produz o seguinte resultado:
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1
status:
…
resources:
- projects/<network-host-project number>
- projects/<service-project-1 number>
- projects/<service-project-2 number>
O <access policy number> é usado nos comandos de modo de teste simulado de exemplo. Também pode configurar uma política de acesso predefinida com o seguinte comando:
gcloud alpha config set access_context_manager/policy<access policy number>
Configure uma configuração de execução de ensaio
Neste exemplo, usa o comando de teste para atualizar o perímetro perimeter-1
para remover network-host-project
e service-project-2
, e adicionar VPC1
. Em seguida, execute o comando de teste para criar um novo perímetro perimeter-2
e adicione service-project-2
e VPC2
.
Se adicionar um projeto a um perímetro numa política de acesso diferente, tem de remover primeiro o projeto dos perímetros na política de acesso existente. Para informações sobre como remover um projeto de um perímetro, consulte o artigo Atualize um perímetro de serviço.
Atualize a configuração de execução de ensaio
O comando seguinte atualiza o perímetro perimeter-1
para remover network-host-project
,
service-project-2
e adiciona VPC1
:
gcloud access-context-manager perimeters dry-run update perimeter-1 --remove-resources="projects/<network-host-project number>,projects/<service-project-2 number>" --add-resources="//compute.googleapis.com/projects/network-host-project/global/networks/vpc1" --policy=<access policy number>
Crie um novo perímetro no modo de teste
O seguinte comando cria o perímetro perimeter-2
e adiciona service-project-2
,
e adiciona VPC2
:
gcloud access-context-manager perimeters dry-run create perimeter-2 --title=perimeter-2 --type="regular" --resources="projects/<service-project-2 number>,//compute.googleapis.com/projects/network-host-project/global/networks/vpc2" --restricted-services="storage.googleapis.com" --policy=<access policy number>
Valide a configuração de execução de ensaio
Neste exemplo, execute os seguintes comandos para garantir que não existem erros de teste
de VPC1
para service-project-1
e de VPC2
para service-project-2
:
Para apresentar uma lista dos contentores do Cloud Storage em service-project-1
, inicie sessão em VM1
, que está em VPC1
e execute o seguinte comando:
gcloud storage ls --project=service-project-1
Para apresentar uma lista dos contentores do Cloud Storage em service-project-2
, execute o seguinte comando:
gcloud storage ls --project=service-project-2
Os comandos são executados com êxito porque a configuração de teste não afeta o tráfego de produção. No entanto, o seguinte erro de teste de execução aparece nos registos de auditoria para aceder a service-project-2
a partir de VM1
:network-host-project
egressViolations: [ 0: { servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-1" source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC1" sourceType: "Network" targetResource: "projects/<service-project-2 number>" } ]
Da mesma forma, os pedidos do Cloud Storage de VM2
para service-project-2
não têm erros de teste de execução, e os pedidos de VM2
para service-project-1
têm o seguinte erro de teste de execução nos registos de auditoria para o network-host-project
:
egressViolations: [ 0: { servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-2" source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC2" sourceType: "Network" targetResource: "projects/<service-project-1 number>" } ]
Aplique a configuração de execução de ensaio
Tem de aplicar todas as configurações de teste de execução de uma só vez numa transação atómica.
Para aplicar as configurações de teste de execução, execute o seguinte comando:
gcloud access-context-manager perimeters dry-run enforce-all --policy=<access policy number>
Depois de aplicar as configurações de teste, execute o seguinte comando para descrever
perimeter-1
:
gcloud access-context-manager perimeters describe perimeter-1 --policy=<access policy number>
Este exemplo produz o seguinte resultado, no qual network-host-project
e service-project-2
são removidos e VPC1
é adicionado a perimeter-1
.
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1 status: … resources: - projects/<service-project-1 number> - //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC1
Execute o seguinte comando para descrever perimeter-2
:
gcloud access-context-manager perimeters describe perimeter-2 --policy=<access policy number>
Este exemplo produz o seguinte resultado, no qual service-project-2
e VPC2
são adicionados a perimeter-2
.
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-2 status: … resources: - projects/<service-project-2 number> - //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC2 title: perimeter-2