Skip to content

Analysis capabilities

An “analysis” in Infrawise means: connect to your configured services using read-only API calls, extract resource metadata into an in-memory graph, then run 27 rule-based analyzers against that graph. Each analyzer checks for a specific misconfiguration, missing resource, or deviation from operational best practice. Results are classified as high, medium, or low severity and surfaced as findings with specific recommendations.

Your AI assistant can query these findings via MCP tools like get_infra_overview and get_graph_summary, or ask for function-level analysis with analyze_function. See the MCP tools reference for the full tool list.

SeverityMeaning
highLikely to cause data loss, outage, or security exposure. Fix before shipping.
mediumOperational risk or reliability gap that should be addressed soon.
lowBest-practice deviation with low immediate impact. Worth fixing in a planned cleanup.

Use the --severity flag on infrawise analyze or infrawise start to filter findings to a minimum level. The analysis.severity key in infrawise.yaml sets the default.

ServiceWhat’s checkedWhy it matters
DynamoDBMissing GSIs for common query patternsWithout a GSI, queries on non-key attributes fall back to full table scans — high cost and high latency at scale.
DynamoDBIaC drift — live table definition differs from Terraform/CloudFormation/CDK sourceDrift means your IaC no longer matches production; the next terraform apply or stack update could overwrite manual changes or fail unexpectedly.
SQSMissing dead-letter queues (DLQs)Without a DLQ, failed messages are silently discarded after the maximum receive count — you lose visibility into processing errors.
LambdaDefault 128 MB memoryThe 128 MB default is almost always too low for production workloads; it also limits CPU allocation, increasing execution time and cost.
LambdaTimeout above 300 secondsTimeouts above 300s indicate the function may be doing work that belongs in a background job; it also increases the blast radius of runaway executions.
Secrets ManagerRotation disabledSecrets that never rotate are a persistent credential-exposure risk; rotation should be enabled and tested for all production secrets.
CloudWatch LogsMissing retention policyLog groups with no retention policy grow indefinitely, increasing storage costs and making incident investigation harder.
S3Missing versioningWithout versioning, accidental deletes or overwrites are unrecoverable.
S3Public access not blockedA bucket with public access not explicitly blocked can expose data if a policy or ACL is misconfigured.
S3Missing encryptionBuckets without server-side encryption store objects in plaintext — a compliance and security risk for sensitive data.
DatabaseWhat’s checkedWhy it matters
PostgreSQLMissing indexes on common filter columnsQueries that filter on unindexed columns require full sequential scans — slow at scale and expensive on large tables.
MySQLMissing indexes, full table scan riskSame as PostgreSQL: missing indexes on filter columns mean every query scans the full table rather than walking an index.
MongoDBMissing indexes, collection scansMongoDB collection scans read every document in the collection for each query — performance degrades linearly as the collection grows.

Infrawise detects missing indexes by inspecting existing index definitions against the query patterns it observes in your connected Lambda function source code via AST scanning. It never reads actual data rows or documents.

SourceWhat’s checkedWhy it matters
TerraformDrift between .tf definitions and live AWS stateLive resources that differ from their Terraform definitions will be overwritten or recreated on the next terraform apply.
CloudFormationDrift between template definitions and live AWS stateSame risk: stack updates will attempt to reconcile live state back to the template, potentially destroying manual changes.
CDKDrift between CDK stack files and live AWS stateCDK synthesizes to CloudFormation; drift in CDK source carries the same reconciliation risk on the next cdk deploy.

IaC drift is when the live state of an AWS resource — as it actually exists in your account — differs from how it is defined in your infrastructure-as-code source (Terraform, CloudFormation, or CDK). Drift happens when someone manually changes a resource in the AWS console or via the CLI without updating the IaC source. Infrawise compares the two and flags the differences so you can reconcile them before the next deployment overwrites the manual change.

How does Infrawise detect missing indexes?

Section titled “How does Infrawise detect missing indexes?”

For DynamoDB, Infrawise reads the table’s GSI list from the AWS API and cross-references it against the access patterns it finds in your Lambda source code via AST scanning. For PostgreSQL, MySQL, and MongoDB, Infrawise reads the schema metadata (column definitions and existing index definitions) from each connected database. It never reads row data or executes queries against your data.

How do I suppress a finding I don’t care about?

Section titled “How do I suppress a finding I don’t care about?”

Currently, Infrawise does not have a built-in suppression list. The recommended approach is to use --severity high or analysis.severity: high in infrawise.yaml to filter out lower-severity findings you have consciously accepted. Per-rule suppression is on the roadmap — contributions welcome at github.com/Sidd27/infrawise.