aws-samples/baseline-environment-on-aws
GitHub: aws-samples/baseline-environment-on-aws
BLEA 是一组 AWS CDK 参考模板,用于在独立账户或 Control Tower 多账户环境中快速建立安全治理基线并部署典型业务系统架构。
Stars: 464 | Forks: 74
# AWS 上的基线环境
[](https://github.com/aws-samples/baseline-environment-on-aws/releases)
[](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) |
## 治理架构
### 运维模式

### 多账户治理(使用 Control Tower)

### 独立治理(使用独立账户)

## 基线架构
### 多账户(使用 Control Tower)

### 独立环境(使用独立账户)

### Stack 架构(独立环境)

## 治理基线
| 用例 | 文件夹 |
| -------------------------------------------------- | ----------------------------------- |
| 独立治理基线 | `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代理, 云计算, 安全合规, 系统运维, 网络代理, 自动化攻击, 规则引擎