
Ваш AWS как файловая система.

Вот так:
grep -l "AdministratorAccess" iam/users/*/policies.json
Вместо этого:
aws iam list-users --query 'Users[].UserName' --output text | \
xargs -I{} sh -c 'aws iam list-attached-user-policies --user-name {} --query "AttachedPolicies[].PolicyArn" --output text' | \
grep AdministratorAccess
sisu монтирует ресурсы AWS как локальную файловую систему. Используйте уже знакомые вам инструменты — grep, cat, diff, vim — вместо того чтобы сражаться с JSON и AWS CLI.
Дружелюбен к AI по дизайну: инструменты AI не могут подключаться по SSH к серверам или выполнять интерактивные сессии AWS CLI. Но с sisu вся ваша инфраструктура AWS становится простыми файловыми путями, которые может прочитать любой AI. Удаленные файловые системы EC2 доступны по пути ec2/<instance>/fs/ — позволяя AI просматривать /var/log, /etc и любые файлы на ваших инстансах без SSH.
В настоящее время поддерживает S3, SSM, IAM, VPC, Lambda, EC2, ECS, CloudFront, Secrets Manager, Route 53 и CloudWatch Logs.
go install github.com/semonte/sisu@latest
Требуется FUSE:
sudo apt install fuse # Ubuntu/Debian
sudo yum install fuse # RHEL/CentOS
sisu
Вы внутри. Теперь ваш AWS у вас под рукой:
~/.sisu/mnt/
├── default/ # Профиль AWS
│ ├── global/ # IAM, S3, Route 53 (независимо от региона)
│ │ ├── iam/
│ │ ├── route53/
│ │ └── s3/
│ ├── us-east-1/ # Региональные сервисы
│ │ ├── cloudfront/
│ │ ├── ec2/
│ │ ├── ecs/
│ │ ├── lambda/
│ │ ├── logs/
│ │ ├── secrets/
│ │ ├── ssm/
│ │ └── vpc/
│ └── eu-west-1/
│ └── ...
├── prod/ # Другие профили из ~/.aws/credentials
└── staging/
Введите exit, когда закончите.
# У кого есть права администратора?
grep -l "AdministratorAccess" */global/iam/users/*/policies.json
# Группы безопасности с открытым SSH
grep -r '"FromPort": 22' */us-east-1/vpc/*/security-groups/
# Роли, которые может принять Lambda
grep -l "lambda.amazonaws.com" */global/iam/roles/*/info.json
# Секреты в SSM?
grep -r "password" */us-east-1/ssm/
# Функции Lambda с секретами в переменных окружения
grep -r "PASSWORD\|SECRET\|API_KEY" */us-east-1/lambda/*/env.json
# Функции, использующие устаревшие рантаймы
grep -r "python3.8\|nodejs16" */*/lambda/*/config.json
# Инстансы EC2 с публичными IP
grep -r "PublicIpAddress" */*/ec2/*/info.json
# Найти остановленные инстансы (тратится зря деньги?)
grep -r '"Name": "stopped"' */*/ec2/*/info.json
# Подключиться к инстансу EC2 через SSM (не нужны ключи SSH!)
./default/us-east-1/ec2/i-abc123/connect
# Просмотреть логи загрузки EC2 и сообщения ядра
cat default/us-east-1/ec2/i-abc123/console.log
# Просмотреть все секреты
ls */us-east-1/secrets/
# Прочитать значение секрета
cat default/us-east-1/secrets/myapp/database/value
# Список всех DNS-зон
ls */global/route53/
# Просмотреть DNS-записи зоны
cat default/global/route53/example.com/records.json
# Найти все CNAME-записи
grep -r '"Type": "CNAME"' */global/route53/*/records.json
# Поиск ошибок в последних логах
grep -i "error" default/us-east-1/logs/aws/lambda/my-function/latest.log
# Просмотреть все группы логов
ls */us-east-1/logs/
# Список потоков логов (показывает 20 последних)
ls default/us-east-1/logs/aws/lambda/my-function/
# Просмотреть события из конкретного потока
cat default/us-east-1/logs/aws/lambda/my-function/2024_01_15_abc123/events.log
# ECS: просмотр кластеров, сервисов и задач
ls default/us-east-1/ecs/my-cluster/my-service/
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# CloudFront: просмотр распределений и функций
ls default/us-east-1/cloudfront/distributions/
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# S3: проверка политик корзин и настроек доступа
cat default/global/s3/my-bucket/.meta/policy.json
cat default/global/s3/my-bucket/.meta/public-access-block.json
# Сравнить роли IAM между аккаунтами
diff prod/global/iam/roles/api/info.json staging/global/iam/roles/api/info.json
# Отклонения групп безопасности между регионами
diff default/us-east-1/vpc/vpc-xxx/security-groups/sg-xxx.json default/eu-west-1/vpc/vpc-yyy/security-groups/sg-yyy.json
# Различия конфигураций Lambda
diff prod/us-east-1/lambda/my-func/config.json staging/us-east-1/lambda/my-func/config.json
# Красивый вывод с помощью jq
cat default/global/iam/roles/my-role/info.json | jq '.AssumeRolePolicyDocument'
# Посчитать количество ролей
ls default/global/iam/roles/ | wc -l
# Найти ресурсы без тегов
cat default/us-east-1/vpc/vpc-xxx/info.json | jq 'select(.Tags == null)'
# Вывести все используемые рантаймы Lambda
grep -h "Runtime" */*/lambda/*/config.json | sort | uniq -c
cat default/us-east-1/ssm/myapp/database-url # чтение
echo "postgres://prod:5432" > default/us-east-1/ssm/database-url # запись
vim default/us-east-1/ssm/myapp/config # редактирование
cp local.txt default/global/s3/my-bucket/backup/
cat default/global/s3/my-bucket/logs/app.log | grep ERROR
rm default/global/s3/my-bucket/old-file.txt
sisu # Запуск от корня
sisu --profile prod # Запуск в prod/
sisu --profile prod --region us-east-1 # Запуск в prod/us-east-1/
sisu stop # Отмонтировать
sisu --debug # Отладка логирования
Файлы events.log потоков логов подгружаются лениво из AWS, а не загружаются полностью в память:
cat, grep, head, less# Извлекает только столько пакетов, сколько нужно для нахождения совпадения
grep "ERROR" .../my-stream/events.log
# Извлекает только первый пакет
head -50 .../my-stream/events.log
# Прокрутка с подгрузкой по требованию
less .../my-stream/events.log
# Извлечет все события
cat .../my-stream/events.log | wc -l
Примечание: tail неправильно работает с потоковыми файлами, потому что он переходит в конец файла, а фактический размер файла неизвестен до полной загрузки. Используйте cat ... | tail как обходной путь.
Каждый сервис имеет логи непосредственно в своем ресурсе — не нужно искать группы логов:
# Логи функции Lambda
cat default/us-east-1/lambda/my-function/logs/latest.log
# Логи инстанса EC2 (ищет группы логов, содержащие ID инстанса)
cat default/us-east-1/ec2/i-abc123/logs/latest.log
# Логи сервиса ECS
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# Логи функции CloudFront
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
Все интегрированные логи используют потоковую передачу — они получают события по мере чтения.
Просмотр кластеров ECS, сервисов и задач:
ecs/
├── my-cluster/
│ ├── web-service/
│ │ ├── info.json # Конфигурация сервиса
│ │ ├── logs/
│ │ │ └── latest.log # Потоковые логи сервиса
│ │ └── tasks/
│ │ └── abc123/
│ │ └── info.json # Детали задачи
│ └── api-service/
│ └── ...
# Вывести все кластеры ECS
ls default/us-east-1/ecs/
# Просмотреть конфигурацию сервиса
cat default/us-east-1/ecs/my-cluster/web-service/info.json
# Потоковые логи сервиса
cat default/us-east-1/ecs/my-cluster/web-service/logs/latest.log
# Список запущенных задач
ls default/us-east-1/ecs/my-cluster/web-service/tasks/
Просмотр распределений и функций CloudFront:
cloudfront/
├── distributions/
│ └── E1ABC123/
│ ├── info.json # Конфигурация распределения
│ └── origins.json # Источники с информацией OAC/OAI
└── functions/
└── my-auth/
├── code.js # Исходный код функции
├── config.json # Конфигурация функции
└── logs/
└── latest.log # Логи выполнения функции
# Список распределений
ls default/us-east-1/cloudfront/distributions/
# Проверить конфигурацию доступа к источнику (отладка проблем с S3!)
cat default/us-east-1/cloudfront/distributions/E1ABC123/origins.json
# Просмотреть и отредактировать код функции CloudFront
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# Отладка выполнения функции
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
У каждой корзины S3 есть скрытая директория .meta/ с конфигурацией корзины:
# Просмотреть политику корзины
cat default/global/s3/my-bucket/.meta/policy.json
# Проверить настройки блокировки публичного доступа
cat default/global/s3/my-bucket/.meta/public-access-block.json
Полезно для отладки проблем доступа CloudFront к S3!
Каждый инстанс EC2 предоставляет:
ls default/us-east-1/ec2/i-abc123/
# info.json security-groups.json tags.json console.log connect fs/ logs/
Подключение через SSM (не нужны ключи SSH или публичный IP):
./default/us-east-1/ec2/i-abc123/connect
Требуется плагин Session Manager.
Просмотр логов загрузки и сообщений ядра:
cat default/us-east-1/ec2/i-abc123/console.log
Просмотр файловой системы инстанса удаленно (через SSM Run Command):
# Список файлов на инстансе
ls default/us-east-1/ec2/i-abc123/fs/etc/
# Чтение удаленных файлов
cat default/us-east-1/ec2/i-abc123/fs/etc/hostname
# Поиск по удаленным логам
grep ERROR default/us-east-1/ec2/i-abc123/fs/var/log/syslog
# Сравнение конфигов между инстансами
diff prod/us-east-1/ec2/i-111/fs/etc/nginx/nginx.conf \
prod/us-east-1/ec2/i-222/fs/etc/nginx/nginx.conf
Не нужны ключи SSH или открытые порты — внутри используется SSM Run Command.
| Инструмент | Что делает |
|---|---|
| fzf | Нечеткий поиск с предпросмотром |
| jq | Запросы/трансформация JSON |
| difftastic | Структурное сравнение (понимает JSON) |
# Интерактивный просмотр любого ресурса
find */global/iam/roles -name "info.json" | fzf --preview 'jq . {}'
# Найти функции Lambda с большим объемом памяти
jq -r 'select(.MemorySize > 512) | .FunctionName' */us-east-1/lambda/*/config.json
# Сравнение конфигов prod и staging
difft prod/us-east-1/lambda/api/config.json staging/us-east-1/lambda/api/config.json
Поскольку это всего лишь файлы, инструменты AI могут читать и анализировать ваш AWS напрямую:
cd ~/.sisu/mnt && claude
"Найди группы безопасности, разрешающие SSH из 0.0.0.0/0"
"Проверь роли IAM на предмет слишком разрешительных политик"
"Сравни конфиги Lambda в prod и staging"
Проблема: Сервис ECS завершается с ошибкой "No Container Instances were found in your cluster"
Диагностика с помощью sisu без SSH:
# Проверка статуса кластера — нет зарегистрированных инстансов
cat ecs/jobdeck-cluster/info.json | jq '.RegisteredContainerInstancesCount'
# → 0
# Проверка конфигурации сервиса — тип запуска EC2
cat ecs/jobdeck-cluster/jobdeck-api/info.json | jq '.LaunchType, .FailedTasks'
# → "EC2", 136
# Инстанс EC2 существует — проверка его конфигурации ECS
cat ec2/i-xxx/fs/etc/ecs/ecs.config
# → ECS_CLUSTER=jobdeck-cluster ✓
# Проверка логов агента ECS — нет лога агента!
ls ec2/i-xxx/fs/var/log/ecs/
# → ecs-volume-plugin.log (отсутствует ecs-agent.log!)
# Проверка, какой AMI запущен
cat ec2/i-xxx/fs/etc/image-id
# → image_name="amzn2-ami-minimal-hvm" ← НЕ оптимизировано для ECS!
Найдена первопричина: Инстанс EC2 использует Minimal AMI Amazon Linux 2 вместо AMI, оптимизированного для ECS. Minimal AMI содержит установленные пакеты ECS, но служба агента не включена по умолчанию.
Исправление: Используйте AMI, оптимизированный для ECS, или добавьте systemctl enable --now ecs в user-data.
Вся эта отладка была выполнена AI Claude, просматривающим файловую систему через sisu — не требуется ручной SSH!
MIT
| Сервис | Чтение | Запись | Удаление |
|---|
| S3 (объекты, политики корзин, настройки доступа) | ✓ | ✓ | ✓ |
| SSM Parameter Store | ✓ | ✓ | ✓ |
| IAM (пользователи, роли, политики, группы) | ✓ | - | - |
| VPC (подсети, группы безопасности, маршруты) | ✓ | - | - |
| Lambda (конфиг, политика, переменные окружения, логи) | ✓ | - | - |
| EC2 (инстансы, группы безопасности, теги, логи, удаленная файловая система) | ✓ | - | - |
| ECS (кластеры, сервисы, задачи, логи) | ✓ | - | - |
| CloudFront (распределения, функции, логи) | ✓ | - | - |
| Secrets Manager | ✓ | - | - |
| Route 53 (зоны, записи) | ✓ | - | - |
| CloudWatch Logs | ✓ | - | - |