Uma CLI para visualizar e auditar custos na AWS (FinOps), com suporte a múltiplos perfis, combinação por conta, exportação de relatórios (CSV/JSON/PDF), análise de tendências e auditoria de otimizações (NAT Gateways, LBs ociosos, recursos sem uso, S3 Lifecycle, SP/RI Coverage e mais).
- Recursos (Features)
- Pré-requisitos
- Instalação e Build
- Uso Rápido
- Flags da CLI
- Arquivo de Configuração (TOML/YAML/JSON)
- Casos de Uso (Exemplos Práticos)
- Relatórios e Exportação
- Fluxo Interno e Arquitetura
- Permissões AWS Necessárias
- Solução de Problemas (Troubleshooting)
- Observações de Desempenho
- Segurança
- Screenshots
- Licença e Créditos
- Dashboard de Custos:
- Custo do período anterior vs. atual e variação percentual.
- Custos por serviço, com detalhamento opcional (
--breakdown-costs). - Sumário de instâncias EC2 por estado.
- Status de Budgets (limite, atual, forecast).
- Análise de Tendências (
--trend): Gráfico de custos dos últimos 6 meses. - Auditoria Abrangente (
--full-audit):- Auditoria Principal (
--audit):- NAT Gateways com alto custo.
- Load Balancers ociosos.
- Volumes EBS e EIPs sem uso.
- EC2 paradas.
- Recursos sem tags (EC2, RDS, Lambda).
- VPC Endpoints (Interface) sem uso.
- Auditoria de Data Transfer (
--transfer):- Detalhamento de custos por categoria (Internet, Inter-Region, Cross-AZ, NAT).
- Identificação dos principais serviços e tipos de uso que geram custos.
- Auditoria de CloudWatch Logs (
--logs-audit):- Identificação de Log Groups sem política de retenção (
Never Expire). - Ordenação por tamanho para priorizar ações.
- Identificação de Log Groups sem política de retenção (
- Auditoria de S3 (
--s3-audit):- Buckets sem política de Lifecycle.
- Buckets com versionamento ativo sem regra para versões antigas.
- Checagem de criptografia padrão.
- Análise de configuração de acesso público (Public Access Block e heurísticas).
- Auditoria de Compromissos (
--commitments):- Análise de cobertura e utilização de Savings Plans (SP).
- Análise de cobertura e utilização de Reserved Instances (RI).
- Auditoria Principal (
- Exportação Flexível: CSV, JSON e PDF para todos os relatórios.
- Configuração Simplificada: Suporte a arquivos de configuração TOML, YAML ou JSON.
- Interface Rica no Terminal: Banner, barras de progresso paralelas (
pterm), tabelas e gráficos.
- Go 1.24+ (recomendado).
- AWS CLI configurado com credenciais válidas.
- Cost Explorer habilitado na conta AWS.
- Permissões de IAM adequadas (ver abaixo).
Clone o repositório:
git clone https://github.com/diillson/aws-finops-dashboard-go.git
cd aws-finops-dashboard-goO projeto inclui um Makefile que automatiza a injeção de informações de versão a partir do Git.
Build de Produção:
make buildO binário será gerado em ./bin/aws-finops.
Build de Desenvolvimento (rápido, sem ldflags):
make build-devSe preferir, você pode compilar manualmente. Use -ldflags para embutir a versão correta.
Linux/macOS:
VERSION=$(git describe --tags --abbrev=0)
COMMIT=$(git rev-parse --short HEAD)
BUILD_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
go build -ldflags "-s -w \
-X github.com/diillson/aws-finops-dashboard-go/pkg/version.Version=${VERSION} \
-X github.com/diillson/aws-finops-dashboard-go/pkg/version.Commit=${COMMIT} \
-X github.com/diillson/aws-finops-dashboard-go/pkg/version.BuildTime=${BUILD_TIME}" \
-o bin/aws-finops ./cmd/aws-finops# Ajuda e versão
./bin/aws-finops --help
./bin/aws-finops --version
# Dashboard de custos para um perfil específico
./bin/aws-finops -p meu-perfil-prod
# Auditoria completa para todas as contas, com exportação
./bin/aws-finops --all --combine --full-audit -n full-audit-$(date +%Y%m%d) -y pdf -y json -d ./reports
# Análise de tendência de custos dos últimos 6 meses
./bin/aws-finops -p meu-perfil-prod --trend
# Auditoria específica de S3
./bin/aws-finops -p meu-perfil-prod --s3-audit-C, --config-file string Caminho do arquivo de configuração
-p, --profiles strings Perfis AWS (separados por vírgula)
-r, --regions strings Regiões AWS
-a, --all Usa todos os perfis disponíveis
-c, --combine Combina perfis da mesma conta
-n, --report-name string Nome base do relatório
-y, --report-type strings Tipos: csv, json, pdf
-d, --dir string Diretório de saída
-t, --time-range int Intervalo em dias (padrão: mês corrente)
-g, --tag strings Filtro por tag (ex: Team=DevOps)
--trend Análise de tendência (6 meses)
--audit Auditoria principal (recursos ociosos/sem tag)
--transfer Auditoria de custos de Data Transfer
--logs-audit Auditoria de retenção de CloudWatch Logs
--s3-audit Auditoria de S3 (Lifecycle, Segurança)
--commitments Auditoria de Savings Plans e RIs
--full-audit Executa todas as auditorias em sequência
--breakdown-costs Detalhamento de custos (usage-type)
--version Mostra a versão
--help Ajuda
Flags de linha de comando sobrescrevem as configurações do arquivo de configuração.
Você pode centralizar suas configurações em um arquivo para facilitar o uso.
Exemplo de config.toml:
profiles = ["production", "development"]
regions = ["us-east-1", "us-west-2"]
combine = true
report_name = "aws-finops-monthly"
report_type = ["pdf", "json"]
dir = "/home/user/reports/aws"
time_range = 30
tag = ["Environment=Production"]YAML
profiles:
- production
- development
- data-warehouse
regions:
- us-east-1
- us-west-2
- eu-central-1
combine: true
report_name: aws-finops-monthly
report_type: [csv, pdf]
dir: /home/user/reports/aws
time_range: 30
tag: ["Environment=Production", "Department=IT"]
audit: false
trend: falseJSON
{
"profiles": ["production", "development", "data-warehouse"],
"regions": ["us-east-1", "us-west-2", "eu-central-1"],
"combine": true,
"report_name": "aws-finops-monthly",
"report_type": ["csv", "pdf"],
"dir": "/home/user/reports/aws",
"time_range": 30,
"tag": ["Environment=Production", "Department=IT"],
"audit": false,
"trend": false
}Uso:
./bin/aws-finops --config-file config.toml --full-auditGerar um relatório de auditoria completo e abrangente para todas as contas:
./bin/aws-finops --all --combine --full-audit \
-n full-audit-report-$(date +%Y%m%d) \
-y pdf -y json \
-d ./reports/auditsAnalisar a cobertura de Savings Plans e RIs nos últimos 60 dias:
./bin/aws-finops -p payer-account --commitments -t 60Investigar custos de transferência de dados para a equipe de "Payments":
./bin/aws-finops -p prod --transfer -g Team=PaymentsVerificar a higiene dos buckets S3 em todas as contas:
./bin/aws-finops --all --s3-audit-
Formatos Suportados:
csv,json,pdf -
Relatório de Auditoria Completa (
--full-audit):- JSON: Um único arquivo com a estrutura aninhada de todos os relatórios.
- PDF: Um único documento com uma página de rosto e “capítulos” para cada auditoria.
- CSV: Um pacote de arquivos (
..._main.csv,..._transfer.csv, etc.), um para cada tipo de auditoria.
O projeto segue a Arquitetura Hexagonal (Ports & Adapters):
-
Domain: Entidades de negócio e interfaces (ports).
-
Application: Casos de uso que orquestram a lógica.
-
Adapters:
- Driven (Saída): AWS SDK, exportação de arquivos, leitura de configuração.
- Driving (Entrada): CLI (Cobra).
Para que a ferramenta funcione com todos os recursos, a role ou usuário IAM precisa das seguintes permissões de leitura:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BasePermissions",
"Effect": "Allow",
"Action": [
"sts:GetCallerIdentity",
"ec2:DescribeRegions"
],
"Resource": "*"
},
{
"Sid": "CostExplorerAndBudgets",
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetReservationCoverage",
"ce:GetReservationUtilization",
"ce:GetSavingsPlansCoverage",
"ce:GetSavingsPlansUtilization",
"budgets:DescribeBudgets"
],
"Resource": "*"
},
{
"Sid": "ResourceInventoryAndAudit",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeVolumes",
"ec2:DescribeAddresses",
"ec2:DescribeVpcEndpoints",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"rds:DescribeDBInstances",
"lambda:ListFunctions",
"lambda:ListTags"
],
"Resource": "*"
},
{
"Sid": "S3Audit",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketLifecycleConfiguration",
"s3:ListBucketIntelligentTieringConfigurations",
"s3:GetBucketEncryption",
"s3:GetPublicAccessBlock",
"s3:GetBucketAcl",
"s3:GetBucketPolicy"
],
"Resource": "*"
},
{
"Sid": "CloudWatchLogsAudit",
"Effect": "Allow",
"Action": [
"logs:DescribeLogGroups"
],
"Resource": "*"
}
]
}No AWS profiles found: Configure a AWS CLI comaws configure --profile <nome>.credential validation failed: Renove suas credenciais (ex:aws sso login).DataUnavailableException: Comum em contas-membro para relatórios de SP/RI. Execute na conta payer para obter dados completos.AccessDenied: Verifique se a política IAM possui todas as permissões listadas acima.- Versão incorreta: Use
make buildpara garantir que a versão do Git seja embutida corretamente.
- Processamento Concorrente: Utiliza um pool de workers para auditar múltiplos perfis e regiões em paralelo.
- Feedback Visual: Barras de progresso paralelas (
pterm.MultiPrinter) fornecem feedback claro sem poluir o terminal. - Cache de Clientes AWS: Clientes do SDK são cacheados para reutilização, reduzindo a sobrecarga de inicialização.
--combine: Reduz chamadas de API redundantes para perfis que compartilham a mesma conta AWS.
- A ferramenta não armazena nem faz log de credenciais.
- Utiliza os perfis e mecanismos de autenticação padrão da AWS CLI.
- A política IAM recomendada segue o princípio de menor privilégio (somente leitura).
Inspirado em:
- ravikiranvm/aws-finops-dashboard (Python)
Licença: MIT
Port para Go e melhorias:
Contribuições são bem-vindas — abra issues ou PRs com sugestões 🚀


