查看 Amazon CloudFront 分配的访问记录HTTPS、日志和TLS版本 - AWS Prescriptive Guidance

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

查看 Amazon CloudFront 分配的访问记录HTTPS、日志和TLS版本

由 SaiJeevan Devireddy (AWS) 和 Bijesh Bal () 创作 AWS

摘要

此模式会检查 Amazon CloudFront 分发,确保其使用HTTPS、使用传输层安全 (TLS) 版本 1.2 或更高版本,并且已启用访问日志记录。 CloudFront 是 Amazon Web Services (AWS) 提供的一项服务,可加快向用户分发静态和动态网页内容(例如.html、.css、.js 和图像文件)的速度。 CloudFront 通过名为边缘位置的全球数据中心网络交付您的内容。当用户请求与您一起提供的内容时 CloudFront,该请求会被路由到延迟(时间延迟)最低的边缘站点,以便以最佳性能交付内容。

此模式提供一个 AWS Lambda 函数,该函数在 Amazon Ev CloudWatch ents 检测到 CloudFront API调用CreateDistributionCreateDistributionWithTags、或时启动。UpdateDistributionLambda 函数中的自定义逻辑评估账户中创建或更新的所有 CloudFront 分配。AWS如果检测到以下违规行为,它将使用亚马逊简单通知服务 (AmazonSNS) 发送违规通知:

  • 全局性检查:

    • 自定义证书不使用 1.2 TLS 版

    • 已禁用分发日志记录

  • Origin 检查

    • Origin 没有在 1.2 TLS 版本中配置

    • 允许使用除以下协议以外的协议与源站通信 HTTPS

  • 行为检查:

    • 允许在除以下协议之外的协议上进行默认行为通信 HTTPS

    • 允许在除以下协议之外的协议上进行自定义行为通信 HTTPS

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

限制

  • 除非对发行版进行了更新,否则此安全控制不会检查现有的 Cloudfront 发行版。

  • CloudFront 被视为一项全球服务,与特定AWS区域无关。但是,全球服务的 Amazon CloudWatch 日志和 AWS Cloudtrail API 日志记录发生在美国东部(弗吉尼亚北部)区域 (us-east-1)。因此, CloudFront 必须在中部署和维护此安全控制措施us-east-1。此单一部署可监视所有发行版 CloudFront。请勿在任何其他AWS区域部署安全控制。(在其他区域部署将导致无法启动 CloudWatch 事件和 Lambda 函数,并且不会SNS收到任何通知。)

  • 该解决方案已经过 CloudFront 网络内容分发的广泛测试。它不包括实时消息协议 (RTMP) 流媒体分发。

架构

目标技术堆栈

  • Lambda 函数

  • SNS 主题

  • 亚马逊 EventBridge 规则

目标架构

Workflow diagram showing user interaction with AWS 服务 for distribution and notification.

自动化和扩缩

  • 如果您使用的是 Organ AWS izations,则可以使用 AWSCloudformation StackSets 在要监控的多个账户中部署附加的模板。

工具

AWS 服务

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

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

  • AWSLambda — Lambda 支持在不预配置或管理服务器的情况下运行代码。

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

  • Ama zon SNS — Amazon SNS 协调和管理发布商与客户之间的消息传送或发送,包括网络服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息,并且一个主题的所有订阅用户收到的消息都相同。

代码

随附代码包括:

  • 包含 Lambda 代码的 .zip 文件 (index.py)

  • 用于部署 Lambda 代码的 CloudFormation 模板(.yml 文件)

操作说明

任务描述所需技能
为 Lambda 代码创建 S3 存储桶

在 Amazon S3 控制台上,创建一个 S3 存储桶,其具有一个不包含前导斜杠的唯一名称。S3 存储桶名称是全球唯一的,命名空间由所有AWS账户共享。您的 S3 存储桶必须位于您计划部署 Lambda 代码的区域。

云架构师
将 Lambda 代码上传至 S3 存储桶。

附件部分中提供的 Lambda 代码(cloudfront_ssl_log_lambda.zip 文件)上传到您在上一步中创建的 S3 存储桶。

云架构师
任务描述所需技能
部署 CloudFormation 模板。

在AWS CloudFormation 控制台上,在与 S3 存储桶相同的AWS区域中,部署 “附件” 部分中提供的 CloudFormation 模板 (cloudfront-ssl-logging.yml)。 

云架构师
指定 S3 存储桶名称。

对于 S3 存储桶参数,请指定您在第一个操作说明中创建的 S3 存储桶的名称。

云架构师
为 Lambda 文件指定 Amazon S3 密钥名称。

对于 S3 密钥参数,请指定 S3 存储桶中 Lambda 代码 .zip 文件的 Amazon S3 位置。不要包含前导斜杠(例如,您可以输入 lambda.zip 或 controls/lambda.zip)。

云架构师
提供通知电子邮件地址。

通知电子邮件参数,提供您想要接收违规通知的电子邮件地址。

云架构师
定义日志记录级别。

Lambda 日志级别参数,定义您的 Lambda 函数的日志级别。选择以下任一值: 

  • INFO以获取有关应用程序进度的详细信息消息。

  • ERROR以获取有关仍然允许应用程序继续运行的错误事件的信息。

  • WARNING以获取有关潜在危害情况的信息。

云架构师
任务描述所需技能
确认订阅。

成功部署 CloudFormation 模板后,将创建一个新SNS主题,并将订阅消息发送到您提供的电子邮件地址。您必须确认此电子邮件订阅才能接收违规通知。

云架构师

附件

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