本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 在企业规模上设置集中式日志记录
Aarti Rajput、Yashwant Patel 和 Amazon Web Services 的 Nishtha Yadav
摘要
集中式日志记录对于组织的云基础架构至关重要,因为它提供了对其运营、安全性和合规性的可见性。随着您的组织跨多个账户扩展其 AWS 环境,结构化的日志管理策略成为运行安全操作、满足审计要求和实现卓越运营的基础。
这种模式提供了一个可扩展的安全框架,用于集中来自多个 AWS 账户 和服务的日志,从而在复杂 AWS 的部署中实现企业级日志管理。该解决方案使用Terraform实现自动化,Terraform是一种基础设施即代码(IaC)工具,可 HashiCorp 确保一致和可重复的部署,并最大限度地减少手动配置。通过结合亚马逊 CloudWatch 日志、Amazon Data Firehose 和亚马逊简单存储服务 (Amazon S3) Service,您可以实施一个强大的日志聚合和分析管道,该管道可提供:
在整个组织中集中管理日志 AWS Organizations
使用内置安全控件自动收集日志
可扩展的日志处理和持久存储
简化的合规报告和审计跟踪
实时运营洞察和监控
该解决方案通过日志收集来自亚马逊 Elastic Kubernetes Service(Amazon EKS) AWS Lambda 容器、函数和亚马逊关系数据库服务(Amazon RDS)数据库实例的日志。 CloudWatch 它使用 CloudWatch 订阅过滤器自动将这些日志转发到专用的日志帐户。Firehose 管理着通往亚马逊 S3 的高吞吐量日志流管道,用于长期存储。亚马逊简单队列服务 (Amazon SQS) Simple Queue Service 配置为在创建对象时接收 Amazon S3 事件通知。这样可以与分析服务集成,包括:
用于日志搜索、可视化和实时分析的 Amazon OpenSearch 服务
Amazon Athena 用于基于 SQL 的查询
用于大规模处理的 Amazon EMR
用于自定义转换的 Lambda
QuickSight 用于仪表板的 Amazon
所有数据均使用 AWS Key Management Service (AWS KMS) 进行加密,整个基础架构通过使用 Terraform 进行部署,以实现跨环境的一致配置。
这种集中式日志记录方法使组织能够改善其安全状况,保持合规性要求,并优化其 AWS 基础架构的运营效率。
先决条件和限制
先决条件
通过使用为组织构建的着陆区 AWS Control Tower
Account F@@ actory for Terraform (AFT),已部署并配置了所需的帐户
用于配置基础架构的 Terraform
AWS Identity and Access Management (IAM) 跨账户访问的角色和策略
有关设置 AWS Control Tower、AFT 和应用程序账户的说明,请参阅 Epics 部分。
必填账户
您的组织中 AWS Organizations 应包括以下账户:
应用程序账户 — AWS 服务 (Amazon EKS、Lambda 和 Amazon RDS)运行和生成日志的一个或多个源账户
日志存档帐户-用于集中日志存储和管理的专用帐户
产品版本
架构
下图说明了一种 AWS 集中式日志架构,该架构提供了一种可扩展的解决方案,用于收集、处理来自多个应用程序帐户的日志,并将其存储到一个专用的日志存档帐户中。该架构可以有效地处理来自 AWS 服务 Amazon RDS、Amazon EKS 和 Lambda 的日志,并通过简化的流程将这些日志路由到日志存档账户中的区域 S3 存储桶。

该工作流程包括五个流程:
日志流进程
日志流过程从应用程序账户开始,在那里 AWS 服务 生成各种类型的日志,例如来自 Amazon RDS 的常规日志、错误日志、审计日志、慢速查询日志、来自 Amazon EKS 的控制平面日志以及来自 Lambda 的函数执行和错误日志。
CloudWatch 用作初始收集点。它在每个应用程序帐户中的日志组级别收集这些日志。
在中 CloudWatch,订阅筛选器决定应将哪些日志转发到中央账户。这些过滤器可让您精细控制日志转发,因此您可以指定确切的日志模式或完整的日志流进行集中化。
跨账号日志传输
日志将移至日志存档帐户。 CloudWatch 订阅过滤器便于跨账户转账并保留区域背景。
该架构建立了多个并行流,以有效地处理不同的日志源,从而确保最佳性能和可扩展性。
日志存档账户中的日志处理
在日志存档账户中,Firehose 处理传入的日志流。
每个区域都维护专用 Firehose 传输流,可以根据需要转换、转换或丰富日志。
这些 Firehose 流将处理过的日志传送到日志存档账户中的 S3 存储桶,该账户与源应用程序帐户位于同一区域(图中的区域 A),以维护数据主权要求。
通知和其他工作流程
当日志到达目标 S3 存储桶时,该架构会使用 Amazon SQS 实现通知系统。
区域 SQS 队列支持异步处理,并且可以根据存储的日志触发其他工作流程、分析或警报系统。
AWS KMS 为了安全
AWS KMS 为了安全起见,该架构包含在内。 AWS KMS 为 S3 存储桶提供加密密钥。这样可以确保所有存储的日志保持静态加密,同时保留区域加密以满足数据驻留要求。
工具
AWS 服务
Amazon CloudWatch 是一项监控和可观察性服务,它以日志、指标和事件的形式收集监控和操作数据。它提供了在 AWS 和本地服务器上运行的 AWS 资源、应用程序和服务的统一视图。
CloudWatch 日志订阅过滤器是匹配传入日志事件中的模式并将匹配的日志事件传送到指定 AWS 资源以供进一步处理或分析的表达式。
AWS Control Tower Account F@@ actory For Terraform (AFT) 设置了 Terraform 管道来帮助你在中配置和自定义账户。 AWS Control Tower AFT 提供基于 Terraform 的账户配置,同时允许您使用来管理您的账户。 AWS Control Tower
Amazon Data Firehos e 向亚马逊 S3、亚马逊 Redshift 和亚马逊服务等目的地提供实时流数据。 OpenSearch 它会自动扩展以匹配您的数据吞吐量,并且无需持续管理。
Amazon Elastic Kubernetes Service(Amazon EKS)是一项托管容器编排服务,可通过使用 Kubernetes 轻松部署、管理和扩展容器化应用程序。它会自动管理 Kubernetes 控制平面节点的可用性和可扩展性。
AWS Key Management Service (AWS KMS) 创建和控制用于加密数据的加密密钥。 AWS KMS 与其他服务集成 AWS 服务 ,以帮助您保护使用这些服务存储的数据。
AWS Lambda是一项无服务器计算服务,允许您在不预配置或管理服务器的情况下运行代码。它通过根据每个触发器运行代码来自动扩展您的应用程序,并且仅按您使用的计算时间收费。
Amazon Relational Database Service (Amazon RDS) 是一项托管的关系数据库服务,可以轻松地在云中设置、操作和扩展关系数据库。它提供了经济实惠且可调整大小的容量,同时自动执行耗时的管理任务。
Amazon Simple Queue Service (Amazon SQS) 是一项消息队列服务,使您能够分离和扩展微服务、分布式系统和无服务器应用程序。它消除了管理和操作面向消息的中间件的复杂性。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可提供可扩展性、数据可用性、安全性和性能。它可以从网络上的任何地方存储和检索任意数量的数据。
其他工具
Terraform
是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。
代码
此模式的代码可在 GitHub集中式日志
最佳实践
AWS 账户 在中的单个组织中使用多个 AWS Organizations。这种做法可以实现跨账户的集中管理和标准化日志记录。
使用版本控制、生命周期策略和跨区域复制配置 S3 存储桶。实施加密和访问日志以实现安全性和合规性。
通过使用带有标准时间戳和字段的 JSON 格式来实现常见的日志标准。使用一致的前缀结构和相关性 IDs ,便于跟踪和分析。
通过AWS KMS 加密和最低权限访问启用安全控制。保持 AWS CloudTrail 监控和定期轮换密钥以增强安全性。
设置配送跟踪的CloudWatch 指标和提醒。通过自动通知监控成本和绩效。
配置 Amazon S3 保留策略以满足合规性要求,并启用 Amazon S3 服务器访问日志以跟踪对 S3 存储桶提出的所有请求。保存 S3 存储桶策略和生命周期规则的文档。定期审查访问日志、存储桶权限和存储配置,以帮助确保合规性和安全最佳实践。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
使用 AFT 设置 AWS Control Tower 环境。 |
| AWS 管理员 |
为组织启用资源共享。 |
| AWS 管理员 |
验证或配置应用程序帐户。 | 要为您的用例配置新的应用程序帐户,请通过 AFT 创建这些帐户。有关更多信息,请参阅 AWS Control Tower 文档中的向 AFT 开通新账户。 | AWS 管理员 |
Task | 描述 | 所需技能 |
---|---|---|
将 |
| DevOps 工程师 |
查看和编辑用于设置应用程序帐户的输入参数。 | 在此步骤中,您将设置用于在应用程序账户中创建资源的配置文件,包括 CloudWatch 日志组、 CloudWatch 订阅筛选条件、IAM 角色和策略以及 Amazon RDS、Amazon EKS 和 Lambda 函数的配置详细信息。 在存储
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
将 |
| DevOps 工程师 |
查看和编辑用于设置日志存档帐户的输入参数。 | 在此步骤中,您将设置用于在日志存档账户中创建资源的配置文件,包括 Firehose 交付流、S3 存储桶、SQS 队列以及 IAM 角色和策略。 在
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
选项 1-从 AFT 部署 Terraform 配置文件。 | 在 AFT 中,AFT 管道是在您将包含配置更改的代码推送到 GitHub 对 Terraform (
注意如果您使用的是其他分支(例如 | DevOps 工程师 |
选项 2-手动部署 Terraform 配置文件。 | 如果您不使用 AFT 或想要手动部署解决方案,则可以使用
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
验证订阅过滤器。 | 要验证订阅过滤器是否正确地将日志从应用程序帐户日志组转发到日志存档帐户,请执行以下操作:
| DevOps 工程师 |
验证 Firehose 直播。 | 要验证日志存档账户中的 Firehose 流是否成功处理应用程序日志,请执行以下操作:
| DevOps 工程师 |
验证集中式 S3 存储桶。 | 要验证集中式 S3 存储桶是否正确接收和组织日志,请执行以下操作:
| DevOps 工程师 |
验证 SQS 队列。 | 要验证 SQS 队列是否收到有关新日志文件的通知,请执行以下操作:
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
选项 1-从 AFT 停用 Terraform 配置文件。 | 当您删除 Terraform 配置文件并推送更改时,AFT 会自动启动资源删除过程。
| DevOps 工程师 |
选项 2 — 手动清理 Terraform 资源。 | 如果您不使用 AFT 或者想要手动清理资源,请使用
| DevOps 工程师 |
故障排除
事务 | 解决方案 |
---|---|
CloudWatch 日志目标未创建或处于非活动状态。 | 请验证以下内容:
|
订阅筛选失败或停留在待处理状态。 | 请检查以下事项:
|
Firehose 传送流未显示任何传入记录。 | 请验证以下内容:
|
相关资源
Terraform 基础设施设置
(Terraform 文档) 部署 Terraform 版 Ac AWS Control Tower count Factory (AFT)(文档AWS Control Tower )
IAM 教程: AWS 账户 使用 IAM 角色委派访问权限 (IAMdocumentation)