Peninjauan Kode dan Analisis Keamanan dengan Gemini CLI dengan Ekstensi

1. 📖 Pengantar

838a11ffed94b79e.png

Dalam codelab ini, Anda akan mempelajari dasar-dasar Gemini CLI dan menggunakan ekstensi analisis keamanan dan peninjauan kode dalam alur kerja pengembangan software Anda.

Yang akan Anda pelajari

  • Cara menyiapkan Gemini CLI
  • Cara mengonfigurasi Gemini CLI
  • Cara menginstal ekstensi Gemini CLI
  • Cara memanfaatkan ekstensi Gemini CLI untuk peninjauan kode dan analisis keamanan
  • Cara mengonfigurasi MCP untuk Gemini CLI
  • Cara memeriksa Gemini CLI di CI/CD

Yang Anda butuhkan

  • Browser web Chrome
  • Akun Gmail
  • Project Cloud dengan akun penagihan diaktifkan

2. 🚀 Menyiapkan Penyiapan Pengembangan Workshop

Langkah 1: Pilih Project Aktif di Konsol Cloud

Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud (lihat bagian kiri atas konsol Anda)

6da543936f051b95.png

Klik, dan Anda akan melihat daftar semua project Anda seperti contoh ini,

3c3963e0fbb5ba4f.png

Nilai yang ditunjukkan oleh kotak merah adalah PROJECT ID dan nilai ini akan digunakan di seluruh tutorial.

Pastikan penagihan diaktifkan untuk project Cloud Anda. Untuk memeriksanya, klik ikon burger ☰ di panel kiri atas yang menampilkan Menu Navigasi, lalu temukan menu Penagihan

3291845833270d7f.png

ddf6f055d710f7a9.png

Jika Anda melihat "Akun Penagihan Uji Coba Google Cloud Platform" di bagian judul Penagihan / Ringkasan ( bagian kiri atas konsol cloud Anda ), project Anda siap digunakan untuk tutorial ini. Jika tidak, kembali ke awal tutorial ini dan tukarkan akun penagihan uji coba

45539d4ac57dd995.png

Langkah 2: Pelajari Cloud Shell

Anda akan menggunakan Cloud Shell untuk sebagian besar tutorial. Klik Activate Cloud Shell di bagian atas konsol Google Cloud. Jika Anda diminta untuk memberikan otorisasi, klik Authorize.

26f20e837ff06119.png

79b06cc89a99f840.png

Setelah terhubung ke Cloud Shell, kita perlu memeriksa apakah shell ( atau terminal) sudah diautentikasi dengan akun kita

gcloud auth list

Jika Anda melihat Gmail pribadi Anda seperti contoh output di bawah, semuanya baik-baik saja

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Jika tidak, coba muat ulang browser Anda dan pastikan Anda mengklik Izinkan saat diminta ( mungkin terganggu karena masalah koneksi)

Langkah 3: Pahami Editor Cloud Shell dan Siapkan Direktori Kerja Aplikasi

Sekarang, kita dapat menyiapkan editor kode untuk melakukan beberapa hal terkait coding. Kita akan menggunakan Cloud Shell Editor untuk melakukannya

Kita perlu meng-clone repositori demo yang akan kita gunakan untuk berinteraksi. Jalankan perintah ini di terminal untuk meng-clone repositori dan membuka Cloud Shell Editor

git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo && cloudshell ws code-analysis-demo

Sekarang, direktori kerja Cloud Shell Editor Anda akan terlihat seperti ini

3a72d901f5e78fcf.png

Selanjutnya, kita perlu memastikan apakah shell sudah dikonfigurasi ke PROJECT ID yang benar yang Anda miliki. Jika Anda melihat ada nilai di dalam ( ) sebelum ikon $ di terminal ( pada screenshot di bawah, nilainya adalah "your-workshop-project"), nilai ini menunjukkan project yang dikonfigurasi untuk sesi shell aktif Anda.

8785d925a094c260.png

Jika nilai yang ditampilkan sudah benar, Anda dapat melewati perintah berikutnya. Namun, jika tidak benar atau tidak ada, jalankan perintah berikut

gcloud config set project <YOUR_PROJECT_ID>

Sekarang kita dapat melanjutkan ke tahap berikutnya

3. 🚀 Penyiapan dan Konfigurasi

Jika ingin menginstal Gemini CLI di sistem lokal, Anda dapat mengikuti langkah-langkah berikut:

  1. Pastikan sistem Anda memiliki Node versi 20+
  2. Aktifkan Gemini CLI dengan:
  • Menginstalnya sebagai paket global
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • Atau jalankan langsung dari sumber untuk selalu mendapatkan versi terbaru
npx https://github.com/google-gemini/gemini-cli

Saat Anda menjalankannya untuk pertama kali, aplikasi akan mengajukan beberapa pertanyaan. Jika Anda menjalankannya dari IDE (misalnya, VSCode), Anda akan ditanya pertanyaan berikut

91769e12a6214c89.png

Kemudian, Anda akan ditanya beberapa opsi untuk melakukan autentikasi

61ba181d61e506dc.png

Ada beberapa opsi:

  • Jika Anda memilih Login dengan Google, halaman Google Authentication akan terbuka di browser, dan Anda hanya perlu menyetujuinya
  • Jika Anda lebih suka menggunakan Kunci API Gemini, Anda harus membuatnya di halaman AI Studio, lalu membuat file .env di direktori kerja dengan setelan variabel GEMINI_API_KEY ( atau jalankan perintah export GEMINI_API_KEY="your-api-key" di command line)
  • Jika memilih untuk menggunakan Vertex AI, Anda memerlukan project seperti yang telah disiapkan sebelumnya, membuat file .env, serta menetapkan GOOGLE_CLOUD_PROJECT dan GOOGLE_CLOUD_LOCATION

Jika ingin mengubah metode autentikasi ini, Anda dapat menjalankan perintah /auth dari Gemini CLI atau mengedit file konfigurasi. Jika Anda ingin mengedit file konfigurasi secara langsung, di Linux, file tersebut harus berada di $HOME/.gemini/settings.json . Anda akan melihat jenis security dan auth, lalu mengeditnya

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
    }
  }
}

2b894cdf68057d6a.png

4. 🚀 Perintah Dasar dan Alat Bawaan

Sekarang, mari kita coba Gemini CLI untuk mengetahui lebih lanjut tentangnya. Jalankan perintah berikut di terminal untuk membuka Gemini CLI

gemini

Jika Anda mencari perintah dasar yang dapat digunakan, Anda dapat mengetik /help untuk menampilkan semua perintah yang tersedia

d4776f0c740ad723.png

/help

Anda akan melihat output seperti ini 290d620f3787b3d0.png

Gemini CLI adalah Agen AI, sehingga akan memiliki alat yang dilengkapi untuk menyelesaikan tugas yang diberikan oleh pengguna. Untuk melihat alat bawaan yang dimilikinya, jalankan perintah /tools

7367214e26b0da86.png

/tools

Anda akan melihat output seperti ini

363ae783ae902fe4.png

Anda dapat melihat bahwa Gemini CLI memiliki beberapa kemampuan seperti membaca dan menulis ke file, penelusuran web, dan banyak lagi. Beberapa alat ini memerlukan konfirmasi pengguna secara default karena potensi risikonya

Sekarang mari kita lihat penerapannya, coba jalankan perintah ini di Gemini CLI

be23caafc0184a6d.png

Find top 10 OWASP security issue and write it down to owasp.md

Anda akan melihat bahwa GoogleSearch akan memanggil alat dan kemudian akan menulis hasilnya menggunakan WriteFile. Jika menggunakan IDE, Anda akan melihat bahwa saran akan ditampilkan sebagai opsi perbedaan dan tampilan, baik Anda ingin menerima atau menolak saran tersebut. Di sini, Anda dapat melihat bahwa Gemini CLI meminta izin Anda untuk menulis file

724bc8144b51752e.png

5. 🚀 Ekstensi

Untuk meningkatkan output tugas tertentu dengan Agen AI, tantangannya adalah bagaimana kita dapat membuat perintah yang tepat, mengelola rekayasa konteks yang tepat dengan integrasi alat yang tepat, dan sebagainya.

Ekstensi Gemini CLI adalah perintah dan integrasi yang telah dikemas sebelumnya dan mudah diinstal yang dapat terhubung ke alat eksternal. Setiap ekstensi berisi "playbook" bawaan tentang cara menggunakan alat secara efektif dan dapat terdiri dari komponen berikut:

  • Perintah garis miring kustom
  • Konfigurasi MCP
  • File konteks

cfe24ebe1dfb0152.png

Menginstal Ekstensi Keamanan

Misalnya, dalam tutorial ini, kita akan mempelajari cara menginstal ekstensi code-review dan security

Jalankan perintah berikut untuk menginstal ekstensi security dari terminal

gemini extensions install https://github.com/gemini-cli-extensions/security

Pertanyaan berikut akan ditampilkan, cukup tekan enter untuk menyetujui

Installing extension "gemini-cli-security".
**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**
This extension will run the following MCP servers:
  * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js
This extension will append info to your gemini.md context using GEMINI.md
Do you want to continue? [Y/n]:
Extension "gemini-cli-security" installed successfully and enabled.

Menginstal Ekstensi Peninjauan Kode

Selanjutnya, mari kita instal ekstensi code-review, jalankan perintah di bawah

gemini extensions install https://github.com/gemini-cli-extensions/code-review

Setelah selesai, jalankan Gemini CLI lagi

gemini

dan menjalankan perintah /extensions, Anda akan melihat bahwa 2 ekstensi ini sudah diinstal

571556bdc2b3e914.png

/extensions

Oke, sekarang mari kita lakukan eksekusi praktis pada repositori contoh yang Anda clone sebelumnya

6. 🚀 Mode Interaktif - Aplikasi Ekstensi Analisis Keamanan Kode

Ekstensi Security adalah ekstensi Gemini CLI open source, yang dibuat untuk meningkatkan keamanan repositori. Ekstensi ini menambahkan perintah baru ke Gemini CLI yang menganalisis perubahan kode untuk mengidentifikasi berbagai risiko dan kerentanan keamanan.

Sekarang, mari kita siapkan repositori demo terlebih dahulu, jalankan perintah berikut untuk beralih ke cabang tempat perubahan dengan risiko keamanan sudah diterapkan

git checkout refactor/analysis-demo

Setelah itu, jalankan Gemini CLI di terminal

gemini

Kemudian, jalankan ekstensi

aab23afb4f4bfb3.png

/security:analyze

Tindakan ini akan memulai proses yang berjalan lama dan selama proses tersebut, Anda akan menerima beberapa gangguan yang meminta izin Anda untuk menjalankan operasi tertentu seperti mkdir seperti yang ditunjukkan di bawah

f889f7aca882f87d.png

Ini adalah mekanisme perlindungan untuk memastikan bahwa pengguna mengetahui apa yang akan dieksekusi oleh Gemini CLI. Untuk tutorial selanjutnya, Anda dapat selalu mengizinkannya ( opsi 2).

Ekstensi ini akan memanggil proses yang berjalan lama, Anda dapat melihatnya membuat file perencanaan di dalam direktori .gemini_security dan Anda dapat melihat checklist proses yang sudah selesai atau belum. Seperti yang ditunjukkan dalam contoh di bawah ini:

bf7f9e885f15ff89.png

Tugasnya akan memerlukan waktu beberapa saat untuk selesai. Sementara menunggu, kita dapat memeriksa sumber ekstensi ini di repositori GitHub. URL ini menampilkan perintah yang digunakan untuk menjalankan semua proses pemindaian keamanan ini

e5592755fcdf5a64.png

Seperti yang dapat Anda lihat di sana, untuk melakukan pemindaian ini, perintah sebagai Gemini CLI untuk melakukan pemeriksaan dua tahap, yaitu Reconnaissance Pass dan Investigation Pass yang lebih mendetail.

Jika Anda menemukan perintah berikut di Gemini CLI, Anda dapat memilih opsi 2 untuk menonaktifkan deteksi loop

74426d4ae8fae006.png

Kemudian, berikan perintah ke Gemini CLI untuk melanjutkan

3ea7391ccbf2b872.png

continue

Ini adalah mekanisme untuk menghindari loop pemanggilan alat yang tidak produktif tanpa batas dan akan terus ditingkatkan seiring waktu.

Setelah selesai, laporan akan ditampilkan di terminal interaktif. Untuk mempermudah, mari kita instruksikan Gemini CLI untuk menuliskannya ke security-analysis.md

86fcc1c406100224.png

write the result to security-analysis.md file

Sekarang Anda dapat memeriksa hasil yang ditulis ke file

7. 🚀 Mode Non-Interaktif - Aplikasi Ekstensi Peninjauan Kode

Ekstensi code-review menambahkan perintah baru ke Gemini CLI yang menganalisis perubahan kode untuk mengidentifikasi berbagai masalah kualitas kode.

Ekstensi ini dapat dieksekusi dalam mode non-interaktif Gemini CLI, yang berarti semua proses dapat dieksekusi tanpa perlu memasukkan shell Gemini CLI. Untuk menjalankan Gemini CLI dalam mode non-interaktif, Anda dapat melakukannya dengan pola perintah berikut

gemini "put your command here"

Namun, perlu diperhatikan bahwa, saat berjalan dalam mode non-interaktif, semua operasi alat yang memerlukan izin pengguna akan dinonaktifkan. Oleh karena itu, kita perlu menambahkan tanda --yolo untuk menyetujui semua tindakan secara otomatis, yang berarti mengaktifkan semua alat selama mode non-interaktif

Jika Anda menjalankan tanda yolo ini di cloudshell, konfigurasi default sistem akan melarang Anda menjalankannya dan menampilkan pesan error ini

Cannot start in YOLO mode when it is disabled by settings

Jalankan perintah berikut untuk menetapkan file konfigurasi tingkat ruang kerja

mkdir .gemini && cloudshell edit .gemini/settings.json

Sekarang, file settings.json akan dibuka di editor, salin konfigurasi berikut untuk mengizinkan mode yolo

{
    "security": {
        "disableYoloMode": false
    }
}

Sekarang, jalankan ekstensi code-review dengan perintah berikut

gemini "/code-review" --yolo -e code-review > code-review.md

Perintah ini akan menulis hasil output Gemini CLI ke dalam file code-review.md. Perhatikan tanda -e di sini, tanda ini mengontrol ekstensi mana yang akan diaktifkan selama sesi. Di sini, kita hanya mengaktifkan ekstensi code-review dan menonaktifkan ekstensi lainnya.

Proses ini akan memakan waktu beberapa saat, tetapi setelah selesai, Anda dapat melihat hasil yang serupa seperti yang ditunjukkan di bawah ini yang ditulis ke file markdown

Here are the results of the code review.

While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.

More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:

### 1. SQL Injection
*   **Severity**: High
*   **Location**: 
    *   `main.py:99` in `get_products_by_category`
    *   `main.py:146` in `search_products`
    *   `main.py:372` in `get_user_transactions`
    *   `main.py:438` in `adjust_inventory_by_query`
*   **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
*   **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.

### 2. Server-Side Request Forgery (SSRF)
*   **Severity**: High
*   **Location**: `main.py:265` in `fetch_url`
*   **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
*   **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.

### 3. Information Exposure
*   **Severity**: Medium
*   **Location**: `main.py:423` in `get_environment_variables`
*   **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
*   **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.

8. 🚀 Dukungan Model Context Protocol

Sekarang, seperti yang telah kita periksa sebelumnya dalam penjelasan ekstensi, Gemini CLI dapat terhubung ke server MCP—aplikasi yang menyediakan alat dan resource melalui Model Context Protocol. Koneksi ini memungkinkan Gemini CLI berinteraksi dengan sistem eksternal dan sumber data menggunakan server MCP sebagai jembatan ke lingkungan lokal dan layanan eksternal seperti API.

7d8738ee9c079aa1.png

Jika ingin melakukan penyiapan server MCP sendiri, Anda perlu mengubah file .gemini/settings.json dan menambahkan konfigurasi berikut :

{
    ...
    # Previous settings above if any
    "mcpServers": {
       "server_name": {
           # MCP server configurations here
       }
    }
}

Untuk tutorial ini, mari kita konfigurasi koneksi dengan akun GitHub untuk mengirimkan data laporan sebelumnya ke GitHub

Mengonfigurasi Server MCP GitHub

Pertama, mari buat file konfigurasi project Gemini CLI terlebih dahulu. Jalankan perintah berikut

mkdir -p .gemini && touch .gemini/settings.json

Kemudian, buka file .gemini/settings.json dan isi dengan konfigurasi berikut

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "your-personal-access-token"
            },
            "timeout": 5000
       }
  }
}

Sekarang, kita akan memerlukan token akses pribadi Github Anda di sini, jadi pastikan Anda sudah memiliki akun Github sendiri.

Login ke GitHub Anda, lalu buka Settings

c7d83d4e503602e2.png

Setelah itu, scroll ke bawah untuk menemukan Setelan developer dan klik

c6c9bfafe5021b9e.png

Kemudian, pilih Personal access tokens dan pilih Tokens (classic)

e21f0ed9f361fc13.png

c3c26d7f41c51e1c.png

Beri nama token akses pribadi Anda di sini dan periksa cakupan repo

b0830480eaf3c15d.png

Kemudian, scroll ke bawah dan klik tombol Buat Token, pastikan Anda

Klik tombol Buat token baru, lalu pilih Buat token baru (klasik). Setelah itu, salin token yang dihasilkan dan tulis di .gemini/settings.json

30d1ea92bb24a7ba.png

Jadi, .gemini/settings.json Anda akan terlihat seperti contoh berikut

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "ghp-xxxx"
            },
            "timeout": 5000
       }
  }
}

Sekarang, mari kita verifikasi koneksinya. Masukkan Gemini CLI dengan menjalankan perintah ini

gemini

Kemudian, jalankan perintah /mcp, Anda akan melihat MCP Github sudah dikonfigurasi dengan benar

1e9c8585ecb39ccb.png

/mcp

Kemudian, mari kita uji koneksi MCP ini dengan mengirimkan perintah ini

70e045049e8792a8.png

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review

Perhatikan notasi @code-review.md dan @security-analysis.md di sini, ini adalah cara kita mereferensikan file yang akan diteruskan ke Gemini CLI. Perintah ini akan membaca konten kedua file dan mengirimkan komentar ke Pull Request yang terkait dengan cabang ini menggunakan koneksi MCP Github. Setelah itu, Anda dapat memeriksa URL pull request untuk memverifikasinya.

f6483c19e27d4d1c.png

9. 💡Gemini CLI dalam Alur Kerja CI/CD

Jika Anda adalah pengguna GitHub, Anda dapat menyematkan Gemini CLI dengan mudah di pipeline CI/CD dengan memanfaatkan run-gemini-cliGitHub Action. Gemini CLI bertindak sebagai agen otonom untuk tugas coding rutin yang penting, dan kolaborator on-demand yang dapat Anda delegasikan pekerjaannya dengan cepat.

Anda dapat memanfaatkannya untuk melakukan peninjauan permintaan pull, menyeleksi masalah, melakukan analisis dan modifikasi kode, serta banyak lagi menggunakan Gemini secara percakapan langsung di dalam repositori GitHub

Contoh integrasi ini dapat diperiksa dalam permintaan penarikan ini, tempat kami menggunakan ekstensi Keamanan Gemini CLI di dalam runner dan memberikan ulasan saat Permintaan Penarikan dibuat

bc58be84fcbb313a.png

da9e2cde49cbebe5.png

3deda99e8a7fa4d3.png

d933d6b31b42e582.png

10. 💡Menjelajahi Ekstensi Gemini CLI Lainnya

dd25e5619e91ad0b.png

Anda juga dapat menjelajahi ekstensi lainnya di https://geminicli.com/extensions . Coba lihat untuk menemukan alat yang lebih menarik.

11. 🧹 Membersihkan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam codelab ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.