I have an AWS Lambda function that is exposed as a REST API.
When it is invoked it via the Test button on aws lambda console, it works.
When it is invoked v
Supposedly the Lambda is exposed through an AWS API Gateway. One reason why you'd get 403 on a fresh "no authentication" API Gateway resource is because you haven't yet deployed your changes.
In API Gateway Console click the Actions
dropdown and select Deploy API
.
You should be good to go.
If you are writing logs to cloudwatch, then make sure CloudWatch log role ARN is configured. It can be accessed from API --> settings.
Perhaps you are sending request to a wrong endpoint.
I was getting 403 error response by sending a POST request to https://example.com/locate
However, once I added stage http://example.com/dev/locate and deployed changes to this API, it worked ok, returning 200 response.
Hope that helps.
You have to first make sure that CORS is enable at AWS API Gateway if you are accessing it from different domain because, it is API gateway which is throwing 403 error not the lambda function. You can enable CORS for a method or for complete resource. Select Actions and then select Enable CORS . This will add OPTIONS method to the resource if not already exist.
Enabling CORS on API gateway will make sure that all response headers will have Access-Control-Allow-Origin value set to '*' (i.e allow all origins, but you can specify specific origin e.g. http://localhost).
Always make sure you are invoking correct URL. You can get url from Stage section of API Gateway or from Lambda Function (if you have set Lambda function as integration end point)
You can see new headers set in Method and Integration responses.
If you are using authorisation of AWS then AWS calculate signature.
If you passing get or post params has to send it in alphabetically order.
Reason because when you pass token calculating signature UI or front end calcuate basis order which you added but AWS recalculate signature as per alphabetically order to match signature.
Try sending params in alphabetically order.
post = { 'id': 23, 'tag': '35353 }