aws-samples/baseline-environment-on-aws

GitHub: aws-samples/baseline-environment-on-aws

BLEA 是一组 AWS CDK 参考模板,用于在独立账户或 Control Tower 多账户环境中快速建立安全治理基线并部署典型业务系统架构。

Stars: 464 | Forks: 74

# AWS 上的基线环境 [![release](https://img.shields.io/github/v/release/aws-samples/baseline-environment-on-aws)](https://github.com/aws-samples/baseline-environment-on-aws/releases) [![build](https://static.pigsec.cn/wp-content/uploads/repos/cas/80/80ad4351734e9414210220a62f09015166697fa94d23b3834d7c9000e8ead3ba.svg)](https://github.com/aws-samples/baseline-environment-on-aws/actions?query=workflow%3A"build") [用日语 (日本語) 查看此页面](README_ja.md) AWS 上的基线环境 (BLEA) 是一组参考 CDK 模板,用于在独立账户或基于 Control Tower 的多账户 AWS 环境中建立安全基线。该解决方案利用 AWS 安全服务提供基础且可扩展的 guardrail,并为典型的系统架构提供端到端的 CDK 示例代码。该模板对于深入了解 AWS 架构最佳实践,以及如何自定义 CDK 代码也非常有用,因为我们在代码中加入了详细的注释,以便用户了解为什么要进行自定义以及如何进行自定义。 快速导航 | [更新日志](CHANGELOG.md) | [操作指南](doc/HowTo.md) | [部署到多账户环境](/doc/DeployToControlTower.md) | [独立环境至 Control Tower](doc/Standalone2ControlTower.md) | [部署管道](doc/PipelineDeployment.md) | ## 治理架构 ### 运维模式 ![BLEA-OpsPatterns](https://static.pigsec.cn/wp-content/uploads/repos/cas/f9/f9259282247ee91e493f0c40384ca0c7e6d30d39c9ebf18513537ce0ba7a3740.png) ### 多账户治理(使用 Control Tower) ![BLEA-GovOverviewMultiAccount](https://static.pigsec.cn/wp-content/uploads/repos/cas/58/58ecb7ce0ab220316eb981fb1e33fc5c5b1f207e6ba3e5f745ce4ff977e3b9d9.png) ### 独立治理(使用独立账户) ![BLEA-GovOverviewSingleAccount](https://static.pigsec.cn/wp-content/uploads/repos/cas/02/02b84f7182808b487b130da054acfebdb20bfd90319614ef07d9f964314971ed.png) ## 基线架构 ### 多账户(使用 Control Tower) ![BLEA-ArchMultiAccount](https://static.pigsec.cn/wp-content/uploads/repos/cas/1b/1ba40f4de7f1642dcd8b8e12490781da1c9a7ff3de52ff773a8b307718131b65.png) ### 独立环境(使用独立账户) ![BLEA-ArchSingleAccount](https://static.pigsec.cn/wp-content/uploads/repos/cas/1d/1d016c352526ac7ad922c3049d971e6856ece20103b4aeb9cf9d0f648f8e411a.png) ### Stack 架构(独立环境) ![BLEA-StackDependency](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/449ffb8c795152f07252bdb6bc4a06a96b0dfb09083412451fa00d9b7777aa89.png) ## 治理基线 | 用例 | 文件夹 | | -------------------------------------------------- | ----------------------------------- | | 独立治理基线 | `usecases/blea-gov-base-standalone` | | Control Tower 治理基线(用于访客账户) | `usecases/blea-gov-base-ct` | - Control Tower 治理基线示例提供 3 种不同的部署选项 - 从当前环境直接部署 (blea-gov-base-ct.ts)(默认) - 使用 cdkPipeline 部署 (blea-gov-base-ct-via-cdk-pipelines.ts) - 使用 Control Tower 的 Account Factory Customization 部署 (blea-giv-base-ct-via-cdk-pipelines.ts) ## 访客系统示例架构列表 | 用例 | 文件夹 | | --------------------------------- | ------------------------------------------- | | 基于 ECS 的 Web 应用程序示例 | `usecases/blea-guest-ecs-app-sample` | | EC2 Web 应用程序示例 | `usecases/blea-guest-ec2-app-sample` | | Serverless API 应用程序示例 | `usecases/blea-guest-serverless-api-sample` | - ECS Web 应用程序示例提供两种不同的部署选项 - 从当前环境直接部署 (blea-guest-ecs-app-sample.ts)(默认) - 使用 cdkPipeline 部署 (blea-guest-ecs-app-sample-via-cdk-pipelines.ts) ## 部署流程 下面将介绍部署的步骤。如果仅仅是为了部署,不一定要构建编辑器环境,但我们建议准备一个包含编辑器的开发环境,因为这可以使代码修改变得更容易,并减少失误。 ### 前置条件 #### a. runtime 它使用以下 runtime。请根据各操作系统的说明进行安装。 - [Node.js] (https://nodejs.org/) (>= `18.0.0`) - `npm` (>= `8.1.0`) - [Git] (https://git-scm.com/) npm 使用了 workspaces,因此需要 8.1.0 或更高版本。请按如下方式安装最新版本。 ``` npm install -g npm ``` #### b. 开发环境 为了安全地编辑 CDK 代码,即使您不进行严格的开发,我们也建议您搭建一个开发环境。以下是设置 VisualStudioCode 的说明。 - [说明]: [VisualStudioCode 设置说明](doc/HowTo.md#VisualStudioCode-Setup-Instructions) ### 典型部署流程 使用 BLEA 时最典型的实施流程如下。以下是在单个账户上部署治理基线和访客应用程序的步骤。 1. 安装相关库并构建代码 2. 配置 AWS CLI 凭证 3. 创建用于部署的账户 4. 部署治理基线 5. 部署访客应用程序示例 ## 实施流程 在这里,我将以单账户的独立版本的最简单实施为例进行说明。 ### 1. 检出代码库并初始化项目 #### 1-1. 检出代码库 ``` git clone https://github.com/aws-samples/baseline-environment-on-aws.git cd baseline-environment-on-aws ``` #### 1-2. 初始化项目 安装 Node.js 所需的库。 ``` # 安装 dependencies npm ci ``` #### 1-3. 设置 Git pre-commit hook 注册一个 hook,以便在向 Git 提交时使用 linter、formatter 和 git-secrets 执行检查。请按照以下步骤进行设置。如果您仅仅是为了部署,则不需要此操作,但为了更安全的开发,我们建议您进行设置。 - [说明]: [Git pre-commit hook 设置](doc/HowTo.md#Git-pre-commit-hook-setup) ### 2. 设置您的 AWS CLI 凭证 部署 CDK 需要 AWS 凭证(API 密钥)。以下是使用永久凭证的最简单方法。 这主要用于开发环境的方法。在这里,作为 AWS CLI profile 的示例,我们将考虑使用两个账户:`prof_dev` 和 `prof_prod`。 ~/.aws/credentials ``` [prof_dev] aws_access_key_id = XXXXXXXXXXXXXXX aws_secret_access_key = YYYYYYYYYYYYYY region = ap-northeast-1 [prof_prod] aws_access_key_id = ZZZZZZZZZZZZZZZ aws_secret_access_key = PPPPPPPPPPPPPPPPPPPP region = ap-northeast-1 ``` ### 3. 创建用于部署的账户 #### 3-1. 创建新账户 使用 Organizations 创建新账户。 如果不使用 Organizations 也可以使用单个账户,但我们建议使用 Organizations 下的成员账户,以便将来更容易迁移到多账户管理环境。 #### 3-2. 设置 Slack 以备使用 AWS Chatbot BLEA 使用不同的 Slack 频道来通知安全事件和监控事件。在 Slack 上创建 2 个频道,并按照以下步骤执行 AWS Chatbot 的初始设置。 设置完成后,请记下 workspace ID (1) 和通知目标频道 ID (2),以备后续设置使用。 - [说明]: [为 AWS ChatBot 设置 Slack](doc/HowTo.md#set-up-slack-for-aws-chatbot) ### 4. 部署治理基线 #### 4-1. 设置部署参数 您必须指定每个用例特有的参数,例如部署账户和部署所需的通知电子邮件地址。BLEA 在一个名为 `parameter.ts` 的文件中管理参数。其格式为 TypeScript。 此处指定了单账户基线的参数。 ``` usecases/blea-gov-base-standalone/parameter.ts ``` 此示例定义了一个名为 `devParameter` 的参数集。为了验证类似的设置以便它们能够部署到生产账户,请定义 `stagingParameter` 和 `prodParameter` 等参数集,并使用 App(此处为 `bin/blea-gov-base-standalone.ts`)为每个环境创建 stack。 usecases/blea-gov-base-standalone/parameter.ts ``` //Example for Development export const devParameter: appParameter = { envName: 'Development', securityNotifyEmail: 'notify-security@example.com', securitySlackWorkspaceID: 'T8XXXXXXX', securitySlackChannelID: 'C00XXXXXXXX', //env: {account: '123456789012', region: 'ap-northeast-1'}, }; ``` 此设置的详细信息如下。 | 键 | 值 | | ------------------------ | ----------------------------------------------------------------------------------------------------------- | | envName | 环境名称。这将设置到每个资源标签上 | | securityNotifyEmail | 接收安全通知的电子邮件地址。内容类似于 Slack | | securitySlackWorkspaceID | 为 AWS Chatbot 设置的 Slack Workspace ID | | securitySlackChannelID | 为 AWS Chatbot 设置的 Slack 频道 ID。安全通知通过治理基线发出 | | env | 要部署的账户和区域(如果未指定,将使用 CLI 凭证) | #### 4-2. 部署治理基线 如果您是第一次运行 CDK,请转到目标用例目录并 bootstrap CDK。这是第一次使用目标账户和区域组合运行 CDK 时所必需的。 ``` cd usecases/blea-gov-base-standalone npx aws-cdk bootstrap --profile prof_dev ``` 部署治理基线。 ``` npx aws-cdk deploy --all --profile prof_dev ``` 这将设置以下功能 - 使用 CloudTrail 进行 API 日志记录 - 使用 AWS Config 记录配置更改 - 使用 GuardDuty 检测异常行为 - 通过 SecurityHub(AWS Foundational Security Best Practice、CIS Benchmark)检测偏离最佳实践的情况 - 阻止默认安全组(如果出现偏差会自动修复) - AWS Health 事件通知 - 影响安全的变更操作通知(部分) - 创建用于通知安全事件的 SNS topic (SecurityAlarmTopic) - 通过上述 SNS topic 发送电子邮件并向 Slack 的安全频道发送通知 #### 4-3. (可选)手动设置其他基线配置 除了在治理基础上的设置之外,AWS 还提供了几项运维基线服务。请根据需要设置这些服务。 ##### a. 启用 Amazon Inspector Amazon Inspector 会扫描工作负载并管理漏洞。我们会持续扫描 EC2 和 ECR,以检测软件漏洞和意外的网络暴露。检测到的漏洞会根据计算出的风险分数进行优先级排序和显示,因此可以获得高可视化的结果。此外,它会自动与 Security Hub 集成,可以集中查看检测结果。 设置说明:[https://docs.aws.amazon.com/inspector/latest/user/getting_started_tutorial.html] ##### b. 执行 AWS Systems Manager Quick Setup 以进行 EC2 管理 如果您使用 EC2,我们建议使用 SystemsManager 进行管理。通过使用 AWS Systems Manager Quick Setup,您可以自动化管理 EC2 所需的基础设置。 请参阅:[https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html] Quick Setup 提供以下功能: - 配置 Systems Manager 所需的 AWS Identity and Access Management (IAM) 实例配置文件角色 - 每 2 周自动更新一次 SSM Agent - 每 30 分钟收集一次 Inventory 元数据 - 每日扫描以检测缺失补丁的实例 - 首次安装和配置 Amazon CloudWatch agent - 每月自动更新 CloudWatch agent ##### c. Trusted Advisor 检测结果报告 TrustedAdvisor 提供有关遵循 AWS 最佳实践的建议。可以通过电子邮件定期接收报告详细信息。有关更多详细信息,请参阅以下文档。 - 请参阅:[https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#preferences-trusted-advisor-console] ### 5. 部署访客应用程序示例 一旦完成了基于治理的配置,就会在其上部署访客应用程序。 以下是以访客应用程序为例部署 Serverless API 应用程序示例的步骤。 #### 5-1. 设置访客应用程序参数 在部署之前配置访客应用程序。 转到 Serverless API 应用程序示例所在的 `usecases/blea-guest-serverless-api-sample` 并编辑 parameter.ts。 usecases/blea-guest-serverless-api-sample/parameter.ts ``` //example export const devParameter: appParameter = { envName: 'Development', monitoringNotifyEmail: 'notify-security@example.com', monitoringSlack WorkspaceID: 'TXXXXXXXXXX', monitoringSlackChannelID: 'CYYYYYYYYY', //env: {account: '123456789012', region: 'ap-northeast-1'}, }; ``` 设置如下: | 键 | | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | envName | 环境名称。这会设置到每个资源标签上。 | | MonitoringNotifyEmail | 接收系统监控相关通知的电子邮件地址。 | | SlackNotifier.workspaceID | 为 AWS Chatbot 设置的 Slack workspace ID | | SlackNotifier.channelIdmon | 为 AWS Chatbot 设置的 Slack 频道 ID。将发送有关系统监控的通知。请指定一个与安全频道不同的频道。 | | env | 要部署的账户和区域(如果未指定,它将使用 CLI 凭证) | #### 5-2. 部署访客应用程序 ``` cd usecases/blea-guest-serverless-api-sample npx aws-cdk deploy --all --profile prof_dev ``` 这样就完成了向单个账户部署基线和示例应用程序的操作。 #### 5-3. 开发您自己的应用程序 之后,我将从这个示例代码开始,开发适合我使用场景的应用程序。它展示了一般开发所需的信息。 - [开发流程](doc/HowTo.md#development-process) - [更新包依赖](doc/HowTo.md#update-package-dependencies) #### 5-4. 安全问题的修复 即使部署了治理基线之后,在 Security Hub 基准报告中,仍然有一些严重性被报告为 CRITICAL 或 HIGH 级别的检测项。这些需要手动处理。如有必要,请执行修复。 - [修复安全问题](doc/HowTo.md#remediate-security-issues) ## 版本控制策略 BLEA 对治理基线 (blea-govern-base-ct, blea-govern-base-standalone) 采用了语义化版本控制。只要没有主要版本更改,治理基线就会保持向后兼容性。当主要版本发生更改时,会提供迁移指南。 访客系统示例不符合语义化版本控制的条件。它们旨在提供示例代码,随时可能发生破坏性更新。当主要版本发生更改时,也不会提供迁移指南。 ### 如何从 v2 迁移到 v3 请阅读[如何迁移到 v3](doc/HowToMigrateToV3.md)。 ## 安全 有关更多信息,请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。 ## 许可证 该库使用 MIT-0 许可证授权。请参阅 LICENSE 文件。
标签:AWS, DPI, MITM代理, 云计算, 安全合规, 系统运维, 网络代理, 自动化攻击, 规则引擎