I'm working on setting up CloudFront to deliver a single-page application (SPA) that's hosted on S3, along with an API served via API Gateway. The challenge I'm facing is redirecting missing routes to `/index.html` without triggering a 403 error from S3, which happens when a file isn't found. I also need to manage 403 errors that come from the API for unauthenticated users. My endpoints are set up as follows: `/index.html` for the main site, `/v1/*` for API calls, and dynamic paths like `/app/1` that should redirect to `/index.html`. Currently, my setup works, but I want to ensure that when users are unauthenticated, the API returns a proper 403 instead of redirecting them to the index file. Does anyone have suggestions?
5 Answers
I actually access the API Gateway directly instead of routing it through CloudFront. This way, you can still add protections like WAF without the extra complexity.
Oh man, I completely relate! Getting the SPA and API Gateway to work smoothly is a challenge. I tried using Lambda@Edge for custom error handling too, but ended up bouncing around various tools. Adding the `s3:ListBucket` permission was a game-changer for me, making the errors more manageable.
To fix the 403 errors from S3, consider adding `ListBucket` permissions in your S3 bucket policy. This way, instead of getting a 403 for a missing file, S3 will return a 404 error instead. Here's a helpful CDK example if you're using that setup. You might also look into adding a CloudFront function to handle viewer requests and resolve to `/index.html` for specific paths. This method can be tied to particular behaviors, which keeps it separate from your API paths.
What kind of API Gateway are you using? Is it the HTTP version or the REST one? This can affect how you set up error handling.
I faced a similar issue with my blog deployment. I resolved it by implementing CloudFront functions, which helped streamline the navigation without running into 403 confusion.

Related Questions
How to Build a Custom GPT Journalist That Posts Directly to WordPress
Cloudflare Origin SSL Certificate Setup Guide
How To Effectively Monetize A Site With Ads