Mengonfigurasi akun layanan yang ditentukan oleh pengguna

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. 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 tidak perlu luas untuk kasus penggunaan Anda, seperti akses ke Repositori Sumber Cloud dan bucket Cloud Storage apa pun di project Anda.

Untuk meningkatkan postur keamanan project Anda dan mengurangi potensi dampak miskonfigurasi atau pengguna berbahaya, sebaiknya ikuti prinsip hak istimewa minimum. Dengan menerapkan prinsip ini, Anda dapat menetapkan izin dan peran yang dicakup untuk tugas yang dilakukannya ke setiap akun layanan. Misalnya, Anda dapat menggunakan satu akun layanan untuk mem-build dan mengirim image ke Artifact Registry, seperti yang ditampilkan di Blog Google Cloud.

Sebelum memulai

  • Enable the Cloud Build and IAM APIs.

    Enable the APIs

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

    Enable the API

  • Buat akun layanan, jika Anda belum melakukannya.

Memberikan izin IAM

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

  1. Buka halaman Setelan Cloud Build:

    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 Anda perlukan untuk pipeline build tidak tercantum di sini, Anda dapat memberikan peran tambahan di halaman konfigurasi IAM.

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

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.

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 yang diinginkan.

    • Jika Anda menyimpan log build di Cloud Logging, tambahkan kolom logging dan tetapkan nilai kolom 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 dalam file konfigurasi build Anda dengan yang berikut ini:

    • 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 terlihat seperti: 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 yang berikut ini:

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

    Jika Anda tidak menentukan CONFIG_FILE_PATH dan SOURCE_DIRECTORY dalam perintah gcloud builds submit, Cloud Build akan mengasumsikan bahwa file konfigurasi build dan kode sumber 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 pilihan Anda dan pilih akun layanan pilihan Anda saat membuat pemicu.

  1. Di file konfigurasi build:

    • Jika Anda menyimpan log build di Cloud Logging, tambahkan kolom logging dan tetapkan nilai kolom 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. Contoh, gs://mylogsbucket.

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

    Konsol

    Untuk menjalankan build menggunakan halaman Pemicu di Google Cloud Console, 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.

    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 Anda 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 dalam file konfigurasi build Anda dengan yang berikut ini:

    • 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.
    • TAG_PATTERN adalah nama tag di repositori Anda untuk memanggil build.
    • BUILD_CONFIG_FILE adalah jalur ke file konfigurasi build Anda.
    • SERVICE_ACCOUNT adalah akun layanan Anda dalam format /projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL.
    • 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 bahwa 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:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    
  • Di 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 nilai berikut:

    • SERVICE_ACCOUNT_PROJECT_ID: Project ID project yang berisi akun layanan yang ditentukan pengguna.
    • BUILD_SERVICE_AGENT: ID email agen layanan berbentuk 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 dalam project yang sama.

Langkah selanjutnya