AWS Kiro e spec-driven development: più struttura non significa automaticamente più sicurezza
Kiro intercetta un bisogno reale dei team che hanno provato il vibe coding: meno caos, più contesto, specifiche più leggibili, task più ordinati, documentazione più vicina al codice. Lo spec-driven development porta una disciplina utile nello sviluppo assistito da AI, soprattutto quando il progetto non è più una demo ma una funzione, un servizio, una piattaforma interna o un’app destinata a utenti reali.
Il punto critico è non confondere struttura e sicurezza. Una specifica ben scritta può descrivere un’architettura vulnerabile. Un requisito in EARS può essere formalmente chiaro e non dire nulla su tenant isolation, privilege escalation, gestione dei segreti o abuso delle API. Un piano di implementazione può essere ordinato e coprire solo il percorso felice. Prima del deploy, la domanda utile non è se Kiro renda il codice più organizzato, ma se requisiti, design, task, hooks, MCP, test e implementazione contengano controlli di sicurezza sufficienti per collegare dati reali, utenti, API, cloud e sistemi aziendali.
Cosa migliora lo spec-driven development e cosa non copre
Kiro porta il team da prompt naturali a requisiti strutturati, design e task eseguibili, riducendo una parte del rischio tipico del vibe coding: decisioni implicite, documentazione non aggiornata, feature generate in modo estemporaneo e difficili da mantenere. La struttura, però, non garantisce che i requisiti siano giusti. Se una specifica non include ruoli, dati sensibili, autorizzazioni object-level, limiti di rate, log, retention, trust boundary, gestione degli errori e casi di abuso, l’agente può implementare in modo coerente un prodotto incompleto dal punto di vista della sicurezza.
Lo stesso vale per i test. Un piano generato bene può verificare che l’utente riesca a completare il flusso previsto, ma questo non dimostra che un utente di un altro tenant non possa leggere lo stesso record, che un’API non accetti ID arbitrari, che una policy IAM non sia troppo ampia o che un hook non esegua comandi non revisionati.
Il rischio della specifica perfetta ma incompleta
Le specifiche aiutano a rendere esplicita l’intenzione, ma se quell’intenzione iniziale non include sicurezza, privacy e abuso, l’output resta fragile. Una frase come “l’utente può visualizzare i propri documenti” deve diventare verificabile: quali documenti, con quale identità, con quali ruoli, cosa succede se cambia l’ID, cosa succede con token scaduto, cosa succede se un admin di un tenant prova a leggere un altro tenant.
Kiro può aiutare a trasformare requisiti in task, ma la qualità del risultato dipende dalla qualità dei requisiti stessi. Per questo ogni specifica destinata a una funzione esposta dovrebbe includere acceptance criteria negativi: accesso negato, input rifiutato, file non autorizzato, ruolo insufficiente, tenant errato, token scaduto, callback non allowlistata, secret non loggato. Una specifica che non dice nulla su cosa deve essere bloccato lascia troppo spazio all’implementazione dell’agente, con il rischio di produrre una documentazione rassicurante che mostra cosa l’app deve fare, ma non cosa non deve permettere.
Threat modeling dentro il processo spec-driven
Il threat modeling non deve diventare un documento pesante separato dallo sviluppo. In un workflow Kiro può essere integrato nella fase di requisiti e design, coprendo asset, attori, trust boundary, dati sensibili, sistemi esterni, privilegi, flussi e failure mode. Per ogni spec, il team dovrebbe chiedersi quali dati vengono trattati, quali ruoli esistono, quali azioni sono sensibili, quali API sono pubbliche, quali sistemi esterni vengono chiamati, quali secret sono necessari e quali comandi o risorse cloud saranno toccati. Se l’app è multi-tenant, tenant isolation deve essere un requisito di primo livello, non una nota di implementazione.
Il design generato o assistito da Kiro va letto anche con una domanda offensiva: come potrebbe essere abusato? Un flusso di invito può essere riutilizzato? Un reset password può rivelare utenti? Una route admin è davvero protetta lato server? Un upload può servire contenuti attivi? Un task IaC crea risorse accessibili da internet?
Agent Hooks: automazione utile, superficie da governare
Gli Agent Hooks sono uno degli elementi più specifici di Kiro. Possono attivarsi su eventi come prompt submit, agent stop, pre/post tool use, creazione o salvataggio file, cancellazione file, esecuzione task e trigger manuali, con azioni che includono prompt all’agente o shell command. Questa automazione può essere molto utile per formattare codice, aggiornare documentazione, generare test, controllare standard, bloccare tool o arricchire contesto. Può però diventare una superficie critica se esegue comandi, modifica file, installa dipendenze, lancia test, interagisce con cloud CLI o cambia configurazioni senza review.
Prima di adottare hooks in un team, conviene fare un inventario dei file .kiro/hooks, degli eventi che li attivano, delle azioni eseguite e dei permessi disponibili nel repository. I comandi shell vanno trattati come codice operativo: chi li approva, cosa possono leggere, cosa possono scrivere, quali variabili ambiente vedono, se possono eseguire deploy, delete, migration o comandi cloud. Un hook che gira al salvataggio di un file non dovrebbe poter applicare Terraform, cancellare risorse, installare pacchetti non approvati o inviare dati sensibili a sistemi esterni. Le automazioni ad alto impatto devono avere soglie, log e approvazione separata.
Steering files e regole di progetto
Kiro consente di guidare gli agenti con steering files e regole di progetto, rendendo esplicite convenzioni, standard e preferenze. Anche qui, però, le istruzioni persistenti diventano parte del perimetro di sicurezza. Una regola che spinge l’agente a “far passare i test”, “usare mock quando mancano servizi”, “semplificare l’autenticazione” o “procedere anche se il contesto è incompleto” può normalizzare scorciatoie rischiose. Al contrario, regole ben scritte possono impedire modifiche ad auth senza test negativi, bloccare secret nel frontend, richiedere review su IAM/IaC e imporre default deny sulle policy.
Gli steering files vanno revisionati come codice. Devono separare stile, architettura e sicurezza, evitare segreti ed endpoint interni non necessari e non contenere istruzioni ambigue. Ogni modifica a questi file dovrebbe passare da PR review, perché influenza tutti i task futuri.
MCP, tool esterni e contesto della specifica
Kiro supporta MCP e può collegarsi a documentazione, database, API, strumenti AWS, Terraform o altri sistemi, aumentando molto la qualità del contesto ma ampliando anche i trust boundary del workflow. Se un server MCP dà accesso a database, ticket, repository, cloud, documentazione interna o Terraform registry, l’agente può incorporare quelle informazioni nella specifica e nelle decisioni implementative. Il rischio non è MCP in sé, ma l’uso di tool e credenziali troppo ampi: token condivisi, permessi read-write quando basta read-only, accesso a dati reali durante la progettazione, tool di deploy disponibili in fasi non controllate.
La governance MCP per Kiro dovrebbe includere allowlist dei server, token dedicati, privilegi minimi, separazione tra progetto e configurazioni globali, audit delle tool call e disabilitazione dei tool non necessari sui repository critici. Se vengono usati tool AWS o Terraform, le modifiche risultanti devono passare da review IaC e approval prima dell’applicazione.
Terraform, IaC e cloud: quando la spec crea infrastruttura
Uno degli scenari più delicati è usare Kiro per progettare o generare infrastruttura: Terraform, CloudFormation, CDK, security group, IAM, VPC, database, storage, load balancer, pipeline. La specifica può rendere ordinato il lavoro, ma il rischio cloud resta concreto. Una spec che chiede “crea un ambiente per l’app” può portare a security group larghi, bucket pubblici, ruoli IAM generici, database raggiungibili, output con secret, ambienti dev/prod poco separati, assenza di encryption, logging o backup. Il risultato può essere coerente con la richiesta e comunque non accettabile in produzione.
Prima di applicare IaC generata o modificata con Kiro, servono plan diff, scanner IaC, review manuale, controllo least privilege, tagging, separazione ambienti, rollback plan e approvazione esplicita su risorse critiche. L’applicazione dell’IaC non deve essere un effetto collaterale di un task agentico o di un hook.
Test generati: funzionali, non necessariamente offensivi
Kiro può aiutare a generare test legati ai requisiti, ma i test derivati dalla specifica tendono a verificare che il sistema faccia ciò che è stato richiesto. La sicurezza richiede anche dimostrare che il sistema rifiuti ciò che non deve permettere. Per ogni feature esposta, servono test negativi: utente non autenticato, ruolo insufficiente, tenant errato, oggetto di un altro utente, input malevolo, file non valido, richiesta fuori sequenza, token scaduto, rate limit, callback non allowlistata, errore controllato. Se questi casi non entrano nella specifica, difficilmente l’agente li coprirà in modo robusto.
I test automatici vanno poi affiancati a Code Review e, quando app o API sono online, a un WAPT manuale. Le vulnerabilità più gravi spesso non sono bug sintattici, ma incoerenze tra requisiti, implementazione e comportamento reale.
Drift tra spec, implementazione e documentazione
Uno dei vantaggi dello spec-driven development è tenere insieme intenzione, design e implementazione. Il rischio è credere che questa tracciabilità sia automatica e sempre corretta. Durante lo sviluppo, l’agente può scoprire che la spec è incompleta e modificare l’implementazione; il developer può accettare un workaround senza aggiornare requisiti e design; un hook può aggiornare documentazione che descrive ciò che dovrebbe accadere, non ciò che il codice applica davvero. La spec può restare ordinata e diventare falsa.
Per le aree di sicurezza, la tracciabilità deve essere verificata: ogni requisito di access control deve avere implementazione, test positivo, test negativo e owner. Ogni trust boundary deve avere controlli nel design e nel codice. Ogni eccezione accettata deve avere motivazione e remediation.
Permission fatigue e approvazioni
Kiro può introdurre molti punti di approvazione: task, hook, tool use, shell command, MCP, modifiche file, test, PR, IaC. Se tutto richiede lo stesso livello di attenzione, il team rischia permission fatigue e finisce per accettare automaticamente. La soluzione non è bloccare tutto, ma classificare il rischio. Formattazione, documentazione e refactoring locale possono avere un percorso leggero, mentre auth, IAM, segreti, API pubbliche, database, storage, migration, deploy, delete, Terraform e cloud CLI devono avere approvazioni più forti e reviewer competenti. Questa distinzione va decisa prima che Kiro entri nel workflow di produzione, perché se la regola viene improvvisata durante una release urgente, il team tenderà a privilegiare la velocità.
Checklist Kiro prima del go-live
Specifiche e design
- Rileggi i requisiti EARS e verifica che includano sicurezza, ruoli, dati, autorizzazioni, tenant isolation, logging, error handling, retention e abuse cases.
- Aggiungi acceptance criteria negativi per ciò che deve essere rifiutato.
- Collega ogni requisito critico a design, task, codice e test.
Hooks, steering e MCP
- Fai inventario di
.kiro/hooks, trigger, shell command, prompt action e tool coinvolti. - Revisiona gli steering files come codice.
- Censisci server MCP, token, privilegi, dati accessibili e tool disponibili.
- Disabilita ciò che non serve sui repository critici.
Codice, API e test
- Esegui Code Review su auth, middleware, API, validazione, business logic, error handling, segreti e dipendenze.
- Integra test negativi su ruoli, tenant, IDOR/BOLA, input malevoli, sessioni, upload e rate limit.
- Se l’app è esposta, pianifica un WAPT sull’ambiente reale.
Cloud, IaC e produzione
- Revisiona Terraform, CloudFormation, CDK, security group, IAM, storage, database, networking, pipeline e secret prima dell’apply.
- Verifica least privilege, separazione ambienti, logging, backup, rollback e approvazioni.
- Nessun comando di deploy o destroy dovrebbe essere effetto automatico di hook o task senza controllo.
Quando basta una review interna e quando serve una verifica indipendente
Una review interna può bastare se Kiro è usato per specifiche o refactoring non esposti, senza dati reali, senza IaC, senza API pubbliche e senza automazioni ad alto impatto. Serve invece una verifica indipendente quando le specifiche guidano funzioni con dati reali, ruoli, tenant, pagamenti, integrazioni, API pubbliche, IaC, AWS, Terraform, MCP o hooks che eseguono comandi, oppure quando il team vuole adottare Kiro in modo continuativo e deve definire policy, soglie di review, responsabilità e controlli ripetibili.
Il punto non è rallentare Kiro, ma separare ciò che può essere accelerato da ciò che deve essere validato: requisiti, threat boundary, automazioni, tool, cloud, codice e comportamento reale.
Come ISGroup può verificare un progetto sviluppato con Kiro
Il controllo cambia in base a cosa Kiro ha strutturato, generato o automatizzato. Se il rischio è nei requisiti, nel threat model o nelle scelte architetturali, la Secure Architecture Review aiuta a validare design, trust boundary e flussi dati. Se il rischio riguarda AWS, Terraform, IAM, security group, storage o pipeline, il Cloud Security Assessment verifica configurazioni e privilegi. Se l’obiettivo è governare adozione, policy e soglie di review, il Risk Assessment aiuta a definire priorità e responsabilità.
| Se Kiro ha toccato… | Rischio principale | Controllo consigliato |
|---|---|---|
| Specifiche, requisiti, design, trust boundary, flussi dati | Assunzioni architetturali deboli | Secure Architecture Review |
| AWS, Terraform, IaC, IAM, storage, database, security group, pipeline | Misconfiguration cloud o privilegi eccessivi | Cloud Security Assessment |
| Policy interne, soglie di approvazione, governance del workflow agentico | Rischio non classificato o controlli non ripetibili | Risk Assessment |
| Codice applicativo, API, middleware, validazione, segreti, dipendenze | Vulnerabilità o regressioni nel codice | Code Review |
| Web app o API pubbliche generate a partire dalle spec | Comportamenti abusabili dall’esterno | Web Application Penetration Testing |
La scelta del controllo dipende da ciò che è cambiato davvero: specifica, architettura, automazione, cloud, codice o comportamento esposto. Prima del go-live conviene delimitare quel perimetro e verificare il rischio effettivo sul prodotto. Hai usato Kiro per trasformare requisiti in design, task, codice o infrastruttura? ISGroup può aiutarti a verificare se la struttura prodotta dall’AI contiene anche i controlli di sicurezza necessari: threat model, autorizzazioni, IaC, IAM, hooks, MCP, test e remediation.
Evidenze da preparare prima della review
Prima di coinvolgere un team esterno conviene raccogliere spec, requisiti EARS, design, task, repository, diff, test, file .kiro/hooks, steering files, MCP server configurati, template IaC, plan diff, account o ambienti coinvolti, ruoli, dati trattati e decisioni già prese su rischi accettati. Queste evidenze permettono di capire se la sicurezza è presente nella specifica, nel design, nell’implementazione e nei test, e di distinguere un problema metodologico da una vulnerabilità applicativa o da una misconfiguration cloud.
La domanda finale non dovrebbe essere “la spec è completa?” in astratto, ma: quali requisiti di sicurezza contiene, quali minacce copre, quali automazioni abilita, quali risorse crea, quali dati espone e quali test dimostrano che i controlli funzionano anche contro l’abuso. Kiro può portare ordine nello sviluppo assistito da AI; la sicurezza serve a evitare che quell’ordine renda più facile portare in produzione una vulnerabilità ben documentata. Il progetto sviluppato con Kiro è stato verificato come prodotto esposto, o solo come specifica coerente?
FAQ
- Lo spec-driven development rende il codice più sicuro?
- Rende il processo più esplicito e tracciabile, ma non garantisce sicurezza. Se i requisiti non includono auth, autorizzazioni, threat model, dati e test negativi, l’agente può implementare in modo ordinato un sistema vulnerabile.
- Le specifiche EARS bastano per coprire i requisiti di sicurezza?
- No. EARS aiuta a scrivere requisiti chiari, ma bisogna includere esplicitamente sicurezza, casi di abuso, access control, error handling, logging, privacy e remediation.
- Gli Agent Hooks sono rischiosi?
- Sono utili, ma diventano rischiosi quando eseguono shell command, modificano file, installano dipendenze, lanciano cloud CLI o interagiscono con tool esterni senza approvazione e logging adeguati.
- Quando serve una Secure Architecture Review?
- Quando Kiro ha contribuito a specifiche, design, trust boundary, flussi dati, multi-tenant, integrazioni o scelte architetturali che andranno in produzione.
- Quando serve un Cloud Security Assessment?
- Quando Kiro ha generato o modificato Terraform, CloudFormation, CDK, IAM, security group, storage, database, pipeline o risorse AWS.
Le vulnerabilità delle applicazioni web possono esporre la tua azienda a rischi e attacchi informatici.
Affidati a ISGroup per:
- Web Application Penetration Test efficace e mirato
- Individuazione e correzione preventiva delle falle di sicurezza
- Supporto tecnico da esperti in sicurezza applicativa
Fonti e riferimenti utili
- Kiro official site: https://kiro.dev/
- Kiro docs: https://kiro.dev/docs/
- Kiro first project: https://kiro.dev/docs/getting-started/first-project/
- Kiro hook types: https://kiro.dev/docs/hooks/types/
- Kiro hook actions: https://kiro.dev/docs/hooks/actions/
- Kiro MCP server directory: https://kiro.dev/docs/mcp/servers/
- Kiro CLI MCP registry: https://kiro.dev/docs/cli/mcp/registry/
- Kiro blog, introducing Kiro: https://kiro.dev/blog/introducing-kiro/
- Kiro blog, automate workflow with agent hooks: https://kiro.dev/blog/automate-your-development-workflow-with-agent-hooks
- AWS Public Sector Blog, Kiro agents and DevOps: https://aws.amazon.com/blogs/publicsector/transform-devops-practice-with-kiro-ai-powered-agents/
- OWASP Top 10 for LLM Applications 2025: https://owasp.org/www-project-top-10-for-large-language-model-applications/
- OWASP Agentic AI Threats and Mitigations: https://genai.owasp.org/resource/agentic-ai-threats-and-mitigations/
- NIST SSDF SP 800-218: https://csrc.nist.gov/publications/detail/sp/800-218/final

