集中式日志记录和多账户安全防护机制 - AWS Prescriptive Guidance

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

集中式日志记录和多账户安全防护机制

由 Ankush Verma (AWS)、Shree Gautam ()、Tracy Hickey (AWS) 和 Corie White (AWS) 创作 AWS

环境:生产

技术:云原生、DevOps、基础设施、现代化、安全、身份、合规、管理和治理

AWS服务:AWS CloudFormation; AWS Config; 亚马逊; CloudWatch; 亚马逊 AWS CodePipeline; AWS Lambda GuardDuty; 亚马逊 Macie; Security AWS Hub; 亚马逊 S3

Summary

注意:AWS CodeCommit 不再向新客户开放。的现有客户 AWS CodeCommit 可以继续照常使用该服务。了解更多

此模式中涵盖的方法适用于在 Organizations 拥有多个 Amazon Web Services (AWS) 账户,并且现在在使用 Cont AWS rol Tower、着陆区或账户自动售货机服务在账户中设置基准护栏时遇到挑战的客户。AWS

该模式演示了如何使用简化的多账户架构以结构良好的方式设置集中式日志记录和标准化安全控制。在AWS CloudFormation 模板和自动化脚本的帮助下,此设置部署在属于组织的所有账户中。AWS CodePipeline

多账户架构包含以下账户:

  • 集中式日志账户 — 存储所有虚拟私有云 (VPC) 流日志、日志、C AWS onfig AWS CloudTrail 日志以及来自所有其他账户的 Amazon Lo CloudWatch gs(使用订阅)的所有日志(使用订阅)的账户。

  • 父级安全账户 - 作为跨多个账户管理的以下安全服务的父账户的账户。

    • Amazon GuardDuty

    • AWS Security Hub

    • Amazon Macie

    • Amazon Detective

  • 子账户 - 组织中的其他账户。这些账户将所有有用的日志存储至集中式日志记录账户中。子账户作为安全服务成员加入父级安全账户。

启动 CloudFormation 模板(附后)后,它会在集中日志账户中配置三个亚马逊简单存储服务 (Amazon S3) 存储桶。一个存储桶用于存储所有账户的所有AWS相关日志(例如 Flo VPC w Logs 和 AWS Config 中的日志)。 CloudTrail第二个存储桶用于存储所有账户的 CloudFormation 模板。第三个存储桶用于存储 Amazon S3 访问日志。

使用单独的 CloudFormation 模板创建管道AWS CodeCommit。将更新的代码推送到 CodeCommit 存储库后,它负责启动资源并在所有账户中设置安全服务。有关将上传到 CodeCommit 存储库的文件的文件结构的更多信息,请参阅 README .md 文件(附件)。

先决条件和限制

先决条件

  • 一个 Or AWS ganizations 组织 ID,其中所有账户都加入了同一个组织。

  • 用于接收亚马逊简单通知服务 (AmazonSNS) 通知的有效电子邮件地址。

  • 已确认您的每个账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶配额。默认情况下,每个账户有 100 个 S3 存储桶。如果需要额外的存储桶,请在部署此解决方案之前申请增加配额。

限制

所有账户都属于同一组织。如果您未使用 Org AWS anizations,则必须修改某些策略(例如 S3 存储桶策略),以允许每个账户的AWS身份和访问管理 (IAM) 角色进行访问。

注意:在部署解决方案期间,您必须确认 Amazon SNS 订阅。确认消息将发送到您在部署过程中提供的电子邮件地址。这将向该电子邮件地址发送几封电子邮件提醒消息,因为每当在账户中创建或修改IAM角色策略时,就会启动这些警报。在部署过程中,您可能忽略这些警报消息。

架构

目标技术堆栈

  • Amazon CloudWatch 警报和日志

  • AWS CodeCommit 存储库

  • AWS CodePipeline

  • AWSConfig

  • Amazon Detective

  • Amazon GuardDuty

  • IAM角色和权限

  • Amazon Macie

  • S3 存储桶

  • AWS Security Hub

  • Amazon SNS

目标架构

该图显示了三个AWS账户中的服务。
显示日志记录和安全服务详细信息的图表。
  1. 注册为安全部门父级安全账户子账户的其他账户

  2. 所有子账号(包括父级账户)的安全调查结果

资源

将更新的代码推送到每个账户和AWS地区的 CodeCommit 存储库时,会自动配置以下资源。

CloudFormation 堆栈 1 — 记录父堆栈

-嵌套堆栈 1-标准IAM角色和策略

-嵌套堆栈 2 — 账户中的 AWS Config 设置

-嵌套堆栈 3- CloudWatch 警报

            - SecurityGroupChangesAlarm

            - UnauthorizedAttemptAlarm

            - RootActivityAlarm

            - NetworkAclChangesAlarm

            - IAMUserManagementAlarm

            - IAMPolicyChangesAlarm

            - CloudTrailChangeAlarm

            - IAMCreateAccessKeyAlarm

      -指标筛选器,用于从 CloudTrail 日志中创建指标并将其用于警报

      -SNS 话题

CloudFormation 堆栈 2 — 父护栏堆栈

-嵌套堆栈 1 — 用于设置账户密码策略的 AWS Lambda 函数

-嵌套堆栈 2 — Bas AWS ic Config 规则

      - CIS-SecurityGroupsMustRestrictSshTraffic

      - OpenSecurityGroupRuleCheck 以及用于安全组规则评估的 Lambda 函数

      -check-ec2-for-required-tag

      - check-for-unrestricted-ports

CloudFormation 堆栈 3 — CloudWatch 日志导出

-使用 Amazon Kinesis 订阅将 CloudWatch 日志从日志组导出到亚马逊 S3

工具

  • AWS CloudFormation— AWS CloudFormation 使用模板以自动和安全的方式对所有AWS区域和账户的应用程序所需的所有资源进行建模和预置。

  • 亚马逊 CloudWatch — Amazon 实时 CloudWatch 监控您的AWS资源和您运行AWS的应用程序。您可以使用 CloudWatch 来收集和跟踪指标,这些指标是您可以衡量资源和应用程序的变量。

  • AWS CodeCommit— AWS CodeCommit 是由托管的版本控制服务。AWS您可以使用 CodeCommit 私密存储和管理云中的资产(例如文档、源代码和二进制文件)。

  • AWS CodePipeline— AWS CodePipeline 是一项持续交付服务,可用于对发布软件所需的步骤进行建模、可视化和自动化。

  • AWSCon AWS fi@@ g — Config 提供您AWS账户中AWS资源配置的详细视图。这些信息包括资源之间的关联方式以及资源以前的配置方式,让您了解资源的配置和关系如何随着的时间的推移而更改。

  • Amazon Detective — Amazon Detective 用于分析、调查和快速识别安全结果或可疑活动的根本原因。Detective 会自动从您的AWS资源中收集日志数据。然后,它使用机器学习、统计分析和图形理论,以帮助您更快、更高效地实现可视化并进行安全调查。

  • Ama zon GuardDuty — Amazon GuardDuty 是一项持续的安全监控服务,用于分析和处理流日志、 CloudTrail 管理事件日志、 CloudTrail 数据事件日志和域名系统 (DNS) 日志。它使用威胁情报源(例如恶意 IP 地址和域名列表)以及机器学习来识别AWS环境中意外且可能未经授权的恶意活动。

  • AWSIdent@@ ity and Acces s Managem AWS ent — Identity and Access Management (IAM) 是一项网络服务,可帮助您安全地控制对AWS资源的访问。您可以使用IAM控制谁经过身份验证(登录)和授权(拥有权限)使用资源。

  • Amazon Macie — Amazon Macie 可自动发现敏感数据,例如个人身份信息 PII () 和财务数据,让您更好地了解您的组织存储在 Amazon S3 中的数据。

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

  • AWSSec@@ urit AWS y Hub — Security Hub 为您提供安全状态的全面视图,AWS并帮助您根据安全标准和最佳实践检查您的环境。

  • Amaz on SNS — Amazon 简单通知服务 (AmazonSNS) 是一项托管服务,可从发布者向订阅者(也称为制作者和消费者)提供消息传送。

最佳实践

<作者删除这些注释:提供一份指南和建议列表,以帮助用户更有效地实施此模式。>

操作说明

任务描述所需技能

启动 Childaccount_ IAM _role_all_accounts.yaml 模板,在 us-east-1 区域创建角色 CloudFormation 。IAM

要创建所需的IAM角色和权限,您必须在 us-east-1 区域的每个账户(集中登录账户、家长安全账户和组织中的所有其他AWS账户)中逐个手动启动此模板。Childaccount_IAM_role_All_Accounts.yaml 模板位于软件包的 /templates/initial_deployment_templates 目录中。该IAM角色用于API调用配置和设置架构的其余部分。确保作为参数传递的IAM角色名称在所有账户中保持一致。

云架构师

在模板参数中,提供IAM角色的名称。

提供家长安全账户中可在所有其他子女账户中扮演的IAM角色。 CodeBuild默认角色名为 security_execute_child_stack_role

云架构师

在参数中,提供父安全账户的账户 ID。

父安全账户是 CodeBuild 运行的账户。

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

在集中式日志账户中,在 us-east-1 中,启动 S3Buckets-Centridation-.yaml 模板。LoggingAccount CloudFormation

要在集中式日志记录账户中创建 S3 存储桶,请启动 S3Buckets-Centralized-LoggingAccount.yaml。模板位于软件包的 /templates/initial_deployment_templates 目录中。S3 存储桶将存储所有日志、模板以及 Amazon S3 访问日志。记下所有 S3 存储桶名称,您将在以下步骤中使用这些名称修改参数文件。

云架构师

在模板参数中,提供用于存储AWS日志的 S3 存储桶的名称。

输入 S3 Bucket Name for Centralized Logging in Logging Account 参数的名称。此存储桶充当存储来自所有账户的AWS日志(例如流 CloudTrail 日志和日志)的集中位置。记下存储桶名称和 Amazon 资源名称 (ARN)。

云架构师

提供用于存储访问日志的 S3 存储桶的名称。

S3 Bucket Name for Access Logs in Logging Account 参数输入 S3 存储桶名称。此 S3 存储桶存储 Amazon S3 的访问日志

云架构师

提供用于存储模板的 S3 存储桶的名称。

S3 Bucket Name for CloudFormation Template storage in Logging Account 参数中输入 S3 存储桶名称。

云架构师

还要提供组织 ID。

要提供对组织内的 S3 存储桶的访问权限,请在 Organization Id for Non-AMS accounts 参数中输入组织的 ID。

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

启动 security-guard-rails-codepipeline-集中化-SecurityAccount .yml 模板。 CloudFormation

要部署 CI/CD 管道,请在 us-east-1 的父安全账户中手动启动 security-guard-rails-codepipeline-Centralized-SecurityAccount.yml 模板。模板位于软件包的 /templates/initial_deployment_templates 目录中。该管道将在所有子账户中部署所有基础设施。

云架构师

提供将在集中日志记录账户中存储模板的 S3 存储桶的名称。

输入您在步骤 2 中为 S3 Bucket Name for the CloudFormation Template storage in Logging Account 参数提供的 S3 存储桶的名称。

云架构师

提供要在子账户中使用的IAM角色的名称。

输入您在第 1 步骤中为 Name of the IAM role 参数提供的名称。

云架构师

提供用于接收 CodePipeline 失败通知的有效电子邮件地址。

输入您要用于接收 CodePipeline 失败通知和其他 CloudWatch 警报相关通知的电子邮件地址。

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

修改 Accountlist.json。

在文件包的顶层 Accountlist.json 文件中,添加父级安全账号和子级账号。请注意,该 ChildAccountList 字段还包括父级安全账号。参见软件包中 deployment-instructions.md 文件中的示例。

云架构师

修改 accounts.csv

accounts.csv 文件包的顶层文件中,添加所有子级账户以及向这些账户注册的电子邮件。参阅 deployment-instructions.md 文件中的示例:

云架构师

修改 parameters.config。

/templates 文件夹中的 parameters.config 文件中,更新以下六项参数:

  • pNotifyEmail:您在设置管道时提供的电子邮件地址(请参阅步骤 3)

  • pstackNameLogging: 用于集中式日志记录的 CloudFormation 堆栈名称

  • pS3LogsBucket:S3 存储桶的名称,用于存储所有账户的日志(请参阅步骤 2)

  • pBucketName: ARN 用于存储日志的 S3 存储桶

  • pTemplateBucketName:用于存储模板的 S3 存储桶的名称(请参阅步骤 2

  • pAllowedAccounts: 家长和子女账户的账户 IDs

对于其他参数,您可保留默认值。例如,请参阅软件包中的 deployment-instructions.md 文件。

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

访问您在步骤 3 中创建的 CodeCommit 存储库。

在 CI/CD 基础架构 CloudFormation 堆栈(在步骤 3 中启动)的 “出” 部分,记下存储库的 CodeCommit 名称。URL创建对存储库的访问权限,以便可以将文件推送至存储库,以便在所有目标账户中部署基础设施。有关更多信息,请参阅设置AWS CodeCommit

云架构师

将文件推送到 CodeCommit 存储库。

在您的计算机上安装 Git。然后运行 Git 命令克隆空存储库,将文件从笔记本电脑复制到存储库文件夹,然后将工件推送至存储库。在包中的 deployment-instructions.md 文件中查看示例 Git 命令。有关基本的 Git 命令,请参阅相关资源部分。

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

确认 CodePipeline 和的状态 CodeBuild。

将构件推送到 CodeCommit 存储库后,请确认您在步骤 3 中创建的 CodePipeline 管道已启动。然后检查 CodeBuild 日志以确认状态或错误。

云架构师

相关资源

附件

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