docs(rfcs): 0001 signed decision receipts for ABCA via AgentCore Gateway#40
docs(rfcs): 0001 signed decision receipts for ABCA via AgentCore Gateway#40tomjwxf wants to merge 4 commits intoaws-samples:mainfrom
Conversation
Follow-up to closed aws-samples#39. Per @krokoko's review feedback, this lands as an RFC / design document rather than an integration guide. Key properties: - The signing identity is a separate Lambda (Receipt Signer), outside the agent runtime's trust boundary. A compromised agent container cannot forge, alter, or suppress receipts. - Cedar policy evaluation stays native to AgentCore Gateway's built-in policy engine. This RFC does not reinvent Cedar evaluation; it adds a signed-receipt output alongside the existing CloudWatch log. - Signing key lives in KMS (Ed25519), scoped to the Receipt Signer IAM role only, with explicit deny on the agent runtime role. - Receipt chain is tamper-evident as a whole (hash-chained, JCS canonical, Ed25519 signed). Verifiable offline with @veritasacta/verify, no AWS credentials required. - Receipt format is tool-agnostic (IETF draft-farley-acta-signed-receipts, four independent conformant implementations). - CDK-managed infra: KMS key, S3 bucket with explicit denies, CloudTrail data events on kms:Sign for second-layer audit. Sections: 1. Problem statement 2. What AgentCore Gateway already provides (policy engine native) 3. Goals and non-goals 4. Trust model (explicit entity + boundary table) 5. Receipt contract (wire format + three invariants) 6. Reference implementation: AgentCore Gateway + Receipt Signer Lambda 7. CDK infrastructure (KMS, S3, Lambda, CloudTrail) 8. Verification flow (no AWS credentials required) 9. Compromise analysis (5 scenarios walked through) 10. Open questions (7 ABCA-specific unknowns) 11. References 12. Conformant signing implementations Appendix A: how this differs from the closed aws-samples#39 guide Explicitly acknowledges the critique @krokoko raised on aws-samples#39 that led to this rewrite. Author disclosure at the top of the document. This RFC references live AgentCore Gateway documentation at https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy-getting-started.html provided by @krokoko. The open questions in Section 10 are the places where AgentCore team guidance is needed before a reference- implementation PR can follow.
|
Hi @tomjwxf, thank you for the follow-up RFC. This is a significant improvement over #39 — the trust model is explicit, the signer is outside the agent runtime, the compromise analysis is thorough, and the author disclosure is upfront. I appreciate the work that went into this. However, I have a fundamental concern with the trigger mechanism, and I think it needs to be reworked before we can move forward. The EventBridge trigger is the wrong pattern here. In my review on #39, I proposed interceptor Lambdas — synchronous, in-path, part of the gateway request/response lifecycle: Agent → Gateway → REQUEST Interceptor (sign decision receipt) → Tool Target → RESPONSE Interceptor (sign outcome receipt) → Agent The RFC instead proposes an asynchronous EventBridge-triggered sidecar that reacts to policy decision events after the fact. A few problems with that:
What I'd like to see:
The rest of the RFC is solid — the receipt contract (Section 5), trust model (Section 4), CDK patterns for KMS/S3/IAM, and compromise analysis (Section 9) can stay largely as-is. It's the trigger mechanism in Sections 6 and 7.3 that needs to be rebuilt around what AgentCore actually supports. Minor notes:
Happy to discuss further. The direction is right, the trigger mechanism just needs to match what we actually have available and what gives us the strongest guarantees. Thank you! |
|
@krokoko agreed on all. On the trigger mechanism: I contradicted my own #39 position without a technical reason for doing so. The REQUEST interceptor signs the decision as the authority. EventBridge would react to it as a post-hoc recording. Different integrity claims, and the interceptor version is materially stronger on ordering, delivery, and freshness. Section 7.3 also built around an event source ( Revised architecture for the next push:
Receipt contract (Section 5), trust model (Section 4), compromise analysis (Section 9), and KMS/S3/IAM CDK patterns stay as-is. Only Sections 6 and 7.3 rebuild. Minor points, all accepted:
One question before I push: would it be useful to validate the interceptor-Lambda wiring against a working AgentCore deployment first so the CDK snippets match what actually ships, or is the doc-level spec enough for this round? Revised RFC this week. Thanks! |
Follow-up to closed #39 per @krokoko's review feedback. Lands as an RFC / design document rather than an integration guide, with the signing path placed explicitly outside the agent runtime's trust boundary.
Author disclosure (not hidden this time): I am the author of the receipt format specification (
draft-farley-acta-signed-receipts) and of one of the four conformant signing implementations referenced in the RFC. The receipt contract in Section 5 is a format, not a vendor choice; any conformant implementation is interchangeable.What this RFC does
kms:Sign. All reviewable TypeScript.What this RFC deliberately does NOT do
agentcore add policy-engine --attach-mode ENFORCEworkflow stays exactly as documented. Cedar evaluation is not reimplemented.agent/. The signing path is additive infrastructure, not agent changes.How this addresses the review on #39
@krokoko raised four points; this RFC addresses each:
What I need from the reviewers
Seven open questions in Section 10 that require ABCA-specific or AgentCore-team guidance before a reference-implementation PR can follow. The most important:
detailType? If not, is CloudWatch Logs subscription on the policy-engine log group the supported fallback?The other four are in the RFC.
Files
docs/rfcs/0001-signed-decision-receipts.md(new;docs/rfcs/directory also new)Verification
kms.KeySpec.ED25519,cloudtrail.Trail,events.Rule,lambda.Function)Notes