aws-samples/sample-collect-forensic-artifacts-s3
GitHub: aws-samples/sample-collect-forensic-artifacts-s3
这是一个基于 AWS CDK 的多账户安全监控方案,用于自动化部署取证收集基础设施,实现跨账户远程执行与集中证据管理。
Stars: 3 | Forks: 0
# 多账户安全监控工具
此 CDK 项目在多个 AWS 账户中部署安全监控基础设施:
- 一个托管监控基础设施的安全账户
- 部署了安全监控工具的多个客户账户
## 架构概述
该解决方案创建:
- **SecurityStack**:Step Functions 工作流、Lambda 函数、用于证据和工具的 S3 存储桶
- **AlertStack**:用于检测未经授权访问的 EventBridge 规则和 SNS 通知
- **CustomerStack**:用于远程执行的跨账户 IAM 角色和 SSM 文档
## 前置条件
1. **CloudTrail 配置**:安全账户必须配置有启用了 S3 数据事件(至少针对证据存储桶)的 CloudTrail 跟踪
2. **账户访问权限**:您需要拥有对所有目标账户(安全账户 + 客户账户)的管理员访问权限
3. **Node.js**:用于 CDK 部署的 18 或更高版本
## 设置说明
### 1. 安装依赖
```
# Clone repository
git clone
cd
# Install project dependencies
npm install
```
### 2. 配置常量
使用所需信息编辑 `constants/config.ts`:
```
export const SECURITY_ACCOUNT = "123456789012"; // Your security tooling account ID
export const CUSTOMER_ACCOUNTS = ["234567890123", "345678901234"]; // Target account IDs
export const ALLOW_LISTED_ROLE_NAMES = ["SecurityAnalystRole"]; // Roles allowed to access evidence bucket
export const ALERT_EMAIL_RECIPIENTS = ["soc_team@company.com"]; // Email addresses for alerts
```
### 3. AWS Profile 配置
在 `~/.aws/credentials` 中为每个账户配置单独的 AWS profile:
```
[security-account]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
region = us-east-1
[customer-account-1]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
region = us-east-1
[customer-account-2]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
region = us-east-1
```
**注意**:Profile 名称可以由您任意选择。您需要在部署命令中指定它们。
### 4. 引导 CDK 账户
使用各自的 profile 单独引导每个账户:
```
# Bootstrap security account
cdk bootstrap aws://123456789012/us-east-1 --profile security-account
# Bootstrap each customer account
cdk bootstrap aws://234567890123/us-east-1 --profile customer-account-1
cdk bootstrap aws://345678901234/us-east-1 --profile customer-account-2
```
### 5. 准备收集工具
`collection_assets/` 目录包含将自动部署到 S3 工具存储桶的工具:
- `run_collection.sh`:从 EC2 实例收集 bash 历史记录的 Bash 脚本
- 将任何额外的取证工具或脚本添加到此目录
**自定义**:根据您的安全要求修改 `run_collection.sh` 或添加新工具。
### 6. 部署栈
#### 合成 CloudFormation 模板
```
cdk synth
```
#### 部署安全基础设施
```
# Deploy to security account
cdk deploy SecurityStack AlertStack --profile security-account
```
#### 部署客户基础设施
```
# Deploy to each customer account
cdk deploy CustomerStack-234567890123 --profile customer-account-1
cdk deploy CustomerStack-345678901234 --profile customer-account-2
```
### 7. 配置电子邮件警报
1. `AlertStack` 部署后,检查您的电子邮件以获取 SNS 订阅确认信息
2. 点击发送到 `ALERT_EMAIL_RECIPIENTS` 中地址的每封电子邮件中的“Confirm subscription”(确认订阅)
3. 在 AWS SNS 控制台中验证订阅是否处于活动状态
## 部署验证
### 检查栈部署状态
```
# List deployed stacks
aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --profile security-account
aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --profile customer-account-1
```
### 验证跨账户信任关系
1. 在安全账户中:检查 Lambda 函数是否可以代入客户账户角色
2. 在客户账户中:验证 `SecurityCrossAccountRole` 是否存在并信任安全账户
### 测试收集工具
1. 检查 S3 工具存储桶是否包含 `run_collection.sh`
2. 验证客户账户中是否已创建 SSM 文档
3. 测试 Step Functions 执行(可选)
## 部署内容
### 安全账户资源
- **S3 存储桶**:证据存储和取证工具
- **Step Functions**:编排安全响应工作流
- **Lambda 函数**:处理工具同步、执行和结果上传
- **DynamoDB 表**:存储警报指标和执行历史
- **EventBridge 规则**:监控证据存储桶访问
- **SNS 主题**:发送未经授权访问的警报
### 客户账户资源
- **IAM 角色**:用于跨账户访问的 `SecurityCrossAccountRole`
- **SSM 文档**:
- `ToolSyncDocument`:从 S3 下载工具
- `ExecuteToolingDocument`:运行取证收集
- `UploadResultDocument`:将证据上传到安全账户
标签:AWS, AWS Cloud Development Kit, CDK, CloudTrail, DPI, ESC漏洞, EventBridge, IAM, Infrastructure as Code, Lambda, MITM代理, S3, Serverless, SNS, SSM, Step Functions, 告警通知, 多账号管理, 自动化攻击, 自动化运维, 证据收集, 跨账号访问