Sprawdzanie kodu i analiza bezpieczeństwa za pomocą interfejsu wiersza poleceń Gemini z rozszerzeniami

1. 📖 Wprowadzenie

194a7f6f1a93b614.png

Z tego laboratorium dowiesz się, jak korzystać z podstawowych funkcji interfejsu wiersza poleceń Gemini oraz z jego rozszerzenia do sprawdzania kodu i analizy bezpieczeństwa w procesie tworzenia oprogramowania.

Czego się nauczysz

  • Konfigurowanie interfejsu wiersza poleceń Gemini
  • Jak skonfigurować interfejs wiersza poleceń Gemini
  • Jak zainstalować dodatek do interfejsu wiersza poleceń Gemini
  • Jak korzystać z rozszerzenia interfejsu wiersza poleceń Gemini do sprawdzania kodu i analizy bezpieczeństwa
  • Jak skonfigurować MCP dla interfejsu wiersza poleceń Gemini
  • Jak sprawdzić interfejs wiersza poleceń Gemini w CI/CD

Czego potrzebujesz

  • przeglądarki Chrome,
  • konto Gmail,
  • Projekt w chmurze z włączonym kontem rozliczeniowym

2. 🚀 Przygotowywanie konfiguracji programistycznej warsztatów

Krok 1. Wybierz aktywny projekt w Cloud Console

W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud (patrz lewa górna sekcja konsoli).

3a143645e891087.png

Kliknij go, a zobaczysz listę wszystkich projektów, jak w tym przykładzie:

59e03077d1ba2039.png

Wartość wskazana przez czerwone pole to IDENTYFIKATOR PROJEKTU. Będzie ona używana w całym samouczku.

Sprawdź, czy w projekcie Cloud włączone są płatności. Aby to sprawdzić, kliknij ikonę menu ☰ na pasku w lewym górnym rogu, aby wyświetlić menu nawigacyjne, a następnie znajdź menu Płatności.

973396bb9d9c3523.png

837e03fb7edafdc4.png

Jeśli pod tytułem „Konto rozliczeniowe wersji próbnej Google Cloud Platform” w sekcji Płatności / Podsumowanie ( w lewym górnym rogu konsoli Google Cloud ) widzisz „Konto rozliczeniowe wersji próbnej Google Cloud Platform”, Twój projekt jest gotowy do użycia w tym samouczku. Jeśli nie, wróć na początek tego samouczka i skorzystaj z konta rozliczeniowego w wersji próbnej.

7f607aa026552bf5.png

Krok 2. Zapoznaj się z Cloud Shell

W większości samouczków będziesz używać Cloud Shell. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud. Jeśli pojawi się prośba o autoryzację, kliknij Autoryzuj.

1829c3759227c19b.png

b8fe7df5c3c2b919.png

Po połączeniu z Cloud Shell musimy sprawdzić, czy powłoka ( lub terminal) jest już uwierzytelniona na naszym koncie.

gcloud auth list

Jeśli widzisz swój osobisty adres Gmail, jak w przykładzie poniżej, wszystko jest w porządku.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

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

Jeśli nie, spróbuj odświeżyć przeglądarkę i kliknąć Autoryzuj, gdy pojawi się odpowiedni komunikat ( może to zostać przerwane z powodu problemu z połączeniem).

Następnie musimy sprawdzić, czy powłoka jest już skonfigurowana z prawidłowym IDENTYFIKATOREM PROJEKTU. Jeśli w terminalu przed ikoną $ widzisz wartość w nawiasach ( ) ( na zrzucie ekranu poniżej jest to „your-workshop-project”), oznacza to, że w aktywnej sesji powłoki skonfigurowany jest projekt.

25e65d7ad1d62de0.png

Jeśli wyświetlana wartość jest już prawidłowa, możesz pominąć następne polecenie. Jeśli jednak jest nieprawidłowy lub go brakuje, uruchom to polecenie:

gcloud config set project <YOUR_PROJECT_ID>

Krok 3. Zapoznaj się z edytorem Cloud Shell i skonfiguruj katalog roboczy aplikacji

Teraz możemy skonfigurować edytor kodu, aby wykonywać różne czynności związane z kodowaniem. W tym celu użyjemy edytora Cloud Shell.

Kliknij przycisk Otwórz edytor. Spowoduje to otwarcie edytora Cloud Shell b16d56e4979ec951.png.

Wyświetli się interfejs edytora Cloud Shell, jak pokazano poniżej.

74e9e030342164b6.png

Teraz skopiuj repozytorium demonstracyjne, z którym będziemy wchodzić w interakcje. Najpierw musimy otworzyć terminal edytora. Możesz to zrobić, klikając na pasku menu Terminal -> Nowy terminal lub używając skrótu Ctrl + Shift + C. W dolnej części przeglądarki otworzy się okno terminala.

95e31ec63a88890d.png

Następnie uruchom to polecenie w terminalu.

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

Następnie w górnej sekcji edytora Cloud Shell kliknij File –> Open Folder (Plik –> Otwórz folder), znajdź katalog nazwa_użytkownika i sklonowany katalog repozytorium code-analysis-demo,a potem kliknij OK. Spowoduje to ustawienie wybranego katalogu jako głównego katalogu roboczego. W tym przykładzie nazwa użytkownika to alvinprayuda, więc ścieżka do katalogu jest widoczna poniżej.

ee00d484ff2f8351.png

194f63ef6de51b9.png

Katalog roboczy edytora Cloud Shell powinien teraz wyglądać tak:

2d53c6161b553e68.png

Możemy teraz przejść do następnego etapu.

3. 🚀 Konfiguracja i ustawienia

Jeśli chcesz zainstalować interfejs wiersza poleceń Gemini w systemie lokalnym, wykonaj te czynności:

  1. Upewnij się, że Twój system ma wersję Node 20 lub nowszą.
  2. Włącz interfejs wiersza poleceń Gemini, wykonując jedną z tych czynności:
  • instalowanie go jako pakietu globalnego,
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • Możesz też uruchomić go bezpośrednio ze źródła, aby zawsze mieć najnowszą wersję.
npx https://github.com/google-gemini/gemini-cli

Gdy uruchomisz go po raz pierwszy, zada Ci kilka pytań. Jeśli uruchomisz go w IDE (np. VSCode), pojawi się to pytanie:

7f0f7d5091df7abb.png

Następnie wyświetli kilka opcji uwierzytelniania.

7ce5c6574f249304.png

Jest kilka możliwości:

  • Jeśli wybierzesz Zaloguj się przez Google, w przeglądarce otworzy się strona uwierzytelniania Google. Wystarczy, że ją zaakceptujesz.
  • Jeśli wolisz używać klucza interfejsu Gemini API, musisz utworzyć go na stronie AI Studio, a następnie utworzyć w katalogu roboczym plik .env z ustawioną zmienną GEMINI_API_KEY ( lub uruchomić polecenie export GEMINI_API_KEY="your-api-key" w wierszu poleceń).
  • Jeśli zdecydujesz się używać Vertex AI, będziesz potrzebować projektu, takiego jak ten, który został skonfigurowany wcześniej. Musisz też utworzyć plik .env i ustawić zmienne GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION.

Jeśli chcesz zmienić te metody uwierzytelniania, możesz uruchomić polecenie /auth w interfejsie wiersza poleceń Gemini lub edytować plik konfiguracyjny. Jeśli chcesz edytować plik konfiguracji bezpośrednio, w systemie Linux powinien on znajdować się w $HOME/.gemini/settings.json . Zobaczysz typ securityauth, a także możliwość jego edytowania.

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

72300c1f781857c8.png

4. 🚀 Podstawowe polecenia i wbudowane narzędzia

Teraz pobawmy się interfejsem Gemini CLI, aby dowiedzieć się o nim więcej. Jeśli szukasz podstawowego polecenia, którego możesz użyć, wpisz /help, aby wyświetlić wszystkie dostępne polecenia.

800d1b06a5ad9f9c.png

/help

Zobaczysz dane wyjściowe podobne do tych: f46a75c6bb177a2b.png

Interfejs wiersza poleceń Gemini to agent AI, dlatego ma narzędzia, które pomagają mu rozwiązywać zadania zlecone przez użytkownika. Aby zobaczyć wbudowane narzędzia, uruchom polecenie /tools.

17a6d7fcf06df563.png

/tools

Wyświetli dane wyjściowe podobne do tych:

7d22b38a387f45d0.png

Interfejs wiersza poleceń Gemini ma kilka funkcji, takich jak odczytywanie i zapisywanie plików, wyszukiwanie w internecie i wiele innych. W przypadku niektórych z tych narzędzi domyślnie wymagane było potwierdzenie przez użytkownika ze względu na potencjalne ryzyko.

Zobaczmy, jak to działa w praktyce. Uruchom te prompty w interfejsie wiersza poleceń Gemini.

15e2d863a4eb8df4.png

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

Zauważysz, że wywoła on narzędzie GoogleSearch, a później zapisze wynik za pomocą narzędzia WriteFile. Jeśli korzystasz z IDE, zobaczysz, że zostanie ona przedstawiona jako różnica, a także opcję wyświetlania, która pozwoli Ci zaakceptować lub odrzucić sugestie. Tutaj możesz zobaczyć, że interfejs wiersza poleceń Gemini prosi o uprawnienia do zapisania pliku.

8163f43b05ca59a3.png

5. 🚀 Rozszerzenia

Aby poprawić wyniki konkretnego zadania wykonywanego przez agenta AI, musimy wiedzieć, jak tworzyć odpowiednie prompty, zarządzać odpowiednim inżynierem kontekstu za pomocą odpowiednich narzędzi itp.

Rozszerzenia do interfejsu wiersza poleceń Gemini to gotowe i łatwe do zainstalowania prompty i integracje, które można połączyć z narzędziami zewnętrznymi. Każde rozszerzenie zawiera wbudowany „scenariusz” skutecznego korzystania z narzędzi i może składać się z tych komponentów:

  • Niestandardowe polecenia po ukośniku
  • Konfiguracje MCP
  • Pliki kontekstu

6da12f33463ac755.png

Instalowanie rozszerzeń zabezpieczeń

Na przykład w tym samouczku pokażemy, jak zainstalować rozszerzenia code-reviewsecurity.

Aby zainstalować rozszerzenia security z terminala, uruchom to polecenie:

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

Pojawią się te pytania. Aby zaakceptować, naciśnij Enter.

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.

Instalowanie rozszerzeń do weryfikacji kodu

Następnie zainstaluj rozszerzenie code-review, uruchamiając to polecenie:

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

Po zakończeniu ponownie uruchom interfejs wiersza poleceń Gemini.

gemini

i uruchomisz polecenie /extensions, zobaczysz, że te 2 rozszerzenia są już zainstalowane.

88a86a0dc42fc510.png

/extensions

Dobrze, teraz wykonajmy praktyczne ćwiczenie w przykładowym repozytorium, które zostało wcześniej sklonowane.

6. 🚀 Tryb interaktywny – aplikacja rozszerzająca do analizy bezpieczeństwa kodu

Dodatek Security to rozszerzenie interfejsu wiersza poleceń Gemini o otwartym kodzie źródłowym, które zwiększa bezpieczeństwo repozytorium. Rozszerzenie dodaje do interfejsu wiersza poleceń Gemini nowe polecenie, które analizuje zmiany w kodzie, aby wykrywać różne zagrożenia i luki w zabezpieczeniach.

Najpierw przygotujmy repozytorium demonstracyjne. Uruchom to polecenie, aby przejść do gałęzi, w której zmiany z zagrożeniem bezpieczeństwa zostały już zastosowane:

git checkout refactor/analysis-demo

Następnie uruchom interfejs wiersza poleceń Gemini w terminalu.

gemini

Następnie uruchommy rozszerzenia.

e3fcf630238f9b2e.png

/security:analyze

Spowoduje to rozpoczęcie długotrwałego procesu, podczas którego otrzymasz kilka próśb o zezwolenie na wykonanie określonych operacji, np. mkdir, jak pokazano poniżej.

10d6ad2ef91b5acf.png

Jest to mechanizm ochronny, który ma zapewnić, że użytkownicy będą wiedzieć, co zostanie wykonane przez interfejs Gemini CLI. W pozostałej części samouczka możesz zawsze zezwalać na dostęp ( opcja 2).

To rozszerzenie wywoła długotrwały proces. W katalogu .gemini_security zobaczysz utworzony plik planowania, a na liście kontrolnej sprawdzisz, które procesy zostały zakończone. Jak w tym przykładzie:

543035cb65d27804.png

Wykonanie zadań zajmie trochę czasu. W tym czasie możesz sprawdzić źródło tych rozszerzeń w  repozytorium GitHub. Ten adres URL zawiera prompt używany do uruchamiania wszystkich tych procesów skanowania pod kątem bezpieczeństwa.

73f4966870bc9ddf.png

Jak widać, aby to zrobić, interfejs wiersza poleceń Gemini skanuje prompta w 2 etapach: etapie rozpoznawczym i bardziej szczegółowym etapie sprawdzania.

Jeśli w interfejsie wiersza poleceń Gemini pojawi się ten prompt, możesz wybrać opcję 2, aby wyłączyć wykrywanie pętli.

a0af5e15627afa83.png

Następnie poproś interfejs wiersza poleceń Gemini o kontynuowanie.

611a7ed0fb6fc44b.png

continue

Jest to mechanizm zapobiegający nieskończonym, nieproduktywnym pętlom wywoływania narzędzi, który będzie z czasem ulepszany.

Po zakończeniu raport zostanie wyświetlony na interaktywnym terminalu. Aby ułatwić to zadanie, poprośmy interfejs wiersza poleceń Gemini o zapisanie go w security-analysis.md

b4cbad3aaeaa8dce.png

write the result to security-analysis.md file

Teraz możesz sprawdzić wynik zapisany w pliku.

7. 🚀 Tryb nieinteraktywny – aplikacja rozszerzenia do sprawdzania kodu

Rozszerzenie code-review dodaje do interfejsu wiersza poleceń Gemini nowe polecenie, które analizuje zmiany w kodzie, aby wykryć różne problemy z jakością kodu.

To rozszerzenie można uruchomić w trybie nieinteraktywnym interfejsu wiersza poleceń Gemini, co oznacza, że cały proces można przeprowadzić bez konieczności wchodzenia do powłoki interfejsu wiersza poleceń Gemini. Aby uruchomić interfejs wiersza poleceń Gemini w trybie nieinteraktywnym, możesz użyć tego wzorca polecenia:

gemini "put your command here"

Pamiętaj jednak, że uruchomienie w trybie nieinteraktywnym spowoduje wyłączenie wszystkich narzędzi, które wymagają uprawnień użytkownika. Dlatego musimy dodać flagę --yolo, aby automatycznie zatwierdzać wszystkie działania, co oznacza włączenie wszystkich narzędzi w trybie nieinteraktywnym.

Uruchommy rozszerzenie code-review za pomocą tego polecenia:

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

To polecenie zapisze wynik działania interfejsu wiersza poleceń Gemini w pliku code-review.md. Zwróć uwagę na flagę -e. Określa ona, które rozszerzenie ma być aktywne podczas sesji. W tym przypadku aktywujemy tylko rozszerzenie code-review, a pozostałe wyłączamy.

Może to potrwać, ale po zakończeniu w pliku Markdown zobaczysz wynik podobny do tego poniżej.

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. 🚀 Obsługa protokołu Model Context Protocol

Jak już wspominaliśmy w wyjaśnieniach dotyczących rozszerzenia, interfejs CLI Gemini może łączyć się z serwerami MCP, czyli aplikacjami, które udostępniają narzędzia i zasoby za pomocą protokołu Model Context Protocol. To połączenie umożliwia interfejsowi Gemini CLI interakcję z systemami zewnętrznymi i źródłami danych za pomocą serwerów MCP jako pomostów do środowiska lokalnego i usług zewnętrznych, takich jak interfejsy API.

5f1cdd4be3e7b42a.png

Jeśli chcesz samodzielnie skonfigurować serwer MCP, musisz zmodyfikować plik .gemini/settings.json i dodać te konfiguracje :

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

W tym samouczku skonfigurujemy połączenie z naszym kontem GitHub, aby przesyłać do niego dane z poprzedniego raportu.

Konfigurowanie serwera MCP GitHub

Najpierw utwórzmy plik konfiguracji projektu interfejsu wiersza poleceń Gemini. Uruchom to polecenie:

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

Następnie otwórz plik .gemini/settings.json i wypełnij go tą konfiguracją:

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

Teraz potrzebujemy Twojego osobistego tokena dostępu do GitHuba, więc upewnij się, że masz już konto na tej platformie.

Zaloguj się na Githubie i otwórz Ustawienia.

dc57f047ca9a2b83.png

Następnie przewiń w dół, aby znaleźć Ustawienia programisty, i kliknij je.

59d9b700c41ca1b6.png

Następnie kliknij Osobiste tokeny dostępu i wybierz Tokeny (klasyczne).

e96fccd80872e480.png

30ac727da307602b.png

Wpisz tutaj nazwę osobistego tokena dostępu i zaznacz zakresy repo.

ad167223fa231e3c.png

Następnie przewiń w dół i kliknij przycisk Wygeneruj token.

Kliknij Wygeneruj nowy token i wybierz Wygeneruj nowy token (klasyczny). Następnie skopiuj wygenerowany token i zapisz go w pliku .gemini/settings.json.

efd82711868093c0.png

Plik .gemini/settings.json powinien wyglądać podobnie do tego przykładu:

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

Teraz sprawdźmy połączenie. Uruchom interfejs wiersza poleceń Gemini, wpisując to polecenie:

gemini

Następnie uruchom polecenie /mcp. Powinna się wyświetlić prawidłowo skonfigurowana platforma MCP na GitHubie.

a97c9a98f07dc87c.png

/mcp

Następnie przetestujmy to połączenie MCP, przesyłając to polecenie:

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

Zwróć uwagę na oznaczenia @code-review.md@security-analysis.md. W ten sposób odwołujemy się do plików, które mają zostać przekazane do interfejsu wiersza poleceń Gemini. To polecenie odczyta zawartość obu plików i prześle komentarz do żądania scalenia związanego z tym rozgałęzieniem za pomocą połączenia Github MCP. Następnie możesz sprawdzić to w adresie URL żądania scalenia.

864b859b56cfe9e7.png

9. 💡Interfejs wiersza poleceń Gemini w przepływie pracy CI/CD

Jeśli korzystasz z GitHub, możesz łatwo osadzić interfejs wiersza poleceń Gemini w potoku CI/CD, korzystając z run-gemini-cliGitHub Action. Działa zarówno jako autonomiczny agent do wykonywania ważnych rutynowych zadań związanych z kodowaniem, jak i jako współpracownik na żądanie, któremu możesz szybko przekazywać pracę.

Możesz go używać do sprawdzania żądań pull, triażu problemów, analizowania i modyfikowania kodu oraz wykonywania innych działań za pomocą Gemini w formie rozmowy bezpośrednio w repozytoriach GitHub.

Przykład tej integracji można sprawdzić w tym żądaniu pull, w którym używamy rozszerzenia Security interfejsu wiersza poleceń Gemini w runnerze i przekazujemy opinie po utworzeniu żądania pull.

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡 Poznaj inne rozszerzenia do interfejsu wiersza poleceń Gemini

8a7939ee0328e6e2.png

Więcej rozszerzeń znajdziesz na stronie https://geminicli.com/extensions . Sprawdź, jakie jeszcze ciekawe narzędzia są dostępne.

11. 🧹 Czyszczenie

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym laboratorium, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Z listy projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.