Mengonfigurasi akun layanan yang ditentukan oleh pengguna

Untuk mengikuti prinsip hak istimewa terendah di Cloud Build, Anda dapat mengonfigurasi Cloud Build agar menggunakan akun layanan yang memiliki hak istimewa yang cukup untuk menjalankan build. Halaman ini mendokumentasikan cara menyiapkan akun layanan.

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 Cloud Source Repositories dan bucket Cloud Storage dalam project Anda.

Untuk meningkatkan postur keamanan project Anda dan mengurangi potensi dampak kesalahan konfigurasi atau pengguna yang berniat jahat, sebaiknya ikuti prinsip hak istimewa terendah. Dengan menerapkan prinsip ini, Anda dapat menetapkan izin dan peran yang mencakup tugas yang dijalankannya ke setiap akun layanan. Misalnya, Anda dapat menggunakan satu akun layanan untuk mem-build dan mengirim image ke Artifact Registry, seperti yang ditunjukkan di Blog Google Cloud.

Sebelum memulai

  • Aktifkan API Cloud Build and IAM.

    Mengaktifkan API

  • Jika Anda berencana menggunakan akun ini untuk membuat dan mengelola kredensial, misalnya untuk membuat kredensial berumur pendek, aktifkan IAM Service Account Credentials API.

    Mengaktifkan API

  • Buat akun layanan, jika Anda belum melakukannya.

Memberikan izin IAM

Agar build dapat mengakses layanan yang perlu terhubung, Anda harus memberikan beberapa peran dan izin:

  1. Buka halaman Cloud Build Settings:

    Buka halaman Setelan Cloud Build

    Anda akan melihat tab Izin akun layanan:

    Screenshot halaman izin akun Layanan

  2. Dari menu drop-down, pilih akun layanan yang perannya ingin Anda ubah.

  3. Tetapkan status peran yang ingin Anda tambahkan ke Aktifkan.

  4. Jika peran yang dibutuhkan untuk pipeline build tidak tercantum di sini, Anda dapat memberikan peran tambahan di halaman konfigurasi IAM.

Anda dapat menemukan informasi tambahan tentang peran yang umumnya diperlukan untuk build di artikel Mengonfigurasi akses ke resource Cloud Build dan di daftar lengkap peran dan izin IAM Cloud Build.

Menyiapkan log build

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

Menjalankan build menggunakan file konfigurasi

Untuk menjalankan build secara manual menggunakan file konfigurasi:

  1. Di direktori utama project, buat file konfigurasi build Cloud Build bernama cloudbuild.yaml atau cloudbuild.json.

  2. Tambahkan kolom serviceAccount dan penyiapan logging pilihan.

    • Jika Anda menyimpan log build di Cloud Logging, tambahkan kolom logging dan tetapkan nilai kolom tersebut ke CLOUD_LOGGING_ONLY.

    • Jika Anda menyimpan log build di bucket Cloud Storage yang dibuat pengguna:

      • Tambahkan kolom logging dan tetapkan nilainya ke GCS_ONLY.
      • Tambahkan kolom logsBucket dan tetapkan nilainya ke lokasi bucket Cloud Storage Anda.

    Contoh berikut mengonfigurasi Cloud Build untuk menjalankan build menggunakan akun layanan yang ditentukan pengguna dan mengonfigurasi log build untuk disimpan di bucket Cloud Storage yang dibuat pengguna:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    
    

    Ganti nilai placeholder di file konfigurasi build Anda dengan kode berikut:

    • LOGS_BUCKET_LOCATION adalah bucket Cloud Storage untuk menyimpan log build. Contoh, gs://mylogsbucket.
    • PROJECT_ID adalah ID project Google Cloud tempat Anda menjalankan build.
    • SERVICE_ACCOUNT adalah alamat email atau ID unik akun layanan yang ingin Anda tentukan untuk build. Misalnya, alamat email akun layanan akan terlihat seperti ini: service-account-name@project-id.iam.gserviceaccount.com.
  3. Mulai build menggunakan file konfigurasi build:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Ganti nilai placeholder dalam perintah di atas dengan nilai berikut:

    • CONFIG_FILE_PATH adalah jalur ke file konfigurasi build.
    • SOURCE_DIRECTORY adalah jalur atau URL ke kode sumber.

    Jika CONFIG_FILE_PATH dan SOURCE_DIRECTORY tidak ditentukan dalam perintah gcloud builds submit, Cloud Build akan menganggap file konfigurasi build dan kode sumbernya berada di direktori kerja saat ini.

Menjalankan build menggunakan pemicu

Untuk menjalankan build dengan pemicu Cloud Build menggunakan akun layanan Anda sendiri, siapkan opsi logging yang Anda inginkan dan pilih akun layanan yang Anda inginkan saat membuat pemicu tersebut.

  1. Di file konfigurasi build:

    • Jika Anda menyimpan log build di Cloud Logging, tambahkan kolom logging dan tetapkan nilai kolom tersebut ke CLOUD_LOGGING_ONLY.

    • Jika Anda menyimpan log build di bucket Cloud Storage yang dibuat pengguna:

      • Tambahkan kolom logging dan tetapkan nilainya ke GCS_ONLY.
      • Tambahkan kolom logsBucket dan tetapkan nilainya ke lokasi bucket Cloud Storage Anda.

    Contoh berikut mengonfigurasi log build untuk disimpan di bucket Cloud Storage yang dibuat pengguna:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    

    Ganti LOGS_BUCKET_LOCATION dengan bucket Cloud Storage untuk menyimpan log build. Misalnya, gs://mylogsbucket.

  2. Tentukan akun layanan yang akan digunakan dengan pemicu build Anda:

    Konsol

    Untuk menjalankan build menggunakan halaman Pemicu di Konsol Google Cloud, akun layanan yang ditentukan pengguna harus berada dalam project yang sama dengan pemicu build Anda. Untuk menggunakan pemicu dengan akun layanan lintas project, buat pemicu build menggunakan alat gcloud.

    1. Buat atau edit pemicu build Anda.

    2. Di kolom Service account, tentukan akun layanan Anda. Jika Anda tidak menentukan akun layanan, Cloud Build akan menggunakan akun layanan default.

    3. Klik Buat untuk menyimpan pemicu build Anda.

    gcloud

    Saat membuat pemicu build, tentukan akun layanan menggunakan flag --service-account. Dalam contoh berikut, perintah gcloud membuat pemicu build yang mengambil kode dari repositori Git:

    gcloud builds triggers create github \
       --name=TRIGGER_NAME \
       --repo-name=REPO_NAME \
       --repo-owner=REPO_OWNER \
       --branch-pattern=BRANCH_PATTERN
       --build-config=BUILD_CONFIG_FILE
       --service-account=SERVICE_ACCOUNT
       --project=BUILD_PROJECT
    

    Ganti nilai placeholder di file konfigurasi build Anda dengan kode berikut:

    • TRIGGER_NAME adalah nama pemicu build Anda.
    • REPO_NAME adalah nama repositori Anda.
    • REPO_OWNER adalah nama pengguna pemilik repositori.
    • BRANCH_PATTERN adalah nama cabang di repositori Anda untuk memanggil build yang ada.
    • TAG_PATTERN adalah nama tag di repositori Anda untuk memanggil build yang ada.
    • BUILD_CONFIG_FILE adalah jalur ke file konfigurasi build Anda.
    • SERVICE_ACCOUNT adalah email yang terkait dengan akun layanan Anda.
    • BUILD_PROJECT adalah project tempat Anda memulai build.

Penyiapan lintas project

Jika akun layanan yang ditentukan pengguna berada dalam project yang berbeda dengan project tempat Anda memulai build, berikan akses yang diperlukan:

  • Dalam project yang memiliki akun layanan yang ditentukan pengguna, pastikan batasan kebijakan organisasi iam.disableCrossProjectServiceAccountUsage tidak diterapkan. Batasan ini diterapkan secara default. Untuk menonaktifkan batasan kebijakan organisasi ini, jalankan perintah berikut dengan SERVICE_ACCOUNT_PROJECT_ID adalah project yang berisi akun layanan yang ditentukan pengguna Anda:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    
  • Dalam project yang memiliki akun layanan yang ditentukan pengguna, berikan peran roles/iam.serviceAccountTokenCreator untuk agen layanan Cloud Build project tempat Anda menjalankan build:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:BUILD_SERVICE_AGENT" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Ganti nilai placeholder dalam perintah dengan kode berikut:

    • SERVICE_ACCOUNT_PROJECT_ID: Project ID untuk project yang berisi akun layanan yang ditentukan pengguna.
    • BUILD_SERVICE_AGENT: ID email agen layanan dari bentuk service-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, dengan BUILD_PROJECT_NUMBER adalah nomor project project tempat Anda menjalankan build. Anda bisa mendapatkan nomor project dari halaman setelan project.

Batasan:

  • Project Google Cloud Anda harus berada dalam organisasi Google Cloud.

  • Anda harus memulai build di command line menggunakan gcloud builds submit atau gcloud builds triggers create. Untuk menggunakan halaman Pemicu di Konsol Google Cloud, akun layanan yang ditentukan pengguna dan pemicu build harus berada di project yang sama.

Langkah selanjutnya