Prepared 2026-09-26 · evidence pack 20260921T044752Z
Status: triaged and signed.
Automated quality checks passed. All 4 finding(s) carry a recorded triage decision; 1 was set aside. Reviewed and signed by Juhi Singh on 26 September 2026.
Summary
3 finding(s) for Example client: 2 low, 1 info.
No recoverable spend was identified, and no AI service or accelerated compute spend was observed in the window. The cost half of this assessment is therefore empty — which is a result, not a gap: there is nothing here to optimise. The findings below are governance and posture observations.
The finding to read first is No trail selects Bedrock data-plane events (agents, knowledge bases, flows, guardrails). It carries no cost at all, which is precisely why a cost-optimisation tool would not have raised it.
Scope and method
- Account
111122223333- Window
- 2026-06-23 to 2026-09-21 (90 days, daily granularity)
- Regions examined
- ap-south-1, us-east-1
- Evidence records
- 506
- Collector
- finsecra-collector 0.1.0
- Engagement
example-client; evidence retained until 2026-12-20, then deleted- Framework mapping
- Not included. Findings are stated as cost and posture observations. No claim is made that any of them maps to a clause of ISO/IEC 42001 or any other standard.
- Narrative drafting
- None. No model processed any of this data.
Collection was read-only and required nothing to be installed in the environment. Every API call made is listed in audit.jsonl alongside this report, and the permissions requested are documented in docs/collector-access.md.
What could not be read
A check that did not run is not a check that passed. The following sources were unavailable, so any finding they would have produced is absent from this report rather than negative.
| Source | Reason | Detail |
|---|---|---|
ce:GetSavingsPlansUtilization | not_enabled | The service is not enabled, or holds no data for this scope. (DataUnavailableException) |
cost-optimization-hub:ListRecommendations | not_enabled | The service is not enabled, or holds no data for this scope. (AccessDeniedException) |
Findings
1. No trail selects Bedrock data-plane events (agents, knowledge bases, flows, guardrails)
2 trail configuration(s) were examined and none selects a Bedrock data-event resource type. Model invocations themselves — InvokeModel and Converse — are management events and are recorded by default; what is missing is the record of agent invocations, knowledge-base retrievals, flow runs and guardrail evaluations, which CloudTrail treats as data events and does not log unless a selector names them. Whether the account uses those features is not established by billing data alone; if it does, that use is unlogged.
Recommendation
If Bedrock agents, knowledge bases, flows or guardrails are in use, add advanced event selectors for AWS::Bedrock::AgentAlias, AWS::Bedrock::KnowledgeBase, AWS::Bedrock::FlowAlias and AWS::Bedrock::Guardrail to a trail covering the regions where Bedrock is permitted. Data events are billed per event, so scope the selectors rather than enabling everything.
Evidence
- cloudtrail:GetEventSelectors → /advanced_event_selectors — trail org-trail: no Bedrock data events (record 91852a2e65f99827fbb553ee)
- cloudtrail:GetEventSelectors → /advanced_event_selectors — trail org-trail: no Bedrock data events (record 4baf2f020332165498b2ceaf)
2. Bedrock model invocation logging is not configured (no Bedrock spend in the window)
Model invocation logging is switched off in ap-south-1, us-east-1. No Bedrock spend and no invocations were observed in the window, so this is a posture gap rather than an active blind spot today. Without it, a prompt-injection incident, a data leak through a prompt, or a disputed model output cannot be investigated after the fact.
Recommendation
Enable model invocation logging to CloudWatch Logs or S3 in every region where Bedrock is permitted, with a retention period matching the organisation’s incident investigation window. Confirm the destination is access-controlled, since prompts frequently contain sensitive data.
Evidence
- bedrock:GetModelInvocationLoggingConfiguration → /configured — model invocation logging: not configured (record eba9096a899d38fb0d684e2a)
- bedrock:GetModelInvocationLoggingConfiguration → /configured — model invocation logging: not configured (record 2fc0219e352117b4e2a526b7)
Affected
ap-south-1, us-east-1
3. 28 cost anomalies below the materiality threshold, totalling 75.70 USD
AWS Cost Anomaly Detection flagged 28 anomalies in the window, every one below this engagement’s materiality threshold of 50 USD. They total 75.70 USD and the largest is 28.74 USD, on Amazon Relational Database Service. Across 11 service(s): AWS Amplify, AWS Secrets Manager, AWS WAF, Amazon ElastiCache, Amazon Elastic Block Store, Amazon Elastic Compute Cloud - Compute and 5 more. Listed together rather than one by one: individually none of them is worth a practitioner’s time, and collectively they say something different — that the monitor is tuned below the level anyone acts on.
Recommendation
Raise the anomaly monitor’s threshold so that what it reports is what someone would act on. A monitor that fires on sub-dollar variance trains people to ignore it, which costs more than the variance does.
Evidence
- ce:GetAnomalies → /Impact/TotalImpact — Amazon Relational Database Service: 28.74 USD excess (record d903605aca79d8d79e8350b7)
- ce:GetAnomalies → /Impact/TotalImpact — Amazon Relational Database Service: 8.91 USD excess (record c001ae12561a7813b122685c)
- ce:GetAnomalies → /Impact/TotalImpact — Amazon Virtual Private Cloud: 8.38 USD excess (record 62c1ccd13ceeebc9000fcb92)
- ce:GetAnomalies → /Impact/TotalImpact — Amazon Elastic Block Store: 4.47 USD excess (record c5d6d20c06e08eda9d3ee02c)
- ce:GetAnomalies → /Impact/TotalImpact — Amazon Relational Database Service: 4.06 USD excess (record 72aeea964f724246326fb44b)
Affected
AWS Amplify, AWS Secrets Manager, AWS WAF, Amazon ElastiCache, Amazon Elastic Block Store, Amazon Elastic Compute Cloud - Compute, Amazon Elastic Container Service, Amazon Elastic Load Balancing, Amazon Relational Database Service, Amazon Virtual Private Cloud and 1 more
Set aside at triage
Findings the detectors produced that the practitioner decided do not belong in this deliverable, with the reason. They are listed so the decision is visible rather than silent.
| Finding | Decision | Reviewer | Rationale |
|---|---|---|---|
| Savings Plans cover only 0.0% of eligible compute spend | deferred | Juhi Singh | About 56 USD a month of eligible compute is on demand; size a commitment to the steady floor after one more month of data rather than to this window. |
Quality gate
All automated checks passed.
Review and sign-off
This assessment was produced with an agentic delivery system and reviewed by a person. Findings were generated deterministically from collected evidence; every claim above cites the artifact it rests on. Triage, materiality judgments, and any statement about regulatory obligation are the practitioner’s, not the system’s.
Triage decisions recorded by: Juhi Singh (see triage.json beside this report for each decision and its rationale).
Prepared for: Example client
| Reviewed and signed by | Juhi Singh |
|---|---|
| Role | Founder & Principal Consultant, FINSECRA |
| Date | 26 September 2026 |