Opus 4.7 on Bedrock: the EU profile worked, US and global didn't
Switching Claude Code to Opus 4.7 on Bedrock returned a permission error on the US and global inference profiles but worked on the EU one. Here's the reproduction, the fix, and what to tell AWS support.
Contents
I run Claude Code on top of AWS Bedrock so I can spend AWS credits instead of a separate Anthropic bill. When Opus 4.7 showed up, I swapped the model and it broke. The first-time-use form was accepted, my marketplace agreement was active, and the model was listed in the console — but every request came back with a permission_error.
This is the full error:
API Error: 400 {"type":"error","request_id":"req_c4e42p4bb3hfzsq67lf5clk4zc7rnn6qry3stf2kr6hwo2jl3b6q","error":{"type":"permission_error","message":"anthropic.claude-opus-4-7 is not available for this account. You can explore other available models on Amazon Bedrock. For additional access options, contact AWS Sales at https://aws.amazon.com/contact-us/sales-support/ "}}
Read that message at face value and you assume your account doesn’t have access, so you open a support case. I did. But I also asked Claude Code — running on Opus 4.6 — to investigate its own platform problem using the AWS CLI. That’s the path that actually found the answer.
What the agent checked
Three things, in order:
- First-time-use / model access form. Confirmed accepted for Opus 4.7 in the Bedrock console.
- Marketplace agreement. Active. That rules out a marketplace or billing problem.
bedrock-runtime invoke-modelacross inference profiles. This is where it got interesting.
It didn’t stop at “the model is enabled in the console, so it should work.” It tried to actually invoke the thing across every inference profile I had access to, and watched the responses diverge.
The surprising finding
The EU profile worked. The US and global profiles didn’t.
| Profile | Region called from | Result |
|---|---|---|
eu.anthropic.claude-opus-4-7 | eu-west-1 | Works |
us.anthropic.claude-opus-4-7 | us-east-1 | Permission error |
global.anthropic.claude-opus-4-7 | us-east-1 | Permission error |
global.anthropic.claude-opus-4-7 | eu-west-1 | Permission error |
Here’s the call that works:
aws bedrock-runtime invoke-model \
--model-id eu.anthropic.claude-opus-4-7 \
--region eu-west-1 \
--body '{"anthropic_version":"bedrock-2023-05-31","max_tokens":50,"messages":[{"role":"user","content":"Say hello"}]}' \
/tmp/opus47_eu.json
The global profile fails even from eu-west-1. That tripped me up until I looked at the profile’s foundation-model ARNs: global.* includes the US regions, and if any region in the profile isn’t enabled for your account, the whole call falls through to the same permission error. us.anthropic.claude-opus-4-7 covers us-east-1, us-east-2, and us-west-2 — those three regions are what’s actually gated on my account.
So the marketplace agreement is valid, the model works, and the EU regions are enabled. US regions aren’t. The global.* profile routes through US and fails by association.
The fix for Claude Code
Two pieces. First, make sure you’re on a recent Claude Code build — the Homebrew formula was lagging behind, so I uninstalled it and switched to the native installer:
curl -fsSL https://claude.ai/install.sh | bash
Then point the model and region at EU in your Claude Code settings.json:
"env": {
"CLAUDE_CODE_USE_BEDROCK": "1",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"AWS_REGION": "eu-west-1",
"ANTHROPIC_MODEL": "eu.anthropic.claude-opus-4-7",
"ANTHROPIC_SMALL_FAST_MODEL": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "16384"
}
Note that ANTHROPIC_SMALL_FAST_MODEL is pinned to the global Haiku profile — the small/fast model isn’t gated, only Opus 4.7 is. Mixing profiles is fine.
If you’re in the US, flip the polarity — pin ANTHROPIC_MODEL to us.anthropic.claude-opus-4-7 and AWS_REGION to a US region, and the same logic applies in reverse when EU is the gap.
What to tell AWS support
I updated my support case with this, which narrows the problem down to something they can actually act on:
The model works via
eu.anthropic.claude-opus-4-7fromeu-west-1, but fails viaus.anthropic.claude-opus-4-7andglobal.anthropic.claude-opus-4-7. The marketplace agreement is active. This appears to be a US-region enablement issue on Anthropic’s side, not an IAM or marketplace problem.
If you hit this, that’s the phrasing — concrete reproduction, region-scoped, and it points support at the actual layer that needs fixing.
The generalisable lesson: when a Bedrock model returns permission_error and the console says access is granted, don’t assume the error message is telling you the truth about the account. Loop through us.*, eu.*, and global.* with bedrock-runtime invoke-model before opening a case — or let the agent do it for you.