Exemplo de migração de redes VPC para perímetros separados

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:

Projeto anfitrião 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 e VPC2.
  • Projetos de serviços. Os projetos de serviço service-project-1 e service-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 VM VM1 na rede VPC VPC1 e a VM VM2 na rede VPC VPC2 podem aceder a recursos em service-project-1 e service-project-2.

O diagrama seguinte mostra a configuração do perímetro do projeto anfitrião após a migração.

Projeto de 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ço service-project-1. A VM VM1 pode aceder ao contentor do Cloud Storage em service-project-1, mas não consegue aceder ao contentor do Cloud Storage em service-project-2.
  • Perimeter-2. Este perímetro protege a rede VPC VPC2 e o projeto de serviço service-project-2. A VM VM2 pode aceder ao contentor do Cloud Storage em service-project-2, mas não consegue aceder ao contentor do Cloud Storage em service-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