Small rant--I generally enjoy using AWS products, but WOOF, figuring out all the IAM permissions necessary to get CloudFormation to work is a real PITA.
You can even build a script to run it, check the errors, update IAM, and then run it again.
Eventually you'll have a set of IAM least privilege rules. It's a pain but it's secure.
The pain I'm dealing with is having to look at the event logs to determine which CF task failed due to permission, then add that to the CF policy.
First result in Google gift “generate IAM policies from usage”
https://docs.aws.amazon.com/IAM/latest/UserGuide/access_poli...