如果您的 AWS Bedrock 请求失败并出现 AccessDenied
或未经授权的错误,尽管已经配置了权限,问题可能源于以下三个方面之一:IAM 策略配置错误、缺少基于资源的策略或凭证或区域设置不正确。 让我们详细分析每种可能性。
首先,审查附加到发出请求的用户、角色或服务账户的 IAM 策略。 Bedrock 需要明确的权限才能执行诸如 bedrock:InvokeModel
或 bedrock:ListFoundationModels
之类的操作。 例如,如果您的策略仅授予所有资源(Resource: "*"
)上的 bedrock:*
,但您的组织强制执行资源约束,则该策略可能过于宽泛,并被服务控制策略 (SCP) 阻止。 或者,该策略可能缺少特定模型 ID 所需的必要权限。 检查操作名称或 ARN 中是否存在拼写错误。 一个常见的错误是忘记在 Resource
字段中包含模型 ARN(例如,arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2
)。 使用 IAM Policy Simulator 来验证该策略是否授予了预期的访问权限。
其次,如果 Bedrock 模型跨账户共享或具有访问限制,则可能需要基于资源的策略。 例如,如果您正在调用另一个 AWS 账户拥有的自定义模型,则该模型的资源策略必须明确允许您的账户或 IAM 主体。 同样,如果模型位于不同的区域,请确保配置了跨区域权限。 例如,允许在 us-west-2
中执行 bedrock:InvokeModel
的策略将不适用于发送到 us-east-1
的请求。 此外,检查 SCP 或权限边界中是否存在冲突的拒绝规则,这些规则会覆盖您的 IAM 策略。 即使 IAM 策略看起来正确,这些更高级别的策略也可以静默阻止访问。
最后,验证凭证和配置问题。 如果您使用的是临时凭证(例如 AWS STS 令牌),请确保它们未过期,并且关联的 IAM 角色信任承担该角色的服务(例如,Lambda 或 EC2)。 对于 SDK 或 CLI 工具,请确认您的配置中的 AWS 区域与模型可用的区域匹配。 例如,如果在 SDK 默认为 us-east-1
时,在 us-west-2
中调用 anthropic.claude-v2
将会失败。 此外,如果您使用的是 MFA 或会话标签,请确保请求包含所需的参数。 诸如 AWS CloudTrail 之类的工具可以通过过滤 AccessDenied
事件来帮助跟踪确切的错误,这些事件通常包括诸如缺少权限或资源 ARN 不匹配之类的详细信息。