Menghubungkan Cloud Build ke instance Private Service Connect

Anda dapat menghubungkan Cloud Build ke instance Private Service Connect Secure Source Manager menggunakan kumpulan pribadi Cloud Build.

Sebelum memulai

  1. Buat instance Secure Source Manager Private Service Connect.
  2. Jika sebelumnya Anda mengonfigurasi endpoint untuk instance Private Service Connect, Anda harus memutuskan koneksinya. Untuk melepas endpoint, ikuti petunjuk di Melepas alamat IPv4 atau IPv6 internal statis.
  3. Enable the Cloud Build, Service Networking, and Compute Engine APIs.

    Enable the APIs

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menghubungkan Cloud Build ke instance Secure Source Manager Private Service Connect, minta administrator untuk memberi Anda peran IAM Access Context Manager Admin (roles/accesscontextmanager.policyAdmin) di organisasi.

Mengonfigurasi akun layanan Anda

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 dapat 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.

  1. Buat akun layanan jika Anda belum memiliki akun yang ingin digunakan.

  2. Di konsol Google Cloud , buka halaman Secure Source Manager Permissions:

    Buka Izin

  3. Di tab Izin akun layanan, pilih akun layanan yang ingin Anda gunakan sebagai akun layanan Cloud Build.

  4. Secara opsional, pilih Setel sebagai akun layanan pilihan untuk mengisi otomatis akun layanan Anda saat Anda membuat pemicu baru.

Memberikan izin yang diperlukan kepada akun layanan

  1. Berikan peran Cloud Build yang diperlukan ke 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.

  2. Untuk memberikan izin 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=None
    

    Ganti 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 Anda.
  3. Untuk memberikan izin 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=None
    
  4. Untuk memberikan izin akun layanan agar dapat 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 menentukan akun layanan Anda 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 Penulis Log (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 DNS pribadi terkelola Cloud DNS, 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 managed-zone.
  • PROJECT_ID: dengan project ID dari 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 pribadi Cloud DNS terkelola, lihat Ringkasan Cloud DNS.

Mengonfigurasi jaringan Virtual Private Cloud (VPC)

  1. Cadangkan rentang IP yang ingin Anda gunakan untuk melakukan peering VPC Secure Source Manager dengan kumpulan 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_ID
    

    Ganti 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 adalah default.
    • INSTANCE_PROJECT_ID: dengan ID project instance Private Service Connect.
  2. 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_ID
    
  3. Untuk 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 Membagikan zona DNS pribadi kepada produsen layanan.

  4. 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_ID
    
  5. Untuk membuat kumpulan 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-egress
    

    Dengan PRIVATE_POOL_ID adalah nama untuk pool pribadi yang Anda buat. Nama harus terdiri dari 1-63 karakter, dan karakter yang valid adalah [a-zA-Z0-9_-]+.

  6. Untuk Membuat Grup Endpoint Jaringan (NEG) Private Service Connect untuk endpoint HTTP, jalankan perintah berikut:

    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
    

    Dengan:

    • HTTP_NEG_NAME adalah nama NEG yang ingin Anda buat untuk endpoint HTTP.
    • HTTP_PSC adalah nilai endpoint Private Service Connect HTTP.
  7. Untuk membuat NEG Private Service Connect untuk endpoint SSH, jalankan perintah berikut:

    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
    

    Dengan:

    • SSH_NEG_NAME adalah nama NEG yang ingin Anda buat untuk endpoint SSH.
    • SSH_PSC adalah nilai endpoint SSH Private Service Connect.

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.

  1. 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_ID
    

    Dengan:

    • ILB_PROXY_SUBNET_NAME adalah nama subnet yang akan dibuat.
    • CIDR_RANGE adalah rentang alamat IP utama subnet. Anda harus menggunakan subnet mask dengan ukuran maksimal 26 agar 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.
  2. 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_MANAGED
    

    Dengan HTTP_PROXY_ILB adalah nama ILB yang akan dibuat untuk endpoint HTTP.

  3. 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_MANAGED
    

    Dengan SSH_PROXY_ILB adalah nama ILB yang akan dibuat untuk endpoint SSH.

Mendaftarkan NEG Private Service Connect sebagai backend ILB

  1. 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_ID
    
  2. Untuk 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
    

Buat proxy TCP target untuk ILB

  1. Untuk membuat proxy TCP target bagi HTTP ILB, 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_ID
    

    Dengan ILB_HTTP_TCP_TARGET_PROXY adalah nama proxy TCP target yang ingin Anda buat untuk ILB HTTP.

  2. Untuk membuat proxy TCP target untuk SSH ILB, 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_ID
    

    Dengan ILB_SSH_TP_TARGET_PROXY adalah nama proxy TCP target yang Anda buat untuk ILB SSH.

Buat aturan penerusan untuk merutekan traffic ke ILB

  1. Untuk membuat aturan penerusan untuk merutekan traffic ke HTTP ILB, 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_LOCATION
    

    Dengan HTTP_PROXY_FORWARD adalah nama aturan penerusan yang Anda buat.

  2. Untuk membuat aturan penerusan untuk merutekan traffic ke SSH ILB, 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_LOCATION
    

    Dengan SSH_PROXY_FORWARD adalah nama aturan penerusan yang Anda buat.

Membuat data DNS pribadi Anda

Setelah aturan penerusan disiapkan, Anda harus mendaftarkan data DNS di zona Cloud DNS pribadi untuk setiap nama host instance.

  1. Untuk mendapatkan alamat IP untuk aturan penerusan HTTP Anda, jalankan perintah berikut.

    gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD \
        --project=INSTANCE_PROJECT_ID \
        --region=INSTANCE_LOCATION
    

    Dengan HTTP_PROXY_FORWARD adalah nama yang Anda berikan pada aturan penerusan untuk HTTP.

  2. 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_IP
    

    Ganti kode berikut:

    • INSTANCE_ID: dengan ID instance Anda.
    • INSTANCE_PROJECT_NUMBER: dengan nomor project Google Cloud instance Anda.
    • INSTANCE_LOCATION: dengan region instance Anda.
    • INSTANCE_PROJECT_ID: dengan project ID Google Cloud instance Anda.
    • ZONE_NAME: dengan nama yang Anda berikan untuk managed-zone.
    • HTTP_LB_IP: adalah output dari gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD.
  3. 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_IP
    
  4. Untuk 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_IP
    
  5. Untuk mendapatkan alamat IP untuk aturan penerusan SSH, jalankan perintah berikut.

    gcloud compute forwarding-rules describe SSH_PROXY_FORWARD \
        --project=INSTANCE_PROJECT_ID \
        --region=INSTANCE_LOCATION
    

    Dengan SSH_PROXY_FORWARD adalah nama yang Anda berikan untuk aturan penerusan SSH.

  6. 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_IP
    

    Dengan SSH_LB_IP adalah output dari gcloud 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 Anda.

  1. Buat VM bastion host dengan cakupan cloud-platform dengan mengikuti petunjuk di Membuat VM bastion host.

  2. 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 Google Cloud project instance Anda.
    • INSTANCE_LOCATION: dengan lokasi instance Anda.
    • REPOSITORY_ID: dengan nama yang ingin Anda berikan ke repositori Anda.

    Repositori dibuat di instance Private Service Connect Anda.

Menguji akses ke Secure Source Manager dari Cloud Build

Untuk memastikan 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 Anda menggunakan Cloud Logging untuk menyimpan log build. Jika Anda menggunakan bucket Cloud Storage yang dibuat pengguna, lihat Menjalankan build menggunakan file konfigurasi untuk mendapatkan petunjuk tentang cara mengedit file konfigurasi build.

Sebelum menggunakan file YAML berikut, ganti bagian berikut:

  • CA_POOL_NAME: dengan nama kumpulan CA yang Anda gunakan saat membuat instance Private Service Connect.
  • CA_PROJECT_ID: dengan project yang Anda gunakan untuk membuat CA pool. Google Cloud
  • INSTANCE_LOCATION: dengan lokasi instance Anda.
  • INSTANCE_ID: dengan nama instance Anda.
  • INSTANCE_PROJECT_NUMBER: dengan nomor Google Cloud project instance Anda.
  • REPOSITORY_ID: dengan nama yang Anda berikan untuk repositori Anda.
  • 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.