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, 告警通知, 多账号管理, 自动化攻击, 自动化运维, 证据收集, 跨账号访问