AWS IAM策略在API Gateway场景下是否需要具备「双向性」?关系双方是否都需定义策略?
API Gateway调用Lambda的权限问题
先得掰扯清楚你提到的「Lambda绑定的IAM策略」到底是哪一种——AWS里Lambda相关的IAM策略有两种,作用完全不一样:
第一种:Lambda的资源策略(直接挂在Lambda函数上的权限规则)
如果这个策略已经明确允许你账号内的所有主体(比如设置了Principal: { "AWS": "arn:aws:iam::你的账号ID:root" },或者用通配符"*"但通过条件限制只允许本账号内的调用)执行lambda:InvokeFunction动作,那理论上你的API Gateway作为账号内的服务主体,是有权调用这个Lambda的。
不过实际操作的时候,当你在API Gateway控制台配置Lambda集成时,AWS会主动问你要不要自动添加权限——也就是给Lambda的资源策略加一条专门允许这个API Gateway调用的规则。哪怕你已有宽泛的权限,我也建议你加上这条显式规则,毕竟后续如果资源策略有变更,针对性的权限不容易出问题,也更清晰好维护。
第二种:Lambda的执行角色策略(Lambda运行时用的IAM角色的权限)
要是你说的是这个策略,那它和谁能调用Lambda完全无关——这个策略是给Lambda函数自己用的,用来让它能访问其他AWS服务(比如读S3、写DynamoDB),完全管不了外部主体(比如API Gateway)能不能调用它。这种情况下,你必须专门给API Gateway配置调用权限,常用的两种方式:
- 给Lambda函数添加资源策略,明确允许你的API Gateway执行
lambda:InvokeFunction - 给API Gateway的执行角色加IAM身份策略,授予它调用该Lambda的权限(不过更推荐第一种,因为资源策略直接绑定在Lambda上,权限控制更精准)
一句话总结
- 要是你的Lambda资源策略已经放开了账号内所有主体的调用权限,API Gateway能直接调用,但显式加针对性权限更稳妥
- 要是你说的是Lambda执行角色的策略,那必须专门给API Gateway配置调用权限
内容的提问来源于stack exchange,提问作者12angrymengolf
相关产品推荐
相关产品推荐

