Skip to main content

v1.7.0 — Multi-Account + Real-time Streaming

· 4 min read

A major release featuring multi-account support (PR #6) and real-time Bedrock streaming as core features. Includes 25 security fixes.

Key Changes

Multi-Account (PR #6) · Real-time Streaming · Cache Pre-warming · 25 Security Fixes · Customer Logo Customization

Multi-Account Architecture (PR #6)

Manage multiple AWS accounts from a single dashboard using the Steampipe Aggregator pattern. Add accounts by simply changing the accounts[] array in data/config.json with no code changes required.

ComponentFileRole
AccountContextsrc/components/Account state management + useAccount() hook
AccountSelectorsrc/components/Account switching dropdown (ARIA, keyboard support)
AccountBadgesrc/components/Per-account color dot + alias display
buildSearchPath()src/lib/steampipe.tsReturns public, aws_{id}, kubernetes, trivy
runCostQueriesPerAccount()src/lib/steampipe.tsRuns Cost queries per account then merges with account_id tags
/accounts pagesrc/app/accounts/Account add/remove/test UI
cross_account.pyagent/STS AssumeRole (credential caching, ExternalId, audit logging)
Setup Scriptscripts/11-setup-multi-account.shAggregator + cross-account IAM role automation
Scope of Changes

Added account_id column to all 25 SQL queries and applied useAccountContext() to all 35 pages. DataTable auto-adds an Account column when isMultiAccount && data[0].account_id is detected.

config.json Structure

{
"accounts": [
{
"accountId": "111111111111",
"alias": "Host",
"connectionName": "aws_111111111111",
"region": "ap-northeast-2",
"isHost": true,
"features": {
"costEnabled": true,
"eksEnabled": true,
"k8sEnabled": true
}
},
{
"accountId": "222222222222",
"alias": "Staging",
"connectionName": "aws_222222222222",
"region": "ap-northeast-2",
"isHost": false,
"features": {
"costEnabled": false,
"eksEnabled": false,
"k8sEnabled": false
}
}
]
}

Security Fixes (25 Items)

25 security issues were fixed, classified into 3 severity levels.

CRITICAL Fixes

Cross-account AssumeRole now requires audit logging and ExternalId to prevent privilege escalation and Confused Deputy attacks.

SeverityCountKey Items
CRITICAL2AssumeRole audit logging, ExternalId enforcement
HIGH5Rate Limiting (5 req/min), input validation hardening, execFileSync security
MEDIUM18Pool exhaustion prevention, connection destruction, error message filtering

CRITICAL Details:

IssueRiskFix
No AssumeRole auditCross-account access untraceableAll AssumeRole calls logged in cross_account.py
No ExternalIdConfused Deputy attack possibleExternalId added as required parameter for AssumeRole

HIGH Details:

IssueRiskFix
No Rate LimitingAPI abuse, cost explosion5 req/min limit applied to AI route
Insufficient input validationSQL Injection possibleQuery parameter whitelist validation
execFileSync usageCommand InjectionConverted to argument array approach

Real-time Bedrock Streaming

Bedrock responses are transmitted in real time, chunk by chunk.

ItemBefore (v1.6.0)After (v1.7.0)
Bedrock ResponseFull text at onceChunk-based real-time
APIInvokeModelCommandInvokeModelWithResponseStreamCommand
Delivery Methoddone event after completionContinuous chunk event delivery
ClientFull text renderingReal-time rendering with streamingContent state
Streaming Helper

The streamBedrockToSSE() function (src/app/api/ai/route.ts) reads chunks from the Bedrock stream and converts them to SSE chunk events.

Cache Pre-warming

Background cache pre-warming introduced to improve dashboard loading speed.

ItemDescription
QueriesDashboard 23 + Monitoring 10 = 33
Refresh Cycle4 minutes (before 5-min cache TTL expiration)
InitializationensureCacheWarmerStarted() — lazy-init pattern
EffectCache hit on first page load for instant response

Customer Logo Customization

Set a customer logo in data/config.json and it reflects within 1 minute without server restart.

{
"customerLogo": "/logos/customer-logo.png",
"customerName": "Customer Corp",
"customerLogoBg": "#ffffff"
}
  • Place logo files in the public/logos/ directory
  • Brand switching via config change only — no code changes required

Version Comparison

Itemv1.6.0v1.7.0Change
Pages3536+accounts
Components1517+AccountBadge, AccountSelector
ADRs78+multi-account
Deploy Scripts1011+Step 11
SQL Queries2525+account_id column added
Security Fixes-25 itemsCRITICAL 2, HIGH 5, MEDIUM 18