本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
查看 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 规则
目标架构
自动化和扩缩
如果您使用的是 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 函数的日志级别。选择以下任一值:
| 云架构师 |
任务 | 描述 | 所需技能 |
---|---|---|
确认订阅。 | 成功部署 CloudFormation 模板后,将创建一个新SNS主题,并将订阅消息发送到您提供的电子邮件地址。您必须确认此电子邮件订阅才能接收违规通知。 | 云架构师 |
相关资源
在@@ AWS CloudFormation 控制台上创建堆栈(CloudFormation 文档)
CloudFront 记录(CloudFront 文档)
附件
要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip