确保 AWS 负载均衡器使用安全侦听器协议 (HTTPS、SSL/TLS) - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

确保 AWS 负载均衡器使用安全侦听器协议 (HTTPS、SSL/TLS)

由 Chandini Penmetsa (AWS) 和 Purushotham G K (AWS) 编写

环境:生产

技术:安全性、身份、合规性

工作负载:所有其他工作负载

AWS 服务:亚马逊 SNS;AWS; CloudFormation亚马逊;AWS Lambda CloudWatch;Elastic Load Balancing (ELB)

总结

在 Amazon Web Services (AWS) 云上,弹性负载均衡会自动将传入的应用程序流量分配到多个目标,例如 Amazon Elastic Compute Cloud (Amazon EC2)实例、容器、IP 地址和 AWS Lambda 函数。负载均衡器使用侦听器定义负载均衡器用来接受来自用户的流量的端口和协议。应用程序负载均衡器在应用层做出路由决策并使用 HTTP/HTTPS 协议。网络负载均衡器在传输层做出路由决策,并使用传输控制协议 (TCP)、传输层安全性协议(TLS)、用户数据报协议 (UDP) 或 TCP_UDP 协议。经典负载均衡器使用 TCP 或安全套接字层 (SSL) 协议在传输层做出路由决策,或使用 HTTP/HTTPS 在应用层做出路由决策。

您的组织可能有安全或合规要求,即负载均衡器仅接受使用安全协议 (例如 HTTPS 或 SSL/TLS) 的用户的流量。

此模式提供了一种安全控制,它使用 Amazon EventBridge 规则来监控应用程序负载均衡CreateListener器和网络负载均衡器的和 ModifyListener API 调用,以及传统负载均衡器的CreateLoadBalancerListenersCreateLoadBalancer API 调用。如果将 HTTP、TCP/UDP 或 TCP_UDP 用于负载均衡器侦听器协议,则该控件将调用 Lambda 函数。Lambda 函数将消息发布到 Amazon Simple Notification Service (Amazon SNS) 主题,以发送包含负载均衡器详细信息的通知。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 接收违规通知的电子邮件地址

  • 用于存储 Lambda 代码 .zip 文件的 Amazon Simple Storage Service(Amazon S3)存储桶。

限制

  • 除非对负载均衡器侦听器进行了更新,否则此安全控制不会检查现有的负载均衡器。

  • 此安全控制是区域性的,必须部署至您打算监控的 Amazon Web Services Region。

架构

目标技术堆栈

  • Lambda 函数

  • Amazon SNS 主题

  • EventBridge 规则

目标架构

自动化和扩展

  • 如果您使用的是 AWS Organizations,则可以使用 AWS Cloudformation 将此模板部署 StackSets到您想要监控的多个账户中。

工具

  • AWS CloudFormation — AWS CloudFormation 是一项通过使用基础设施即代码来帮助您建模和设置 AWS 资源的服务。

  • 亚马逊 EventBridge — 亚马逊 EventBridge 提供来自您自己的应用程序、软件即服务 (SaaS) 应用程序和 AWS 服务的实时数据流,并将这些数据路由到 Lambda 函数等目标。

  • AWS Lambda — Lambda 支持无需预置或管理服务器即可运行代码。

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) 是一项高度可扩展的对象存储服务,可用于各种存储解决方案,包括网站、移动应用程序、备份和数据湖。

  • Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 可协调和管理发布者和客户端之间消息的传送或发送,包括 Web 服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息,并且一个主题的所有订阅用户收到的消息都相同。

最佳实践

确保所使用的 SNS 主题不公开访问。有关更多信息,请参阅 AWS 文档

操作说明

任务描述所需技能

定义 S3 存储桶。

在 Amazon S3 控制台上,选择或创建一个 S3 存储桶。该存储桶名称具有唯一性,且不包含前导斜杠。S3 存储桶名称是全局唯一的,并且命名空间由所有 Amazon Web Services account 共享。您的 S3 存储桶必须与要评估的负载均衡器位于同一区域中。

云架构师

将 Lambda 代码上传至 S3 存储桶。

将“附件”部分中提供的 Lambda 代码 .zip 文件上传到定义的 S3 存储桶。

云架构师

部署 AWS CloudFormation 模板。

在 AWS CloudFormation 控制台上,在与 S3 存储桶相同的 AWS 区域中,部署 “附件” 部分中提供的模板。在下一个操作说明中,提供参数的值。

云架构师
任务描述所需技能

命名 S3 存储桶。

输入您在第一个操作说明中创建的 S3 存储桶的名称。

云架构师

提供 Amazon S3 前缀。

提供 Lambda 代码 .zip 文件在 S3 存储桶中的位置,不带前导斜杠(例如,<directory>/<file-name>.zip)。

云架构师

请提供 SNS 主题 ARN。

如果您想使用现有 SNS 主题发送违规通知,请提供 SNS 主题的 Amazon 资源名称(ARN)。要创建新的 SNS 主题,请将该值保留为None(默认值)。

云架构师

提供电子邮箱地址。

提供有效的电子邮件地址以接收 Amazon SNS 通知。

云架构师

定义日志记录级别。

定义 Lambda 函数的日志记录级别和频率。Info 指明有关应用程序进度的详细信息消息。Error 指明仍允许应用程序继续运行的错误事件。Warning 指明潜在的有害情况。

云架构师
任务描述所需技能

下载 模板。

下载 “附件” 部分中提供的 CloudFormation 模板。

云架构师

创建堆栈。

在与 S3 存储桶相同的区域中,导航到 CloudFormation 服务控制台,然后部署下载的模板。有关参数的详细信息,请参阅上一篇操作说明。

云架构师

验证资源。

堆栈创建完毕后,导航至资源选项卡,然后验证资源。模板将创建以下资源:

  • EventBridge 规则

  • Lambda 函数

  • Lambda 执行角色

  • Lambda 调用权限

云架构师
任务描述所需技能

确认订阅。

成功部署模板后,如果创建新的 SNS 主题,则会向参数中提供的电子邮件地址发送订阅电子邮件。您必须确认此电子邮件订阅才能接收违规通知。

云架构师

故障排除

问题解决方案

堆栈创建失败。错误发生在 GetObject。S3 错误代码: PermanentRedirect. S3 错误消息:存储桶位于此区域中:us-east-1。请使用此区域重试请求。

确保 S3 存储桶区域和堆栈部署区域相同。

堆栈创建失败。创建或更新 AWS Lambda 函数时不再支持 python 3.6 的运行时参数。

将第 186 行下载的模板从 Python 版本 3.6 更新至 3.9。

相关资源

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip