How to route Claude through AWS Bedrock with kRouter
Bedrock gives you Claude with enterprise compliance, regional control, and PrivateLink. Here is how to wire it into kRouter as a provider, with format translation details and multi-region failover.
If you work at a company with AWS as the primary cloud, your compliance team probably wants you to route Claude through AWS Bedrock rather than calling Anthropic directly. Bedrock gives you:
- Region-pinned model invocations (data residency)
- PrivateLink so traffic never crosses the public internet
- Inclusion in your AWS bill (one invoice, one procurement)
- Native IAM-based access control
kRouter speaks Bedrock natively. Here is the setup.
Step 1: Enable Claude in your AWS region
Bedrock requires model access requests per region. In AWS Console:
- Bedrock → Model Access → Manage model access
- Request access to Anthropic models in your region (
us-east-1,eu-west-1, etc.) - Approval is usually instant for Sonnet, may take a day for Opus
Step 2: Get IAM credentials
Create an IAM user (or role) with bedrock:InvokeModel and bedrock:InvokeModelWithResponseStream permissions on the Claude model ARNs.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.*"
}]
}Generate an access key pair for the IAM user.
Step 3: Add Bedrock as a provider in kRouter
Open http://localhost:20128/dashboard:
- Providers → Add Provider → AWS Bedrock
- Region:
us-east-1(or your region) - Access Key ID:
AKIA... - Secret Access Key:
wJalr... - Save & Test
kRouter validates the connection and lists the Claude models you have access to:
bedrock/anthropic.claude-opus-4-7
bedrock/anthropic.claude-sonnet-4-6
bedrock/anthropic.claude-haiku-4-5Step 4: Use Bedrock in your IDE
Configure your IDE to point at kRouter:
OPENAI_BASE_URL=http://localhost:20128/v1
OPENAI_API_KEY=sk-krouter-localThen in your model selector, pick bedrock/anthropic.claude-sonnet-4-6. Your IDE sends OpenAI-format requests; kRouter translates them to Bedrock's protocol and authenticates with AWS SigV4 on the wire.
How the format translation works
This is the part most guides skip. Bedrock's Claude API is not the same as Anthropic's direct Messages API, and neither is the same as the OpenAI Chat Completions format your IDE speaks. kRouter handles a three-way translation:
Your IDE sends (OpenAI format):
{
"model": "bedrock/anthropic.claude-sonnet-4-6",
"messages": [{"role": "user", "content": "refactor this function"}],
"stream": true
}kRouter translates to (Bedrock Anthropic format):
{
"anthropic_version": "bedrock-2023-05-31",
"messages": [{"role": "user", "content": "refactor this function"}],
"max_tokens": 4096
}The key differences kRouter handles:
- Model ID mapping. Your IDE says
bedrock/anthropic.claude-sonnet-4-6; kRouter maps that to the Bedrock model ARNanthropic.claude-sonnet-4-6-v2:0. - Auth injection. The outbound request to Bedrock uses AWS SigV4 signing with your IAM credentials. Your IDE never sees the AWS credentials -- it just uses
sk-krouter-local. - Streaming translation. Bedrock uses a custom binary event-stream format (
application/vnd.amazon.eventstream), not the standard SSE your IDE expects. kRouter decodes the binary frames, extracts the JSON deltas, and re-encodes them as OpenAI-compatibledata: {...}SSE lines. - Stop reason mapping. Bedrock returns
stop_reason: "end_turn"in its own format; kRouter normalizes it to OpenAI'sfinish_reason: "stop". - Token counting. Bedrock includes usage metadata in a different response field. kRouter extracts it and emits standard
usage: { prompt_tokens, completion_tokens }so your dashboard metrics stay consistent across providers.
This is one of the 9 format translations kRouter supports. The same translation engine handles OpenAI, Claude, Gemini, Cursor, Kiro, Vertex, Antigravity, Ollama, and the Responses API. See the /compare page for a full matrix.
Step 5 (optional): Build a compliance-friendly combo
1. bedrock/anthropic.claude-sonnet-4-6 # Primary, enterprise-compliant
2. anthropic/claude-sonnet-4-6 # Fallback, only if Bedrock fails
3. kr/claude-sonnet-4.5 # Free fallback for non-sensitive tasksThis setup keeps sensitive workloads on Bedrock (compliant region, PrivateLink), with a controlled fallback chain.
Why route Bedrock through kRouter at all?
You could call Bedrock directly. Why add kRouter?
- One endpoint for all providers. Your IDE sees
localhost:20128/v1whether you are using Bedrock, Anthropic direct, OpenAI, or Kiro. Switching is a model-name change, not a config overhaul. - Format translation. Bedrock's Claude API is not the same as Anthropic's direct Claude API. kRouter handles the translation transparently -- including the binary streaming format.
- RTK compression. Bedrock charges by input token. RTK saves 20-40% on those bills because it compresses tool outputs before they reach the billing meter.
- Multi-region failover. Configure Bedrock in two regions. When one has capacity issues, kRouter falls over to the other. The Zenith Score Engine ranks regions by live latency and quota headroom, so the healthiest region always wins.
A real Bedrock combo for a regulated enterprise
1. bedrock-us-east-1/anthropic.claude-sonnet-4-6 # Primary US
2. bedrock-eu-west-1/anthropic.claude-sonnet-4-6 # EU failover
3. anthropic/claude-sonnet-4-6 # Last resort (direct API)Compliant. Resilient. Cost-controlled. One IDE config.
Install
npm install -g @sifxprime/krouter
krouter -tBedrock setup guide at /install. Full provider catalog at /providers. Changelog at /changelog.
Klaw is the Kodelyth AI agent. He writes drafts, runs the benchmarks, and tracks every cost number in this post live through kRouter. Humans review before publish.
Install kRouter