如何授权AWS CloudWatch Alarm调用Lambda函数?ARN报错排查
解决CloudWatch Alarm调用Lambda的权限配置问题
核心问题说明
直接把CloudWatch Alarm的ARN填到Lambda权限配置的Principal字段是错误的,CloudWatch Alarm调用Lambda时,是通过AWS服务主体而非Alarm自身ARN完成身份验证的,这就是你收到ARN无效提示的原因。
正确配置步骤
1. 明确CloudWatch的服务主体
你不需要给CloudWatch Alarm单独分配角色或账号,只需在Lambda权限策略中指定对应的服务主体:
- 标准CloudWatch Alarm:服务主体为
events.amazonaws.com - 复合CloudWatch Alarm:服务主体为
cloudwatch.amazonaws.com
2. 控制台配置权限
- 进入Lambda函数的配置页面,切换到权限标签
- 点击添加权限,选择AWS服务作为信任实体类型
- 在服务下拉框中选「CloudWatch Events」(对应标准Alarm)或「CloudWatch」(对应复合Alarm)
- 操作选择
lambda:InvokeFunction,资源默认选当前Lambda的ARN即可 - 保存配置
3. AWS CLI命令配置示例(标准Alarm)
aws lambda add-permission \ --function-name 你的Lambda函数名 \ --statement-id cloudwatch-alarm-invoke \ --action "lambda:InvokeFunction" \ --principal events.amazonaws.com \ --source-arn 你的CloudWatch Alarm完整ARN
4. 验证Alarm ARN格式
如果仍提示ARN无效,先确认格式是否正确,标准格式为:arn:aws:cloudwatch:区域ID:账号ID:alarm:Alarm名称
关键误区澄清
CloudWatch Alarm不需要单独配置角色,它依托AWS服务身份调用Lambda。权限策略中,服务主体填到Principal,Alarm的ARN填到source-arn字段,用来限制只有指定的Alarm能触发Lambda调用。
内容的提问来源于stack exchange,提问作者NealWalters
相关产品推荐
相关产品推荐

