如何仅允许指定Lambda函数失效AWS API Gateway缓存?
API Gateway缓存失效权限控制的误区与解决办法
你的核心误区
你混淆了两种缓存失效机制的权限控制逻辑:
- 给Lambda配置的
execute-api:InvalidateCache策略,管的是通过AWS SDK/CLI调用API Gateway的缓存失效接口(比如主动调用InvalidateCache操作)的权限,和前端请求带Cache-Control: max-age=0触发的缓存刷新完全是两码事。 - 默认情况下,API Gateway允许任何请求通过
Cache-Control: max-age=0或Pragma: no-cache头绕过缓存,这是缓存的默认行为,不受IAM策略约束。
解决办法
1. 禁用请求头触发的缓存失效
在API Gateway的阶段缓存设置里,找到缓存设置,关闭允许通过请求头失效缓存选项(不同控制台版本名称可能略有差异,比如英文界面的Enable cache invalidation via headers)。关闭后前端发送Cache-Control: max-age=0就不会触发缓存刷新了。
2. 确保Lambda的缓存失效权限正确
你现有的IAM策略没问题,但要明确:
- 这个权限是赋予Lambda执行角色的,用于让Lambda通过AWS SDK调用
execute-api:InvalidateCache接口主动清除缓存(比如写入DynamoDB完成后调用该接口)。 - Lambda代码里必须通过SDK调用缓存失效接口,而不是依赖请求头来触发。
验证配置
- 关闭请求头失效后,用Postman带
Cache-Control: max-age=0请求读取接口,应该返回缓存的旧数据。 - 触发写入数据的Lambda执行,完成后调用缓存失效接口,再请求读取接口,应该能拿到最新数据。
内容的提问来源于stack exchange,提问作者Deno123
相关产品推荐
相关产品推荐

