Az - Function Apps
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术: HackTricks 培训 GCP 红队专家 (GRTE)
Azure Functions 是一个 无服务器 解决方案,允许您编写更少的代码,维护更少的基础设施,并节省成本。无需担心部署和维护服务器,云基础设施提供了保持应用程序运行所需的所有最新资源。
在 Azure 门户中,Azure Functions 和 Azure API 管理之间的集成得以实现,允许 HTTP 触发函数端点作为 REST API 暴露。以这种方式暴露的 API 使用 OpenAPI 定义进行描述,提供了一个标准的、与语言无关的 RESTful API 接口。
Flex Consumption 计划 提供动态、事件驱动的扩展,具有灵活的计算选项。它会根据需求自动添加或删除函数实例,确保高效的资源使用和通过 按需付费模型 实现成本效益。该计划支持虚拟网络以增强安全性,并允许您通过预配置实例来减少冷启动。它非常适合经历可变工作负载并需要快速扩展而无需容器支持的应用程序。
传统的 Consumption 计划 是 Azure Functions 的默认无服务器托管选项,您只需在函数运行时为计算资源付费。它会根据传入事件的数量自动扩展,非常适合具有间歇性或不可预测工作负载的应用程序,具有很高的成本效益。虽然它不支持容器部署,但它包括优化以减少冷启动时间,适合需要自动扩展而无需管理基础设施开销的各种无服务器应用程序。
Premium 计划 针对需要一致性能和高级功能的应用程序而设计。它会根据需求自动扩展,使用预热工作者,消除冷启动,确保函数在经过一段时间的非活动后仍能及时运行。该计划提供更强大的实例、延长的执行时间,并支持虚拟网络连接。此外,它允许使用自定义 Linux 镜像,适合需要高性能和更大资源控制的关键任务应用程序。
Dedicated 计划,也称为应用服务计划,在应用服务环境中运行您的函数,使用专用虚拟机。该计划提供可预测的计费,并允许手动或自动扩展实例,非常适合不适合 Durable Functions 的长时间运行场景。它支持在同一计划上运行多个 Web 和函数应用,提供更大的计算规模,并通过应用服务环境 (ASE) 确保完全的计算隔离和安全的网络访问。此选项最适合需要一致资源分配和广泛自定义的应用程序。
Container Apps 使您能够在 Azure Container Apps 托管的完全管理环境中部署容器化的函数应用。此选项非常适合构建与其他微服务、API 和工作流并行运行的事件驱动的无服务器应用程序。它支持将自定义库与您的函数代码打包,将遗留应用程序迁移到云原生微服务,并利用高端处理能力和 GPU 资源。Container Apps 通过消除管理 Kubernetes 集群的需要简化了部署,非常适合寻求灵活性和可扩展性的开发人员。
在创建一个新的非容器化的函数应用时(但提供运行代码),代码和其他与函数相关的数据将存储在存储帐户中。默认情况下,Web 控制台将为每个函数创建一个新的存储帐户以存储代码。
此外,每当需要运行应用的新实例时,应用的代码将从这里获取并执行。
从攻击者的角度来看,这非常有趣,因为 对该存储桶的写入访问 将允许攻击者 破坏代码并提升权限 到函数应用内部的托管身份。
可以允许函数对所有互联网开放访问,而无需任何身份验证或基于 IAM 的访问。
也可以限制函数应用从互联网的访问,允许对函数应用的内部网络 (VPC) 访问。
从攻击者的角度来看,这非常有趣,因为可能可以从暴露在互联网的脆弱 Lambda 函数 转移到内部网络。
此外,函数应用可能有某些端点需要特定级别的身份验证,例如“管理员”或“匿名”。 攻击者可能会尝试访问 允许匿名的端点 以绕过限制并获取敏感数据或功能。
请注意,没有 RBAC 权限可以授予用户调用函数的访问权限。函数调用取决于创建时选择的触发器,如果选择了 HTTP 触发器,可能需要使用 访问密钥。
在使用 HTTP 触发器 创建函数内的端点时,可以指示触发函数所需的 访问密钥授权级别。提供三种选项:
ANONYMOUS:每个人都可以通过 URL 访问该函数。
FUNCTION:端点仅对使用 函数、主机或主密钥 的用户可访问。
ADMIN:端点仅对使用 主密钥 的用户可访问。
密钥类型:
函数密钥: 函数密钥可以是默认的或用户定义的,旨在仅授予对 函数应用内特定函数端点 的访问。这允许进行细粒度的安全控制,确保只有授权用户或服务可以调用特定函数,而不暴露整个应用程序。
主机密钥: 主机密钥也可以是默认的或用户定义的,提供对 函数应用内所有函数端点 的访问。当多个函数需要使用单个密钥访问时,这非常有用,简化了管理并减少了需要分发或安全存储的密钥数量。
主密钥: 主密钥 (_master
) 作为管理密钥,提供提升的权限,包括访问 函数应用的运行时 REST API。此 密钥无法被撤销,必须小心处理。至关重要的是 不要 与第三方共享主密钥或将其包含在本地客户端应用程序中,以防止未经授权的管理访问。
当将函数的身份验证设置为 ADMIN(而不是 ANONYMOUS 或 FUNCTION)时,需要使用此密钥。
系统密钥: 系统密钥由 特定扩展管理,并且在访问内部组件使用的 webhook 端点时是必需的。示例包括事件网格触发器和 Durable Functions,它们利用系统密钥与各自的 API 安全交互。可以通过 Azure 门户或密钥 API 重新生成系统密钥以维护安全性。
使用密钥访问函数 API 端点的示例:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)