FYI for anyone in the same situation, Netflix built some open source packages to solve this:
https://netflixtechblog.com/introducing-aardvark-and-repokid...
The idea is that the default policy on new things is deny all, and then it monitors cloudtrail for privilege failures and reconfigures IAM to allow the smallest possible privilege to get rid of that deny message.