Os VPC Service Controls são uma Google Cloud funcionalidade que lhe permite configurar um perímetro seguro para proteção contra a exfiltração de dados. Esta página mostra como usar os VPC Service Controls com os pools privados do Cloud Build para adicionar segurança adicional às suas compilações.
Antes de começar
Para usar os exemplos de linhas de comando neste guia, instale e configure a CLI Google Cloud.
Configure uma ligação privada entre a sua rede da nuvem virtual privada e a rede da VPC onde residem os pools privados. Para obter instruções, consulte o artigo configure o seu ambiente para criar pools privados.
As compilações executadas no perímetro de serviço não têm autorizações para armazenar registos de compilação no contentor de registos do Cloud Storage predefinido. Antes de executar a compilação, configure o ficheiro de configuração da compilação com uma das seguintes opções:
- Opte por armazenar os registos de compilação no Cloud Logging definindo
loggingMode
comoCLOUD_LOGGING_ONLY
. - No seu projeto privado, crie um contentor de registos do Cloud Storage para armazenar os registos de compilação. Para mais informações, consulte o artigo Armazenar registos de compilação num contentor criado pelo utilizador.
- Desative os registos de compilação definindo
loggingMode
comoNONE
.
- Opte por armazenar os registos de compilação no Cloud Logging definindo
Se as suas compilações enviarem imagens e artefactos para o Artifact Registry ou o Cloud Storage num projeto Google Cloud diferente, adicione esse projeto ao mesmo perímetro de serviço que o projeto de origem das suas compilações.
Opcional: familiarize-se com as configurações do tipo de máquina e a disponibilidade regional. Para mais informações, consulte
workerconfig
na documentação do esquema do ficheiro de configuração do conjunto privado.
Para receber as autorizações de que precisa para configurar um perímetro de serviço, peça ao seu administrador para lhe conceder as seguintes funções do IAM na sua conta de serviço:
-
Visualizador da organização (
roles/resourcemanager.organizationViewer
) -
Editor do Gestor de acesso sensível ao contexto (
roles/accesscontextmanager.policyEditor
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Configure um pool privado no perímetro dos VPC Service Controls
Para usar os VPC Service Controls com o Cloud Build, primeiro tem de criar e configurar um perímetro de serviço, o que é feito ao nível da organização. Esta configuração garante que as verificações dos VPC Service Controls são aplicadas quando usa o Cloud Build e que os programadores só podem executar compilações em conformidade com os VPC Service Controls.
Crie um perímetro dos VPC Service Controls
Siga o guia de início rápido do VPC Service Controls para:
- Crie um perímetro de serviço.
Adicione o projeto no qual planeia criar o conjunto privado ao perímetro.
Restrinja a API Cloud Build.
Depois de configurar o perímetro de serviço, todas as chamadas para a API Cloud Build são verificadas para garantir que têm origem no mesmo perímetro.
Conceder à conta de serviço acesso ao perímetro do VPC Service Controls
Nos seguintes casos, tem de conceder à conta de serviço do Cloud Build ou Compute Engine acesso ao perímetro do VPC Service Controls para que as suas compilações acedam a recursos dentro do perímetro:
Se estiver a usar a conta de serviço do Cloud Build ou do Compute Engine antigo para iniciar compilações através de um acionador de compilação, da API Cloud Build ou da linha de comandos.
Se estiver a usar contas de serviço especificadas pelo utilizador para iniciar compilações através de um acionador de compilação.
Não precisa de conceder acesso à conta de serviço do Cloud Build ou do Compute Engine ao perímetro do VPC Service Controls se estiver a usar contas de serviço especificadas pelo utilizador para iniciar compilações através da API Cloud Build ou da linha de comandos.
Execute os passos seguintes para conceder à conta de serviço do Cloud Build ou Compute Engine acesso ao perímetro dos VPC Service Controls:
Tome nota do endereço de email da conta de serviço antiga:
Abra a página IAM:
Selecione o projeto que adicionou ao perímetro de serviço.
Na tabela de autorizações, localize o endereço de email correspondente à conta de serviço do Cloud Build antiga.
Atualize a política de entrada do perímetro de serviço para permitir que a conta de serviço chame as APIs Cloud Build. Esta regra de entrada permite que a conta de serviço faça a chamada API
CreateBuild
. Para mais informações sobre a definição de políticas de entrada do VPC Service Controls, consulte os artigos 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'
Atualize a política de perímetro executando o seguinte comando e substituindo as variáveis por valores adequados:
gcloud beta access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=INGRESS-FILENAME \ --policy=POLICY_ID
Onde:
SERVICE_ACCOUNT_EMAIL
: o endereço de email da conta de serviço.PROJECT_NUMBER
: o número do projeto do Google Cloud projeto que adicionou ao perímetro do VPC Service Controls.PERIMETER_NAME
: o nome do seu perímetro dos VPC Service Controls.INGRESS-FILENAME
: o nome do ficheiro da política de entrada.POLICY_ID
: o ID da política de acesso.
Opcional: ativar o acesso ao perímetro para máquinas de desenvolvimento
Uma vez que as verificações dos VPC Service Controls são aplicadas à API Cloud Build, as chamadas à API Cloud Build falham, a menos que tenham origem no perímetro de serviço. Por conseguinte, para gerir compilações com a API Cloud Build, a IU Cloud Build na Google Cloud consola ou a CLI Google Cloud, escolha uma das seguintes opções:
Use uma máquina dentro do perímetro dos VPC Service Controls. Por exemplo, pode usar uma VM do Compute Engine ou uma máquina no local ligada à sua rede VPC através de uma VPN.
Conceder aos programadores acesso ao perímetro. Por exemplo, pode criar níveis de acesso que ativem o acesso ao perímetro com base no endereço IP ou na identidade do utilizador. Para mais informações, consulte o artigo Permitir o acesso a recursos protegidos a partir do exterior de um perímetro.
Configure restrições de políticas da organização
Para garantir que as verificações do VPC Service Controls são aplicadas corretamente e que está a restringir as compilações numa organização para usar apenas os pools privados especificados, defina a constraints/cloudbuild.allowedWorkerPools
restrição da política da organização. Google Cloud
Pode aplicar a política de organização a toda a organização ou a um projeto
ou uma pasta na organização. Por exemplo, a política da sua organização pode especificar que:
- Todas as compilações na organização usam os pools privados especificados.
- Todas as compilações numa pasta usam os pools privados especificados.
- Todas as compilações num projeto usam os pools privados especificados.
Autorizações de IAM: para gerir políticas da organização, precisa da função
Administrador de políticas da organização
(roles/orgpolicy.policyAdmin
). Para obter instruções sobre como conceder uma função, consulte o artigo
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 compilações na organização usem apenas o pool privado especificado:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools \
projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
--organization ORGANIZATION_ID
Onde:
PRIVATEPOOL_ID
: o ID do pool privado para executar compilações.PRIVATEPOOL_PROJECT_ID
: o ID do Google Cloud projeto que contém o pool privado.LOCATION
: a região que contém a piscina privada.ORGANIZATION_ID
: o ID da organização onde está a executar compilações.
O comando suporta os prefixos under:
e is
.
Para definir uma política da organização que exige que todas as compilações na organização usem qualquer pool privado nessa 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 conjuntos privados.
Para definir uma política da organização que exija que todas as compilações nos projetos de uma pasta usem qualquer pool privado no projeto especificado:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
--folder FOLDER_ID
Onde PROJECT_ID
é o ID do projeto que contém os pools privados e FOLDER_ID contém os projetos onde está a executar as compilações.
Para definir uma política de organização que exija que todas as compilações num projeto usem qualquer pool privado no projeto especificado:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
--project BUILD_PROJECT_ID
Onde PRIVATEPOOL_PROJECT_ID
é o ID do projeto que contém os pools privados e BUILD_PROJECT_ID é o ID do projeto onde está a executar as compilações.
Tenha em atenção as seguintes considerações quando aplicar a restrição da política da organização constraints/cloudbuild.allowedWorkerPools
:
Se aplicar esta restrição de política organizacional a um Google Cloud projeto, certifique-se de que todas as compilações no projeto usam o pool privado. As compilações que tentarem usar o pool partilhado predefinido vão falhar.
Se a sua Google Cloud organização contiver serviços como o App Engine ou funções do Cloud Run que usam implicitamente o Cloud Build, a aplicação desta restrição da política da organização pode fazer com que estes serviços não funcionem como esperado.
Crie um pool privado no perímetro de serviço
Google Cloud consola
Abra a página Worker Pool na Google Cloud consola:
Clique em Criar conjunto privado.
É apresentada a página Criar grupo privado.
Introduza as seguintes informações para criar o seu conjunto privado:
Nome: introduza um nome para o seu conjunto privado. Este valor só pode conter carateres alfanuméricos
/[a-z][0-9]/
ou travessões-
. O nome do seu conjunto privado tem de ter entre 1 e 63 carateres.Região: selecione a região na qual quer que o conjunto privado seja criado.
Configuração da máquina: configure o seguinte:
Série: escolha uma série de máquinas.
Tipo de máquina: esta definição mostra os tipos de máquinas, com base na série de máquinas que selecionou, que o conjunto de trabalhadores pode usar. Os tipos de máquinas disponíveis variam consoante a região.
Tamanho do disco: introduza um tamanho do disco para o seu conjunto privado. Especifique um valor igual ou superior a 100 e igual ou inferior a 4000. Se não fornecer um valor, o Cloud Build usa um tamanho do disco de 100.
Virtualização aninhada: se selecionou uma máquina da série C3, pode ativar a virtualização aninhada. Esta funcionalidade permite-lhe executar instâncias de máquinas virtuais (VMs) dentro de outras VMs para que possa criar os seus próprios ambientes de virtualização.
Em Tipo de rede, selecione Rede privada e, de seguida, selecione o seguinte:
Projeto: selecione o seu Google Cloud ID do projeto.
Rede: selecione a sua rede no menu pendente. Se não tiver criado uma rede, consulte o artigo Criar e gerir redes VPC para saber como criar uma rede.
Intervalo de IP: introduza o intervalo de IP interno que a rede do produtor do Cloud Build pode usar para atribuir a VMs que mantêm uma ligação com repositórios privados.
Pode especificar o intervalo através da notação de encaminhamento CIDR (Classless Inter-Domain Routing) no formato
STARTING_IP_ADDRESS/SUBNET_PREFIX_SIZE
. Por exemplo,192.0.2.0/24
tem um comprimento do 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 anfitriões variam de192.0.2.0
a192.0.2.255
.O valor do comprimento do prefixo não pode exceder
/29
. Se não for especificado nenhum valor para o intervalo, é atribuído automaticamente um valor predefinido de/24
. Se não for especificado nenhum valor para o comprimento do prefixo, os endereços IP são atribuídos automaticamente na rede de VPC com peering. Se não for especificado nenhum valor para o endereço IP, é atribuído automaticamente um intervalo ao endereço IP na rede VPC com peering.Desmarque a opção Atribuir IPs externos para restringir o acesso à sua rede privada.
Clique em Criar para criar o seu conjunto privado.
gcloud
Crie um ficheiro de configuração do conjunto privado no formato YAML ou JSON e defina a flag
egressOption
comoNO_PUBLIC_EGRESS
:privatePoolV1Config: networkConfig: egressOption: NO_PUBLIC_EGRESS peeredNetwork: PEERED_NETWORK workerConfig: diskSizeGb: 'PRIVATE_POOL_DISK_SIZE' machineType: PRIVATE_POOL_MACHINE_TYPE
Onde:
PEERED_NETWORK
é o URL do recurso de rede da rede que está em peering com a rede do fornecedor de serviços.PEERED_NETWORK
tem de estar no formatoprojects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME
, em queNETWORK_PROJECT_ID
é o ID do projeto do projeto Google Cloud que contém a sua rede VPC eNETWORK_NAME
é o nome da sua rede VPC.PRIVATE_POOL_MACHINE_TYPE
é o tipo de máquina do Compute Engine para a instância do pool privado. Para os tipos de máquinas suportados, consulte o esquema do ficheiro de configuração do conjunto privado.PRIVATE_POOL_DISK_SIZE
é o tamanho do disco para a instância do conjunto privado em GB. Especifique um valor igual ou superior a 100 e igual ou inferior a 1000. Se especificar0
, o Cloud Build usa o valor predefinido de 100.egressOption
é a flag para ativar o perímetro dos VPC Service Controls para o seu conjunto privado. Defina esta opção comoNO_PUBLIC_EGRESS
para criar o seu pool privado no perímetro dos VPC Service Controls.
Execute o seguinte comando
gcloud
, em quePRIVATEPOOL_ID
é um identificador exclusivo para o seu conjunto privado,PRIVATEPOOL_CONFIG_FILE
é o nome do ficheiro de configuração do seu conjunto privado eREGION
é a região onde quer criar o seu conjunto privado:gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
Opcional: ative as chamadas pela Internet pública na rede de VPC
Certifique-se de que a sua rede VPC está configurada para permitir a conetividade de rede ao local onde o seu repositório está alojado (por exemplo, github.com) com as seguintes definições:
Certifique-se de que o campo
egressOption
no seu ficheiro de configuração do conjunto privado está definido comoPUBLIC_EGRESS
ou configure os seus conjuntos privados para usar um IP externo estático.A rede VPC na qual o seu conjunto privado é executado é definida como uma PeeredNetwork. Para permitir chamadas para o anfitrião do repositório, certifique-se de que esta rede VPC permite a saída pública para o anfitrião do repositório. Para obter informações sobre como o fazer, consulte o artigo Trajetos e regras de firewall.
Limitações
A proteção dos VPC Service Controls só está disponível para compilações executadas em pools privados. Não pode usar os VPC Service Controls com compilações executadas em pools predefinidos.
Os acionadores do Cloud Build Pub/Sub não são suportados quando os VPC Service Controls são usados.
O que se segue?
- Saiba como executar compilações em pools privadas.
- Saiba como configurar exemplos de utilização de rede usados frequentemente.