Peninjauan Kode dan Analisis Keamanan dengan Gemini CLI dengan Ekstensi

1. 📖 Pengantar

194a7f6f1a93b614.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)

3a143645e891087.png

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

59e03077d1ba2039.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

973396bb9d9c3523.png

837e03fb7edafdc4.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

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

1829c3759227c19b.png

b8fe7df5c3c2b919.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)

Selanjutnya, kita juga perlu memeriksa 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.

25e65d7ad1d62de0.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>

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

Klik tombol Open Editor, dan Cloud Shell Editor akan terbuka b16d56e4979ec951.png

Sekarang Anda akan melihat antarmuka Cloud Shell Editor seperti yang ditunjukkan di bawah

74e9e030342164b6.png

Sekarang, buat clone repositori demo yang akan kita gunakan. Pertama, kita perlu membuka terminal untuk editor. Anda dapat melakukannya dengan mengklik Terminal -> New Terminal di panel menu, atau menggunakan Ctrl + Shift + C , yang akan membuka jendela terminal di bagian bawah browser

95e31ec63a88890d.png

Kemudian, jalankan perintah ini di terminal

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

Setelah itu, buka bagian atas Editor Cloud Shell, klik File->Open Folder, temukan direktori username Anda, lalu temukan direktori repositori yang di-clone code-analysis-demo, lalu klik tombol OK. Tindakan ini akan menjadikan direktori yang dipilih sebagai direktori kerja utama. Dalam contoh ini, nama penggunanya adalah alvinprayuda, sehingga jalur direktori ditampilkan di bawah

ee00d484ff2f8351.png

194f63ef6de51b9.png

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

2d53c6161b553e68.png

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

7f0f7d5091df7abb.png

Kemudian, Anda akan ditanya beberapa opsi untuk melakukan autentikasi

7ce5c6574f249304.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"
    }
  }
}

72300c1f781857c8.png

4. 🚀 Perintah Dasar dan Alat Bawaan

Sekarang, mari kita coba Gemini CLI untuk mengetahui lebih lanjut tentangnya. Jika Anda mencari beberapa perintah dasar yang dapat digunakan, Anda dapat mengetik /help untuk menampilkan semua perintah yang tersedia

800d1b06a5ad9f9c.png

/help

Anda akan melihat output seperti ini f46a75c6bb177a2b.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

17a6d7fcf06df563.png

/tools

Anda akan melihat output seperti ini

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

15e2d863a4eb8df4.png

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

Anda akan melihat bahwa perintah tersebut akan memanggil alat GoogleSearch dan selanjutnya akan menulis hasilnya menggunakan alat 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

8163f43b05ca59a3.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 dipaketkan 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

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

88a86a0dc42fc510.png

/extensions

Oke, sekarang mari kita lakukan eksekusi praktis pada repo 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

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

10d6ad2ef91b5acf.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:

543035cb65d27804.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

73f4966870bc9ddf.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 melihat perintah berikut di Gemini CLI, Anda dapat memilih opsi 2 untuk menonaktifkan deteksi loop

a0af5e15627afa83.png

Kemudian, minta Gemini CLI untuk melanjutkan

611a7ed0fb6fc44b.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

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

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

5f1cdd4be3e7b42a.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

dc57f047ca9a2b83.png

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

59d9b700c41ca1b6.png

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

e96fccd80872e480.png

30ac727da307602b.png

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

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

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

a97c9a98f07dc87c.png

/mcp

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

59bfd79aba7cc386.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 Github MCP. Setelah itu, Anda dapat memeriksa URL pull request untuk memverifikasinya.

864b859b56cfe9e7.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

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡Menjelajahi Ekstensi Gemini CLI Lainnya

8a7939ee0328e6e2.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.