Lambda function has no resource-based policy
- Severity
- Low
- Service
- Lambda
- Check ID
- LAMBDA_NO_RESOURCE_POLICY
What this check finds
Without a resource-based policy, invocation control relies entirely on IAM identity policies. There is no explicit allow/deny at the function level, making it harder to audit who can call the function and easier to accidentally grant access through overly broad IAM policies.
Passing looks like: Lambda functions have a resource policy.
How to fix it
Add a resource-based policy that explicitly grants invocation rights only to trusted principals (e.g. a specific API Gateway, EventBridge rule, or IAM role).
AWS CLI
aws lambda add-permission --function-name FUNCTION_NAME --statement-id AllowSpecificPrincipal --action lambda:InvokeFunction --principal arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
Names in capitals are placeholders for your own resource. Review a command before you run it.
AWS console
Lambda → Function → Configuration → Resource-based policy → Add permissions.
Compliance controls it is evidence for
A failing result counts against these controls in KloudLytics; a passing one is evidence towards them. How compliance mapping works
| Framework | Controls |
|---|---|
| NIST SP 800-53 Rev5 (Moderate) |
|
| NIST Cybersecurity Framework 2.0 |
|
| ISO/IEC 27001:2022 Annex A |
|
Checked on every scan
KloudLytics runs this check each time it scans a connected AWS account, through a read-only role, and lists every affected resource with its region. On Pro and Business a fix is written for the specific resource rather than the general case above. The exact access it needs
More Lambda checks
- HighLambda function is using a deprecated or end-of-life runtime
- HighLambda function URL is publicly invocable without authentication
- MediumLambda function is publicly invocable
- LowLambda function has zero invocations in the past 30 days
- LowLambda function memory utilization below 25% of configured limit