1. 📖 Giriş

Bu codelab'de Gemini KSA'nın temellerini öğrenecek ve yazılım geliştirme iş akışınızda kod inceleme ve güvenlik analizi uzantısını kullanacaksınız.
Neler öğreneceksiniz?
- Gemini CLI'yı ayarlama
- Gemini CLI'yı yapılandırma
- Gemini CLI uzantısını yükleme
- Kod inceleme ve güvenlik analizi için Gemini CLI uzantısından yararlanma
- Gemini CLI için MCP'yi yapılandırma
- CI/CD'de Gemini CLI'yı inceleme
Gerekenler
- Chrome web tarayıcısı
- Gmail hesabı
- Faturalandırma hesabı etkinleştirilmiş bir Cloud projesi
2. 🚀 Atölye Geliştirme Kurulumuna Hazırlanma
1. adım: Cloud Console'da Etkin Proje'yi seçin
Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun (konsolunuzun sol üst bölümüne bakın).

Bu seçeneği tıkladığınızda, örnekteki gibi tüm projelerinizin listesini görürsünüz.

Kırmızı kutuyla belirtilen değer PROJE KİMLİĞİ'dir ve bu değer, eğitim boyunca kullanılacaktır.
Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bunu kontrol etmek için sol üst çubuğunuzdaki hamburger simgesini ☰ tıklayarak gezinme menüsünü gösterin ve Faturalandırma menüsünü bulun.


"Google Cloud Platform Deneme Faturalandırma Hesabı" ifadesini Faturalandırma / Genel Bakış başlığı altında ( Cloud Console'unuzun sol üst bölümü) görüyorsanız projeniz bu eğitimde kullanılmaya hazırdır. Aksi takdirde, bu eğitimin başına dönün ve deneme faturalandırma hesabını kullanın.

2. adım: Cloud Shell'i tanıyın
Eğitimlerin büyük bir bölümünde Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmındaki Cloud Shell'i Etkinleştir'i tıklayın. Yetkilendirmeniz istenirse Yetkilendir'i tıklayın.


Cloud Shell'e bağlandıktan sonra, kabuğun ( veya terminalin) hesabımızla kimliğinin doğrulanıp doğrulanmadığını kontrol etmemiz gerekir.
gcloud auth list
Aşağıdaki örnek çıktıda olduğu gibi kişisel Gmail'inizi görüyorsanız her şey yolundadır.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Aksi takdirde, tarayıcınızı yenilemeyi deneyin ve istendiğinde Yetkilendir'i tıkladığınızdan emin olun ( bağlantı sorunu nedeniyle kesintiye uğrayabilir).
Ardından, kabuğun doğru PROJE KİMLİĞİ ile yapılandırılıp yapılandırılmadığını da kontrol etmemiz gerekir. Terminalde $simgesinden önce ( ) içinde bir değer görüyorsanız ( aşağıdaki ekran görüntüsünde değer "your-workshop-project") bu değer, etkin kabuk oturumunuz için yapılandırılmış projeyi gösterir.

Gösterilen değer zaten doğruysa sonraki komutu atlayabilirsiniz. Ancak doğru değilse veya eksikse aşağıdaki komutu çalıştırın.
gcloud config set project <YOUR_PROJECT_ID>
3. adım: Cloud Shell Editor'a alışın ve uygulama çalışma dizinini ayarlayın
Şimdi kod düzenleyicimizi bazı kodlama işlemleri yapacak şekilde ayarlayabiliriz. Bu işlem için Cloud Shell Düzenleyici'yi kullanacağız.
Open Editor (Düzenleyiciyi Aç) düğmesini tıklayın. Bu işlem, Cloud Shell Düzenleyici'yi açar. 
Şimdi aşağıda gösterildiği gibi Cloud Shell Düzenleyici arayüzünü görürsünüz.

Şimdi, etkileşimde bulunacağımız demo deposunu klonlayın. Öncelikle düzenleyicinin terminalini açmamız gerekir. Menü çubuğunda Terminal -> New Terminal'ı tıklayarak veya Ctrl + Üst Karakter + C kısayolunu kullanarak yapabilirsiniz. Bu kısayol, tarayıcının alt kısmında bir terminal penceresi açar.

Ardından terminalde şu komutu çalıştırın:
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
Ardından Cloud Shell Düzenleyici'nin üst bölümüne gidip File->Open Folder'ı (Dosya->Klasörü Aç) tıklayın, username (kullanıcı adı) dizininizi ve klonlanmış depo dizinini code-analysis-demo bulun,ardından Tamam düğmesini tıklayın. Bu işlem, seçilen dizini ana çalışma dizini yapar. Bu örnekte, kullanıcı adı alvinprayuda olduğundan dizin yolu aşağıda gösterilmiştir.


Cloud Shell Düzenleyici çalışma dizininiz artık aşağıdaki gibi görünmelidir.

Şimdi bir sonraki aşamaya geçebiliriz.
3. 🚀 Kurulum ve Yapılandırmalar
Gemini CLI'yı yerel sisteminize yüklemek istiyorsanız aşağıdaki adımları uygulayabilirsiniz:
- Sisteminizde Node sürümü 20 veya üzeri olduğundan emin olun.
- Aşağıdaki yöntemlerden birini kullanarak Gemini CLI'yı etkinleştirin:
- Genel paket olarak yükleme
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- Dilerseniz her zaman en son sürümü almak için doğrudan kaynaktan çalıştırabilirsiniz.
npx https://github.com/google-gemini/gemini-cli
İlk kez çalıştırdığınızda size birkaç soru sorulur. Bu komutu bir IDE'den (ör. VSCode) çalıştırırsanız aşağıdaki soru sorulur:

Ardından, kimlik doğrulamak için birkaç seçenek sunulur.

Birkaç seçenek vardır:
- Google ile giriş yap'ı seçerseniz tarayıcıda Google kimlik doğrulama sayfası açılır ve bunu kabul etmeniz yeterlidir.
- Gemini API anahtarı kullanmayı tercih ederseniz AI Studio sayfasında bir anahtar oluşturmanız ve ardından çalışma dizininizde GEMINI_API_KEY değişkeni ayarlanmış .env dosyası oluşturmanız ( veya komut satırında
export GEMINI_API_KEY="your-api-key"komutunu çalıştırmanız) gerekir. - Vertex AI'ı kullanmayı seçerseniz daha önce ayarladığınız gibi bir projeye ihtiyacınız olur. Ayrıca .env dosyası oluşturup GOOGLE_CLOUD_PROJECT ve GOOGLE_CLOUD_LOCATION'ı ayarlamanız gerekir.
Bu kimlik doğrulama yöntemlerini değiştirmek isterseniz Gemini KSA'dan /auth komutunu çalıştırabilir veya yapılandırma dosyasını düzenleyebilirsiniz. Yapılandırma dosyasını doğrudan düzenlemek istiyorsanız Linux'ta $HOME/.gemini/settings.json içinde olmalıdır . security seçeneğini görürsünüz. auth yazıp düzenleyin.
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 Temel Komut ve Yerleşik Araçlar
Şimdi de Gemini CLI hakkında daha fazla bilgi edinmek için bu arayüzü biraz inceleyelim. Kullanılabilecek bazı temel komutlar arıyorsanız /help yazarak tüm kullanılabilir komutları görüntüleyebilirsiniz.

/help
Şuna benzer bir çıkış görürsünüz: 
Gemini CLI, bir yapay zeka temsilcisidir. Bu nedenle, kullanıcı tarafından verilen görevi çözmek için gerekli araçlara sahiptir. Yerleşik araçlarını görmek için /tools komutunu çalıştırın.

/tools
Aşağıdakine benzer bir çıkış gösterir:

Gemini CLI'ın dosyaya okuma ve yazma, web'de arama gibi çeşitli özellikleri olduğunu görebilirsiniz. Bu araçlardan bazıları, olası risk nedeniyle varsayılan olarak kullanıcı onayı gerektiriyordu.
Şimdi bunu uygulamalı olarak görelim. Bu istemleri Gemini CLI'da çalıştırmayı deneyin.

Find top 10 OWASP security issue and write it down to owasp.md
GoogleSearch aracının çağrıldığını ve daha sonra WriteFile aracını kullanarak sonucu yazdığını görürsünüz. IDE kullanıyorsanız önerilerin kabul edilip edilmeyeceğini belirten bir fark ve görüntüleme seçeneği gösterilir. Burada, Gemini CLI'nın dosyayı yazmak için sizden izin istediğini görebilirsiniz.

5. 🚀 Uzantılar
Bir yapay zeka aracısı ile belirli bir görevin çıktısını iyileştirmek için uygun bir istem oluşturma, uygun araç entegrasyonu ile uygun bir bağlam mühendisliği yönetme gibi zorlu konuları ele almamız gerekir.
Gemini CLI Uzantıları, harici araçlara bağlanabilen, önceden paketlenmiş ve kolayca yüklenebilen istemler ve entegrasyonlardır. Her uzantı, araçların etkili bir şekilde nasıl kullanılacağıyla ilgili yerleşik bir "playbook" içerir ve şu bileşenlerden oluşabilir:
- Özel eğik çizgi komutları
- MCP yapılandırmaları
- Bağlam dosyaları

Güvenlik uzantılarını yükleme
Örneğin, bu eğitimde code-review ve security uzantılarının nasıl yüklenebileceğini inceleyeceğiz.
Terminalden security uzantılarını yüklemek için aşağıdaki komutu çalıştırın.
gemini extensions install https://github.com/gemini-cli-extensions/security
Aşağıdaki sorular gösterilir. Kabul etmek için Enter tuşuna basın.
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.
Kod İnceleme Uzantılarını Yükleme
Ardından code-review uzantısını yüklemek için aşağıdaki komutu çalıştırın.
gemini extensions install https://github.com/gemini-cli-extensions/code-review
İşlem tamamlandıktan sonra Gemini CLI'yı tekrar çalıştırın.
gemini
komutunu çalıştırdığınızda bu iki uzantının zaten yüklü olduğunu görürsünüz./extensions

/extensions
Şimdi de daha önce klonladığınız örnek depoda pratik bir uygulama yapalım.
6. 🚀 Etkileşimli Mod - Kod Güvenliği Analizi Uzantısı Uygulaması
Güvenlik uzantısı, açık kaynaklı bir Gemini CLI uzantısıdır ve depodaki güvenliği artırmak için geliştirilmiştir. Uzantı, Gemini CLI'ye çeşitli güvenlik risklerini ve güvenlik açıklarını belirlemek için kod değişikliklerini analiz eden yeni bir komut ekler.
Şimdi önce demo depomuzu hazırlayalım. Güvenlik riski içeren değişikliklerin uygulandığı dala geçmek için aşağıdaki komutu çalıştırın.
git checkout refactor/analysis-demo
Ardından terminalde Gemini CLI'yı çalıştırın.
gemini
Ardından uzantıları çalıştıralım.

/security:analyze
Bu işlem uzun sürecek bir işlemi başlatır ve işlem sırasında, aşağıda gösterildiği gibi mkdir gibi belirli işlemleri çalıştırmak için izninizi isteyen birkaç kesinti alırsınız.

Bu, kullanıcıların Gemini CLI tarafından neyin yürütüleceğinin farkında olmasını sağlayan bir koruma mekanizmasıdır. Eğitimin geri kalanında her zaman izin verebilirsiniz ( 2. seçenek).
Bu uzantı, uzun süren bir işlemi başlatır. .gemini_security dizininde bir planlama dosyası oluşturduğunu ve hangi işlemin tamamlandığını veya tamamlanmadığını kontrol listesinde görebilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

Bu uzantıların görevlerini tamamlaması biraz zaman alacaktır. Bu süre zarfında, GitHub deposunda bu uzantıların kaynağını kontrol edebiliriz. Bu URL, tüm bu güvenlik tarama işlemlerini çalıştırmak için kullanılan istemi gösterir.

Orada da görebileceğiniz gibi, bunu yapmak için Gemini KSA olarak istemi tarayarak iki aşamalı kontrol gerçekleştiriyoruz: Keşif Aşaması ve daha ayrıntılı olan İnceleme Aşaması.
Gemini CLI'da aşağıdaki istemle karşılaşırsanız döngü algılamayı devre dışı bırakmak için 2. seçeneği belirleyebilirsiniz.

Ardından Gemini CLI'dan devam etmesini isteyin.

continue
Bu, sonsuz ve verimsiz araç çağırma döngülerini önlemek için kullanılan bir mekanizmadır ve zaman içinde geliştirilmeye devam edecektir.
İşlem tamamlandıktan sonra rapor, etkileşimli terminalde gösterilir. Bunu kolaylaştırmak için Gemini CLI'ya raporu security-analysis.md içine yazmasını söyleyelim.

write the result to security-analysis.md file
Artık dosyaya yazılan sonucu inceleyebilirsiniz.
7. 🚀 Non-Interactive Mode - Code Review Extension Application
code-review uzantısı, çeşitli kod kalitesi sorunlarını belirlemek için kod değişikliklerini analiz eden Gemini CLI'ye yeni bir komut ekler.
Bu uzantı, Gemini CLI'nin etkileşimli olmayan modunda yürütülebilir. Yani tüm süreç, Gemini CLI kabuğuna girilmesine gerek kalmadan yürütülebilir. Gemini KSA'yı etkileşimli olmayan modda çalıştırmak için aşağıdaki komut kalıbını kullanabilirsiniz.
gemini "put your command here"
Ancak etkileşimli olmayan modda çalışmanın, kullanıcı izni gerektiren tüm araç işlemlerini devre dışı bırakacağını unutmamak önemlidir. Bu nedenle, tüm işlemleri otomatik olarak onaylamak için --yolo işaretini eklememiz gerekir. Bu da etkileşimli olmayan modda tüm araçların etkinleştirilmesi anlamına gelir.
Aşağıdaki komutla code-review uzantısını çalıştıralım.
gemini "/code-review" --yolo -e code-review > code-review.md
Bu komut, Gemini CLI çıkışının sonucunu code-review.md dosyasına yazar. Buradaki -e işaretine dikkat edin. Bu işaret, oturum sırasında hangi uzantının etkinleştirileceğini kontrol eder. Burada yalnızca code-review uzantısını etkinleştirip diğerlerini devre dışı bırakıyoruz.
Bu işlem biraz zaman alır. Tamamlandıktan sonra, aşağıda gösterildiği gibi Markdown dosyasına yazılan benzer bir sonuç görebilirsiniz.
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. 🚀 Model Context Protocol Support
Şimdi, uzantı açıklamalarında daha önce incelediğimiz gibi Gemini CLI, Model Context Protocol aracılığıyla araçlar ve kaynaklar sağlayan uygulamalar olan MCP sunucularına bağlanabilir. Bu bağlantı, Gemini CLI'nin yerel ortamınız ve API'ler gibi harici hizmetler için köprü olarak MCP sunucularını kullanarak harici sistemler ve veri kaynaklarıyla etkileşim kurmasına olanak tanır.

Kendi MCP sunucu kurulumunuzu yapmak istiyorsanız .gemini/settings.json dosyanızı değiştirmeniz ve aşağıdaki yapılandırmaları eklemeniz gerekir :
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
Bu eğitimde, önceki rapor verilerini GitHub'a aktarmak için GitHub hesabımızla bağlantıyı yapılandıralım.
Github MCP sunucusunu yapılandırma
Öncelikle Gemini CLI proje yapılandırma dosyamızı oluşturalım. Aşağıdaki komutu çalıştırın
mkdir -p .gemini && touch .gemini/settings.json
Ardından .gemini/settings.json dosyasını açın ve aşağıdaki yapılandırmayla doldurun.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
Şimdi, kendi GitHub kişisel erişim jetonunuzu buraya girmeniz gerekecek. Bu nedenle, kendi GitHub hesabınızın olduğundan emin olun.
GitHub hesabınıza giriş yapın ve Ayarlar'a gidin.

Ardından, Geliştirici ayarları'nı bulup tıklayın.

Ardından Kişisel erişim jetonları'nı seçip Jetonlar (klasik)'i belirleyin.


Kişisel erişim jetonunuza burada ad verin ve repo kapsamlarını işaretleyin.

Ardından aşağı kaydırıp Jeton oluştur düğmesini tıklayın.
Yeni jeton oluştur düğmesini tıklayın ve Yeni jeton oluştur (klasik) seçeneğini belirleyin. Ardından, oluşturulan jetonu kopyalayın ve .gemini/settings.json dosyasına yazın.

Bu nedenle, .gemini/settings.json dosyanız aşağıdaki örneğe benzemelidir.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
Şimdi bağlantıyı doğrulayalım. Bu komutu çalıştırarak Gemini CLI'ya girin.
gemini
Ardından, /mcp komutunu çalıştırın. Github MCP'nin zaten doğru şekilde yapılandırıldığını görmeniz gerekir.

/mcp
Ardından, bu komutu göndererek bu MCP bağlantısını test edelim.

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
Buradaki @code-review.md ve @security-analysis.md gösterimine dikkat edin. Bu, Gemini CLI'ye iletilecek dosyalara referans verme şeklimizdir. Bu komut, her iki dosyanın içeriğini okur ve Github MCP bağlantısını kullanarak bu şube ile ilgili çekme isteğine bir yorum gönderir. Ardından, çekme isteği URL'sinde kontrol ederek doğrulayabilirsiniz.

9. 💡CI/CD iş akışında Gemini CLI
GitHub kullanıcısıysanız run-gemini-cliGitHub Action'ı kullanarak Gemini KSA'yı CI/CD ardışık düzeninize kolayca yerleştirebilirsiniz. Hem kritik rutin kodlama görevleri için bağımsız bir aracı hem de işi hızlıca devredebileceğiniz, isteğe bağlı bir iş arkadaşı olarak çalışır.
Bu özelliği kullanarak doğrudan GitHub depolarında Gemini ile etkileşimli bir şekilde çekme isteği incelemeleri yapabilir, sorunları önceliklendirebilir, kod analizi ve değişikliği yapabilir ve daha fazlasını gerçekleştirebilirsiniz.
Bu entegrasyonun örneğini bu çekme isteğinde inceleyebilirsiniz. Burada, koşucu içinde Gemini KSA Güvenlik uzantısını kullanıyoruz ve çekme isteği oluşturulduğunda incelemeleri veriyoruz.




10. 💡Diğer Gemini CLI Uzantıları'nı Keşfedin

Ayrıca https://geminicli.com/extensions adresinden daha fazla uzantıyı keşfedebilirsiniz . Daha ilginç araçlar için göz atın.
11. 🧹 Temizleme
Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.