
Sua AWS, como um sistema de arquivos.

Isto:
grep -l "AdministratorAccess" iam/users/*/policies.json
Em vez disto:
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 recursos da AWS como um sistema de arquivos local. Use as ferramentas que você já conhece - grep, cat, diff, vim - em vez de lidar com JSON e a AWS CLI.
Amigável para IA por design: Ferramentas de IA não podem fazer SSH em servidores ou executar sessões interativas da AWS CLI. Mas com o sisu, toda a sua infraestrutura AWS se torna caminhos de arquivo simples que qualquer IA pode ler. Sistemas de arquivos EC2 remotos estão acessíveis em ec2/<instance>/fs/ - permitindo que a IA navegue por /var/log, /etc e qualquer arquivo em suas instâncias sem SSH.
Atualmente suporta S3, SSM, IAM, VPC, Lambda, EC2, ECS, CloudFront, Secrets Manager, Route 53 e CloudWatch Logs.
go install github.com/semonte/sisu@latest
Requer FUSE:
sudo apt install fuse # Ubuntu/Debian
sudo yum install fuse # RHEL/CentOS
sisu
Você está dentro. Sua AWS agora está ao seu alcance:
~/.sisu/mnt/
├── default/ # Perfil AWS
│ ├── global/ # IAM, S3, Route 53 (independente de região)
│ │ ├── iam/
│ │ ├── route53/
│ │ └── s3/
│ ├── us-east-1/ # Serviços regionais
│ │ ├── cloudfront/
│ │ ├── ec2/
│ │ ├── ecs/
│ │ ├── lambda/
│ │ ├── logs/
│ │ ├── secrets/
│ │ ├── ssm/
│ │ └── vpc/
│ └── eu-west-1/
│ └── ...
├── prod/ # Outros perfis de ~/.aws/credentials
└── staging/
Digite exit quando terminar.
# Quem tem acesso de administrador?
grep -l "AdministratorAccess" */global/iam/users/*/policies.json
# Grupos de segurança com SSH aberto
grep -r '"FromPort": 22' */us-east-1/vpc/*/security-groups/
# Funções que o Lambda pode assumir
grep -l "lambda.amazonaws.com" */global/iam/roles/*/info.json
# Segredos no SSM?
grep -r "password" */us-east-1/ssm/
# Funções Lambda com segredos em variáveis de ambiente
grep -r "PASSWORD\|SECRET\|API_KEY" */us-east-1/lambda/*/env.json
# Funções usando runtimes descontinuados
grep -r "python3.8\|nodejs16" */*/lambda/*/config.json
# Instâncias EC2 com IPs públicos
grep -r "PublicIpAddress" */*/ec2/*/info.json
# Encontrar instâncias paradas (desperdiçando dinheiro?)
grep -r '"Name": "stopped"' */*/ec2/*/info.json
# Conectar a uma instância EC2 via SSM (sem chaves SSH necessárias!)
./default/us-east-1/ec2/i-abc123/connect
# Visualizar logs de inicialização do EC2 e mensagens do kernel
cat default/us-east-1/ec2/i-abc123/console.log
# Visualizar todos os segredos
ls */us-east-1/secrets/
# Ler o valor de um segredo
cat default/us-east-1/secrets/myapp/database/value
# Listar todas as zonas DNS
ls */global/route53/
# Visualizar registros DNS de uma zona
cat default/global/route53/example.com/records.json
# Encontrar todos os registros CNAME
grep -r '"Type": "CNAME"' */global/route53/*/records.json
# Procurar erros em logs recentes
grep -i "error" default/us-east-1/logs/aws/lambda/my-function/latest.log
# Visualizar todos os grupos de log
ls */us-east-1/logs/
# Listar streams de log (mostra os 20 mais recentes)
ls default/us-east-1/logs/aws/lambda/my-function/
# Visualizar eventos de um stream específico
cat default/us-east-1/logs/aws/lambda/my-function/2024_01_15_abc123/events.log
# ECS: Navegar por clusters, serviços e tarefas
ls default/us-east-1/ecs/my-cluster/my-service/
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# CloudFront: Visualizar distribuições e funções
ls default/us-east-1/cloudfront/distributions/
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# S3: Verificar políticas de bucket e configurações de acesso
cat default/global/s3/my-bucket/.meta/policy.json
cat default/global/s3/my-bucket/.meta/public-access-block.json
# Comparar funções IAM entre contas
diff prod/global/iam/roles/api/info.json staging/global/iam/roles/api/info.json
# Derivação de grupo de segurança entre regiões
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
# Diferenças de configuração Lambda
diff prod/us-east-1/lambda/my-func/config.json staging/us-east-1/lambda/my-func/config.json
# Pretty print com jq
cat default/global/iam/roles/my-role/info.json | jq '.AssumeRolePolicyDocument'
# Contar suas funções
ls default/global/iam/roles/ | wc -l
# Encontrar recursos sem tags
cat default/us-east-1/vpc/vpc-xxx/info.json | jq 'select(.Tags == null)'
# Listar todos os runtimes Lambda em uso
grep -h "Runtime" */*/lambda/*/config.json | sort | uniq -c
cat default/us-east-1/ssm/myapp/database-url # ler
echo "postgres://prod:5432" > default/us-east-1/ssm/database-url # escrever
vim default/us-east-1/ssm/myapp/config # editar
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 # Iniciar na raiz
sisu --profile prod # Iniciar em prod/
sisu --profile prod --region us-east-1 # Iniciar em prod/us-east-1/
sisu stop # Desmontar
sisu --debug # Log de depuração
Os arquivos de stream de log events.log são transmitidos preguiçosamente da AWS, em vez de serem carregados inteiramente na memória:
cat, grep, head, less# Busca apenas lotes suficientes para encontrar a correspondência
grep "ERROR" .../my-stream/events.log
# Busca apenas o primeiro lote
head -50 .../my-stream/events.log
# Percorra com carregamento sob demanda
less .../my-stream/events.log
# Buscará todos os eventos
cat .../my-stream/events.log | wc -l
Nota: tail não funciona corretamente com arquivos de streaming porque ele busca o final do arquivo, mas o tamanho real do arquivo é desconhecido até que seja totalmente carregado. Use cat ... | tail como solução alternativa.
Cada serviço tem logs diretamente abaixo de seu recurso - sem necessidade de procurar grupos de log:
# Logs da função Lambda
cat default/us-east-1/lambda/my-function/logs/latest.log
# Logs da instância EC2 (procura grupos de log contendo o ID da instância)
cat default/us-east-1/ec2/i-abc123/logs/latest.log
# Logs do serviço ECS
cat default/us-east-1/ecs/my-cluster/my-service/logs/latest.log
# Logs da função CloudFront
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
Todos os logs integrados usam streaming - eles buscam eventos sob demanda conforme você lê.
Navegue por clusters, serviços e tarefas ECS:
ecs/
├── my-cluster/
│ ├── web-service/
│ │ ├── info.json # Configuração do serviço
│ │ ├── logs/
│ │ │ └── latest.log # Streaming de logs do serviço
│ │ └── tasks/
│ │ └── abc123/
│ │ └── info.json # Detalhes da tarefa
│ └── api-service/
│ └── ...
# Listar todos os clusters ECS
ls default/us-east-1/ecs/
# Visualizar configuração do serviço
cat default/us-east-1/ecs/my-cluster/web-service/info.json
# Transmitir logs do serviço
cat default/us-east-1/ecs/my-cluster/web-service/logs/latest.log
# Listar tarefas em execução
ls default/us-east-1/ecs/my-cluster/web-service/tasks/
Navegue por distribuições e funções CloudFront:
cloudfront/
├── distributions/
│ └── E1ABC123/
│ ├── info.json # Configuração da distribuição
│ └── origins.json # Origens com info OAC/OAI
└── functions/
└── my-auth/
├── code.js # Código fonte da função
├── config.json # Configuração da função
└── logs/
└── latest.log # Logs de execução da função
# Listar distribuições
ls default/us-east-1/cloudfront/distributions/
# Verificar configuração de acesso à origem (depurar problemas de acesso S3!)
cat default/us-east-1/cloudfront/distributions/E1ABC123/origins.json
# Visualizar e editar código da função CloudFront
cat default/us-east-1/cloudfront/functions/my-auth/code.js
# Depurar execução da função
cat default/us-east-1/cloudfront/functions/my-auth/logs/latest.log
Cada bucket S3 tem um diretório oculto .meta/ com a configuração do bucket:
# Visualizar política do bucket
cat default/global/s3/my-bucket/.meta/policy.json
# Verificar configurações de bloqueio de acesso público
cat default/global/s3/my-bucket/.meta/public-access-block.json
Útil para depurar problemas de acesso CloudFront-para-S3!
Cada instância EC2 expõe:
ls default/us-east-1/ec2/i-abc123/
# info.json security-groups.json tags.json console.log connect fs/ logs/
Conecte via SSM (sem chaves SSH, sem IP público necessário):
./default/us-east-1/ec2/i-abc123/connect
Requer Session Manager plugin.
Visualizar logs de inicialização e mensagens do kernel:
cat default/us-east-1/ec2/i-abc123/console.log
Navegue pelo sistema de arquivos da instância remotamente (via SSM Run Command):
# Listar arquivos na instância
ls default/us-east-1/ec2/i-abc123/fs/etc/
# Ler arquivos remotos
cat default/us-east-1/ec2/i-abc123/fs/etc/hostname
# Procurar em logs remotos
grep ERROR default/us-east-1/ec2/i-abc123/fs/var/log/syslog
# Comparar configurações entre instâncias
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
Sem necessidade de chaves SSH ou portas abertas - usa SSM Run Command internamente.
| Ferramenta | O que faz |
|---|---|
| fzf | Buscador fuzzy com pré-visualização |
| jq | Consulta/transformação JSON |
| difftastic | Diff estrutural (entende JSON) |
# Navegar e pré-visualizar qualquer recurso interativamente
find */global/iam/roles -name "info.json" | fzf --preview 'jq . {}'
# Encontrar funções Lambda com muita memória
jq -r 'select(.MemorySize > 512) | .FunctionName' */us-east-1/lambda/*/config.json
# Comparar config de produção vs staging
difft prod/us-east-1/lambda/api/config.json staging/us-east-1/lambda/api/config.json
Como são apenas arquivos, as ferramentas de IA podem ler e analisar sua AWS diretamente:
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: O serviço ECS está falhando com "No Container Instances were found in your cluster"
Usando sisu para diagnosticar sem 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 raiz encontrada: A instância EC2 usa a AMI Amazon Linux 2 Minimal em vez da AMI otimizada para ECS. A AMI Minimal tem pacotes ECS instalados, mas o serviço do agente não está habilitado por padrão.
Correção: Use a AMI otimizada para ECS, ou adicione systemctl enable --now ecs aos dados do usuário.
Toda essa depuração foi feita pela IA Claude navegando pelo sistema de arquivos através do sisu - sem necessidade de SSH manual!
MIT
| Serviço | Leitura | Escrita | Exclusão |
|---|
| S3 (objetos, políticas de bucket, configurações de acesso) | ✓ | ✓ | ✓ |
| Armazenamento de Parâmetros SSM | ✓ | ✓ | ✓ |
| IAM (usuários, funções, políticas, grupos) | ✓ | - | - |
| VPC (sub-redes, grupos de segurança, rotas) | ✓ | - | - |
| Lambda (config, política, variáveis de ambiente, logs) | ✓ | - | - |
| EC2 (instâncias, grupos de segurança, tags, logs, fs remoto) | ✓ | - | - |
| ECS (clusters, serviços, tarefas, logs) | ✓ | - | - |
| CloudFront (distribuições, funções, logs) | ✓ | - | - |
| Secrets Manager | ✓ | - | - |
| Route 53 (zonas, registros) | ✓ | - | - |
| CloudWatch Logs | ✓ | - | - |