使用Amazon SP-API获取报告时遇Unauthorized错误求助
遇到Access to requested resource is denied.(Unauthorized)错误,即便完成了角色、策略、用户和应用注册,也可以从以下几个方向逐一排查:
核对IAM策略的权限动作
确保你的IAM策略包含报告相关的全量必要权限,比如reports:CreateReport、reports:GetReport、reports:GetReportDocument,资源设置建议先放开为*排查问题,确认后再按需缩小范围。别漏了任何一个核心操作权限,很多时候是缺了某一个动作导致的拒绝。检查IAM角色的信任关系
确认角色的信任策略里,Principal是对应区域的SP-API服务主体(比如北美区是sellingpartnerapi-na.amazon.com,欧洲区是sellingpartnerapi-eu.amazon.com),并且允许sts:AssumeRole动作。如果信任关系配置错了,SP-API根本没法扮演这个角色,自然会权限拒绝。确认应用注册的权限状态
去Amazon Seller Central的应用管理页面,看你的应用是否已经申请并获批了Reports API的权限组。如果权限还在审批中,或者根本没申请对应报告类的权限,哪怕IAM配置对了也没用。校验角色ARN和调用区域的一致性
调用SP-API时用的角色ARN,必须和你在应用注册时绑定的角色完全一致,同时请求的SP-API端点要和角色、应用的区域匹配(不同区域的端点和权限是隔离的)。比如你注册的是北美区应用,就不能用欧洲区的端点调用。验证请求凭证的有效性
检查你获取的Access Token和STS临时凭证(AssumeRole返回的)是否过期,请求时是否正确把这些凭证放到了请求头里。可以打印凭证的有效期和内容,确认没有格式错误或者过期情况。确认特定报告类型的权限
如果是请求某类特定报告(比如订单明细报告、库存报告),要确认这类报告是否需要额外的权限,部分特殊报告需要单独申请权限,或者IAM策略里要包含对应的资源权限。
内容的提问来源于stack exchange,提问作者Muhammad Nouman

