AI-агенты для ревью инфраструктурного кода
Updated Jul 2026
Почему AI добавляет качественный уровень
Инструменты на основе правил, такие как Checkov и tfsec, проверяют известные паттерны. Они отвечают на вопрос «нарушает ли это правило X?» Но они не могут ответить на вопросы «рискованно ли это изменение?» или «каким будет операционное воздействие?» AI-агенты могут заполнить этот пробел, рассуждая об инфраструктурных изменениях в контексте.
AI-агент, анализирующий Terraform plan, может объяснить, что замена ресурса вызовет простой, предложить, что тип инстанса избыточен для данной нагрузки, определить, что изменение группы безопасности создаёт непреднамеренное раскрытие, или сжать 200-строчный план в описание из трёх предложений на человеческом языке.
В чём AI-агенты сильны при ревью IaC
| Возможность | Инструменты на правилах | AI-агент |
|---|---|---|
| Ошибки конфигурации безопасности | Проверка по известным паттернам | Рассуждение о контекстно-специфичном риске |
| Оптимизация затрат | Флаг конкретных типов инстансов | Предложение правильного размера на основе нагрузки |
| Операционный риск | Не может оценить | Объяснение влияния замены ресурсов |
| Дрифт окружений | Сравнение конфигураций | Объяснение намеренных и случайных различий |
| Суммаризация изменений | Список изменённых ресурсов | Резюме на естественном языке о том, что и зачем |
| Маппинг комплаенса | Проверка по ID правил | Маппинг изменений на конкретные фреймворки комплаенса |
Конкретные примеры
Обнаружение ошибок конфигурации безопасности -- AI-модели, обученные на лучших практиках облачной безопасности, могут помечать чрезмерно разрешительные IAM-политики, незашифрованные ресурсы и публичный сетевой доступ с объяснением конкретного риска.
Выявление дрифта между окружениями -- сравнение staging и production Terraform для обнаружения намеренных и случайных различий. AI может объяснить: «В staging используется меньший тип инстанса (намеренная экономия), но также отсутствует настройка шифрования (вероятно, случайно)».
Предложение оптимизации затрат -- обнаружение oversized-инстансов, отсутствующей зарезервированной мощности или ресурсов, которые должны использовать spot-ценообразование, с оценкой экономии.
Объяснение сложных изменений -- перевод 200-строчного Terraform plan в читаемое резюме: «Это изменение заменит RDS-инстанс (что вызовет 5 минут простоя) и добавит новую реплику для чтения».
Паттерн промпта для ревью IaC
Качество AI-ревью целиком зависит от промпта. Общий промпт «проверь этот код» даёт общий результат. Структурированный промпт с конкретными критериями проверки даёт практически применимые результаты.
You are reviewing a Terraform pull request. Analyze the following changes for:
1. **Security**: Any resources without encryption? Public access? Overly permissive IAM?
Flag any security group with 0.0.0.0/0 ingress. Flag any IAM policy with Action: "*".
2. **Cost**: Any instances larger than needed? Missing auto-scaling? Resources that should
use spot pricing? Estimate monthly cost impact.
3. **Reliability**: Missing health checks? Single points of failure? No multi-AZ?
Flag any RDS without multi-AZ. Flag any service with replicas < 2.
4. **Compliance**: Does this follow our tagging policy? Are resources in approved regions?
Required tags: Environment, Team, CostCenter.
5. **Operational Risk**: Will any resources be replaced (causing downtime)?
Will any data be lost? Are there any irreversible changes?
Terraform plan output:
```json
{plan_json}
Previous production configuration:
{existing_config}
Provide findings as a structured list with severity (CRITICAL/HIGH/MEDIUM/LOW). For each finding, include:
- What the issue is
- Why it matters
- How to fix it
### Улучшенный промпт для сложных ревью
```markdown
You are a senior infrastructure engineer reviewing a Terraform plan that modifies
production infrastructure. This is a high-stakes review.
Context:
- Cloud provider: AWS
- Environment: production (us-east-1)
- Service: payment processing (PCI-DSS scope)
- Current state: 3 AZs, multi-AZ RDS, ECS Fargate
Review the following plan for:
1. **Data loss risk**: Will any stateful resources (RDS, S3, DynamoDB) be destroyed
or replaced? Flag with CRITICAL severity.
2. **Downtime risk**: Will any resource replacement cause service interruption?
Estimate duration. Flag with HIGH severity.
3. **Security regression**: Does any change weaken the current security posture?
Compare before/after for security groups, IAM, encryption. Flag with CRITICAL.
4. **PCI-DSS compliance**: Does this change maintain PCI-DSS requirements?
(Encryption at rest, encryption in transit, access logging, network segmentation)
5. **Cost impact**: Estimate the monthly cost delta. Flag changes > $100/month.
Plan JSON:
{plan_json}
Checkov results:
{checkov_results}
Trivy results:
{trivy_results}
Output format:
## Summary
[2-3 sentence summary of what this plan does]
## Findings
| # | Severity | Category | Finding | Recommendation |
|---|----------|----------|---------|----------------|
Интеграция AI-ревью в CI
Рабочий процесс GitHub Actions
# .github/workflows/iac-review.yml
name: AI Infrastructure Review
on:
pull_request:
paths:
- 'terraform/**'
- 'k8s/**'
- 'Dockerfile*'
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate Terraform plan
run: |
cd terraform/
terraform init
terraform plan -out=tfplan
terraform show -json tfplan > tfplan.json
- name: Static analysis
run: |
checkov -d ./terraform/ -o json > checkov-results.json
trivy config ./terraform/ --format json > trivy-results.json
- name: AI review of changes
run: |
# Combine plan + static analysis for AI review
python scripts/ai_iac_review.py \
--plan terraform/tfplan.json \
--checkov checkov-results.json \
--trivy trivy-results.json \
--output review-comment.md
- name: Post review to PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const body = fs.readFileSync('review-comment.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});
Скрипт AI-ревью
# scripts/ai_iac_review.py
import json
import argparse
import os
from anthropic import Anthropic
def load_json(path):
with open(path) as f:
return json.load(f)
def build_review_prompt(plan, checkov_results, trivy_results):
"""Build a structured prompt for AI review."""
# Summarize the plan
changes = plan.get("resource_changes", [])
creates = [c["address"] for c in changes if "create" in c["change"]["actions"]]
updates = [c["address"] for c in changes if "update" in c["change"]["actions"]]
destroys = [c["address"] for c in changes if "delete" in c["change"]["actions"]]
# Summarize static analysis findings
checkov_failures = [
r for r in checkov_results.get("results", {}).get("failed_checks", [])
]
trivy_findings = trivy_results.get("Results", [])
prompt = f"""Review this Terraform infrastructure change:
## Plan Summary
- Resources to create: {len(creates)} ({', '.join(creates[:10])})
- Resources to update: {len(updates)} ({', '.join(updates[:10])})
- Resources to destroy: {len(destroys)} ({', '.join(destroys[:10])})
## Full Plan
```json
{json.dumps(plan, indent=2)[:10000]}
Checkov Findings ({len(checkov_failures)} failures)
{json.dumps(checkov_failures[:20], indent=2)}
Trivy Findings
{json.dumps(trivy_findings[:20], indent=2)}
Provide a structured review with severity ratings."""
return prompt
def main(): parser = argparse.ArgumentParser() parser.add_argument("--plan", required=True) parser.add_argument("--checkov", required=True) parser.add_argument("--trivy", required=True) parser.add_argument("--output", required=True) args = parser.parse_args()
plan = load_json(args.plan)
checkov = load_json(args.checkov)
trivy = load_json(args.trivy)
prompt = build_review_prompt(plan, checkov, trivy)
client = Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
messages=[{"role": "user", "content": prompt}],
system="You are a senior infrastructure security engineer. Review the Terraform plan and static analysis results. Provide actionable findings with severity ratings.",
)
review = response.content[0].text
with open(args.output, "w") as f:
f.write("## AI Infrastructure Review\n\n")
f.write(review)
f.write("\n\n---\n*Generated by AI review pipeline*")
if name == "main": main()
## Полный пайплайн тестирования IaC
+---------------------------------------------------------------+ | Разработчик пушит изменения Terraform + K8s | | | | Этап 1: Статический (секунды) | | +-- terraform fmt --check | | +-- terraform validate | | +-- checkov / tfsec / trivy config | | +-- kubeval / kubeconform | | +-- OPA/Conftest пользовательские политики | | | | Этап 2: Анализ плана (30 секунд) | | +-- terraform plan -> JSON | | +-- Автоматические проверки плана (нет удалений, нет | | | публичных SG) | | +-- AI-агент ревью diff плана | | | | Этап 3: Эфемерный деплой (5-15 минут) | | +-- terraform apply в workspace PR | | +-- Ожидание проверок здоровья | | +-- Публикация URL предпросмотра | | | | Этап 4: Интеграционные тесты (5-20 минут) | | +-- API-тесты на эфемерном окружении | | +-- E2E-тесты в браузере | | +-- Сканирование безопасности (DAST) | | +-- Базовая линия производительности | | | | Этап 5: Очистка (при мерже/закрытии) | | +-- terraform destroy workspace PR | +---------------------------------------------------------------+
## Ключевые выводы
- **Статический анализ бесплатен** -- запускайте tfsec, Checkov и OPA при каждом коммите. Нет оправдания для пропуска.
- **Проверки плана выявляют то, что статический анализ не может** -- анализ фактического вывода плана раскрывает замены ресурсов, операции удаления и дрифт.
- **Terratest дорогой, но незаменимый** -- некоторые вещи можно верифицировать только развернув реальную инфраструктуру. Резервируйте его для критичных модулей.
- **Сканирование контейнеров — непрерывный процесс** -- образы накапливают новые CVE ежедневно. Сканируйте при сборке и периодически в реестре.
- **Эфемерные окружения трансформируют уверенность** -- тестирование на реальной копии вашей инфраструктуры устраняет проблему «работает на моей машине» для облачных ресурсов.
- **AI-агенты добавляют качественный уровень** -- они могут объяснять сложные планы, предлагать оптимизации и обнаруживать паттерны, которые инструменты на правилах пропускают.
## Тезис для собеседования
> «Я считаю, что тестирование инфраструктуры должно следовать той же пирамиде, что и тестирование приложений: дешёвый статический анализ в основании, проверки на этапе plan в середине и интеграционные тесты с реальной инфраструктурой на вершине. По моему опыту, наиболее ценная практика — эфемерные окружения для каждого PR, где вы создаёте полную копию инфраструктуры с помощью Terraform workspaces или Pulumi stacks, запускаете полный набор тестов против неё и уничтожаете при мерже. Это выявляет проблемы, которые статический анализ не может обнаружить — например, IAM-политики, синтаксически валидные, но операционно нерабочие. Я также интегрирую AI-агентов в процесс ревью: они анализируют JSON Terraform plan вместе с результатами Checkov и tfsec и публикуют структурированный комментарий к PR, который суммирует, что изменится, помечает риски безопасности и оценивает влияние на стоимость.»