使用 Amazon CloudFront 和 Lambda@Edge 保护 AWS Lambda 函
- 15
使用 CloudFront 和 Lambda@Edge 保护 AWS Lambda 函数 URL
由 James Beswick 于 2023 年 8 月 23 日发表在 Amazon CloudFront、AWS Lambda、Lambda@Edge、Serverless。
本文由高级解决方案架构师 Jerome Van Der Linden 撰写。

主要要点
使用 Lambda 函数 URLs 可以直接透过 HTTP 请求调用 AWS Lambda 函数。可选择将 URL 设置为公共或使用 AWS IAM 认证。Lambda@Edge 是 CloudFront 的一个功能,能让代码运行在更靠近终端用户的位置,用于处理 HTTP 请求和回应。本文将介绍如何透过 CloudFront 和 Lambda@Edge 来保护配置了 AWSIAM 认证类型的 Lambda 函数 URL。文章重点
Lambda 函数 URL 介绍
Lambda 函数 URL 是专用的 HTTPS 端点,用于 AWS Lambda 函数。它可以配置为公共和开放的 API,或者透过 AWS IAM 进行保护,从而仅允许经过身份验证的用户和角色调用。
Lambda@Edge 功能
Lambda@Edge 使开发者能在离用户更近的地方执行代码,通常是用来操控进入的 HTTP 请求或返回的 HTTP 回应,特别可以向请求中添加额外的标头如 ‘Authorization’。
架构概述
本例中包含四个主要组件: 启用函数 URL 的 Lambda 函数:这是应用程序的核心,包含向前端暴露的业务逻辑代码。 CloudFront 分发:用于以低延迟将内容提供给用户的内容传递网络CDN服务,并提升安全性。 边缘的 Lambda 函数:通过 Lambda@Edge 在用户接近的地方运行 Lambda 函数。这里用来为请求签名,添加适当的标头,从而实现 IAM 的身份验证。 调用 Lambda 函数 URL 的 Web 应用:这是在 React 中构建的单页应用,让用户请求一个或多个 Lambda 函数 URL。静态资源如 HTML 和 JavaScript 文件存储在 Amazon S3 中,并由 CloudFront 暴露和缓存。
请求流程
请求流程如下:1 用户通过客户端请求静态资源或 Lambda 函数 URL。2 对于静态资源,CloudFront 从 S3 或其缓存中检索并返回给客户端。3 如果请求针对 Lambda 函数 URL,首先转发到 Lambda@Edge。该函数使用 lambdaInvokeFunctionUrl 权限签名请求,并将 Authorization、XAmzSecurityToken 和 XAmzDate 标头添加到请求中。4 正确签名后,CloudFront 将请求转发给 Lambda 函数 URL。5 Lambda 触发函数的执行,处理任何业务逻辑例如书籍的创建、获取、更新、删除。6 Lambda 将函数的回应返回给 CloudFront。7 最后,CloudFront 将回应返回给客户端。
Lambda@Edge 事件类型
Lambda@Edge 可以在多种事件中被触发: 查看请求:CloudFront 收到来自用户的请求后。 起源请求:请求发送到起源之前。 起源回应:CloudFront 收到来自起源的回应后。 查看回应:在回应发送回客户端之前。
本示例使用“起源请求”类型来更新发送到起源Lambda 函数 URL的请求。
代码展示
后端使用 AWSIAM 认证类型和 CORS 的定义来添加 Lambda 函数 URL。以下是 Lambda 函数的构建示例:
javascriptconst getBookFunction = new NodejsFunction(this GetBookFunction { runtime RuntimeNODEJS18X memorySize 256 timeout Durationseconds(30) entry pathjoin(dirname /functions/books/booksts) environment { TABLENAME bookTabletableName } handler getBookHandler description 透过ID获取一本书})bookTablegrantReadData(getBookFunction)const getBookUrl = getBookFunctionaddFunctionUrl({ authType FunctionUrlAuthTypeAWSIAM cors { allowedOrigins [] allowedMethods [HttpMethodGET] allowedHeaders [] allowCredentials true }})
结论
本文介绍了如何使用 CloudFront 和 Lambda@Edge 保护配置了 IAM 认证的 Lambda 函数 URL。CloudFront 可以帮助防止 DDoS 攻击,并通过边缘函数将请求进行身份验证。对于需要更先进功能的情景,例如用户身份验证、请求验证或速率限制,考虑使用 Amazon API Gateway。
如需更多无伺服器相关学习资源,请访问 Serverless Land。
魔戒.net加速器下载