

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

# 查看亚马逊 CloudFront 分配的访问日志、HTTPS 和 TLS 版本
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version"></a>

*SaiJeevan Devireddy 和 Bijesh Bal，亚马逊 Web Services*

## Summary
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-summary"></a>

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

此模式提供了一个 AWS Lambda 函数，该函数在亚马逊 CloudWatch 事件检测到 CloudFront API 调用[CreateDistribution[CreateDistributionWithTags](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistributionWithTags.html)](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)、或时启动。[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)Lambda 函数中的自定义逻辑会评估在 AWS 账户中创建或更新的所有 CloudFront 分配。如果检测到以下违规行为，它会使用 Amazon Simple Notiﬁcation Service (Amazon SNS) 发送违规通知：
+ 全局性检查：
  + 自定义证书不使用 TLS 1.2 版
  + 已禁用分发日志记录
+ Origin 检查
  + Origin 未配置 TLS 1.2 版
  + 允许在 HTTPS 以外的协议上与源站进行通信
+ 行为检查：
  + 允许在 HTTPS 以外的协议上进行默认行为通信
  + 允许在 HTTPS 以外的协议上进行自定义行为通信

## 先决条件和限制
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-prerequisites-and-limitations"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 您希望接收违规通知的电子邮件地址

**限制**
+ 除非对发行版进行了更新，否则此安全控制不会检查现有的 Cloudfront 发行版。
+ CloudFront 被视为一项全球服务，与特定的 AWS 区域无关。但是，全球服务的 Amazon CloudWatch 日志和 AWS Cloudtrail API 日志记录发生在美国东部（弗吉尼亚北部）区域 (`us-east-1`)。因此， CloudFront 必须在中部署和维护此安全控制措施`us-east-1`。此单一部署可监视所有发行版 CloudFront。请勿在任何其他 AWS 区域部署安全控件。（在其他区域部署将导致无法启动 CloudWatch 事件和 Lambda 函数，并且不会有 SNS 通知。）
+ 该解决方案已经过 CloudFront 网络内容分发的广泛测试。它不包含实时消息协议 (RTMP) 流式处理分发。

## 架构
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-architecture"></a>

**目标技术堆栈 **
+ Lambda 函数
+ SNS 主题
+ 亚马逊 EventBridge 规则

**目标架构**

![\[Workflow diagram showing AWS 服务 for distribution creation, event processing, and email notification.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/1ae60f8f-3eaf-40f5-b01f-06e30e5604ce/images/e1521c48-99f6-4ec6-9e53-8713f3cf5776.png)


**自动化和扩缩**
+ 如果您使用的是 AWS Organizations，则可以使用 [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) 在要监控的多个账户中部署所附的模板。

## 工具
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — CloudFormation 是一项通过使用基础设施即代码来帮助您建模和设置 AWS 资源的服务。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) — EventBridge 提供来自您自己的应用程序、软件即服务 (SaaS) 应用程序和 AWS 服务的实时数据流，并将这些数据路由到 Lambda 函数等目标。
+ [AWS Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)— 您可以运行代码，而无需预置或管理服务器。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) – Amazon Simple Storage Service (Amazon S3) 是一项高度可扩展的对象存储服务，可用于各种存储解决方案，包括网站、移动应用程序、备份和数据湖。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon SNS 可协调和管理发布者和客户端之间消息的传送或发送，包括 Web 服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息，并且一个主题的所有订阅用户收到的消息都相同。

**代码**

随附代码包括：
+ 包含 Lambda 代码的 .zip 文件 (index.py)
+ 用于部署 Lambda 代码的 CloudFormation 模板（.yml 文件）

## 操作说明
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-epics"></a>

### 上传安全控件
<a name="upload-the-security-control"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Lambda 代码创建 S3 存储桶 | 在 Amazon S3 控制台上，创建一个 S3 存储桶，其具有一个不包含前导斜杠的唯一名称。S3 存储桶名称是全局唯一的，并且命名空间由所有 Amazon Web Services account 共享。您的 S3 存储桶必须位于您计划部署 Lambda 代码的区域。 | 云架构师 | 
| 将 Lambda 代码上传至 S3 存储桶。 | 将*附件*部分中提供的 Lambda 代码（cloudfront\$1ssl\$1log\$1lambda.zip 文件）上传到您在上一步中创建的 S3 存储桶。 | 云架构师 | 

### 部署 CloudFormation 模板
<a name="deploy-the-cloudformation-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署 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 函数的日志级别。选择以下任一值： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.html) | 云架构师 | 

### 确认订阅
<a name="confirm-the-subscription"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确认订阅。 | 成功部署 CloudFormation 模板后，将创建一个新的 SNS 主题，并将订阅消息发送到您提供的电子邮件地址。您必须确认此电子邮件订阅才能接收违规通知。 | 云架构师 | 

## 相关资源
<a name="check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version-related-resources"></a>
+ [AWS CloudFormation 信息](https://aws.amazon.com/cloudformation/)
+ 在 [AWS CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)（CloudFormation 文档）
+ [CloudFront 记录](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/logging.html)（CloudFront 文档）
+ [Amazon S3 信息](https://aws.amazon.com/s3/)
+ [AWS Lambda 信息](https://aws.amazon.com/lambda/)

## 附件
<a name="attachments-1ae60f8f-3eaf-40f5-b01f-06e30e5604ce"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/1ae60f8f-3eaf-40f5-b01f-06e30e5604ce/attachments/attachment.zip)