
Monta los recursos de AWS como un sistema de archivos local para exploración de infraestructura, auditoría de seguridad y análisis de configuración utilizando herramientas Unix estándar como grep, diff y cat.
Tu AWS, como un sistema de archivos.

Esto:
grep -l "AdministratorAccess" iam/users/*/policies.json
En lugar de esto:
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 monta los recursos de AWS como un sistema de archivos local. Usa las herramientas que ya conoces - grep, cat, diff, vim - en lugar de lidiar con JSON y la CLI de AWS.
Diseñado para ser amigable con la IA: Las herramientas de IA no pueden hacer SSH en servidores ni ejecutar sesiones interactivas de la CLI de AWS. Pero con sisu, toda tu infraestructura de AWS se convierte en rutas de archivo simples que cualquier IA puede leer. Los sistemas de archivos remotos de EC2 son accesibles en ec2/<instance>/fs/ - permitiendo a la IA navegar /var/log, /etc y cualquier archivo en tus instancias sin SSH.
Actualmente es compatible con S3, SSM, IAM, VPC, Lambda, EC2, ECS, CloudFront, Secrets Manager, Route 53 y CloudWatch Logs.
go install github.com/semonte/sisu@latest
Requiere FUSE:
sudo apt install fuse # Ubuntu/Debian
sudo yum install fuse # RHEL/CentOS
sisu
Estás dentro. Tu AWS ahora está al alcance de tus dedos:
~/.sisu/mnt/
├── default/ # Perfil de AWS
│ ├── global/ # IAM, S3, Route 53 (independiente de región)
│ │ ├── iam/
│ │ ├── route53/
│ │ └── s3/
│ ├── us-east-1/ # Servicios regionales
│ │ ├── cloudfront/
│ │ ├── ec2/
│ │ ├── ecs/
│ │ ├── lambda/
│ │ ├── logs/
│ │ ├── secrets/
│ │ ├── ssm/
│ │ └── vpc/
│ └── eu-west-1/
│ └── ...
├── prod/ # Otros perfiles de ~/.aws/credentials
└── staging/
Escribe exit cuando termines.
# Who has admin access?
grep -l "AdministratorAccess" */global/iam/users/*/policies.json
# Security groups with SSH open
grep -r '"FromPort": 22' */us-east-1/vpc/*/security-groups/
# Roles that Lambda can assume
grep -l "lambda.amazonaws.com" */global/iam/roles/*/info.json
# Secrets in SSM?
grep -r "password" */us-east-1/ssm/
# Lambda functions with secrets in env vars
grep -r "PASSWORD\|SECRET\|API_KEY" */us-east-1/lambda/*/env.json
# Functions using deprecated runtimes
grep -r "python3.8\|nodejs16" */*/lambda/*/config.json
# EC2 instances with public IPs
grep -r "PublicIpAddress" */*/ec2/*/info.json
# Find stopped instances (wasting money?)
grep -r '"Name": "stopped"' */*/ec2/*/info.json
# Connect to an EC2 instance via SSM (no SSH keys needed!)
./default/us-east-1/ec2/i-abc123/connect
# View EC2 boot logs and kernel messages
cat default/us-east-1/ec2/i-abc123/console.log
# View all secrets
ls */us-east-1/secrets/
# Read a secret value
cat default/us-east-1/secrets/myapp/database/value
# List all DNS zones
ls */global/route53/
# View DNS records for a zone
cat default/global/route53/example.com/records.json
# Find all CNAME records
grep -r '"Type": "CNAME"' */global/route53/*/records.json
# Grep recent logs for errors
grep -i "error" default/us-east-1/logs/aws/lambda/my-function/latest.log
# View all log groups
ls */us-east-1/logs/
# List log streams (shows 20 most recent)
ls default/us-east-1/logs/aws/lambda/my-function/
# View events from a specific stream
cat default/us-east-1/logs/aws/lambda/my-function/2024_01_15_abc123/events.log
# ECS: Browse clusters, services, and tasks
ls default/us-east-1/ecs/my-cluster/my-service/
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# CloudFront: View distributions and functions
ls default/us-east-1/cloudfront/distributions/
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# S3: Check bucket policies and access settings
cat default/global/s3/my-bucket/.meta/policy.json
cat default/global/s3/my-bucket/.meta/public-access-block.json
# Compare IAM roles between accounts
diff prod/global/iam/roles/api/info.json staging/global/iam/roles/api/info.json
# Security group drift between regions
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 config differences
diff prod/us-east-1/lambda/my-func/config.json staging/us-east-1/lambda/my-func/config.json
# Pretty print with jq
cat default/global/iam/roles/my-role/info.json | jq '.AssumeRolePolicyDocument'
# Count your roles
ls default/global/iam/roles/ | wc -l
# Find untagged resources
cat default/us-east-1/vpc/vpc-xxx/info.json | jq 'select(.Tags == null)'
# List all Lambda runtimes in use
grep -h "Runtime" */*/lambda/*/config.json | sort | uniq -c
cat default/us-east-1/ssm/myapp/database-url # read
echo "postgres://prod:5432" > default/us-east-1/ssm/database-url # write
vim default/us-east-1/ssm/myapp/config # edit
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 # Start at root
sisu --profile prod # Start in prod/
sisu --profile prod --region us-east-1 # Start in prod/us-east-1/
sisu stop # Unmount
sisu --debug # Debug logging
Los archivos de flujo de registros events.log se transmiten de manera perezosa desde AWS en lugar de cargarse completamente en memoria:
cat, grep, head, less# Fetches only enough batches to find the match
grep "ERROR" .../my-stream/events.log
# Fetches just the first batch
head -50 .../my-stream/events.log
# Scroll through with on-demand loading
less .../my-stream/events.log
# Will fetch all events
cat .../my-stream/events.log | wc -l
Nota: tail no funciona correctamente con archivos en transmisión porque busca al final del archivo, pero el tamaño real del archivo se desconoce hasta que se carga por completo. Usa cat ... | tail como solución.
Cada servicio tiene registros directamente debajo de su recurso - no es necesario buscar grupos de registros:
# Lambda function logs
cat default/us-east-1/lambda/my-function/logs/latest.log
# EC2 instance logs (searches for log groups containing instance ID)
cat default/us-east-1/ec2/i-abc123/logs/latest.log
# ECS service logs
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# CloudFront function logs
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
Todos los registros integrados usan transmisión: obtienen eventos bajo demanda mientras lees.
Navega por clústeres, servicios y tareas de ECS:
ecs/
├── my-cluster/
│ ├── web-service/
│ │ ├── info.json # Configuración del servicio
│ │ ├── logs/
│ │ │ └── latest.log # Registros de servicio en transmisión
│ │ └── tasks/
│ │ └── abc123/
│ │ └── info.json # Detalles de la tarea
│ └── api-service/
│ └── ...
# List all ECS clusters
ls default/us-east-1/ecs/
# View service configuration
cat default/us-east-1/ecs/my-cluster/web-service/info.json
# Stream service logs
cat default/us-east-1/ecs/my-cluster/web-service/logs/latest.log
# List running tasks
ls default/us-east-1/ecs/my-cluster/web-service/tasks/
Navega por distribuciones y funciones de CloudFront:
cloudfront/
├── distributions/
│ └── E1ABC123/
│ ├── info.json # Configuración de distribución
│ └── origins.json # Orígenes con información de OAC/OAI
└── functions/
└── my-auth/
├── code.js # Código fuente de la función
├── config.json # Configuración de la función
└── logs/
└── latest.log # Registros de ejecución de la función
# List distributions
ls default/us-east-1/cloudfront/distributions/
# Check origin access configuration (debug S3 access issues!)
cat default/us-east-1/cloudfront/distributions/E1ABC123/origins.json
# View and edit CloudFront function code
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# Debug function execution
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
Cada bucket de S3 tiene un directorio oculto .meta/ con la configuración del bucket:
# View bucket policy
cat default/global/s3/my-bucket/.meta/policy.json
# Check public access block settings
cat default/global/s3/my-bucket/.meta/public-access-block.json
¡Útil para depurar problemas de acceso de CloudFront a S3!
Cada instancia de EC2 expone:
ls default/us-east-1/ec2/i-abc123/
# info.json security-groups.json tags.json console.log connect fs/ logs/
Conectar vía SSM (sin claves SSH, sin IP pública necesaria):
./default/us-east-1/ec2/i-abc123/connect
Requiere el plugin de Session Manager.
Ver registros de arranque y mensajes del kernel:
cat default/us-east-1/ec2/i-abc123/console.log
Navegar por el sistema de archivos de la instancia de forma remota (vía SSM Run Command):
# List files on the instance
ls default/us-east-1/ec2/i-abc123/fs/etc/
# Read remote files
cat default/us-east-1/ec2/i-abc123/fs/etc/hostname
# Grep across remote logs
grep ERROR default/us-east-1/ec2/i-abc123/fs/var/log/syslog
# Compare configs between instances
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
No se necesitan claves SSH ni puertos abiertos: usa SSM Run Command internamente.
| Herramienta | Qué hace |
|---|---|
| fzf | Buscador difuso con vista previa |
| jq | Consulta/transformación JSON |
| difftastic | Diff estructural (entiende JSON) |
# Browse and preview any resource interactively
find */global/iam/roles -name "info.json" | fzf --preview 'jq . {}'
# Find Lambda functions with high memory
jq -r 'select(.MemorySize > 512) | .FunctionName' */us-east-1/lambda/*/config.json
# Compare prod vs staging config
difft prod/us-east-1/lambda/api/config.json staging/us-east-1/lambda/api/config.json
Ya que son solo archivos, las herramientas de IA pueden leer y analizar tu AWS directamente:
cd ~/.sisu/mnt && claude
"Find security groups that allow SSH from 0.0.0.0/0"
"Review IAM roles for overly permissive policies"
"Compare prod and staging Lambda configs"
Problema: El servicio ECS falla con "No Container Instances were found in your cluster"
Usando sisu para diagnosticar sin SSH:
# Check cluster status - no instances registered
cat ecs/jobdeck-cluster/info.json | jq '.RegisteredContainerInstancesCount'
# → 0
# Check service config - using EC2 launch type
cat ecs/jobdeck-cluster/jobdeck-api/info.json | jq '.LaunchType, .FailedTasks'
# → "EC2", 136
# EC2 instance exists - check its ECS config
cat ec2/i-xxx/fs/etc/ecs/ecs.config
# → ECS_CLUSTER=jobdeck-cluster ✓
# Check ECS agent logs - no agent log!
ls ec2/i-xxx/fs/var/log/ecs/
# → ecs-volume-plugin.log (missing ecs-agent.log!)
# Check what AMI is running
cat ec2/i-xxx/fs/etc/image-id
# → image_name="amzn2-ami-minimal-hvm" ← NOT ECS-optimized!
Causa raíz encontrada: La instancia de EC2 usa la AMI Minimal de Amazon Linux 2 en lugar de la AMI optimizada para ECS. La AMI minimal tiene paquetes de ECS instalados pero el servicio del agente no está habilitado por defecto.
Solución: Usa la AMI optimizada para ECS, o agrega systemctl enable --now ecs a los datos de usuario.
Toda esta depuración fue realizada por Claude AI navegando por el sistema de archivos a través de sisu, ¡sin necesidad de SSH manual!
MIT
| Servicio | Lectura | Escritura | Eliminación |
|---|
| S3 (objetos, políticas de bucket, configuraciones de acceso) | ✓ | ✓ | ✓ |
| SSM Parameter Store | ✓ | ✓ | ✓ |
| IAM (usuarios, roles, políticas, grupos) | ✓ | - | - |
| VPC (subredes, grupos de seguridad, rutas) | ✓ | - | - |
| Lambda (config, política, variables de entorno, logs) | ✓ | - | - |
| EC2 (instancias, grupos de seguridad, etiquetas, logs, sistema de archivos remoto) | ✓ | - | - |
| ECS (clústeres, servicios, tareas, logs) | ✓ | - | - |
| CloudFront (distribuciones, funciones, logs) | ✓ | - | - |
| Secrets Manager | ✓ | - | - |
| Route 53 (zonas, registros) | ✓ | - | - |
| CloudWatch Logs | ✓ | - | - |