Code-Review und Sicherheitsanalyse mit der Gemini-Befehlszeile mit Erweiterungen

1. 📖 Einführung

194a7f6f1a93b614.png

In diesem Codelab lernen Sie die Grundlagen der Gemini CLI kennen und verwenden die Erweiterung für Code-Reviews und Sicherheitsanalysen in Ihrem Softwareentwicklungs-Workflow.

Lerninhalte

  • Gemini CLI einrichten
  • Gemini-Befehlszeile konfigurieren
  • Gemini CLI-Erweiterung installieren
  • Gemini CLI-Erweiterung für Code-Reviews und Sicherheitsanalysen verwenden
  • MCP für die Gemini CLI konfigurieren
  • Gemini CLI in CI/CD prüfen

Voraussetzungen

  • Chrome-Webbrowser
  • Ein Gmail-Konto
  • Ein Cloud-Projekt mit aktiviertem Abrechnungskonto

2. 🚀 Vorbereitung der Workshop-Entwicklung

Schritt 1: Aktives Projekt in der Cloud Console auswählen

Wählen Sie in der Google Cloud Console auf der Seite zur Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines (siehe oben links in der Console).

3a143645e891087.png

Klicken Sie darauf, um eine Liste aller Ihrer Projekte aufzurufen, wie in diesem Beispiel:

59e03077d1ba2039.png

Der Wert, der durch das rote Kästchen angegeben wird, ist die PROJEKT-ID. Dieser Wert wird im gesamten Tutorial verwendet.

Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Klicken Sie dazu links oben in der Leiste auf das Dreistrich-Menü ☰, um das Navigationsmenü aufzurufen, und suchen Sie nach dem Abrechnungsmenü.

973396bb9d9c3523.png

837e03fb7edafdc4.png

Wenn Sie unter dem Titel Abrechnung / Übersicht ( oben links in der Cloud Console ) das Google Cloud Platform-Testabrechnungskonto sehen, kann Ihr Projekt für diese Anleitung verwendet werden. Falls nicht, kehren Sie zum Anfang dieses Tutorials zurück und lösen Sie das Abrechnungskonto für den Testzeitraum ein.

7f607aa026552bf5.png

Schritt 2: Mit Cloud Shell vertraut machen

Für den Großteil der Anleitungen verwenden Sie Cloud Shell. Klicken Sie dazu oben in der Google Cloud Console auf „Cloud Shell aktivieren“. Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf Autorisieren.

1829c3759227c19b.png

b8fe7df5c3c2b919.png

Nachdem Sie eine Verbindung zu Cloud Shell hergestellt haben, müssen wir prüfen, ob die Shell ( oder das Terminal) bereits mit Ihrem Konto authentifiziert ist.

gcloud auth list

Wenn Sie Ihr privates Gmail-Konto wie im Beispiel unten sehen, ist alles in Ordnung.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

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

Falls nicht, aktualisieren Sie Ihren Browser und klicken Sie auf Autorisieren, wenn Sie dazu aufgefordert werden. Möglicherweise wurde die Verbindung unterbrochen.

Als Nächstes müssen wir prüfen, ob die Shell bereits für die richtige PROJEKT-ID konfiguriert ist. Wenn im Terminal vor dem Symbol „$“ ein Wert in Klammern angezeigt wird (im Screenshot unten ist der Wert „your-workshop-project“), gibt dieser Wert das konfigurierte Projekt für Ihre aktive Shell-Sitzung an.

25e65d7ad1d62de0.png

Wenn der angezeigte Wert bereits korrekt ist, können Sie den nächsten Befehl überspringen. Wenn sie nicht korrekt ist oder fehlt, führen Sie den folgenden Befehl aus:

gcloud config set project <YOUR_PROJECT_ID>

Schritt 3: Cloud Shell-Editor kennenlernen und Arbeitsverzeichnis der Anwendung einrichten

Jetzt können wir unseren Code-Editor für einige Programmieraufgaben einrichten. Dazu verwenden wir den Cloud Shell-Editor.

Klicken Sie auf die Schaltfläche Editor öffnen, um den Cloud Shell-Editor b16d56e4979ec951.png zu öffnen.

Jetzt wird die Benutzeroberfläche des Cloud Shell-Editors angezeigt, wie unten dargestellt.

74e9e030342164b6.png

Klonen Sie nun das Demo-Repository, mit dem wir interagieren werden. Zuerst müssen wir das Terminal für den Editor öffnen. Klicken Sie dazu in der Menüleiste auf Terminal -> Neues Terminal oder verwenden Sie die Tastenkombination Strg + Umschalt + C. Dadurch wird unten im Browser ein Terminalfenster geöffnet.

95e31ec63a88890d.png

Führen Sie dann diesen Befehl im Terminal aus.

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

Klicken Sie dann oben im Cloud Shell-Editor auf Datei > Ordner öffnen, suchen Sie nach dem Verzeichnis Nutzername und dann nach dem geklonten Repository-Verzeichnis code-analysis-demo und klicken Sie auf die Schaltfläche „OK“. Dadurch wird das ausgewählte Verzeichnis zum Hauptarbeitsverzeichnis. In diesem Beispiel ist der Nutzername alvinprayuda. Der Verzeichnispfad wird unten angezeigt.

ee00d484ff2f8351.png

194f63ef6de51b9.png

Ihr Cloud Shell Editor-Arbeitsverzeichnis sollte nun so aussehen:

2d53c6161b553e68.png

Jetzt können wir mit der nächsten Phase fortfahren.

3. 🚀 Einrichtung und Konfigurationen

Wenn Sie die Gemini CLI auf Ihrem lokalen System installieren möchten, können Sie diese Schritte ausführen:

  1. Auf Ihrem System muss Node-Version 20 oder höher installiert sein.
  2. Aktivieren Sie die Gemini CLI auf eine der folgenden Arten:
  • Als globales Paket installieren
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • Oder Sie führen es direkt von der Quelle aus, um immer die aktuelle Version zu erhalten.
npx https://github.com/google-gemini/gemini-cli

Wenn Sie das Tool zum ersten Mal ausführen, werden Ihnen mehrere Fragen gestellt. Wenn Sie es über eine IDE (z.B. VSCode) ausführen, werden Sie gefragt:

7f0f7d5091df7abb.png

Anschließend werden Sie nach verschiedenen Authentifizierungsoptionen gefragt.

7ce5c6574f249304.png

Dafür gibt es mehrere Möglichkeiten:

  • Wenn Sie Mit Google anmelden auswählen, wird im Browser eine Google-Authentifizierungsseite geöffnet, die Sie nur noch akzeptieren müssen.
  • Wenn Sie lieber einen Gemini API-Schlüssel verwenden möchten, müssen Sie einen auf der AI Studio-Seite erstellen und dann eine .env-Datei in Ihrem Arbeitsverzeichnis erstellen, in der die Variable GEMINI_API_KEY festgelegt ist. Alternativ können Sie den Befehl export GEMINI_API_KEY="your-api-key" in der Befehlszeile ausführen.
  • Wenn Sie Vertex AI verwenden möchten, benötigen Sie ein Projekt wie das, das Sie zuvor eingerichtet haben. Außerdem müssen Sie eine .env-Datei erstellen und die Variablen GOOGLE_CLOUD_PROJECT und GOOGLE_CLOUD_LOCATION festlegen.

Wenn Sie diese Authentifizierungsmethoden ändern möchten, können Sie den Befehl /auth über die Gemini-Befehlszeile ausführen oder die Konfigurationsdatei bearbeiten. Wenn Sie die Konfigurationsdatei direkt bearbeiten möchten, sollte sie unter Linux im Verzeichnis $HOME/.gemini/settings.json gespeichert sein . Sie sehen den Typ security und auth und können ihn bearbeiten.

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

72300c1f781857c8.png

4. 🚀 Grundlegende Befehle und integrierte Tools

Sehen wir uns nun die Gemini CLI genauer an. Wenn Sie nach einigen grundlegenden Befehlen suchen, die verwendet werden können, geben Sie /help ein, um alle verfügbaren Befehle aufzurufen.

800d1b06a5ad9f9c.png

/help

Die Ausgabe sieht so aus: f46a75c6bb177a2b.png

Gemini CLI ist ein KI-Agent und verfügt daher über Tools, mit denen die vom Nutzer gestellte Aufgabe gelöst werden kann. Führen Sie den Befehl /tools aus, um die integrierten Tools aufzurufen.

17a6d7fcf06df563.png

/tools

Die Ausgabe sieht so aus:

7d22b38a387f45d0.png

Die Gemini CLI bietet verschiedene Funktionen wie das Lesen und Schreiben von Dateien, Websuchen und vieles mehr. Bei einigen dieser Tools war aufgrund des potenziellen Risikos standardmäßig eine Bestätigung durch den Nutzer erforderlich.

Sehen wir uns das mal in der Praxis an. Führen Sie diese Prompts in der Gemini CLI aus.

15e2d863a4eb8df4.png

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

Sie sehen, dass das GoogleSearch-Tool aufgerufen wird und das Ergebnis später mit dem WriteFile-Tool geschrieben wird. Wenn Sie eine IDE verwenden, werden die Änderungen als Differenz angezeigt und Sie können die Vorschläge annehmen oder ablehnen. Hier sehen Sie, dass die Gemini CLI Sie um die Berechtigung zum Schreiben der Datei bittet.

8163f43b05ca59a3.png

5. 🚀 Erweiterungen

Um die Ausgabe einer bestimmten Aufgabe mit einem KI-Agenten zu verbessern, müssen wir unter anderem einen geeigneten Prompt erstellen, den Kontext mit geeigneten Tools verwalten und die Tools richtig einbinden.

Gemini CLI-Erweiterungen sind vorgefertigte und einfach zu installierende Prompts und Integrationen, die eine Verbindung zu externen Tools herstellen können. Jede Erweiterung enthält ein integriertes „Playbook“ zur effektiven Nutzung der Tools und kann aus den folgenden Komponenten bestehen:

  • Benutzerdefinierte Slash-Befehle
  • MCP-Konfigurationen
  • Kontextdateien

6da12f33463ac755.png

Sicherheitserweiterungen installieren

In dieser Anleitung wird beispielsweise beschrieben, wie code-review- und security-Erweiterungen installiert werden können.

Führen Sie den folgenden Befehl aus, um die security-Erweiterungen über das Terminal zu installieren.

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

Es werden die folgenden Fragen angezeigt. Drücken Sie einfach die Eingabetaste, um sie zu bestätigen.

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.

Code Review-Erweiterungen installieren

Als Nächstes installieren wir die code-review-Erweiterung. Führen Sie dazu den folgenden Befehl aus:

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

Führen Sie nach Abschluss die Gemini CLI noch einmal aus.

gemini

Wenn Sie den Befehl /extensions ausführen, sehen Sie, dass diese beiden Erweiterungen bereits installiert sind.

88a86a0dc42fc510.png

/extensions

Okay, jetzt wollen wir das Ganze praktisch anwenden und das Beispiel-Repository ausführen, das Sie zuvor geklont haben.

6. 🚀 Interaktiver Modus – Erweiterungsanwendung für die Code-Sicherheitsanalyse

Die Security-Erweiterung ist eine Open-Source-Gemini CLI-Erweiterung, die entwickelt wurde, um die Sicherheit des Repositorys zu verbessern. Die Erweiterung fügt der Gemini CLI einen neuen Befehl hinzu, mit dem Codeänderungen analysiert werden, um verschiedene Sicherheitsrisiken und ‑lücken zu erkennen.

Bereiten wir nun zuerst unser Demorepository vor. Führen Sie den folgenden Befehl aus, um zum Branch zu wechseln, in dem Änderungen mit Sicherheitsrisiko bereits angewendet wurden.

git checkout refactor/analysis-demo

Führen Sie dann die Gemini CLI im Terminal aus.

gemini

Dann führen wir die Erweiterungen aus.

e3fcf630238f9b2e.png

/security:analyze

Dadurch wird ein lang andauernder Prozess gestartet. Während des Prozesses werden Sie mehrmals unterbrochen und um die Erlaubnis gebeten, bestimmte Vorgänge wie mkdir auszuführen.

10d6ad2ef91b5acf.png

Das ist ein Schutzmechanismus, damit Nutzer wissen, was von der Gemini-Befehlszeile ausgeführt wird. Für den Rest des Tutorials können Sie die Option 2 auswählen.

Durch diese Erweiterung wird ein zeitaufwendiger Prozess aufgerufen. Sie können sehen, wie eine Planungsdatei im Verzeichnis .gemini_security erstellt wird, und anhand der Checkliste erkennen, welcher Prozess abgeschlossen ist und welcher nicht. Wie im folgenden Beispiel:

543035cb65d27804.png

Es dauert einige Zeit, bis die Aufgaben abgeschlossen sind. In der Zwischenzeit können wir die Quelle dieser Erweiterungen im Github-Repository prüfen. Diese URL zeigt den Prompt, der zum Ausführen aller dieser Sicherheitsüberprüfungen verwendet wird.

73f4966870bc9ddf.png

Wie Sie dort sehen, wird der Prompt von Gemini CLI gescannt, um eine zweistufige Überprüfung durchzuführen, den Reconnaissance Pass (Erkundungsdurchlauf) und den detaillierteren Investigation Pass (Untersuchungsdurchlauf).

Wenn Sie in der Gemini CLI den folgenden Prompt sehen, können Sie Option 2 auswählen, um die Schleifenerkennung zu deaktivieren.

a0af5e15627afa83.png

Dann fordern Sie die Gemini CLI auf, fortzufahren.

611a7ed0fb6fc44b.png

continue

Dieser Mechanismus soll verhindern, dass Tools in einer Endlosschleife aufgerufen werden. Er wird im Laufe der Zeit immer weiter verbessert.

Nach Abschluss wird der Bericht im interaktiven Terminal angezeigt. Um dies zu vereinfachen, weisen wir die Gemini-Befehlszeile an, ihn in security-analysis.md zu schreiben.

b4cbad3aaeaa8dce.png

write the result to security-analysis.md file

Jetzt können Sie sich das Ergebnis ansehen, das in die Datei geschrieben wurde.

7. 🚀 Nicht interaktiver Modus – Anwendung für die Code-Überprüfung

Die Erweiterung code-review fügt der Gemini CLI einen neuen Befehl hinzu, mit dem Codeänderungen analysiert werden, um verschiedene Probleme mit der Codequalität zu erkennen.

Diese Erweiterung kann im nicht interaktiven Modus der Gemini CLI ausgeführt werden. Das bedeutet, dass der gesamte Prozess ausgeführt werden kann, ohne dass die Gemini CLI-Shell aufgerufen werden muss. Wenn Sie die Gemini CLI im nicht interaktiven Modus ausführen möchten, können Sie das mit dem folgenden Befehlsmuster tun:

gemini "put your command here"

Wenn das Tool jedoch im nicht interaktiven Modus ausgeführt wird, werden alle Tool-Vorgänge deaktiviert, für die eine Nutzerberechtigung erforderlich ist. Daher müssen wir das Flag --yolo hinzufügen, um alle Aktionen automatisch zu genehmigen und somit alle Tools im nicht interaktiven Modus zu aktivieren.

Führen Sie die code-review-Erweiterung mit dem folgenden Befehl aus:

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

Mit diesem Befehl wird das Ergebnis der Gemini-Befehlszeilenausgabe in die Datei code-review.md geschrieben. Beachten Sie das Flag -e. Damit wird gesteuert, welche Erweiterung während der Sitzung aktiviert wird. Hier aktivieren wir nur die Erweiterung code-review und deaktivieren die anderen.

Das dauert eine Weile. Danach können Sie in der Markdown-Datei ein ähnliches Ergebnis wie unten sehen.

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. 🚀 Unterstützung für das Model Context Protocol

Wie wir bereits in den Erläuterungen zur Erweiterung gesehen haben, kann die Gemini-Befehlszeile eine Verbindung zu MCP-Servern herstellen. Das sind Anwendungen, die Tools und Ressourcen über das Model Context Protocol bereitstellen. Über diese Verbindung kann die Gemini CLI mit externen Systemen und Datenquellen interagieren. Dazu werden MCP-Server als Brücken zu Ihrer lokalen Umgebung und zu externen Diensten wie APIs verwendet.

5f1cdd4be3e7b42a.png

Wenn Sie Ihren eigenen MCP-Server einrichten möchten, müssen Sie die Datei .gemini/settings.json ändern und die folgenden Konfigurationen hinzufügen :

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

In dieser Anleitung konfigurieren wir die Verbindung mit unserem GitHub-Konto, um die vorherigen Berichtsdaten in GitHub zu übertragen.

Github-MCP-Server konfigurieren

Erstellen wir zuerst die Konfigurationsdatei für das Gemini-Befehlszeilenprojekt. Führen Sie den folgenden Befehl aus:

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

Öffnen Sie dann die Datei .gemini/settings.json und fügen Sie die folgende Konfiguration ein.

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

Jetzt benötigen wir Ihr persönliches GitHub-Zugriffstoken. Achten Sie also darauf, dass Sie bereits ein eigenes GitHub-Konto haben.

Melden Sie sich bei GitHub an und rufen Sie die Einstellungen auf.

dc57f047ca9a2b83.png

Scrollen Sie dann nach unten zu den Entwicklereinstellungen und klicken Sie darauf.

59d9b700c41ca1b6.png

Wählen Sie dann Personal access tokens (Persönliche Zugriffstokens) und Tokens (classic) (Tokens (klassisch)) aus.

e96fccd80872e480.png

30ac727da307602b.png

Geben Sie hier den Namen Ihres persönlichen Zugriffstokens ein und aktivieren Sie die repo-Bereiche.

ad167223fa231e3c.png

Scrollen Sie dann nach unten und klicken Sie auf die Schaltfläche Token generieren.

Klicken Sie auf die Schaltfläche Generate new token (Neues Token generieren) und wählen Sie Generate new token (classic) (Neues Token generieren (klassisch)) aus. Kopieren Sie dann das generierte Token und fügen Sie es in die Datei .gemini/settings.json ein.

efd82711868093c0.png

Ihre Datei .gemini/settings.json sollte also wie im folgenden Beispiel aussehen.

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

Prüfen wir nun die Verbindung. Geben Sie diesen Befehl ein, um die Gemini-Befehlszeile zu starten.

gemini

Führen Sie dann den Befehl /mcp aus. Das Github-MCP sollte bereits richtig konfiguriert sein.

a97c9a98f07dc87c.png

/mcp

Lassen Sie uns diese MCP-Verbindung dann mit diesem Befehl testen.

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

Beachten Sie die Notation @code-review.md und @security-analysis.md. So verweisen wir auf Dateien, die an die Gemini CLI übergeben werden sollen. Mit diesem Befehl wird der Inhalt beider Dateien gelesen und über die Github-MCP-Verbindung ein Kommentar zum Pull-Request für diesen Branch gepusht. Anschließend können Sie die Pull-Request-URL aufrufen, um die Änderung zu überprüfen.

864b859b56cfe9e7.png

9. 💡 Gemini CLI im CI/CD-Workflow

Wenn Sie Github-Nutzer sind, können Sie die Gemini CLI ganz einfach in Ihre CI/CD-Pipeline einbetten, indem Sie die run-gemini-cli Github Action verwenden. Er fungiert sowohl als autonomer Agent für kritische Routine-Codierungsaufgaben als auch als On-Demand-Mitarbeiter, dem Sie schnell Aufgaben übertragen können.

Sie können damit Pull-Anfragen prüfen, Probleme priorisieren, Code analysieren und ändern und vieles mehr – alles in einer Konversation mit Gemini direkt in GitHub-Repositories.

Ein Beispiel für diese Integration finden Sie in dieser Pull-Anfrage. Dort wird die Gemini CLI-Sicherheitserweiterung im Runner verwendet und die Rezensionen werden bei der Erstellung der Pull-Anfrage ausgegeben.

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡 Weitere Gemini CLI-Erweiterungen ausprobieren

8a7939ee0328e6e2.png

Weitere Erweiterungen finden Sie unter https://geminicli.com/extensions . Dort findest du weitere interessante Tools.

11. 🧹 Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Codelab verwendeten Ressourcen in Rechnung gestellt werden:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.