使用来自REST客户端Postman的AWS_IAM和API密钥验证AWS API网关

时间:2016-04-13 11:20:50

标签: rest amazon-web-services aws-lambda postman aws-api-gateway

我正在尝试使用postman rest客户端访问经过身份验证的POST API网关,但我收到带有禁止消息的状态403。

{   “消息”:“被禁止” }

我正在使用AWS签名身份验证与AccessKey,SecretKey,AWS区域和服务名称。我不明白为什么它不允许我的休息电话,是否与我的AccessKey和SecretKey对缺乏授权? (我的用户是管理员想法)

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/dev/score",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "input1=1&input2=2",
  CURLOPT_HTTPHEADER => array(
    "authorization: AAAA-AAAA-XXX123 Credential=XXXXXXXXXX/20160414/us-west-2/execute-api/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sdddddssdddddddddddddddddsdsdsdsdsdsdsdsdsdsd",
    "cache-control: no-cache",
    "content-type: application/javascript",
    "host: xxxxxxxxxx.execute-api.us-west-2.amazonaws.com",
    "postman-token: abf462fe-24ae-244d-ba8d-d3e953f0e712",
    "x-amz-date: 20160414T084331Z"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

4 个答案:

答案 0 :(得分:3)

如果您使用的是API密钥,请务必设置" x-api-key"报头中。

在创建使用计划并将计划链接到API阶段和API密钥之前,我也遇到了同样的问题。

答案 1 :(得分:3)

如果您将'API Key Required'选项设置为true,请检查以下内容。

  1. 部署您的API以更新更改。
  2. 您必须将'x-api-key'HTTP标头参数传递给API网关。
  3. 必须创建API密钥。
  4. 此外,您需要在API网关控制台上查看API密钥的使用计划。

答案 2 :(得分:1)

这可能有多种原因,您是否介意在失败的情况下共享示例设置?

请检查以下内容:

  1. 您是否部署了API?
  2. 用户是否拥有相应的权限?您可以使用托管IAM策略" AmazonAPIGatewayInvokeFullAccess"或创建自己的。有关详细信息,请参阅我们的documentation
  3. 最佳,

    Jurgen,API网关

答案 3 :(得分:0)

当未将API部署到API网关或您访问错误的路径/ your-rout而不是/ api-name / your-route时,通常会发生这种情况。