Como usar 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 dos seus builds.

Limitações

  • A proteção do VPC Service Controls está disponível apenas para builds executados em particular piscinas; não é possível usar o VPC Service Controls com builds executados em pools padrão.

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

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 à conta de serviço acesso ao perímetro do VPC Service Controls

Nos casos a seguir, é preciso conceder ao serviço legado do Cloud Build ou do Compute Engine acesso de conta ao perímetro do VPC Service Controls para que seus builds acessem recursos no perímetro:

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

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

Você não precisa conceder acesso à conta de serviço legada do Cloud Build ou Compute Engine ao perímetro do VPC Service Controls, se você usar um serviço especificado pelo usuário para iniciar builds usando a API Cloud Build ou o comando 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 ao 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 da 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 seguinte comando substituindo variáveis com valores apropriados:

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

Substitua as variáveis acima pelo seguinte:

  • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço.
  • 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 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 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 de políticas da organização

Para garantir que as verificações do VPC Service Controls sejam aplicadas corretamente e que você restringa builds em uma organização do 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

Substitua os valores dos marcadores nos comandos acima pelo seguinte:

  • PRIVATEPOOL_ID: o ID do pool privado 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, garantir que todos os builds do projeto usem o pool privado; de builds tentando de usar o pool compartilhado padrão vai falhar.

  • Se a sua organização do Google Cloud tiver serviços como o App Engine ou funções do Cloud Run que usam implicitamente o Cloud Build, aplicando essa restrição da política da organização pode fazer com que esses serviços não funcionem como 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 o projeto do Google Cloud que contém a 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: 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 as builds enviarem imagens e artefatos para o Container Registry (Descontinuado), Artifact Registry ou Cloud Storage que em outro projeto do Google Cloud, adicione-o 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