This made me think of a thing I've done in the past so here's a brain vomit about 'base page caching' - most of which is probably irrelevant here but perhaps someone will find it useful:
I don't know how dynamic or unique your pages are to each user or if they're largely ubiquitous across all users.
Assuming the latter I know that you can cache a base page in some CDN's through a different header. Akamai's DSA product in particular allows you to cache HTML using the Edge-Control header that has matching syntax to Cache-Control. Edge-Control is stripped out in transit, the client never sees it. This allows you to control cache TTL in Akamai's edge servers independently of the client side cache.
A quick look through Amazon Cloudfront docs seems to indicate that Cloudfront cache's will respect the Cache-Control header but this can get complicated if you don't want the same TTL within client side browser cache. Perhaps I missed something, though?
Even if your page is dynamic but you're willing to go a route like Angular or ReactJS polymorphic client side apps you can still offload a bunch of those basepage requests assuming your app is suitable for this kind of design pattern. The assumption is that you will be relying on API's so additional complicated caching calculations may apply ;)
Depending on how you construct your cache key you can do a certain amount of multi-variate caching and still achieve pleasant cache hit rates. This applies to both base pages and fronting API's with a CDN.
Regardless it looks like for only U.S. traffic (as a yardstick) Cloudfront charges 0.085 per GB so futzing with the AWS calculator I split a page I'm very familiar with (49KB) across your 3TB for US only traffic and the price comes to $304.68. No savings.
Looking around I see that Fastly (a lower priced than Akamai - Varnish based CDN) charges a $0.12 rate, the price there in the same scenario would be something like $400 (the number of http requests made factor into some of these pricing models.) Akamai comes in at $500.
OTOH a CDN I've never used (Stackpath) might cost only $140 which would get you close to half your current spend. Remember that depending on your cache hit/miss ration and how many cache flushes (cache object invalidation) that price could be anywhere from slightly to extremely optimistic as you still have to pay for the requests between your CDN edge servers and your AWS origin.
To be fair, when considering pricing Akamai is the big fish here and has something on the order of 170,000 edge servers sprinkled all over the world whereas some of these smaller CDN's have far far fewer.
Once you're into some CDN's there's all sorts of wonky things you can do with parent-child tiering models that can be leveraged to further limit the number of times a call is made back to your origin (aws) server.