报错是这么冒出来的。boto3 1.35 调 us-east-1 的 anthropic.claude-3-5-sonnet-20240620-v1:0,invoke_model 报 AccessDeniedException,原文 You don't have access to the model with the specified model ID,IAM 已给了 bedrock:*,换 us-west-2 一样。

中间走过弯路,把「模型 ID 在该区域不可用,只能走 inference profile」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。账号没在控制台 Model access 里申请该模型。少数情况下是IAM 允许 bedrock:* 但资源 ARN 限了别的区域。

另外,组织级 SCP 拦了 bedrock 的 InvokeModel。

动手时先列出这个区域实际可用的模型

aws bedrock list-foundation-models --region us-east-1 --query "modelSummaries[?contains(modelId,'claude-3-5')].modelId"

直接用 AWS CLI 调一次看完整错误

aws bedrock-runtime invoke-model --region us-east-1 --model-id anthropic.claude-3-5-sonnet-20240620-v1:0 --body "{\"prompt\":\"Human: hi\\n\\nAssistant:\"}" out.json

再往下用 IAM 模拟器确认权限边界

aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::123456789012:role/app --action-names bedrock:InvokeModel --resource-arns "*"

等前面都确认过,再换成 inference profile 的 ID 重试

aws bedrock-runtime invoke-model --region us-east-1 --model-id us.anthropic.claude-3-5-sonnet-20240620-v1:0 --body "{}" out.json

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

这台环境是别人交接的,不少默认值被动过,只能一项项核。

怎么算真的好了,看的是同一批现象。invoke_model 返回 200,body 里能解出 completion 字段,CloudTrail 里对应事件没有 AccessDenied。

这里还有个坑。Bedrock 的模型要先开通再授权,和普通 API 只配 key 不一样,跨区域调用还得看 inference profile 的支持范围。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189