'Amplify API REST with AWS_IAM: Request failed with status code 403

I'm trying to execute API calls from ReactNative AWS Amplify to API Gateway endpoint using AWS_IAM authorization.

I do it by calling (all Amplify initialization params are set):

import { API, Auth } from "aws-amplify";
...


API.get("MyApiName", "/resource")
  .then(resp => { ... })
  .catch(e => console.log(JSON.stringify(e));

I have console printout like:

{
  "message":"Request failed with status code 403",
  "name":"Error",
  "stack": "...",
  "headers":{
    "Accept":"application/json, text/plain, */*",
    "User-Agent":"aws-amplify/3.8.23 react-native",
    "x-amz-date":"20210908T172556Z",
    "X-Amz-Security-Token":"IQoJb3...",
    "Authorization":"AWS4-HMAC-SHA256 Credential=ASIA23GCUWEDETN632PS/20210908/us-east-1/execute-api/aws4_request, SignedHeaders=host;user-agent;x-amz-date;x-amz-security-token, Signature=2a06fb4d8eb672164bfd736790fb1658edef1240d12a38afb599a9e33020c3cd"
    ...
}

So, it looks like the request is Signed!

I use Cognito User Pool and appropriate Identity Pool. They both are set properly, becuase these settings work with successfull authorization access to S3 storage using AWS Amplify S3.

Authenticated role for Cognito Identity Pool has permission to for ExecuteApi to invoke the API resource method. Also, it has permission to invoce the Lambda that is linked to the API's resource method.

All looks fine, but I am still getting the 403 Forbidden error.

What's missing here?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source