Anda dapat menghubungkan Cloud Build ke instance Private Service Connect Secure Source Manager menggunakan pool pribadi Cloud Build. Koneksi ini adalah alternatif yang lebih kompleks daripada menggunakan Developer Connect. Gunakan pendekatan yang diuraikan dalam panduan ini jika Anda tidak ingin mengekspos endpoint proxy Git.
Sebelum memulai
- Buat instance Private Service Connect Secure Source Manager.
- Jika sebelumnya Anda mengonfigurasi endpoint untuk instance Private Service Connect, Anda harus memutuskan koneksinya. Untuk merilis endpoint, ikuti petunjuk di Melepas alamat IPv4 atau IPv6 internal statis.
-
Aktifkan Cloud Build, Service Networking, dan Compute Engine API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk menghubungkan Cloud Build ke instance Private Service Connect Secure Source Manager, minta administrator untuk memberi Anda peran IAM Access Context Manager Admin (roles/accesscontextmanager.policyAdmin) di organisasi.
Mengonfigurasi akun layanan
Untuk mengikuti prinsip hak istimewa terendah di Cloud Build, Anda dapat mengonfigurasi Cloud Build untuk menggunakan akun layanan dengan hak istimewa yang cukup untuk menjalankan build.
Jika Anda tidak menentukan akun layanan, Cloud Build mungkin akan otomatis memilih akun layanan untuk menjalankan build atas nama Anda. Akun layanan ini mungkin memiliki izin yang terlalu luas untuk kasus penggunaan Anda, seperti akses ke instance Secure Source Manager dan repositori apa pun di project Anda.
Buat akun layanan jika Anda belum memiliki akun yang ingin digunakan.
-
Di Google Cloud konsol, buka halaman settings Secure Source Manager Permissions:
Di tab Service account permissions, pilih akun layanan yang ingin Anda gunakan sebagai akun layanan Cloud Build.
Secara opsional, pilih Set as preferred service account untuk mengisi akun layanan Anda secara otomatis saat Anda membuat pemicu baru.
Memberikan izin yang diperlukan kepada akun layanan
Berikan peran Cloud Build yang diperlukan kepada akun layanan untuk kasus penggunaan Anda. Untuk mengetahui informasi tentang peran Cloud Build yang diperlukan untuk berbagai tindakan Cloud Build, lihat Mengonfigurasi akses ke Cloud Build.
Untuk memberikan izin kepada akun layanan untuk mengambil sertifikat CA, jalankan perintah berikut.
gcloud projects add-iam-policy-binding CA_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/privateca.auditor \ --condition=NoneGanti kode berikut:
CA_PROJECT_ID: dengan project ID project CA pool.SA_EMAIL: dengan email akun layanan yang Anda tetapkan sebagai akun layanan Cloud Build.
Untuk memberikan izin kepada akun layanan untuk mengakses instance Secure Source Manager, jalankan perintah berikut.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor \ --condition=NoneUntuk memberikan izin kepada akun layanan untuk membaca dari repositori Secure Source Manager, jalankan perintah berikut.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.repoReader \ --condition=None
Menyiapkan log build
Saat Anda menentukan akun layanan sendiri untuk build, Anda harus menyimpan log build di Cloud Logging atau di bucket Cloud Storage yang dibuat pengguna. Anda tidak dapat menyimpan log di bucket log default.
Untuk menyimpan log build di Cloud Logging, berikan
peran Logs Writer (roles/logging.logWriter) ke
akun layanan Cloud Build Anda.
Untuk mengetahui informasi selengkapnya tentang cara menyiapkan log build, lihat Mengonfigurasi akun layanan yang ditentukan pengguna.
Membuat zona Cloud DNS pribadi
Untuk membuat zona Cloud DNS pribadi terkelola, jalankan perintah berikut.
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"
Ganti kode berikut:
ZONE_NAME: dengan nama yang ingin Anda berikan ke zona terkelola.PROJECT_ID: dengan project ID Google Cloud project yang ingin Anda gunakan untuk zona Cloud DNS.DESCRIPTION: dengan deskripsi untuk zona.INSTANCE_LOCATION: dengan lokasi tempat Anda ingin membuat instance Secure Source Manager.
Untuk mengetahui informasi selengkapnya tentang zona Cloud DNS pribadi terkelola, lihat Ringkasan Cloud DNS.
Mengonfigurasi jaringan Virtual Private Cloud (VPC)
Cadangkan rentang IP yang ingin Anda gunakan untuk melakukan peering VPC Secure Source Manager dengan pool pribadi 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_IDGanti kode berikut:
CB_PEER_RANGE: dengan nama alamat yang akan dibuat.NETWORK: dengan resource jaringan tempat alamat harus dicadangkan. Jika Anda menggunakan jaringan default, nilainya adalahdefault.INSTANCE_PROJECT_ID: dengan project ID instance Private Service Connect.
Untuk membuat peering VPC dengan
servicenetworking.googleapis.com, jalankan perintah berikut.gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=CB_PEER_RANGE \ --network=NETWORK \ --project=INSTANCE_PROJECT_IDUntuk membuat domain DNS yang di-peering untuk terhubung dengan Cloud Build, jalankan perintah berikut.
gcloud services peered-dns-domains create DNS_PEERING_DOMAIN \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID \ --dns-suffix=INSTANCE_LOCATION.p.sourcemanager.dev.Ganti kode berikut:
DNS_PEERING_DOMAIN: dengan nama domain DNS yang di-peering yang Anda buat.
Zona DNS pribadi harus dibagikan secara eksplisit. Untuk mengetahui informasi selengkapnya tentang berbagi zona DNS pribadi, lihat Berbagi zona DNS pribadi dengan produser layanan.
Untuk mengekspor rute jaringan ke Cloud Build, jalankan perintah berikut.
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=NETWORK \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip \ --project=INSTANCE_PROJECT_IDUntuk membuat pool pribadi Cloud Build di project yang sama dengan instance Private Service Connect, jalankan perintah berikut. Google Cloud
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-egressDengan
PRIVATE_POOL_IDadalah nama untuk pool pribadi yang Anda buat. Nama harus terdiri dari 1-63 karakter, dan karakter yang valid adalah[a-zA-Z0-9_-]+.Untuk Membuat Grup Endpoint Jaringan (NEG) Private Service Connect untuk endpoint HTTP, jalankan perintah berikut:
gcloud 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=SUBNETDengan:
HTTP_NEG_NAMEadalah nama NEG yang ingin Anda buat untuk endpoint HTTP.HTTP_PSCadalah nilai endpoint Private Service Connect HTTP.
Untuk membuat NEG Private Service Connect untuk endpoint SSH, jalankan perintah berikut:
gcloud 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=SUBNETDengan:
SSH_NEG_NAMEadalah nama NEG yang ingin Anda buat untuk endpoint SSH.SSH_PSCadalah nilai endpoint Private Service Connect SSH.
Menyiapkan load balancer internal (ILB) proxy
Endpoint tidak dapat diakses dari jaringan VPC yang di-peering. Untuk mengakses endpoint Secure Source Manager, Anda harus menyiapkan load balancer internal (ILB) L4 untuk setiap endpoint. Untuk mengetahui informasi selengkapnya tentang cara mengakses layanan yang dipublikasikan melalui endpoint, lihat Tentang mengakses layanan yang dipublikasikan melalui endpoint.
Untuk membuat subnet khusus proxy untuk ILB, jalankan perintah berikut.
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_IDDengan:
ILB_PROXY_SUBNET_NAMEadalah nama subnet yang akan dibuat.CIDR_RANGEadalah rentang alamat IP utama subnet. Anda harus menggunakan subnet mask dengan ukuran maksimal26agar ada minimal 64 alamat IP yang tersedia untuk proxy di region tersebut. Panjang subnet mask yang direkomendasikan adalah/23. Untuk mengetahui informasi selengkapnya tentang subnet khusus proxy, lihat Subnet khusus proxy untuk load balancer berbasis Envoy.
Untuk membuat ILB L4 untuk NEG koneksi HTTP, jalankan perintah berikut.
gcloud compute backend-services create HTTP_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDDengan
HTTP_PROXY_ILBadalah nama ILB yang akan dibuat untuk endpoint HTTP.Untuk membuat ILB L4 untuk NEG koneksi SSH, jalankan perintah berikut.
gcloud compute backend-services create SSH_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDDengan
SSH_PROXY_ILBadalah nama ILB yang akan dibuat untuk endpoint SSH.
Mendaftarkan NEG Private Service Connect sebagai backend ILB
Untuk mendaftarkan NEG HTTP, jalankan perintah berikut.
gcloud compute backend-services add-backend HTTP_PROXY_ILB \ --network-endpoint-group=HTTP_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDUntuk mendaftarkan NEG SSH, jalankan perintah berikut.
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
Membuat proxy TCP target untuk ILB
Untuk membuat proxy TCP target untuk ILB HTTP, jalankan perintah berikut.
gcloud compute target-tcp-proxies create ILB_HTTP_TCP_TARGET_PROXY \ --backend-service=HTTP_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDDengan
ILB_HTTP_TCP_TARGET_PROXYadalah nama proxy TCP target yang ingin Anda buat untuk ILB HTTP.Untuk membuat proxy TCP target untuk ILB SSH, jalankan perintah berikut.
gcloud compute target-tcp-proxies create ILB_SSH_TCP_TARGET_PROXY \ --backend-service=SSH_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDDengan
ILB_SSH_TP_TARGET_PROXYadalah nama proxy TCP target yang Anda buat untuk ILB SSH.
Membuat aturan penerusan untuk merutekan traffic ke ILB
Untuk membuat aturan penerusan untuk merutekan traffic ke ILB HTTP, jalankan perintah berikut.
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_LOCATIONDengan
HTTP_PROXY_FORWARDadalah nama aturan penerusan yang Anda buat.Untuk membuat aturan penerusan untuk merutekan traffic ke ILB SSH, jalankan perintah berikut.
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_LOCATIONDengan
SSH_PROXY_FORWARDadalah nama aturan penerusan yang Anda buat.
Membuat data DNS pribadi
Setelah aturan penerusan disiapkan, Anda harus mendaftarkan data DNS di zona Cloud DNS pribadi untuk setiap nama host instance.
Untuk mendapatkan alamat IP untuk aturan penerusan HTTP, jalankan perintah berikut.
gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONDengan
HTTP_PROXY_FORWARDadalah nama yang Anda berikan ke aturan penerusan untuk HTTP.Untuk mendaftarkan nama host API, jalankan perintah berikut.
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_IPGanti kode berikut:
INSTANCE_ID: dengan ID instance Anda.INSTANCE_PROJECT_NUMBER: dengan nomor project instance Anda. Google CloudINSTANCE_LOCATION: dengan region instance Anda.INSTANCE_PROJECT_ID: dengan project ID instance Anda. Google CloudZONE_NAME: dengan nama yang Anda berikan ke zona terkelola.HTTP_LB_IP: adalah output darigcloud compute forwarding-rules describe HTTP_PROXY_FORWARD.
Untuk mendaftarkan nama host HTTP Git, jalankan perintah berikut.
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_IPUntuk mendaftarkan nama host HTML untuk antarmuka web, jalankan perintah berikut.
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_IPUntuk mendapatkan alamat IP untuk aturan penerusan SSH, jalankan perintah berikut.
gcloud compute forwarding-rules describe SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONDengan
SSH_PROXY_FORWARDadalah nama yang Anda berikan ke aturan penerusan untuk SSH.Untuk mendaftarkan nama host SSH Git, jalankan perintah berikut.
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_IPDengan
SSH_LB_IPadalah output darigcloud compute forwarding-rules describe SSH_PROXY_FORWARD.
Membuat repositori di instance Anda
Anda dapat menggunakan bastion host untuk mengakses dan membuat repositori di instance Private Service Connect.
Buat VM bastion host dengan cakupan
cloud-platformdengan mengikuti petunjuk di Membuat VM bastion host.Buat repositori dengan menjalankan perintah berikut.
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 '{}'Ganti kode berikut:
INSTANCE_ID: dengan nama instance Secure Source Manager Anda.PROJECT_NUMBER: dengan nomor project instance Anda. Google CloudINSTANCE_LOCATION: dengan lokasi instance Anda.REPOSITORY_ID: dengan nama yang ingin Anda berikan ke repositori.
Repositori dibuat di instance Private Service Connect Anda.
Menguji akses ke Secure Source Manager dari Cloud Build
Untuk mengonfirmasi bahwa semuanya berfungsi dengan benar, Anda dapat menggunakan file konfigurasi build berikut untuk menguji konektivitas dan menarik kode sumber dari Secure Source Manager. File konfigurasi build mengasumsikan bahwa Anda menggunakan Cloud Logging untuk menyimpan log build. Jika Anda menggunakan bucket Cloud Storage yang dibuat pengguna, lihat Menjalankan build menggunakan file konfigurasi untuk petunjuk cara mengedit file konfigurasi build.
Sebelum menggunakan file YAML berikut, ganti kode berikut:
CA_POOL_NAME: dengan nama CA pool yang Anda gunakan saat membuat instance Private Service Connect.CA_PROJECT_ID: dengan Google Cloud project yang Anda gunakan untuk membuat CA pool.INSTANCE_LOCATION: dengan lokasi instance Anda.INSTANCE_ID: dengan nama instance Anda.INSTANCE_PROJECT_NUMBER: dengan nomor project instance Anda. Google CloudREPOSITORY_ID: dengan nama yang Anda berikan ke repositori.SA_PROJECT_ID: dengan project ID akun layanan yang Anda gunakan dengan Cloud Build.SERVICE_ACCOUNT: dengan alamat email akun layanan yang Anda gunakan dengan 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
Langkah berikutnya
- Untuk mengotomatiskan build dari Secure Source Manager, ikuti petunjuk di Membuat file pemicu.