如何解决亚马逊SP-API调用时的“Access to requested resource is denied”错误
排查亚马逊SP-API competitivePrice接口权限拒绝问题
以下是针对Unauthorized错误的实用排查步骤,都是实际调用该接口时踩过的坑:
直接排除Vendor账户:
products/pricing/v0/competitivePrice属于Seller SP-API接口,VendorCentral账户完全无法访问,不用再尝试Vendor相关凭证。确认应用权限范围(Scope):
- 登录Seller Central,进入「Apps and Services」→「Manage Your Apps」,找到你创建的SP-API应用。
- 查看授权权限列表,必须包含
product_pricing:read。如果没有,需要重新授权应用,勾选该权限后生成新的刷新令牌(Refresh Token)。
IAM角色配置必须正确:
- 必须使用IAM角色ARN,不能用IAM用户ARN。SP-API服务依赖AssumeRole获取权限,用户ARN无法被SP-API信任。
- 检查IAM角色的信任关系,必须包含
sellingpartnerapi.amazonaws.com作为可信实体,策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sellingpartnerapi.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 确保SP-API开发者控制台中,应用关联的IAM ARN是该角色的ARN,没有填错。
验证LWA令牌的有效性和权限:
- 用应用Client ID、Client Secret和Refresh Token调用LWA的
/oauth2/token接口获取Access Token。 - 用JWT解码工具查看Access Token的payload,确认
scope字段包含product_pricing:read,且exp字段未过期。
- 用应用Client ID、Client Secret和Refresh Token调用LWA的
必须做AWS签名:
- SP-API接口除了需要
x-amz-access-token请求头(存放LWA的Access Token),还必须完成AWS Signature Version 4签名。 - 签名需使用通过AssumeRole获取的临时AWS凭证(AccessKeyId、SecretAccessKey、SessionToken),不能用IAM用户的永久密钥。
- Postman中可配置AWS签名:在「Authorization」选项卡选择「AWS Signature」,填入临时凭证,服务名称填
sellingpartnerapi,区域选us-east-1(北美站)。
- SP-API接口除了需要
确认ASIN与店铺的关联状态:
- 若查看自身店铺的ASIN,需确认该ASIN确实属于你授权的Seller账户北美站店铺。
- 若查看竞品ASIN,确保你的账户未被限制访问竞争定价数据,且店铺状态正常(未暂停、未关闭)。
检查请求参数与头:
- 确认
MarketplaceId=ATVPDKIKX0DER是北美站的正确ID,无拼写错误。 - 请求头需包含
Content-Type: application/json,即使是GET请求。
- 确认
内容的提问来源于stack exchange,提问作者Chris Jukes
相关产品推荐
相关产品推荐

