Implementa la convalida della sicurezza della codifica in tempo reale utilizzando un server MCP con Kiro e altri assistenti di codifica - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementa la convalida della sicurezza della codifica in tempo reale utilizzando un server MCP con Kiro e altri assistenti di codifica

Ivan Girardi e Iker Reina Fuente, Amazon Web Services

Riepilogo

Questo modello descrive come implementare un server Model Context Protocol (MCP) che integri tre strumenti di scansione di sicurezza standard del settore per fornire un'analisi completa della sicurezza del codice. Il server consente agli assistenti di codifica AI (come Kiro, Amazon Q Developer e Cline) di scansionare automaticamente frammenti di codice e configurazioni Infrastructure as Code (IaC). Con queste scansioni, gli assistenti di codifica possono aiutare a identificare vulnerabilità di sicurezza, configurazioni errate e violazioni della conformità.

I generatori di codice AI addestrati su milioni di frammenti di codice creano un punto cieco in materia di sicurezza: quanto erano sicuri i dati di addestramento? Questo modello fornisce una convalida della sicurezza in tempo reale durante la generazione del codice, aiutando gli sviluppatori a identificare e comprendere potenziali problemi di sicurezza durante la codifica. Questo approccio aiuta gli sviluppatori a risolvere sia le vulnerabilità dirette che i rischi ereditari derivanti dalle dipendenze. Colmando il divario tra efficienza dell'IA e conformità alla sicurezza, questo modello aiuta a consentire l'adozione sicura di strumenti di sviluppo basati sull'intelligenza artificiale.

Questo modello aiuta le organizzazioni a migliorare le proprie pratiche di sicurezza dello sviluppo attraverso strumenti di codifica assistiti dall'intelligenza artificiale, fornendo funzionalità di scansione di sicurezza continue su più linguaggi di programmazione e definizioni di infrastruttura. La soluzione combina le funzionalità dei seguenti strumenti:

  • Checkov per la scansione di file IAC, inclusi Terraform e Kubernetes AWS CloudFormation manifest

  • Semgrep per l'analisi di più linguaggi di programmazione come Python, JavaScript Java e altri

  • Bandit per la scansione di sicurezza specializzata in Python

Le caratteristiche principali di questa soluzione includono quanto segue:

  • Scansione delta di nuovi segmenti di codice, con riduzione del sovraccarico computazionale

  • Ambienti isolati per strumenti di sicurezza, che impediscono la contaminazione tra strumenti

  • Perfetta integrazione con gli assistenti di codifica AI (Kiro, Amazon Q Developer, Cline e altri)

  • Feedback sulla sicurezza in tempo reale durante la generazione del codice

  • Regole di scansione personalizzabili per la conformità organizzativa

Il modello fornisce un'interfaccia unificata per la scansione di sicurezza con formati di risposta standardizzati, che semplificano l'integrazione dei controlli di sicurezza nei flussi di lavoro di sviluppo. Il modello utilizza Python e il framework MCP per fornire feedback automatici sulla sicurezza. Questo approccio aiuta gli sviluppatori a identificare e risolvere i problemi di sicurezza nelle prime fasi del processo di sviluppo, apprendendo al contempo le migliori pratiche di sicurezza attraverso risultati dettagliati.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • La scansione Bandit è limitata ai soli file Python.

  • La scansione in tempo reale potrebbe influire sulle prestazioni di basi di codice di grandi dimensioni.

  • Le limitazioni specifiche degli strumenti si basano sui formati di file e sui linguaggi supportati.

  • La revisione manuale è necessaria per convalidare i risultati di sicurezza.

  • I risultati della scansione di sicurezza richiedono competenze in materia di sicurezza per una corretta interpretazione.

  • Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità regionale, vedi AWS Servizi per regione. Per endpoint specifici, consulta Service endpoints and quotas e scegli il link relativo al servizio.

Versioni del prodotto

  • Python versione 3.10 o successiva

  • Checkov versione 3.0.0 o successiva

  • Semgrep versione 1.45.0 o successiva

  • Bandit versione 1.7.5 o successiva

  • MCP [cli] versione 1.11.0 o successiva

  • Pydantic versione 1.10.0 o successiva

  • Loguru versione 0.6.0 o successiva

Architecture

Il diagramma seguente mostra l'architettura di questa soluzione.

Gli assistenti AI inviano il codice al server dello scanner di sicurezza MCP per indirizzarlo a scanner specializzati; i risultati della scansione vengono inviati allo sviluppatore.

Il diagramma mostra il flusso di lavoro seguente:

  1. Lo sviluppatore utilizza assistenti AI (ad esempio, Kiro, Cline, Amazon Q Developer o Roo Code) per generare o analizzare il codice. L'assistente AI invia il codice per la scansione di sicurezza.

  2. Il server dello scanner di sicurezza MCP elabora la richiesta indirizzandola allo scanner specializzato appropriato: Checkov per i file IaC, Semgrep per l'analisi di più linguaggi di programmazione o Bandit per la scansione di sicurezza specifica di Python.

  3. I risultati dello scanner con risultati di sicurezza, livelli di gravità, descrizioni dettagliate e correzioni suggerite vengono inviati allo sviluppatore tramite l'assistente AI.

  4. Viene stabilito un ciclo di feedback continuo in cui lo sviluppatore riceve una convalida di sicurezza in tempo reale, abilita correzioni automatiche tramite assistenti AI e promuove le migliori pratiche di sicurezza durante lo sviluppo.

L'architettura mitiga i seguenti rischi comuni per la sicurezza:

  • Iniezione di comandi

  • Iniezione rapida

  • Attraversamento del percorso

  • Attacchi di dipendenza

  • Esaurimento delle risorse

L'architettura mitiga questi rischi comuni per la sicurezza implementando le seguenti best practice:

  • Tutti gli input dell'utente e del modello AI vengono scritti in file temporanei.

  • Non vengono forniti input diretti ai comandi dell'interfaccia a riga di comando (CLI).

  • L'accesso al file system è limitato solo alle directory e ai file temporanei.

  • I file temporanei vengono puliti automaticamente.

  • Le risposte di scansione vengono disinfettate.

  • Viene applicato l'isolamento del processo che limita le capacità del processo.

  • Tutte le attività di scansione vengono registrate.

Automazione e scalabilità

Il modello supporta l'automazione tramite le seguenti funzionalità:

  • Integrazione con assistenti di codifica AI per la scansione automatica del codice

  • Risposte API standardizzate per l'elaborazione automatizzata

  • Configurazione tramite file di configurazione MCP

  • Support per l'elaborazione in batch di più file

  • Scansione scalabile su più linguaggi di programmazione e formati IAc

Il processo di scansione può essere automatizzato tramite gli endpoint API forniti:

  • scan_with_checkovper la scansione IAC

  • scan_with_semgrepper la scansione di codici multilingue

  • scan_with_banditper la scansione specifica di Python

  • get_supported_formatsper la convalida del formato

Quando estendete gli strumenti di scansione, seguite i principi di progettazione e le best practice descritti in precedenza in questa sezione. Vedi anche Best practice.

Tools (Strumenti)

Servizi AWS

  • Kiro è un servizio di codifica agentica che collabora con gli sviluppatori per trasformare le istruzioni in specifiche dettagliate, quindi in codice funzionante, documenti e test. Gli agenti Kiro aiutano gli sviluppatori a risolvere problemi complessi e ad automatizzare attività come la generazione di documentazione e i test unitari.

  • Amazon Q Developer è un assistente conversazionale generativo basato sull'intelligenza artificiale che può aiutarti a comprendere, creare, estendere e utilizzare le applicazioni. AWS

Altri strumenti

  • Bandit è uno strumento di scansione di sicurezza Python specializzato. Rileva problemi di sicurezza comuni in Python come funzioni non sicure, segreti codificati e vulnerabilità di iniezione. Bandit fornisce valutazioni dettagliate di confidenza e gravità.

  • Checkov è uno strumento statico di analisi del codice che verifica la presenza di configurazioni errate di sicurezza e conformità in IaC. Inoltre, Checkov rileva le violazioni della conformità e le migliori pratiche di sicurezza.

  • Cline è un assistente di codifica basato sull'intelligenza artificiale che funziona in VS Code.

  • Loguru è una libreria di convalida dei dati per Python.

  • Model Context Protocol (MCP) è un framework open source per la creazione di strumenti di sviluppo assistiti dall'intelligenza artificiale.

  • Pydantic è una libreria di convalida dei dati per Python.

  • Semgrep analizza il codice sorgente alla ricerca di vulnerabilità e bug di sicurezza. Supporta più linguaggi di programmazione. Semgrep utilizza set di regole incentrati sulla sicurezza per un'analisi completa. Fornisce valutazioni dettagliate di confidenza e gravità.

Archivio di codice

Il codice di questo pattern è disponibile nell'archivio GitHub MCP Security Scanner: Real-Time Protection for AI Code Assistants. L'archivio include l'implementazione del server MCP, dettagli sulla configurazione MCP per Kiro, Amazon Q Developer, Cline e altri, esempi di configurazione e utilità di test.

La struttura del repository include:

  • security_scanner_mcp_server/- Implementazione del server principale

  • docs/- Documentazione e materiali dimostrativi

  • tests/- File di test

  • mcp-config-example.json- Esempio di configurazione MCP

  • requirements.txt- Dipendenze del progetto

Best practice

Implementazione della scansione di

  • Esamina i risultati di sicurezza per convalidare e dare priorità ai problemi.

  • Mantieni gli strumenti di scansione (Checkov, Semgrep e Bandit) aggiornati alle versioni più recenti.

  • Utilizzate lo strumento di sicurezza MCP di questo pattern insieme ad altre misure e strumenti di sicurezza.

  • Aggiorna regolarmente i set di regole e le politiche di sicurezza.

Gestione della configurazione

  • Utilizza i file di configurazione MCP nel codice sorgente ufficiale di controllo della versione.

  • Documenta regole e configurazioni personalizzate.

Integration

  • Integra la scansione di sicurezza nelle prime fasi del ciclo di sviluppo.

  • Imposta la scansione automatica in hook pre-commit o in pipeline di integrazione continua e distribuzione continua (CI/CD).

  • Configura le soglie di gravità appropriate per il tuo ambiente.

  • Stabilisci procedure chiare per la gestione dei risultati di sicurezza.

Considerazioni operative

  • Monitora le prestazioni di scansione e l'utilizzo delle risorse.

  • Implementa la corretta gestione e registrazione degli errori.

  • Conserva la documentazione delle configurazioni personalizzate.

  • Stabilisci un processo per la revisione e l'aggiornamento delle regole di sicurezza.

Inoltre, tieni presente le seguenti best practice:

  • Convalida sempre i risultati di sicurezza nel tuo contesto specifico.

  • Mantieni aggiornati gli strumenti di sicurezza e le dipendenze.

  • Utilizza più strumenti di sicurezza per una copertura completa.

  • Segui le migliori pratiche di sicurezza nel tuo processo di sviluppo.

Epiche

OperazioneDescriptionCompetenze richieste

Configurare le impostazioni MCP.

Puoi modificare i file di configurazione in Kiro (Opzione 1) localizzando manualmente i file di configurazione o (Opzione 2) utilizzando l'IDE Kiro.

  • (Opzione 1) Individua e modifica i file di configurazione manualmente come segue:

    • Percorso: .kiro/settings/mcp.json (locale) o ~/.kiro/settings/mcp.json (globale)

  • (Opzione 2) Modifica i file di configurazione utilizzando l'IDE Kiro come segue:

    • Scegli il simbolo Kiro nel menu di navigazione a sinistra.

    • Vai alla sezione «SERVER MCP».

    • Modifica le impostazioni di configurazione. Le modifiche apportate con l'IDE Kiro verranno salvate in uno di questi file di configurazione: .kiro/settings/mcp.json (locale) o ~/.kiro/settings/mcp.json (globale)

  • (Entrambe le opzioni) Dopo aver completato l'opzione 1 o l'opzione 2, aggiungi la configurazione security-scanner .kiro/settings/mcp.json (locale) o ~/.kiro/settings/mcp.json (globale):

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [] } } }
Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Configurare le impostazioni MCP.

Per configurare manualmente le impostazioni MCP, effettuate le seguenti operazioni:

  1. Modificate il file di configurazione MCP in ~/.aws/amazonq/mcp.json (globale) o .amazonq/mcp.json (locale).

  2. Aggiungete la seguente configurazione di security-scanner ~/.aws/amazonq/mcp.json (globale) o .amazonq/mcp.json (locale):

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" } } } }
Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Configurare le impostazioni MCP.

Per configurare manualmente le impostazioni MCP, effettuate le seguenti operazioni:

  1. Scegli l'estensione per aprirla, quindi seleziona Server MCP.

  2. Scegli la scheda Installato, quindi scegli Configura server MCP per aprire il cline_mcp_settings.json file.

  3. Aggiungi la seguente configurazione dello scanner di sicurezza: cline_mcp_settings.json

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [] } } }
Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Esegui l'analisi del codice.

Per eseguire l'analisi del codice utilizzando Python e Bandit, utilizzate i seguenti passaggi:

  1. Crea un nuovo file Python denominato bandit_test.py con il seguente contenuto:

    import pickle import yaml import subprocess from flask import Flask, request import hashlib app = Flask(__name__) @app.route("/unsafe_pickle", methods=["POST"]) def unsafe_pickle_usage(): data = request.get_data() return pickle.loads(data) @app.route("/command_injection", methods=["GET"]) def command_injection(): command = request.args.get("cmd") return subprocess.Popen(command, shell=True) def weak_crypto(): password = "secret_password" return hashlib.md5(password.encode()).hexdigest() PASSWORD = "super_secret_password123"
  2. Apri l'assistente di codifica. Richiedi le seguenti azioni nella chat: Scansiona lo script corrente e dimmi i risultati.

Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Esegui l'analisi del codice.

Per eseguire l'analisi del codice utilizzando Terraform e Checkov, utilizza i seguenti passaggi:

  1. Crea un nuovo file Terraform denominato terraform_test.tf con il seguente contenuto:

    resource "aws_s3_bucket" "insecure_bucket" { bucket = "my-insecure-bucket" acl = "public-read" } resource "aws_security_group" "wide_open" { name = "allow_all" description = "Allow all inbound traffic" ingress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } }
  2. Apri l'assistente di codifica. Richiedi le seguenti azioni nella chat: Scansiona lo script corrente e dimmi i risultati.

Sviluppatore di app
OperazioneDescriptionCompetenze richieste

Esegui scansioni mirate.

Di seguito sono riportati alcuni esempi di richieste che è possibile utilizzare per eseguire una scansione mirata:

  • Scansiona il progetto corrente e dimmi i risultati.

  • Scansiona le righe 6-10 dello script corrente.

Sviluppatore di app

Usa la scansione di sicurezza con la generazione di codice.

Per risolvere i problemi di sicurezza utilizzando i loop di generazione del codice, utilizza i seguenti passaggi (questo esempio utilizza Kiro come assistente di codifica):

  1. In Kiro, chiedi: crea una tabella DynamoDB in Terraform e scansiona il codice con lo scanner di sicurezza.

  2. In Kiro, chiedi: esamina il codice generato e i risultati della scansione di sicurezza e segui i cicli di generazione del codice per risolvere i problemi di sicurezza.

Sviluppatore di app

risoluzione dei problemi

ProblemaSoluzione

Problemi di configurazione dell'ambiente

  • Verifica che sia installata la versione 3.10 o successiva di Python.

  • Assicurati che il gestore di uv pacchetti sia installato.

Problemi con lo scanner

  • Verificare che i formati di file siano supportati.

  • Verifica che la sintassi del file sia valida.

  • Assicurati che vengano utilizzate le estensioni di file corrette.

  • Rivedi le impostazioni del timeout di scansione.

Problemi di integrazione

  • Verificare che il server MCP sia in esecuzione.

  • Verificate che il file di configurazione sia corretto.

  • Convalida gli endpoint dell'API.

  • Assicurati che il formato di risposta sia valido.

Supporto aggiuntivo

  • Esamina i log per i messaggi di errore dettagliati.

  • Consulta la documentazione specifica dello strumento.

  • Crea un problema nel repository.

Risorse correlate

AWS documentazione

Altre risorse AWS

Altre risorse

Informazioni aggiuntive

Esempio di configurazione MCP con approvazione automatica abilitata

Se non è autoApprove configurato, l'utente deve concedere l'approvazione per inviare il codice al server di sicurezza MCP per la scansione. Una volta autoApprove configurato, l'assistente al codice può richiamare gli strumenti senza l'approvazione dell'utente. Questi strumenti vengono eseguiti localmente sulla macchina, non viene inviato alcun dato e viene eseguita solo una scansione del codice.

La seguente configurazione consente l'esecuzione automatica di tutte le funzioni di scansione di sicurezza:

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [ "scan_with_checkov", "scan_with_semgrep", "scan_with_bandit", "get_supported_formats" ] } } }

Per abilitare la registrazione di debug, impostare su"FASTMCP_LOG_LEVEL". "DEBUG"

Formati di file supportati dagli strumenti di scansione di sicurezza

Ogni strumento di scansione di sicurezza di questa soluzione supporta i seguenti formati di file:

Checkov (IaC)

  • Terraform: .tf, .tfvars, .tfstate

  • CloudFormation — .yaml, .yml, .json, .template

  • Kubernetes: .yaml, .yml

  • Dockerfile — Dockerfile

  • ARM — .json (Gestore delle risorse di Azure)

  • Bicipite — .bicipite

  • Senza server: .yml, .yaml

  • Timone: .yaml, .yml, .tpl

  • GitHub Azioni: .yml, .yaml

  • GitLab_ci — .yml, .yaml

  • Ansible: .yml, .yaml

Semgrep (codice sorgente)

  • Python — .py

  • JavaScript — .js

  • TypeScript — .ts

  • Giava — .java

  • Vai — .go

  • C — c.

  • C++ — .cpp

  • C# — .cs

  • Rubino — .rb

  • PHP — .php

  • Scala — .scala

  • Kotlin — .kt

  • Rust — .rs

Bandit (solo Python)

  • Python — .py

Demo

Per la scansione del codice, prova i seguenti esempi di istruzioni con il tuo assistente AI:

  • «Scansiona lo script corrente e dimmi i risultati».

  • «Scansiona le righe da 20 a 60 e dimmi i risultati».

  • «Scansiona questa risorsa della tabella Amazon DynamoDB e dimmi il risultato».

Per ulteriori informazioni, consulta questa demo sulla scansione del codice nell'archivio di GitHub questo pattern.

Per generare codice sicuro, prova i seguenti prompt di esempio:

  • «Genera una configurazione Terraform per creare una tabella DynamoDB con crittografia abilitata e scansionala per problemi di sicurezza».

  • «Crea una funzione Python Lambda che scriva su DynamoDB e scansionala per individuare eventuali vulnerabilità».

  • «Genera un CloudFormation modello per un bucket S3 con impostazioni di sicurezza adeguate e verifica che superi i controlli di sicurezza».

  • «Scrivi uno script Python per interrogare DynamoDB con impaginazione e scansiona le migliori pratiche di sicurezza».

  • «Crea un manifesto di distribuzione Kubernetes per un microservizio con un rafforzamento della sicurezza e convalidalo».

Per ulteriori informazioni, guarda questa demo sulla generazione di codice con scansione di sicurezza nell'archivio di questo pattern. GitHub