如何为Lambda添加资源型策略?添加后控制台未显示问题求助
问题:CDK配置Lambda资源型策略后控制台不显示
我用以下AWS CDK Python代码为Lambda函数添加EventBridge触发的资源型策略,但策略并未在AWS控制台的Lambda权限页面显示,求解决方法。
我的CDK代码
asset_new_lambda = lambda_.Function( self, id=prefix + "asset_new", runtime=lambda_.Runtime.PYTHON_3_9, handler="asset.lambda_handler", code=lambda_.Code.from_asset("lambda/Scaleout_Lambdas/asset_new"), # tracing=lambda_.Tracing.ACTIVE, function_name=prefix + "asset_new", timeout=Duration.minutes(15), environment={ "TABLE_NAME": metadata_table.table_name, "LOG_GROUP": log_group.log_group_name, "REGION": region, "PREFIX": prefix, }, role=lambda_role, layers=[powertoolslambdaLayer], reserved_concurrent_executions=5, ) asset_new_lambda.apply_removal_policy(cdk.RemovalPolicy.DESTROY) # 尝试添加EventBridge调用Lambda的权限 CfnPermission( self, "AssetNewLambdaEventBridgePermissions", action="lambda:InvokeFunction", function_name=asset_new_lambda.function_name, principal="events.amazonaws.com", source_arn=f"arn:aws:events:{region}:{str(account)}:rule/*", )
解决方法
1. 使用Lambda Function内置的add_permission方法替换CfnPermission
直接用CDK原生的add_permission方法,它会自动管理Lambda的资源策略,确保策略能在控制台正确显示,这也是CDK的最佳实践:
# 替换原来的CfnPermission代码 asset_new_lambda.add_permission( "AssetNewLambdaEventBridgePermissions", action="lambda:InvokeFunction", principal=events.ServicePrincipal("events.amazonaws.com"), source_arn=f"arn:aws:events:{region}:{str(account)}:rule/*", )
注意需要提前导入events模块:import aws_cdk.aws_events as events
2. 验证CDK部署状态
运行cdk deploy --verbose查看部署日志,确认权限资源是否成功创建,没有报错信息。如果部署过程中有错误,根据日志排查问题(比如账号ID、region是否正确,资源依赖是否存在)。
3. 刷新Lambda控制台
有时候控制台会有缓存,切换到Lambda的「配置」→「权限」→「基于资源的策略语句」页面,刷新浏览器后再次查看。
4. 检查Source ARN格式
确认source_arn的格式完全正确,账号ID没有拼写错误,region和当前部署的区域一致,确保ARN指向有效的EventBridge规则范围。
内容的提问来源于stack exchange,提问作者Fasiuddin Mohammed
相关产品推荐
相关产品推荐

