Build1 distinct publisher3 min readPublished
A grant of InvokeAgentRuntime will not fetch an A2A agent card on Bedrock AgentCore. And the card a Strands agent publishes there runs 2,109 bytes, most of it the agent's own instructions.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The denial is the part that costs a working day. A caller holding InvokeAgentRuntime and nothing else reaches the runtime, signs cleanly, and is still refused on the card, and the dev.to write-up is explicit that the refusal surfaces nowhere near auth: at the client it reads as a transport or protocol fault [4][6]. Rewriting the resource block will not save you, because the missing piece is the action; once `bedrock-agentcore:GetAgentCard` is present, the runtime ARN plus its children is sufficient and no wildcard resource is needed [5]. One layer down in the signing sits the same species of trap. The runtime session header is required on the card fetch as well as on calls, at least 33 characters, and it has to fall inside the SigV4 signature, so it must be set before signing [11]. Both problems argue for the same shape: credentials and headers belong on the HTTP client, not on the single request you thought needed them [6].
Now the address. AgentCore has no per-agent hostname; the card hangs off the URL-escaped runtime ARN, under the same `/invocations/` path the calls use [8], while Cloud Run and Container Apps serve it from the well-known path on their own host [9]. Any tracer that identifies discovery by path prefix therefore files every AWS card fetch as an invocation. The author's own tracer did precisely that until the rule was changed to match on suffix [10]. Whatever you have keyed to that classification, spend attribution or per-call audit, inherits the mistake.
The byte counts are where the story stops being about IAM. The same logical agent published 528 bytes on Cloud Run, 1,924 on Container Apps and 2,109 on AgentCore [12], which the author calls four times the Cloud Run card and which works out to 3.99 times [15][2]. The skills entry accounts for most of the difference: the description is the agent's entire system prompt, 1,258 characters, and the tags name the model behind it as `us.amazon.nova-micro-v1:0` [17]. That is 59.6 per cent of the AWS card [1]. Strip the prompt out and the remaining 851 bytes are still 1.6 times the whole Cloud Run document [3], so this is not one bloated field on an otherwise identical card.
The author is careful about blame: the prompt-as-description behaviour is what the a2a-sdk card builder does with a Strands agent's system prompt, not something AgentCore invented [18]. The leak travels with the SDK, so it is portable to any host that builds cards the same way.
One caveat on the evidence. This is a single run of three agents on 2026-08-25, 3 of 3 cards in 17,660 milliseconds, an average of 5.9 seconds a fetch [3][12][4]. The tool logged one error against the smallest card, the Cloud Run one it labelled protocol 1.0, and none against the two it labelled hybrid, with two warnings each [13]. Nothing in the measurement path invoked a model or spent a token [2].
Ranked by verification strength, evidence, and original report placement.
AgentCore is the only one of the three clouds tested that makes discovery separately grantable.
The fetch run returned 3 of 3 cards in 17,660 ms: gcp 200 at 528 bytes, aws 200 at 2,109 bytes, azure 200 at 1,924 bytes.
The run output labelled the Cloud Run card protocol 1.0 and the AWS and Azure cards hybrid, and recorded 1 error against gcp, 0 against aws and 0 against azure, with 2 warnings each.
The author states this is not a bug in AgentCore but what the a2a-sdk card builder does with a Strands agent's system prompt.
A dev.to article walks through the A2A agent card a Strands agent publishes on Amazon Bedrock AgentCore Runtime and compares it field by field with the same agent on Google Cloud Run and Azure Container Apps.
The project fetches the card from every agent in a mesh, stores the exact bytes each server sent and compares fields side by side; it never invokes anything, and there is no model, prompt or token spend in the measurement path.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
First-hand artifacts, one author, one run
The claims are backed by unusually concrete primary material for a blog post: the working IAM policy, the escaped-ARN card URL, raw CLI run output with per-leg status codes and byte counts, the full card JSON, and a link to the code. That supports the mechanical findings well. It is still a single publisher, a single self-instrumented mesh and a single measurement date, with no vendor documentation, no replication and no independent corroboration, and the article text in the cluster is truncated before its interoperability conclusion.
One author's demo mesh
The only observed usage is the author's own three-cloud test mesh and one discovery run of their own tooling. There are no third-party deployments, no user counts, no downloads and no organisational usage disclosures in the supplied material, so adoption evidence is real but minimal.
Mostly aligned; superlatives outrun the sample
The headline and dek are narrow and match the artifacts: a second IAM action really is required, and the card really is 2,109 bytes with the prompt inside. Slight overstatement comes from generalising a three-agent, single-run mesh into cross-cloud statements ('the only one of the three clouds', card shape tracking the builder), and from the vivid 'the card talks' framing of what the author himself attributes to a default in the a2a-sdk card builder. The author partly self-corrects by conceding the mesh cannot separate framework from SDK.
Practitioner promoting own tooling
The post runs in a vendor-community channel (dev.to aws-builders) and showcases the author's own agentcard fetcher and tracer, including an anecdote about fixing their own tracer bug, which creates a mild promotional incentive and means the measuring instrument and the measured claims share an owner. Against that, the piece publishes an unflattering finding about the AWS stack it is hosted alongside, cites no sponsorship, and reports a negative result rather than a product win, so the incentive pressure is moderate rather than strong.
Solid mechanics, weak generalisation
Confidence is high for the reproducible mechanics on the AWS leg (extra IAM action, signed session header, non-standard card path, prompt inside the card) because the artifacts are published. It is much lower for anything comparative, statistical or forward-looking: one mesh, one run, one date, one publisher, no vendor confirmation, and a truncated article body.
build
Three clouds, one protocol, no stored credentials: the runtime becomes a swappable part1 distinct publisher
build
The A2A card said 0.0.0.0:8080, and the only caller it broke was Google's1 distinct publisher
build
A2A holds on the wire. ADK, Strands and Agent Framework are still not substitutable.1 distinct publisher
build
A twelve-word joke became a discipline, and one seven-step chain had no loop to remove1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 25, 2026