使用AWS_IAM授权的Amplify REST API请求返回403状态码问题排查
Amplify API 授权类型未显式指定AWS_IAM
即使身份池配置正确,也需要在Amplify的API配置或调用时指定授权类型为AWS_IAM,否则不会使用身份池凭证签名请求。可以在调用时补充参数:API.get("MyApiName", "/resource", { headers: {}, authorizationType: 'AWS_IAM' })或者在初始化Amplify的API配置项中,对应API的配置下添加
authorizationType: 'AWS_IAM'。API Gateway对应方法的授权配置错误
进入API Gateway控制台,检查你调用的资源+HTTP方法的「授权」设置,确认已选择AWS_IAM,而不是NONE、Cognito用户池授权器等其他选项。修改配置后必须重新部署API到对应阶段才会生效。IAM权限的资源ARN配置错误
检查Cognito已认证角色的execute-api权限策略,资源ARN格式必须完全匹配你调用的API,正确格式为:arn:aws:execute-api:<区域>:<AWS账户ID>:<API ID>/<部署阶段>/<HTTP方法>/<资源路径>
常见错误包括漏写部署阶段、HTTP方法与实际调用不匹配、资源路径拼写错误。未部署API Gateway最新配置
所有API Gateway的配置修改(包括授权设置、路径修改、集成调整)都需要手动部署到对应阶段才会生效,修改后未部署会导致旧配置仍然生效,返回403。使用了未认证身份调用
如果你开启了Cognito身份池的未认证访问,且当前用户未登录,Amplify会默认使用未认证角色的凭证发起请求。需要确认要么给未认证角色也配置对应execute-api权限,要么调用API前先确认用户已处于登录状态,可通过Auth.currentAuthenticatedUser()验证登录状态。API Gateway资源策略或WAF拦截
检查API Gateway的资源策略,确认没有限制你当前请求的来源IP、身份ARN等;如果配置了WAF,检查WAF日志是否命中了拦截规则,导致请求被拒绝返回403。
内容的提问来源于stack exchange,提问作者atlascoder

