一元机场.cn官网下载

集团新闻

使用 AWS Lambda 运行时 API 代理扩展增强运行时安全性和治理 计算博客

强化 AWS Lambda 运行时安全性与治理的代理扩展

重点摘要

本文介绍了如何通过 AWS Lambda 运行时 API 代理模式来提高 Lambda 函数的安全性与治理。此方法让安全供应商和工程团队能够无侵入地提供增强的工具,能够在不改变函数代码的情况下拦截传入事件和传出响应。这一方法的应用场景包括清理事件负载、阻止恶意事件以及审计和增强负载等。

这篇文章由首席无服务器解决方案架构师 Anton Aleksandrov 和高级 AWS Lambda 产品经理 Shridhar Pandey 撰写。

AWS Lambda 运行时使用 Lambda 运行时 API 与 Lambda 服务进行通信。运行时用于检索待处理的传入事件,返回成功的处理响应给 Lambda 服务,并报告失败。本文展示了如何使用运行时 API 代理模式拦截传入事件和传出响应,而不需要更改函数代码。

这一方法使安全供应商和工程团队能够提供增强的、无侵入的安全与治理工具,用于 Lambda 函数的各种应用场景,例如清理事件负载、阻止恶意事件,以及审计和增强负载。

概述

Lambda 运行时 API 是一个可在 Lambda 执行环境 内使用的 HTTP 端点。它使执行函数代码的 Lambda 运行时能够与 Lambda 服务进行通信。受管的 Lambda 运行时如 Nodejs 或 Python以及 自定义运行时 都使用此接口,开发者可以在任意编程语言中创建自己的 Lambda 运行时。

Lambda 运行时使用运行时 API 获取下一个待处理的事件,并将处理结果返回给 Lambda 服务。

Lambda 扩展 使您能够将 Lambda 函数与组织所需的监控、可观测性、安全和治理工具集成。您可以利用 AWS 管理扩展、AWS Lambda Ready 合作伙伴 和开源项目满足各种应用场景。扩展可以在不对函数代码进行侵入性修改的情况下,添加功能,如预获取配置或调度遥测。Lambda 扩展以 Lambda 层 的形式打包,并在执行环境中作为单独的进程运行。

以下是运行时和扩展通过运行时 API 和扩展 API 端点与 Lambda 服务进行通信的示意图:

当您 向 Lambda 服务注册 扩展时,可以指定希望接收 INVOKE 事件。Lambda 服务在函数被调用时异步发送此事件到扩展。

提供的信息包含函数调用元数据,但不包括事件负载。这使得该事件对于可观测性很有用,但在应用程序安全和治理用例例如,检查负载是否存在漏洞、清理输入和阻止恶意事件中则有一定限制。

Lambda 运行时 API 代理是一种模式,它使您能够挂钩到函数调用请求和响应的生命周期。它允许您使用扩展实现高级别的安全、合规性、治理和可观测性场景,而不需要更改函数代码。您可以添加运行时安全机制,实现数据流进流出函数的审计程序,增强可观测性,自动注入追踪头等。

理解 Lambda 运行时 API 工作流

以下是 Lambda 运行时如何使用 Lambda 运行时 API 的示意:

一元机场登录

Lambda 运行时使用 AWSLAMBDARUNTIMEAPI 环境变量的值来发出运行时 API 请求。两个主要端点是 /next,用于检索下一个待处理事件,以及 /response,用于将事件处理结果返回给 Lambda 服务。此外,运行时 API 还提供报告失败的端点。请参阅完整的 协议和模式定义 。

运行时 API 代理方法的工作原理

运行时 API 代理是一个组件,您可以构建它来挂钩到调用工作流。它代理请求和响应,允许您增强它们并控制工作流:

当 Lambda 服务创建新的执行环境时,它首先初始化附加到函数的扩展。执行环境等待所有扩展通过调用 Extensions API /register 端点注册后,才会继续初始化运行时。这使您可以在扩展初始化期间启动运行时 API 代理 HTTP 监听器,为运行时请求提供服务。

默认情况下,运行时进程中的 AWSLAMBDARUNTIMEAPI 环境变量的值指向 Lambda 运行时 API 端点 1270019001。您可以使用 包装脚本 将该值更改为指向运行时 API 代理端点。

包装脚本允许您自定义 Lambda 函数的运行时启动行为,让您设定通过特定语言环境变量无法设置的配置参数。您可以通过设置 AWSLAMBDAEXECWRAPPER 环境变量来将包装脚本添加到函数中。以下包装脚本假设运行时 API 代理正在监听 9009 端口。

bash

!/bin/bash

export AWSLAMBDARUNTIMEAPI=1270019009exec @

您可以将此 export 行添加到现有的包装脚本中,或者创建一个新的包装脚本。

运行时 API 代理由 Lambda 服务在创建新的执行环境时引导,并且它随时准备代理来自 Lambda 运行时的请求。

实现运行时 API 代理逻辑

AWS 建议您使用编译为二进制可执行文件的编程语言如 Golang 或 Rust实现扩展。这使您能够将扩展与任意 Lambda 运行时一起使用。用解释性语言如 JavaScript 和 Python实现的扩展,或者需要额外虚拟机的语言如 Java 和 C#只能与该特定运行时一起使用。

下图展示一个场景,其中传入事件和传出响应都由扩展处理。您可以使用此工作流对事件或响应负载进行审计、清理或者注入额外属性。可以使用它来遮蔽账户号码、剔除个人识别信息PII或注入可观测性头。

此图演示了一个高级场景,其中第一个传入事件被识别为恶意,并被运行时 API 代理拒绝。函数处理程序未被调用。第二个事件没有被标记为恶意,因此被转发给处理程序进行处理。您可以利用此工作流处理运行时应用程序保护等安全场景。

使用 AWS Lambda 运行时 API 代理扩展增强运行时安全性和治理 计算博客

使用运行时 API 代理解决方案的 AWS 合作伙伴

“使用 Lambda 运行时 API 代理解决方案对于我们来说是一种颠覆性的方式。它使我们能够通过单一实现支持多个 Lambda 运行时,提供全面的可见性以观察 Lambda 执行,并允许我们检测攻击者对无服务器应用程序的攻击,” Datadog 应用安全管理工程经理 Julio Guerra 表示。

“Lambda 运行时 API 代理是一种简单的解决方案,提供了可以插入的方式保护 Lambda 函数 URL。我们可以在不修改函数代码的情况下实现请求授权和增强,” Okta Inc 解决方案工程高级经理 Ilya Zilber 表示。

安全最佳实践

扩展在与函数相同的执行环境中运行,因此它们对文件系统、网络和环境变量等资源拥有相同的访问级别。分配给函数的 IAM 权限与扩展共享。我们的建议是分配最少的所需权限给您的函数。

始终仅从可信的来源安装扩展。使用基础设施即代码IaC工具,如 AWS CloudFormation,简化将相同扩展配置包括 AWS 身份和访问管理IAM权限附加到多个函数的任务。此外,IaC 工具可以为您之前使用过的扩展和版本提供审计记录。

在构建扩展时,请勿记录敏感数据。在进行日志记录或持久化审计目的之前,清理负载和元数据。

其他考虑事项

运行时 API 代理的方法使您能够挂钩到 Lambda 请求/响应工作流,从而启用新的安全和可观测性用例。有几个重要的考虑点:

这需要您对 Lambda 执行环境生命周期和 Lambda 运行时 API 有良好的理解。您必须为所有运行时 API 端点实现代理,并处理潜在的运行时故障。准备您的扩展以支持组合,针对多个扩展实现运行时 API 代理模式的场景。允许您的扩展消费者通过环境变量配置扩展,使用至少两个参数代理监听的端口和代理转发请求的运行时 API 端点。后者应默认设置为 AWSLAMBDARUNTIMEAPI 环境变量的原始值。请参见下面的示例实现以获取详细信息。代理默认带有缓冲响应的 API 请求需要额外工作,以支持具有 响应负载流式处理 的函数。代理 API 请求会增加延迟。额外的开销取决于您的实现。AWS 建议使用可以编译为可执行二进制文件的编程语言,如 Rust 和 Golang,保持您的扩展轻量化和优化。

示例

您可以在 https//githubcom/awssamples/awslambdaextensions/ 找到实现运行时 API 代理的示例扩展。请查看 Golang、Rust 和 Nodejs 示例。

请按照 READMEmd 中描述的说明进行逐步教程,以运行该扩展。

结论

本文介绍并演示了 Lambda 运行时 API 代理模式。您可以利用此模式挂钩到 Lambda 函数请求和响应工作流中,以拦截、处理、审计、修改和阻止传入事件及处理程序响应。

您可以使用这一模式来实现强化的运行时安全和治理场景,以及来自其他领域的场景。AWS 客户和合作伙伴可以使用这一先进的解决方案方法为 Lambda 函数增加增强的安全性和可观测性,而无需进行代码更改。

欲了解更多无服务器学习资源,请访问 Serverless Land。

使用 Amazon EventBridge Scheduler 和 AWS Lambda 调整 Amazon RDS 的计划关键要点在这篇文章中,我们将介绍如何利用 Amazon EventBridge Scheduler 和 AWS Lambda,自动调度修改带有特定标签的 DB 实例。通过这种方...

在 Amazon ElastiCache for Redis 中处理地理空间数据主要重点在这篇文章中,我们将介绍如何使用 Amazon ElastiCache for Redis 来简化地理空间数据处理,通过一个打车应用的案例,展示其在性能、可扩展性及简易性方面的优势。 地理空间数据应用无处不在,例...