Usar o VPC Service Controls

O VPC Service Controls é um recurso do Google Cloud em que é possível configurar um perímetro seguro para evitar a exfiltração de dados. Nesta página, mostramos como usar o VPC Service Controls com pools particulares do Cloud Build para aumentar a segurança das suas criações.

Antes de começar

  • Para usar os exemplos de linha de comando neste guia, instale e configure a Google Cloud CLI.

  • Configure uma conexão particular entre a rede de nuvem privada virtual e a rede VPC em que os pools privados residem. Para mais instruções, consulte Como configurar o ambiente para criar pools particulares.

  • Os builds executados no perímetro de serviço não terão permissões para armazenar registros de build no bucket de registros padrão do Cloud Storage. Antes de executar o build, configure o arquivo de configuração com uma das seguintes opções:

  • Se os builds enviarem imagens e artefatos para o Artifact Registry ou o Cloud Storage em um projeto diferente do Google Cloud , adicione esse projeto ao mesmo perímetro de serviço do projeto de origem dos seus builds.

  • Opcional: conheça as configurações de tipo de máquina e a disponibilidade regional. Para mais informações, consulte workerconfig na documentação do esquema do arquivo de configuração do pool particular.

Para receber as permissões necessárias para configurar um perímetro de serviço, peça ao administrador para conceder a você os seguintes papéis do IAM na sua conta de serviço:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Configurar um pool particular no perímetro do VPC Service Controls

Para usar o VPC Service Controls com o Cloud Build, primeiro você precisa criar e configurar um perímetro de serviço, que é feito no nível da organização. Essa configuração garante que as verificações do VPC Service Controls sejam aplicadas ao uso do Cloud Build e que os desenvolvedores só possam executar versões em conformidade com o VPC Service Controls.

Criar um perímetro do VPC Service Controls

Siga o Guia de início rápido do VPC Service Controls para:

  1. criar um perímetro de serviço;
  2. Adicione o projeto em que você planeja criar o pool particular para o perímetro.

  3. Restrinja a API Cloud Build.

Depois de configurar o perímetro de serviço, todas as chamadas para a API Cloud Build serão verificadas para garantir que as chamadas sejam originadas dentro do mesmo perímetro.

Como conceder acesso à conta de serviço ao perímetro do VPC Service Controls

Nos casos a seguir, é necessário conceder à conta de serviço legada do Cloud Build ou do Compute Engine acesso ao perímetro do VPC Service Controls para que seus builds acessem recursos dentro do perímetro:

  • Se você estiver usando a conta de serviço legada do Cloud Build ou do Compute Engine para iniciar builds usando um gatilho de build, a API Cloud Build ou a linha de comando.

  • Se você estiver usando contas de serviço especificadas pelo usuário para iniciar builds com um gatilho de build.

Não é necessário conceder acesso ao perímetro do VPC Service Controls à conta de serviço legada do Cloud Build ou do Compute Engine se você estiver usando contas de serviço especificadas pelo usuário para iniciar builds usando a API Cloud Build ou a linha de comando.

Siga estas etapas para conceder à conta de serviço legada do Cloud Build ou do Compute Engine acesso ao perímetro do VPC Service Controls:

  1. Anote o endereço de e-mail da conta de serviço legada:

    1. Abra a página do IAM:

      Abra a página do IAM

    2. Selecione o projeto que você adicionou ao perímetro de serviço.

    3. Na tabela de permissões, localize o endereço de e-mail correspondente à conta de serviço legada do Cloud Build.

  2. Atualize a política de entrada do perímetro de serviço para permitir que a conta de serviço chame as APIs do Cloud Build. Essa regra de entrada permite que a conta de serviço faça a chamada de API CreateBuild. Para mais informações sobre como definir políticas de entrada do VPC Service Controls, consulte Como configurar políticas de entrada e saída e Regras de entrada e saída.

    - ingressFrom:
        identities:
        - serviceAccount:SERVICE_ACCOUNT_EMAIL
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: 'cloudbuild.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/PROJECT_NUMBER'
    
  3. Atualize a política de perímetro executando o comando a seguir e substituindo as variáveis pelos valores adequados:

    gcloud beta access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=INGRESS-FILENAME \
        --policy=POLICY_ID
    

Em que:

  • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço.
  • PROJECT_NUMBER: o número do projeto do Google Cloud projeto que você adicionou ao perímetro do VPC Service Controls.
  • PERIMETER_NAME: o nome do seu perímetro do VPC Service Controls.
  • INGRESS-FILENAME: o nome do arquivo de política de entrada.
  • POLICY_ID: o ID da política de acesso.

Opcional: como ativar o acesso do perímetro para máquinas de desenvolvimento

Como as verificações do VPC Service Controls são aplicadas para a API Cloud Build, as chamadas à API Cloud Build falharão, a menos que sejam originadas dentro do perímetro de serviço. Portanto, para gerenciar builds com a API Cloud Build, a interface do Cloud Build no console Google Cloud ou a Google Cloud CLI, escolha uma das seguintes opções:

  • Use uma máquina dentro do perímetro do VPC Service Controls. Por exemplo, use uma VM do Compute Engine ou um computador no local conectado à rede VPC via VPN.

  • Conceda aos desenvolvedores acesso ao perímetro. Por exemplo, crie níveis de acesso que permitam o acesso ao perímetro com base no endereço IP ou na identidade do usuário. Para mais informações, consulte Como permitir acesso a recursos protegidos de fora de um perímetro.

Configurar restrições da política da organização

Para garantir que as verificações do VPC Service Controls sejam aplicadas corretamente e que você esteja restringindo builds em uma organização Google Cloud para usar apenas os pools particulares especificados, defina a restrição constraints/cloudbuild.allowedWorkerPools da política da organização. É possível aplicar a política da organização a toda a organização, a um projeto ou a uma pasta na organização. Por exemplo, a política da organização pode especificar que:

  • Todos os builds na organização usam os pools particulares especificados.
  • Todos os builds em uma pasta usam os pools particulares especificados.
  • Todas as versões em um projeto usam os pools privados especificados.

Permissões do IAM: para gerenciar as políticas da organização, é necessário o papel de Administrador da política da organização (roles/orgpolicy.policyAdmin). Para instruções sobre como conceder um papel, consulte Como configurar o acesso aos recursos do Cloud Build.

O comando gcloud resource-manager org-policies allow define uma política da organização que exige que as versões na organização usem somente o pool particular especificado:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools \
     projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
     --organization ORGANIZATION_ID

Em que:

  • PRIVATEPOOL_ID: o ID do pool particular para executar builds.

  • PRIVATEPOOL_PROJECT_ID: o ID do Google Cloud projeto que contém o pool particular.

  • LOCATION: a região que contém o pool particular.

  • ORGANIZATION_ID: o ID da organização em que você está executando os builds.

O comando é compatível com os prefixos under: e is.

Para definir a política da organização que exige que todos os builds na organização usem qualquer pool particular dessa organização:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
     --organization ORGANIZATION_ID

Em que ORGANIZATION_ID é o ID da organização que contém os pools particulares.

Para definir uma política da organização que exija que todas as versões nos projetos em uma pasta usem qualquer pool particular no projeto especificado:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
     --folder FOLDER_ID

Em que PROJECT_ID é o ID do projeto que contém os pools particulares e FOLDER_ID contém os projetos em que você está executando as versões.

Para definir uma política da organização que exija que todos os builds em um projeto usem qualquer pool particular no projeto especificado:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
     --project BUILD_PROJECT_ID

Em que PRIVATEPOOL_PROJECT_ID é o ID do projeto que contém os pools privados e BUILD_PROJECT_ID é o ID do projeto em que você está executando as versões.

Lembre-se das seguintes considerações ao aplicar a restrição da política da organização constraints/cloudbuild.allowedWorkerPools:

  • Se você aplicar essa restrição de política da organização a um projeto do Google Cloud , verifique se todas as versões do projeto usam o pool particular. Os builds que tentam usar o pool compartilhado padrão vão falhar.

  • Se a sua organização Google Cloud contiver serviços como o App Engine ou o Cloud Run functions que usam implicitamente o Cloud Build, a aplicação dessa restrição de política da organização poderá fazer com que esses serviços não funcionem conforme esperado.

Criar um pool particular no perímetro de serviço

Console do Google Cloud

  1. Abra a página Pool de worker no console Google Cloud :

    Abrir a página do pool de worker do Cloud Build

  2. Clique em Criar pool particular.

    A página Criar pool particular é exibida.

    Insira as seguintes informações para criar seu pool particular:

  3. Nome: insira um nome para o pool particular. Esse valor só pode conter caracteres alfanuméricos /[a-z][0-9]/ ou traços -. O nome do pool particular precisa ter entre 1 e 63 caracteres.

  4. Região: selecione a região em que você quer que o pool particular seja criado.

  5. Configuração da máquina: configure o seguinte:

    1. Série: escolha uma série de máquinas.

    2. Tipo de máquina: essa configuração mostra os tipos de máquina, com base na série selecionada, que o pool de trabalhadores pode usar. Os tipos de máquina disponíveis variam de acordo com a região.

    3. Tamanho do disco: insira um tamanho de disco para o pool particular. Especifique um valor maior ou igual a 100 e menor ou igual a 4.000. Se você não fornecer um valor, o Cloud Build usará um tamanho de disco de 100.

    4. Virtualização aninhada: se você selecionou uma máquina da série C3, é possível ativar a virtualização aninhada. Com esse recurso, é possível executar instâncias de máquina virtual (VM) dentro de outras VMs para criar seus próprios ambientes de virtualização.

  6. Em Tipo de rede, selecione Rede particular e escolha o seguinte:

    1. Projeto: selecione seu Google Cloud ID do projeto.

    2. Rede: selecione sua rede no menu suspenso. Se você ainda não criou uma rede, consulte Criar e gerenciar redes VPC para saber como fazer isso.

    3. Intervalo de IP: insira o intervalo de IP interno que a rede produtora do Cloud Build pode usar para alocar às VMs, mantendo uma conexão com repositórios particulares.

      É possível especificar o intervalo usando a notação de roteamento entre domínios sem classe (CIDR) no formato STARTING_IP_ADDRESS/SUBNET_PREFIX_SIZE. Por exemplo, 192.0.2.0/24 tem um comprimento de prefixo de 24. Os primeiros 24 bits do intervalo de IP são usados como máscara de sub-rede (192.0.2.0), enquanto os possíveis endereços de hosts variam de 192.0.2.0 a 192.0.2.255.

      O valor do comprimento do prefixo não pode exceder /29. Se nenhum valor for especificado para o intervalo, um valor padrão de /24 será atribuído automaticamente. Se nenhum valor for especificado para o tamanho do prefixo, os endereços IP serão atribuídos automaticamente na rede VPC em peering. Se nenhum valor for especificado para o endereço IP, ele será automaticamente atribuído a um intervalo na rede VPC pareada.

    4. Desmarque Atribuir IPs externos para restringir o acesso à sua rede particular.

  7. Clique em Criar para criar seu pool particular.

gcloud

  1. Crie um arquivo de configuração de pool particular no formato YAML ou JSON e defina a sinalização egressOption como NO_PUBLIC_EGRESS:

    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
        peeredNetwork: PEERED_NETWORK
      workerConfig:
        diskSizeGb: 'PRIVATE_POOL_DISK_SIZE'
        machineType: PRIVATE_POOL_MACHINE_TYPE
    

    Em que:

    • PEERED_NETWORK é o URL de recursos da rede que está em peering com a rede do provedor de serviços. PEERED_NETWORK precisa ter o formato projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME, em que NETWORK_PROJECT_ID é o ID do projeto do projeto Google Cloud que contém sua rede VPC e NETWORK_NAME é o nome da sua rede VPC.
    • PRIVATE_POOL_MACHINE_TYPE é o tipo de máquina do Compute Engine para instância de pool particular. Para tipos de máquina compatíveis, consulte Esquema de arquivo de configuração do pool particular.
    • PRIVATE_POOL_DISK_SIZE é o tamanho do disco para a instância de pool particular em GB. Especifique um valor maior ou igual a 100 e menor ou igual a 1.000. Se você especificar 0, o Cloud Build usará o valor padrão de 100.
    • egressOption é a sinalização para ativar o perímetro do VPC Service Controls para seu pool particular. Defina como NO_PUBLIC_EGRESS para criar seu pool particular no perímetro do VPC Service Controls.
  2. Execute o seguinte comando gcloud, em que PRIVATEPOOL_ID é um identificador exclusivo para seu pool particular, PRIVATEPOOL_CONFIG_FILE é o nome do arquivo de configuração do pool particular e REGION é o região em que você quer criar o pool particular:

    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
    

Opcional: ativar chamadas da Internet pública na rede VPC

Para permitir que sua rede VPC tenha conectividade de rede com o local em que seu repositório está hospedado (por exemplo, github.com), configure as duas opções a seguir:

Limitações

  • A proteção do VPC Service Controls está disponível apenas para builds executadas em pools particulares. Não é possível usar o VPC Service Controls com builds executadas em pools padrão.

  • Os gatilhos do Pub/Sub do Cloud Build não são compatíveis quando o VPC Service Controls é usado.

A seguir