Pode associar o Cloud Build a uma instância do Secure Source Manager Private Service Connect através de pools privados do Cloud Build.
Antes de começar
- Crie uma instância do Secure Source Manager do Private Service Connect.
- Se configurou anteriormente os pontos finais para a sua instância do Private Service Connect, tem de os desassociar. Para libertar os seus pontos finais, siga as instruções em Liberte um endereço IPv4 ou IPv6 interno estático.
-
Enable the Cloud Build, Service Networking, and Compute Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.
Funções necessárias
Para receber as autorizações de que
precisa para ligar o Cloud Build a uma instância do Secure Source Manager do Private Service Connect,
peça ao seu administrador para lhe conceder a
função de administrador do Access Context Manager (roles/accesscontextmanager.policyAdmin
)
função do IAM na organização.
Configure a sua conta de serviço
Para seguir o princípio do menor privilégio no Cloud Build, pode configurar o Cloud Build para usar uma conta de serviço com privilégios suficientes para executar uma compilação.
Se não especificar uma conta de serviço, o Cloud Build pode selecionar automaticamente uma conta de serviço para executar compilações em seu nome. Esta conta de serviço pode ter autorizações desnecessariamente amplas para o seu exemplo de utilização, como acesso à sua instância do Secure Source Manager e a quaisquer repositórios no seu projeto.
Crie uma conta de serviço se ainda não tiver uma que queira usar.
-
Na Google Cloud consola, aceda à página settings Secure Source Manager Autorizações:
No separador Autorizações da conta de serviço, selecione a conta de serviço que quer usar como conta de serviço do Cloud Build.
Opcionalmente, selecione Definir como conta de serviço preferencial para pré-preencher a sua conta de serviço quando criar novos acionadores.
Conceda as autorizações necessárias à conta de serviço
Conceda à conta de serviço as funções do Cloud Build necessárias para o seu exemplo de utilização. Para ver informações sobre as funções do Cloud Build necessárias para diferentes ações do Cloud Build, consulte o artigo Configurar o acesso ao Cloud Build.
Para conceder autorizações à conta de serviço para obter o certificado de AC, execute o seguinte comando.
gcloud projects add-iam-policy-binding CA_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/privateca.auditor \ --condition=None
Substitua o seguinte:
CA_PROJECT_ID
: com o ID do projeto do projeto do conjunto de CA.SA_EMAIL
: com o email da conta de serviço que definiu como a sua conta de serviço do Cloud Build.
Para conceder à conta de serviço autorizações de acesso à instância do Secure Source Manager, execute o seguinte comando.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor \ --condition=None
Para conceder autorizações à conta de serviço para ler a partir de repositórios do Secure Source Manager, execute o seguinte comando.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.repoReader \ --condition=None
Configure registos de compilação
Quando especifica a sua própria conta de serviço para compilações, tem de armazenar os registos de compilação no Cloud Logging ou num contentor do Cloud Storage criado pelo utilizador. Não pode armazenar os seus registos no contentor de registos predefinido.
Para armazenar registos de compilação no Cloud Logging, conceda a função de
escritor de registos (roles/logging.logWriter
) à sua
conta de serviço do Cloud Build.
Para mais informações sobre como configurar os registos de compilação, consulte o artigo Configure contas de serviço especificadas pelo utilizador.
Crie uma zona DNS do Cloud privada
Para criar uma zona de DNS privado gerida, execute o seguinte comando.
gcloud dns managed-zones create ZONE_NAME \
--project=PROJECT_ID \
--description=DESCRIPTION \
--dns-name="INSTANCE_LOCATION.p.sourcemanager.dev." \
--visibility="private" \
--networks="https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK"
Substitua o seguinte:
ZONE_NAME
: com o nome que quer dar à zona gerida.PROJECT_ID
: com o ID do projeto do Google Cloud projeto que quer usar para a zona do Cloud DNS.DESCRIPTION
: com uma descrição da zona.INSTANCE_LOCATION
: com a localização onde quer criar a instância do Secure Source Manager.
Para mais informações sobre as zonas de DNS privado geridas do Google Cloud, consulte o artigo Vista geral do Cloud DNS.
Configure a sua rede de nuvem virtual privada (VPC)
Reserve um intervalo de IPs que quer usar para estabelecer peering entre a VPC do Secure Source Manager e o pool privado do Cloud Build.
gcloud compute addresses create CB_PEER_RANGE \ --global \ --purpose=VPC_PEERING \ --prefix-length=24 \ --description="IP range for peering with Cloud Build private pool" \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID
Substitua o seguinte:
CB_PEER_RANGE
: com o nome da morada a criar.NETWORK
: com o recurso de rede no qual os endereços devem ser reservados. Se estiver a usar a rede predefinida, o valor édefault
.INSTANCE_PROJECT_ID
: com o ID do projeto da instância do Private Service Connect.
Para criar uma interligação de VPC com
servicenetworking.googleapis.com
, execute o seguinte comando.gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=CB_PEER_RANGE \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID
Para criar um domínio DNS com peering para estabelecer ligação ao Cloud Build, execute o seguinte comando.
gcloud services peered-dns-domains create DNS_PEERING_DOMAIN \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID \ --dns-suffix=INSTANCE_LOCATION.p.sourcemanager.dev.
Substitua o seguinte:
DNS_PEERING_DOMAIN
: com o nome do domínio DNS em peering que está a criar.
As zonas DNS privadas têm de ser partilhadas explicitamente. Para mais informações sobre a partilha de zonas de DNS privado, consulte o artigo Partilhe zonas de DNS privado com produtores de serviços.
Para exportar rotas de rede para o Cloud Build, execute o seguinte comando.
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=NETWORK \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip \ --project=INSTANCE_PROJECT_ID
Para criar o pool privado do Cloud Build no mesmo Google Cloud projeto que a instância do Private Service Connect, execute o seguinte comando.
gcloud builds worker-pools create PRIVATE_POOL_ID \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --peered-network=projects/INSTANCE_PROJECT_ID/global/networks/NETWORK \ --worker-disk-size=100 \ --no-public-egress
Onde
PRIVATE_POOL_ID
é o nome do conjunto privado que está a criar. O nome tem de ter entre 1 e 63 carateres, e os carateres válidos são[a-zA-Z0-9_-]+
.Para criar um grupo de pontos finais da rede (NEG) do Private Service Connect para o ponto final HTTP, execute o seguinte comando:
gcloud beta compute network-endpoint-groups create HTTP_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=HTTP_PSC \ --network=NETWORK --subnet=SUBNET
Onde:
HTTP_NEG_NAME
é o nome do NEG que quer criar para o ponto final HTTP.HTTP_PSC
é o valor do ponto final do Private Service Connect HTTP.
Para criar um NEG do Private Service Connect para o ponto final SSH, execute o seguinte comando:
gcloud beta compute network-endpoint-groups create SSH_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=SSH_PSC \ --network=NETWORK --subnet=SUBNET
Onde:
SSH_NEG_NAME
é o nome do NEG que quer criar para o ponto final SSH.SSH_PSC
é o valor do ponto final do Private Service Connect SSH.
Configure um balanceador de carga interno (ILB) de proxy
Não é possível aceder aos pontos finais a partir de redes de VPCs com intercâmbio. Para aceder aos pontos finais do Secure Source Manager, tem de configurar um equilibrador de carga interno (ILB) de nível 4 para cada ponto final. Para mais informações sobre o acesso a serviços publicados através de pontos finais, consulte o artigo Acerca do acesso a serviços publicados através de pontos finais.
Para criar uma sub-rede só de proxy para ILBs, execute o seguinte comando.
gcloud compute networks subnets create ILB_PROXY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=INSTANCE_LOCATION \ --network=NETWORK \ --range=CIDR_RANGE \ --project=INSTANCE_PROJECT_ID
Onde:
ILB_PROXY_SUBNET_NAME
é o nome da sub-rede a criar.CIDR_RANGE
é o intervalo de endereços IP principal da sub-rede. Tem de usar uma máscara de sub-rede com um comprimento máximo de26
para que estejam disponíveis, pelo menos, 64 endereços IP para proxies na região. O comprimento da máscara de sub-rede recomendado é/23
. Para mais informações sobre sub-redes apenas de proxy, consulte o artigo Sub-redes apenas de proxy para equilibradores de carga baseados no Envoy.
Para criar um ILB de camada 4 para o NEG de ligação HTTP, execute o seguinte comando.
gcloud compute backend-services create HTTP_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGED
Em que
HTTP_PROXY_ILB
é o nome do ILB a criar para o ponto final HTTP.Para criar um ILB de camada 4 para o NEG de ligação SSH, execute o seguinte comando.
gcloud compute backend-services create SSH_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGED
Onde
SSH_PROXY_ILB
é o nome do ILB a criar para o ponto final SSH.
Registe o NEG do Private Service Connect como o back-end dos ILBs
Para registar o NEG HTTP, execute o seguinte comando.
gcloud compute backend-services add-backend HTTP_PROXY_ILB \ --network-endpoint-group=HTTP_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
Para registar o NEG SSH, execute o seguinte comando.
gcloud compute backend-services add-backend SSH_PROXY_ILB \ --network-endpoint-group=SSH_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
Crie proxies TCP de destino para os ILBs
Para criar um proxy TCP de destino para o ILB HTTP, execute o seguinte comando.
gcloud compute target-tcp-proxies create ILB_HTTP_TCP_TARGET_PROXY \ --backend-service=HTTP_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
Onde
ILB_HTTP_TCP_TARGET_PROXY
é o nome do proxy TCP de destino que quer criar para o ILB HTTP.Para criar um proxy TCP de destino para o ILB de SSH, execute o seguinte comando.
gcloud compute target-tcp-proxies create ILB_SSH_TCP_TARGET_PROXY \ --backend-service=SSH_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
Em que
ILB_SSH_TP_TARGET_PROXY
é o nome do proxy TCP de destino que está a criar para o ILB de SSH.
Crie regras de encaminhamento para encaminhar o tráfego para os ILBs
Para criar uma regra de encaminhamento para encaminhar tráfego para o ILB HTTP, execute o seguinte comando.
gcloud compute forwarding-rules create HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 443 \ --target-tcp-proxy=ILB_HTTP_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATION
Onde
HTTP_PROXY_FORWARD
é o nome da regra de encaminhamento que está a criar.Para criar uma regra de encaminhamento para encaminhar tráfego para o ILB de SSH, execute o seguinte comando.
gcloud compute forwarding-rules create SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 22 \ --target-tcp-proxy=ILB_SSH_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATION
Onde
SSH_PROXY_FORWARD
é o nome da regra de encaminhamento que está a criar.
Crie os seus registos de DNS privados
Depois de configurar as regras de encaminhamento, tem de registar os registos de DNS na sua zona de DNS do Cloud privada para cada um dos nomes de anfitrião da instância.
Para obter o endereço IP da sua regra de encaminhamento HTTP, execute o seguinte comando.
gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION
Onde
HTTP_PROXY_FORWARD
é o nome que atribuiu à regra de encaminhamento para HTTP.Para registar o nome do anfitrião da API, execute o seguinte comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IP
Substitua o seguinte:
INSTANCE_ID
: com o ID da instância.INSTANCE_PROJECT_NUMBER
: com o número do projeto da sua instância Google Cloud.INSTANCE_LOCATION
: com a região da sua instância.INSTANCE_PROJECT_ID
: com o ID do projeto da sua instância Google CloudZONE_NAME
: com o nome que atribuiu à zona gerida.HTTP_LB_IP
: é o resultado degcloud compute forwarding-rules describe HTTP_PROXY_FORWARD
.
Para registar o nome do anfitrião HTTP do Git, execute o seguinte comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IP
Para registar o nome do anfitrião HTML para a interface Web, execute o seguinte comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER.INSTANCE_LOCATION.p.sourcemanager.dev.\ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IP
Para obter o endereço IP da regra de encaminhamento SSH, execute o seguinte comando.
gcloud compute forwarding-rules describe SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION
Em que
SSH_PROXY_FORWARD
é o nome que atribuiu à regra de encaminhamento para SSH.Para registar o nome do anfitrião SSH do Git, execute o seguinte comando.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=SSH_LB_IP
Em que
SSH_LB_IP
é o resultado degcloud compute forwarding-rules describe SSH_PROXY_FORWARD
.
Crie um repositório na sua instância
Pode usar um anfitrião de bastion para aceder e criar um repositório na sua instância do Private Service Connect.
Crie uma VM de bastion host com o
cloud-platform
âmbito seguindo as instruções em Crie uma VM de bastion host.Execute o seguinte comando para criar um repositório.
curl \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://INSTANCE_ID-PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev/v1/projects/PROJECT_NUMBER/locations/INSTANCE_LOCATION/repositories?repository_id=REPOSITORY_ID \ -d '{}'
Substitua o seguinte:
INSTANCE_ID
: com o nome da sua instância do Secure Source Manager.PROJECT_NUMBER
: com o número do projeto Google Cloud da sua instância.INSTANCE_LOCATION
: com a localização da sua instância.REPOSITORY_ID
: com o nome que quer dar ao seu repositório.
É criado um repositório na sua instância do Private Service Connect.
Teste o acesso ao Secure Source Manager a partir do Cloud Build
Para confirmar que tudo está a funcionar corretamente, pode usar o seguinte ficheiro de configuração de compilação para testar a conetividade e extrair o código fonte do Secure Source Manager. O ficheiro de configuração da compilação pressupõe que está a usar o Cloud Logging para armazenar os registos de compilação. Se estiver a usar um contentor do Cloud Storage criado pelo utilizador, consulte o artigo Execute uma compilação com um ficheiro de configuração para ver instruções sobre como editar o ficheiro de configuração da compilação.
Antes de usar o seguinte ficheiro YAML, substitua o seguinte:
CA_POOL_NAME
: com o nome do grupo de ACs que usou quando criou a instância do Private Service Connect.CA_PROJECT_ID
: com o projeto Google Cloud que usou para criar o grupo de ACs.INSTANCE_LOCATION
: com a localização da sua instância.INSTANCE_ID
: com o nome da sua instância.INSTANCE_PROJECT_NUMBER
: com o número do projeto Google Cloud da sua instância.REPOSITORY_ID
: com o nome que deu ao seu repositório.SA_PROJECT_ID
: com o ID do projeto da conta de serviço que está a usar com o Cloud Build.SERVICE_ACCOUNT
: com o endereço de email da conta de serviço que está a usar com o Cloud Build.
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- privateca
- pools
- get-ca-certs
- CA_POOL_NAME
- '--project'
- CA_PROJECT_ID
- '--location'
- INSTANCE_LOCATION
- '--output-file=cacert.pem'
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- 'credential.https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev.helper'
- gcloud.sh
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- http.sslCAInfo
- cacert.pem
- name: gcr.io/cloud-builders/git
env:
- GIT_TRACE=1
- GIT_CURL_VERBOSE=1
args:
- clone
- >-
https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev/INSTANCE_PROJECT_ID/REPOSITORY_ID
- https-clone
serviceAccount: 'projects/SA_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
options:
logging: CLOUD_LOGGING_ONLY
O que se segue?
- Para automatizar compilações a partir do Secure Source Manager, siga as instruções em Crie um ficheiro de acionadores.