Como 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 os pools privados do Cloud Build para aumentar a segurança das suas versões.

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 executados em pools padrão.

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.

Como configurar um pool privado 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.

Como criar um perímetro do VPC Service Controls

Permissões de gerenciamento de identidade e acesso: para configurar um perímetro de serviço, é preciso ter o papel de visualizador da organização e editor do Access Context Manager. Para instruções sobre como conceder esses papéis, consulte Como configurar o acesso aos recursos do Cloud Build.

Para 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 do Cloud Build ao perímetro do VPC Service Controls

O Cloud Build usa a conta de serviço do Cloud Build ou contas de serviço especificadas pelo usuário para executar builds em seu nome. Nos casos a seguir, conceda à conta de serviço acesso ao perímetro do VPC Service Controls para que as versões acessem os recursos no perímetro:

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

Execute as etapas a seguir para conceder à conta de serviço do Cloud Build acesso ao perímetro do VPC Service Controls:

  1. Anote o endereço de e-mail da sua conta de serviço do Cloud Build ou da conta de serviço especificada pelo usuário. Para conseguir o endereço de e-mail da sua conta de serviço do Cloud Build:

    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 que termina com @cloudbuild.gserviceaccount.com e anote-o. Esta é sua conta de serviço 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 do perímetro executando o seguinte comando, substituindo as variáveis pelos valores apropriados:

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

Substitua as variáveis acima por estas:

  • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da sua conta de serviço do Cloud Build ou da conta de serviço especificada pelo usuário.
  • PROJECT_NUMBER: o número do projeto do Google Cloud que você adicionou ao perímetro do VPC Service Controls.
  • PERIMETER_NAME: o nome do perímetro do VPC Service Controls.
  • INGRESS-FILENAME: o nome do arquivo da 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 IU do Cloud Build no console do 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.

Como configurar restrições da política da organização

Para garantir que as verificações do VPC Service Controls sejam aplicadas corretamente e você esteja restringindo builds em uma organização do Google Cloud para usar apenas os pools particulares especificados, defina a restrição da política da organização constraints/cloudbuild.allowedWorkerPools. É 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

Substitua os valores dos marcadores nos comandos acima pelo seguinte:

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

  • PRIVATEPOOL_PROJECT_ID: o ID do projeto do Google Cloud 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 todos os builds no projeto usam o pool particular. Os builds que tentarem usar o pool compartilhado padrão falharão.

  • Se sua organização do Google Cloud contiver serviços como o App Engine ou o Cloud 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.

Como criar um pool privado no perímetro de serviço

Console

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

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

  2. Selecione o projeto em que você quer criar o pool privado.

  3. Na página Pool de worker, clique em Criar.

  4. No painel lateral Criar pool privado:

    1. Digite um nome para o pool particular.

    2. Selecione a região em que você quer que o pool particular seja criado.

    3. Selecione o tipo de máquina do Compute Engine que você quer usar para o pool particular.

    4. Digite o número do projeto do Google Cloud em que você criou a rede VPC.

    5. Digite o nome da sua rede VPC.

    6. Desmarque Atribuir IPs externos.

    7. Clique em Criar.

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 estar no formato projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME, em que NETWORK_PROJECT_ID é o ID do projeto do Google Cloud que contém sua rede VPC e NETWORK_NAME é o nome dessa rede.
    • 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: como ativar chamadas da Internet pública na rede VPC

Verifique se a rede VPC está configurada para permitir a conectividade de rede em que seu repositório está hospedado (por exemplo, github.com) com as seguintes configurações:

  1. No arquivo de configuração do pool particular, verifique se o campo egressOption está definido como NO_PUBLIC_EGRESS.

  2. A rede VPC em que o pool particular é executado é definida como uma PeeredNetwork. Para permitir chamadas ao host do repositório, verifique se essa rede VPC permite a saída pública para o host do repositório. Para informações sobre como fazer isso, consulte rotas e regras de firewall.

Como executar builds em um pool particular dentro do perímetro de serviço

As versões executadas dentro do perímetro de serviço não têm acesso à Internet pública, porque você precisará executar algumas ações antes de executar uma versão.

Como enviar imagens e artefatos criados

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

Como criar um bucket de registros

O build executado no perímetro de serviço não terá permissões para armazenar registros de build no bucket de registros padrão do Cloud Storage. Escolha uma das seguintes opções:

Como executar versões

Execute seu build usando as instruções em Como executar builds em um pool particular.

A seguir