I'm finding your question slightly confusing. When you say "NSG" I assume you mean "Security Group". Azure has "Network Security Groups", AWS as Security Groups. Also, you haven't said what you're trying to achieve, you've said what's not working, which makes it difficult to help you. I'll give you some general thoughts, but if these aren't right please edit your question to say what you're trying to achieve, and fix up the abbreviations.
NAT Gateways do not have a security group. A security group is a firewall around an ENI, such as on an EC2 instance. You don't pay for inbound traffic so you shouldn't really care about what is rejected by the NAT gateway other than for security investigations of specific issues / incidents. Nothing comes in a NAT gateway, that's what they're for.
It sounds like your main issue is the deny traffic in the VPC flow logs, for traffic the NAT gateway rejects from the internet. My main advice is to ignore it, as maybe it will be useful one day for forensic purposes in a high security environment, or turn off VPC flow logs if you don't need them. I use VPC flow logs for diagnostics, and only leave them on log term where PCI / CIS / similar compliance is required There's always going to be a lot of reject traffic in those logs. I once spent quite a bit of time trying to track down rejects in an internal subnet with no internet access, but I ran out of time before I got anywhere. I just let it go.
You can change the scope of the VPC flow logs. Instead of creating a flow log for the whole VPC you create a flow log only for only your private subnets, and make sure your NAT gateway is in the public subnet. That way don't log the deny traffic from the internet.
You can also configure flow logs to log ACCEPT, REJECT, or BOTH types of traffic.
To summarize and address your comment:
- VPC flow logs are a tool that are used for network diagnostics (and rarely turned on), or for compliance logging (always on but deliberately scoped). Not many people turn them on.
- I only turn VPC Flow Logs on when I have a good reason to. When I do I scope them to the network interfaces and traffic type I need (accept / reject / both).
- I only look at the VPC flow logs when I'm doing network diagnostics. When I'm looking at them it's for a specific interface / event so I ignore everything I don't need to see.
- I have the Cloudwatch Log Group set to an appropriate retention period.