{"slug": "build-composable-interoperable-multi-agent-systems-with-a2a-on-aws", "title": "Build composable, interoperable multi-agent systems with A2A on AWS", "summary": "AWS published a reference architecture for building composable, interoperable multi-agent systems using the Agent-to-Agent (A2A) protocol, with a LangChain-based enterprise orchestrator in one AWS account communicating with a Strands Agents-based SaaS agent in a separate AWS account. The design uses OAuth 2.0 and OpenID Connect for authentication in both directions, with each side running its own Amazon Cognito user pool and exchanging only public values such as identity provider URLs, client IDs, scopes and endpoint URLs, so no secrets are shared. AWS notes the A2A protocol is now a Linux Foundation project and that the system can be deployed from three Jupyter notebooks and tested end to end.", "body_md": "## [Artificial Intelligence](https://aws.amazon.com/blogs/machine-learning/)\n\n# Build composable, interoperable multi-agent systems with A2A on AWS\n\nAgents in multi-agent systems that span organizational boundaries often need to collaborate in a composable, interoperable way, with agents that other organizations build and run. They need a way to discover each other, communicate, and exchange tasks without exposing internals or requiring the same framework on both sides.\n\nThe Agent-to-Agent (A2A) protocol addresses this constraint. Without A2A, building composable multi-agent systems across organizational boundaries requires custom integration code for each customer and framework. Independent software vendors (ISVs) can instead build composable, interoperable agents that work with the A2A-compatible frameworks their customers already use.\n\nWhile we frame this post around the ISV use case, the pattern also applies to organizations that expose agents across boundaries, whether to partners, customers, or internal teams that use different frameworks. As your system grows, you add skills by registering Agent Cards with the orchestrator, without changing the agents already running.\n\nIn this post, we walk through a deployed reference architecture on AWS. A LangChain-based enterprise orchestrator communicates with a Strands Agents-based software as a service (SaaS) agent across organizational boundaries using A2A, with the enterprise and the SaaS provider in separate AWS accounts. Neither side depends on the other’s framework or SDK, and the two sides share no secrets. We cover the architecture and implementation patterns, then deploy the system from three Jupyter notebooks and run an end-to-end test.\n\n[The A2A protocol is now a Linux Foundation project](https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents), and AWS is among the organizations that support it. With A2A, agents can discover each other, negotiate tasks, and collaborate across organizational boundaries through a standardized protocol. The protocol uses existing authentication standards such as OAuth 2.0 and OpenID Connect (OIDC) for cross-boundary security, and is designed to work across A2A-compatible frameworks.\n\nIn [Open Protocols for Agent Interoperability Part 4: Inter-Agent Communication on A2A](https://aws.amazon.com/blogs/opensource/open-protocols-for-agent-interoperability-part-4-inter-agent-communication-on-a2a/), we introduced A2A concepts and demonstrated two Strands agents communicating using the protocol on AWS. That post established the foundation with Agent Card discovery, structured task execution, and the A2A server pattern. This post builds on that foundation with cross-framework interoperability, cross-organizational trust boundaries, and OAuth in both directions.\n\n## Solution overview\n\nThree agents run in two AWS accounts, one for the enterprise and one for the SaaS provider. The A2A protocol connects them, with OAuth authentication in both directions. Each account has its own [Amazon Cognito](https://aws.amazon.com/cognito/) user pool, so each side authenticates with its own identity provider.\n\nDuring onboarding, the enterprise and the SaaS provider exchange only public values, such as identity provider URLs, client IDs, scopes, and endpoint URLs. Each side then trusts tokens from the other side’s user pool, and no secrets are shared.\n\nAfter onboarding, each request follows these steps:\n\n1. The enterprise app gets an access token from the enterprise’s Amazon Cognito user pool.\n2. The app sends a question over HTTPS to the user API in Amazon API Gateway, then polls for the answer.\n3. [Amazon API Gateway](https://aws.amazon.com/api-gateway/) forwards the request privately, through a VPC link and an internal Network Load Balancer, to the Enterprise Orchestrator, a LangChain agent.\n4. When its model decides that the question needs a compliance scan, the orchestrator gets its own token from the enterprise user pool, using a client secret stored in [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) .\n5. The orchestrator sends an A2A request to the compliance SaaS agent on [Amazon Bedrock AgentCore](https://aws.amazon.com/bedrock/agentcore/) runtime, using the skill it read from the agent’s Agent Card at startup.\n6. The compliance agent checks the enterprise context agent’s Agent Card at the callback URL registered at onboarding, then gets a token from the SaaS provider’s own pool.\n7. The compliance agent calls back to the enterprise context agent for account metadata, finishes its scan, and returns the answer to the orchestrator and then to the app.\n\nOn the enterprise side, two agents run on [Amazon Elastic Container Service](https://aws.amazon.com/ecs/) (Amazon ECS) with [AWS Fargate](https://aws.amazon.com/fargate/). The Enterprise Orchestrator is the entry point for users. LangChain provides the agent framework and tool-calling abstractions, and [Amazon Bedrock](https://aws.amazon.com/bedrock/) provides the foundation models (FMs) that power each agent’s reasoning. The orchestrator uses LangChain and Amazon Bedrock (Anthropic Claude Sonnet 4.6). At startup, the orchestrator fetches the SaaS agent’s Agent Card from its well-known URL and creates a LangChain tool for each skill described on the card. The model then decides which tool to call based on the user’s question, so the orchestrator needs no hardcoded routing logic. It sends compliance scan requests over A2A with OAuth bearer tokens and summarizes the results for leadership. Users reach the orchestrator through an Amazon API Gateway HTTPS endpoint that accepts only tokens from the enterprise’s own pool.\n\nThe second enterprise agent provides internal context. The Enterprise Context Agent is built with LangChain and Amazon Bedrock (Amazon Nova Lite). It provides internal account metadata such as internal policy rules, data classification, business criticality, and escalation contacts (team on-call rotations). The deployed agent uses the official a2a-sdk (AgentCard, AgentExecutor, and spec-conformant JSON-RPC routes), pinned to a2a-sdk[http-server]==1.2.2. The SaaS agent reaches the context agent through an API Gateway partner API that accepts only the SaaS provider’s callback token.\n\nBoth enterprise agents run in private subnets of an [Amazon Virtual Private Cloud](https://aws.amazon.com/vpc/) (Amazon VPC), with no public IP addresses.\n\nOn the SaaS provider side, the Compliance SaaS Agent runs on Amazon Bedrock AgentCore in the SaaS provider’s own AWS account. Built with the [Strands Agents SDK](https://strandsagents.com/), it checks AWS accounts against the enterprise’s own internal policies, such as no public storage in production and encryption at rest for confidential data. In production, the scanning tools would connect to services such as [AWS Config](https://aws.amazon.com/config/), [AWS Security Hub](https://aws.amazon.com/security-hub/), or [Amazon GuardDuty](https://aws.amazon.com/guardduty/). For this demo, the agent uses synthetic data that simulates compliance findings across multiple accounts.\n\nBefore it scans, the SaaS agent calls back to the Enterprise Context Agent for enterprise context, such as which accounts are production, which internal policies apply, and who to escalate to. This bidirectional pattern makes the agents true peers instead of a client and a server. The callback goes only to the address the customer registered at onboarding.\n\nThe key design decision is to use A2A for all cross-boundary communication. The enterprise has no access to the SaaS agent’s internal tools, system prompt, or model choice. This separation means the ISV can change its internal architecture without changing customer integrations, as long as its Agent Card and A2A interface stay compatible. The SaaS card publishes one curated skill, not its internal tool names.\n\nAmazon Bedrock provides API access to multiple foundation models, so each agent can use the model that fits its workload. In this solution, the orchestrator and SaaS agent use Anthropic Claude Sonnet 4.6 for complex reasoning, while the context agent uses Amazon Nova Lite for metadata lookups. You can choose different models based on your own requirements.\n\nA2A and the Model Context Protocol (MCP) solve different problems in this architecture. MCP connects an agent to its own tools and data sources in a client-server model. A2A connects agents to other agents as peers, where neither side exposes its internals. In production, the SaaS agent could use MCP internally to connect to its compliance scanning tools while exposing itself externally through A2A. The external interface stays the same regardless of how the agent connects to its internal tools.\n\n## Prerequisites\n\nThe notebooks contain the complete deployment procedure. Before you run them, you need the following:\n\n- Two AWS accounts, one for the enterprise and one for the SaaS provider, in the same AWS Region: us-east-1, us-east-2, or us-west-2. In both accounts, access to Anthropic Claude Sonnet 4.6 in Amazon Bedrock, and in the enterprise account, access to Amazon Nova Lite. Before the first run, submit the Anthropic first-time use form in each account, and give the identity you run the notebooks with the AWS Marketplace permissions listed in the [Amazon Bedrock model access documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) . Model availability varies by Region. Check the[Amazon Bedrock model availability documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) for the current list.\n- A Jupyter environment with Python 3.10 or later, either: \n         \n  - On your computer: JupyterLab, the [AWS Command Line Interface (AWS CLI) version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) , and an[AWS IAM Identity Center](https://aws.amazon.com/iam/identity-center/) profile for each account, set up with[aws configure sso](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) . You don’t need Docker:[AWS CodeBuild](https://aws.amazon.com/codebuild/) builds the container images.\n  - Or an [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/ai/) notebook instance in each account (ml.t3.medium is enough). See the[Guide to getting set up with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html) .\n- On your computer: JupyterLab, the \n- In each account, an AWS Identity and Access Management (IAM) role with permissions to create [AWS CloudFormation stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) and the resources in them. Each notebook lists the exact permissions in its Reference section. See the[IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) .\n\nNotebook 3 also runs the end-to-end test described later in this post, so you can verify the deployment.\n\nRunning this solution incurs charges for the resources it creates. In the enterprise account, the main always-on resources are a NAT gateway, two AWS Fargate tasks, the internal Network Load Balancer, and two interface VPC endpoints. Amazon Bedrock and Amazon Bedrock AgentCore charge for what you use. Prices vary by AWS Region. See the pricing pages for [Amazon VPC](https://aws.amazon.com/vpc/pricing/), [AWS Fargate](https://aws.amazon.com/fargate/pricing/), [Amazon Bedrock](https://aws.amazon.com/bedrock/pricing/), [Amazon Bedrock AgentCore](https://aws.amazon.com/bedrock/agentcore/pricing/), and [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/pricing/). Run the Clean up sections when you finish.\n\n## Implement the solution\n\nDeploy the system with three notebooks, run in order with Jupyter, one cell at a time. Notebook 1 (enterprise account, about 3 minutes) creates the enterprise identity and writes an onboarding request. Notebook 2 (SaaS provider account, about 5 minutes) deploys the compliance agent and writes an onboarding response. Notebook 3 (enterprise account, about 20 minutes) deploys the enterprise agents and runs the tests. The onboarding files hold only public values.\n\n1. Clone the [GitHub repository](https://github.com/aws-samples/sample-a2a-cross-org-agents) , and set up two AWS profiles for local runs, or one notebook instance per account with the repository cloned to each.\n2. Run notebook 1 in the enterprise account.\n3. Give `onboarding-request.json` to the SaaS provider.\n4. Run notebook 2 in the SaaS provider account.\n5. Give `onboarding-response.json` back to the enterprise.\n6. Run notebook 3 in the enterprise account.\n7. After testing, run notebook 3’s Clean up, then notebook 2’s.\n\nThe following sections explain the key implementation patterns behind the deployment. Together, they demonstrate three capabilities:\n\n- **Interoperability across frameworks –** A LangChain orchestrator calls a Strands agent using A2A, with neither side depending on the other’s SDK.\n- **Composability across organizational boundaries –** An ISV’s compliance agent and an enterprise’s context agent compose into a workflow that neither team built alone.\n- **Bidirectional collaboration with OAuth –** Agents act as peers, calling each other across trust boundaries with token-based authentication.\n\nWith A2A, the ISV in this scenario replaces multiple custom integration paths with a single protocol-based interface.\n\n## Build the SaaS compliance agent\n\nBuild the ISV’s compliance agent with the Strands Agents SDK and deploy it to Amazon Bedrock AgentCore. For this demo, the scanning tools return synthetic compliance findings.\n\nThe agent exposes three compliance tools using the Strands @tool decorator (listing available accounts, running compliance scans, and retrieving remediation steps), plus a fourth that calls back to the enterprise, covered in the next section. The Agent Card doesn’t list these tools. It publishes one curated skill, so callers’ models see what the product does, not how it’s built. This simplified example shows the scanning tool:\n\n### Enable the bidirectional callback\n\nThis is where the solution goes beyond typical agent integrations. Most agent-to-agent demos show one-way request and response, where a client agent calls a server agent an", "url": "https://wpnews.pro/news/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws", "canonical_source": "https://aws.amazon.com/blogs/machine-learning/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws/", "published_at": "2026-11-12 15:42:21+00:00", "updated_at": "2026-11-12 15:51:42.589632+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "artificial-intelligence"], "entities": ["AWS", "Agent-to-Agent (A2A) protocol", "Linux Foundation", "LangChain", "Strands Agents", "Amazon Cognito", "Amazon API Gateway", "OAuth 2.0"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws", "markdown": "https://wpnews.pro/news/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws.md", "text": "https://wpnews.pro/news/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws.txt", "jsonld": "https://wpnews.pro/news/build-composable-interoperable-multi-agent-systems-with-a2a-on-aws.jsonld"}}