Modern QA2026AI-агенты для ревью инфраструктурного кода
Join

Course08 Infrastructure as Code Testing

Cutting-edge · Chapter 08

AI-агенты для ревью инфраструктурного кода

Updated Jul 2026

Почему AI добавляет качественный уровень

Инструменты на основе правил, такие как Checkov и tfsec, проверяют известные паттерны. Они отвечают на вопрос «нарушает ли это правило X?» Но они не могут ответить на вопросы «рискованно ли это изменение?» или «каким будет операционное воздействие?» AI-агенты могут заполнить этот пробел, рассуждая об инфраструктурных изменениях в контексте.

AI-агент, анализирующий Terraform plan, может объяснить, что замена ресурса вызовет простой, предложить, что тип инстанса избыточен для данной нагрузки, определить, что изменение группы безопасности создаёт непреднамеренное раскрытие, или сжать 200-строчный план в описание из трёх предложений на человеческом языке.

В чём AI-агенты сильны при ревью IaC

Возможность Инструменты на правилах AI-агент
Ошибки конфигурации безопасности Проверка по известным паттернам Рассуждение о контекстно-специфичном риске
Оптимизация затрат Флаг конкретных типов инстансов Предложение правильного размера на основе нагрузки
Операционный риск Не может оценить Объяснение влияния замены ресурсов
Дрифт окружений Сравнение конфигураций Объяснение намеренных и случайных различий
Суммаризация изменений Список изменённых ресурсов Резюме на естественном языке о том, что и зачем
Маппинг комплаенса Проверка по ID правил Маппинг изменений на конкретные фреймворки комплаенса

Конкретные примеры

  1. Обнаружение ошибок конфигурации безопасности -- AI-модели, обученные на лучших практиках облачной безопасности, могут помечать чрезмерно разрешительные IAM-политики, незашифрованные ресурсы и публичный сетевой доступ с объяснением конкретного риска.

  2. Выявление дрифта между окружениями -- сравнение staging и production Terraform для обнаружения намеренных и случайных различий. AI может объяснить: «В staging используется меньший тип инстанса (намеренная экономия), но также отсутствует настройка шифрования (вероятно, случайно)».

  3. Предложение оптимизации затрат -- обнаружение oversized-инстансов, отсутствующей зарезервированной мощности или ресурсов, которые должны использовать spot-ценообразование, с оценкой экономии.

  4. Объяснение сложных изменений -- перевод 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, который суммирует, что изменится, помечает риски безопасности и оценивает влияние на стоимость.»