aws-samples/sample-security-agent-demo
GitHub: aws-samples/sample-security-agent-demo
这是一个用于展示 AWS Security Agent 功能的实操演示套件,覆盖了安全设计审查、AI 基础设施生成及代码审查、以及自动化渗透测试三大核心场景。
Stars: 5 | Forks: 0
# AWS Security Agent 演示套件
## 这个演示套件是什么?
这是一个实操演示套件,旨在展示 **AWS Security Agent** 在三个互补场景中的功能:自动化安全设计审查、结合安全代码审查的 AI 驱动基础设施生成,以及针对故意包含漏洞的基础设施的渗透测试。
### 工作原理
1. **审查** 安全漏洞模式以及代理如何检测它们(设计审查)
2. **生成** 使用 Amazon Bedrock 从自然语言生成 Terraform 基础设施,然后使用 AWS Security Agent 通过 GitHub 集成审查生成的代码是否存在安全问题(AI 基础设施生成器 - 示例应用)
3. **部署** 一个故意包含漏洞的 Web 应用程序并运行渗透测试(渗透测试)
4. **学习** AWS Security Agent 如何识别 10 个安全领域的漏洞
### 您将学到什么
- AWS Security Agent 如何检测 10 个安全领域的漏洞
- 如何使用 Amazon Bedrock 从自然语言生成 Terraform 代码(默认使用 Claude Sonnet 4)
- AWS Security Agent 如何通过 GitHub 拉取请求审查 AI 生成的基础设施代码中的安全问题
- AWS Security Agent 如何对 Web 应用程序执行渗透测试
- AWS 环境中常见的安全错误配置及其修复方法
### 演示流程
## 目录
- [前置条件](#prerequisites)
- [架构概述](#architecture-overview)
- [配置参考](#configuration-reference)
- [演示 1:设计审查](#demo-1-design-review)
- [演示 2:AI 基础设施生成器](#demo-2-ai-infrastructure-generator)
- [演示 3:渗透测试](#demo-3-penetration-testing)
- [成本估算](#cost-estimate)
- [清理](#cleanup)
- [其他资源](#additional-resources)
## 前置条件
### 必备工具
在部署任何演示之前安装这些工具:
| 工具 | 版本 | 安装 | 验证 |
|------|---------|-------------|--------|
| AWS CLI | v2+ | [安装指南](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) | `aws --version` |
| Terraform | v1.0+ | [安装指南](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) | `terraform version` |
| Python | 3.12+ | [安装指南](https://www.python.org/downloads/) | `python3 --version` |
| pip | 最新版 | 包含在 Python 中 | `pip3 --version` |
### AWS 账户要求
- 一个具有创建 IAM 角色、Lambda 函数、API Gateway、S3 存储桶、EC2 实例、RDS 数据库、VPC 和 ALB 权限的 AWS 账户
- 配置了凭证的 AWS CLI:
```
aws configure
# 输入您的 AWS Access Key ID、Secret Access Key 和默认区域 (us-east-1)
```
- **AWS Security Agent 访问权限**(演示 1 和演示 3):您必须有权访问 [AWS Security Agent 控制台](https://console.aws.amazon.com/securityagent/)和 Web 应用程序
- **Amazon Bedrock 模型访问权限**(演示 2):在部署之前,您必须在 Bedrock 控制台中为您计划使用的模型[启用模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html)。默认配置使用 **Anthropic Claude Sonnet 4**,但可以通过覆盖 `bedrock_model_id` 变量来使用任何 Bedrock 支持的模型
### 特定演示的前置条件
| 前置条件 | 演示 1 | 演示 2 | 演示 3 |
|-------------|--------|--------|--------|
| AWS Security Agent Agent Space | ✅ 必需 | — | ✅ 必需 |
| 带有仓库的 GitHub 账户 | — | ✅ 必需 | — |
| GitHub 个人访问令牌 | — | ✅ 必需 | — |
| Route 53 托管区域 | — | — | 可选 |
| `requests` Python 包 | — | ✅ `pip install requests` | — |
## 架构概述
### AI 基础设施生成器(演示 2)
### 渗透测试环境(演示 3)
### 使用的 AWS 服务
| 服务 | 演示 | 用途 |
|---------|------|---------|
| Amazon Bedrock | 演示 2 | Terraform 代码生成(默认为 Claude Sonnet 4,可配置) |
| AWS Lambda | 演示 2 | 请求处理和编排 |
| Amazon API Gateway | 演示 2 | REST API endpoint |
| Amazon S3 | 演示 2, 演示 3 | 上下文存储,存在漏洞的存储桶 |
| Amazon EC2 | 演示 3 | 存在漏洞的 Web 应用程序主机 |
| Amazon RDS (MySQL) | 演示 3 | 应用程序数据库 |
| Application Load Balancer | 演示 3 | 面向公众的入口点 |
| Amazon VPC | 演示 3 | 网络隔离 |
| Amazon Route 53 | 演示 3 | DNS 管理(可选) |
| AWS IAM | 全部 | 访问管理 |
## 配置参考
每个演示都使用 Terraform 变量进行配置。标记为 **Required**(必需)的变量没有默认值,用户必须通过 `terraform.tfvars` 或环境变量(`TF_VAR_`)提供。
### 演示 2 变量
文件:`github-review/terraform/terraform.tfvars`
(从 `terraform.tfvars.example` 复制)
| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| `github_token` | **Yes** | — | 具有 `Contents` 和 `Pull requests` 写入权限的 GitHub PAT |
| `github_owner` | **Yes** | — | GitHub 用户名或组织 |
| `github_repo` | **Yes** | — | 用于生成 PR 的目标仓库名称 |
| `aws_region` | No | `us-east-1` | 部署的 AWS 区域 |
| `project_name` | No | `bedrock-infra-generator` | 所有资源名称的前缀 |
| `bedrock_model_id` | No | `us.anthropic.claude-sonnet-4-20250514-v1:0` | Bedrock 推理配置文件 ID |
| `context_key` | No | `it-operations-tags.json` | 组织标签文件的 S3 key |
### 演示 3 变量
文件:`pen-test/terraform/terraform.tfvars`
(从 `terraform.tfvars.example` 复制)
| 变量 | 必需 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| `db_password` | **Yes** | — | RDS 管理员密码(最少 8 个字符) |
| `domain_name` | No | `""` (空) | Route 53 托管区域域名(例如,`example.com`)。留空以跳过 DNS 并使用 `alb_dns_name` 输出中的原始 ALB DNS 名称。 |
| `aws_region` | No | `us-east-1` | 部署的 AWS 区域 |
| `project_name` | No | `aws-security-agent-pentest` | 所有资源名称的前缀 |
| `instance_type` | No | `t3.micro` | EC2 实例类型 |
| `db_username` | No | `admin` | RDS 管理员用户名 |
## 演示 1:设计审查
设计审查演示展示了 AWS Security Agent 在 **10 个安全领域** 中通过 **36 个漏洞场景** 进行的自动化漏洞检测。您将设计文档上传到 Security Agent Web 应用程序,它会根据已启用的安全要求对其进行分析。
### 涵盖的安全领域
| 领域 | 漏洞示例 |
|--------|----------------------|
| 审计日志 | CloudTrail 已禁用 |
| 身份验证 | 未启用 MFA 的 IAM 用户 |
| 授权 | 通配符 IAM 策略(`*:*`) |
| 信息保护 | 未加密的 RDS |
| 日志保护 | 未使用 KMS 的 CloudWatch Logs |
| 特权访问 | 权限过大的 Lambda 角色 |
| 机密保护 | 代码中硬编码的凭证 |
| 默认安全 | 无限制的安全组 |
| 租户隔离 | DynamoDB 中缺少租户边界 |
| 自定义规则 | S3 中未加密的日志存储 |
### 第 1 步:启用安全要求(AWS 控制台)
在运行设计审查之前,请配置代理应评估的安全要求。
1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/)
2. 在左侧边栏中,选择 **Security requirements**(安全要求)
3. 在 **Managed security requirements**(托管安全要求)选项卡上,选择您要启用的要求:
- Audit Logging Best Practices(审计日志最佳实践)
- Authentication Best Practices(身份验证最佳实践)
- Authorization Best Practices(授权最佳实践)
- Information Protection Best Practices(信息保护最佳实践)
- Log Protection Best Practices(日志保护最佳实践)
- Privileged Access Best Practices(特权访问最佳实践)
- Secret Protection Best Practices(机密保护最佳实践)
- Secure by Default Best Practices(默认安全最佳实践)
- Tenant Isolation Best Practices(租户隔离最佳实践)
4. 点击 **Enable**(启用)以激活所选要求
### 第 2 步:创建设计审查(Web 应用程序)
1. 在 AWS 控制台中,导航到您的 Agent Space 并点击 **Admin access**(或 **Web app** 选项卡)以打开 Security Agent Web 应用程序
2. 在左侧边栏中,点击 **Design reviews**
3. 点击 **Create Design Review**
4. 输入名称:`security-agent-demo-review`
### 第 3 步:上传设计文件
上传此仓库中的设计文档供代理分析。
1. 在 **Files to review**(待审查文件)部分,从 `design-review/` 文件夹上传以下文件:
- `AnyBank Digital Portal Design Document.docx` — 漏洞场景文档
- `AnyBank Digital Portal Architecture.png` — 架构图
2. 支持的格式:DOC, DOCX, JPEG, MD, PDF, PNG, TXT(最多 5 个文件,每个 2MB,总计 6MB)
### 第 4 步:运行设计审查
1. 检查上传的文件以确保准确无误
2. 点击 **Start design review**
3. 等待分析完成(通常需要几分钟)
### 第 5 步:审查发现
1. 完成后,发现摘要将显示每种状态的计数:**Compliant**(合规)、**Non-compliant**(不合规)、**Insufficient data**(数据不足)和 **Not applicable**(不适用)
2. 按 **Non-compliant** 过滤以查看需要关注的发现
3. 点击任何发现以查看:
- 正在评估的特定安全要求
- 关于该发现为何获得此状态的详细说明
- 推荐的修复指南
4. 将代理的发现与 [`design-review/AnyBank Digital Portal Design Document.docx`](design-review/AnyBank%20Digital%20Portal%20Design%20Document.docx) 中的预期结果进行比较
### 预期结果
代理应检测到所有 10 个安全领域的漏洞:
| 严重性 | 预期数量 |
|----------|---------------|
| 严重 | 6(授权、审计日志、信息保护、机密、默认安全、租户隔离) |
| 高 | 3(身份验证、特权访问、自定义日志测试) |
| 中 | 1(日志保护) |
## 演示 2:AI 基础设施生成器
一个 AI 驱动的系统,使用 Amazon Bedrock 将自然语言基础设施请求转换为 Terraform 代码,并自动创建 GitHub 拉取请求创建 PR 后,您可以使用 **AWS Security Agent 的代码审查功能** 来扫描生成的代码是否存在安全错误配置 —— 演示代理如何捕获 AI 生成的基础设施代码中的问题。
### 第 1 步:启用 Bedrock 模型访问(AWS 控制台)
为您计划使用的模型启用访问权限。默认模型是 **Anthropic Claude Sonnet 4**,但您可以通过在 `terraform.tfvars` 中设置 `bedrock_model_id` 变量来使用任何 Bedrock 支持的模型。
1. 在 AWS 控制台中导航至 [Amazon Bedrock](https://console.aws.amazon.com/bedrock/)
2. 在左侧边栏中,点击 **Model access**
3. 点击 **Modify model access**
4. 找到您选择的模型(例如,**Anthropic** → **Claude Sonnet 4**)并勾选复选框
5. 点击 **Next** → **Submit**
6. 等待访问状态显示为 **Access granted**
### 第 2 步:配置 Terraform 变量
导航至 Terraform 目录,并从示例文件创建您的 `terraform.tfvars`:
```
cd github-review/terraform
cp terraform.tfvars.example terraform.tfvars
```
使用您的 GitHub 详情编辑 `terraform.tfvars`(参见[配置参考](#demo-2-variables)):
```
github_token = "github_pat_..."
github_owner = "your-username"
github_repo = "your-repo"
```
### 第 3 步:部署基础设施
```
# 从 github-review/terraform/
# 创建 Lambda 部署包
zip -j lambda_function.zip ../lambda_function.py
# 部署基础设施(约 1 分钟)
terraform init
terraform plan
terraform apply
```
部署会创建:
1. ✅ API Gateway REST endpoint
2. ✅ 具有 Bedrock 访问权限的 Lambda 函数
3. ✅ 用于组织上下文的 S3 存储桶
4. ✅ 具有最小权限的 IAM 角色
### 第 4 步:将上下文上传到 S3
上传 Bedrock 用于标记生成基础设施的组织标签文件:
```
# 从 github-review/terraform/
aws s3 cp ../it-operations-tags.json s3://$(terraform output -raw s3_bucket_name)/it-operations-tags.json
```
### 第 5 步:测试 API
```
# 从 github-review/terraform/
cd ..
export API_URL=$(cd terraform && terraform output -raw api_gateway_url)
export API_KEY=$(cd terraform && terraform output -raw api_key)
# 运行单个测试(从 github-review/)
python3 test_request.py update_tags
# 运行所有测试用例
python3 test_request.py all
```
可用的测试用例:
| 名称 | 请求 |
|------|---------|
| `create_vpc` | 创建一个包含公有和私有子网的新 VPC |
| `update_tags` | 更新 EC2 文件上的 CostCenter 标签 |
| `create_ec2` | 创建带有 EBS 卷的 EC2 实例 |
### 第 6 步:验证
成功响应如下所示:
```
{
"terraform_code": "resource \"aws_vpc\" \"main\" { ... }",
"pr_url": "https://github.com/your-user/your-repo/pull/1",
"status": "success"
}
```
检查您的 GitHub 仓库中是否有包含生成的 Terraform 代码的新拉取请求。
### 第 7 步:运行 AWS Security Agent 代码审查
这是演示的关键部分 —— 使用 AWS Security Agent 审查生成的拉取请求是否存在安全问题。
1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/)
2. 通过连接您的仓库来设置 **GitHub 集成**(参见[代码审查指南](https://docs.aws.amazon.com/securityagent/latest/userguide/code-review.html))
3. AWS Security Agent 将自动审查新的拉取请求,并标记以下安全发现:
- 缺少加密配置
- 权限过大的 IAM 策略
- 无限制的安全组规则
- 缺少日志记录和监控
- 不合规的标签
4. 直接在 GitHub 拉取请求上查看代理的评论
有关 Lambda 函数流程的完整详细信息,请参阅 [`github-review/README.md`](github-review/README.md)。
## 演示 3:渗透测试
部署一个故意包含漏洞的 Web 应用程序,并针对其运行 AWS Security Agent 渗透测试。
### 第 1 步:配置 Terraform 变量
从示例文件创建您的 `terraform.tfvars`:
```
cd pen-test/terraform
cp terraform.tfvars.example terraform.tfvars
```
使用您的值编辑 `terraform.tfvars`,或设置环境变量(参见[配置参考](#demo-3-variables)):
```
export TF_VAR_db_password="YourStrongPassword123!"
# 可选:仅当您在此 AWS 账户中拥有 Route 53 托管区域时。
# 留空以使用原始 ALB DNS 名称。
export TF_VAR_domain_name="yourdomain.com"
```
### 第 2 步:部署基础设施
```
cd pen-test/terraform
terraform init
terraform plan
terraform apply
```
**部署时间:** 约 8 分钟(RDS 耗时最长)
部署会创建:
1. ✅ 包含公有和私有子网的 VPC
2. ✅ 运行存在漏洞的 Flask 应用程序的 EC2 实例(私有子网)
3. ✅ RDS MySQL 数据库(未加密,无备份)
4. ✅ Application Load Balancer(面向公众)
5. ✅ S3 存储桶(未加密)
6. ✅ 权限过大的 IAM 角色
### 第 3 步:验证应用程序
部署后等待 5-10 分钟让应用程序初始化:
```
terraform output pentest_target_url
```
在浏览器中打开 URL。您应该会看到 "⚠️ Vulnerable Demo Application" 页面,其中包含指向 Search、Login、Profile、Upload 和 API 端点的链接。
### 第 4 步:启用渗透测试(AWS 控制台)
1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/)
2. 在左侧边栏中,选择 **AgentSpaces**,然后选择您的 Agent Space
3. 点击标题中的 **Enable penetration test**
#### 配置域名
1. 在 **Target domains** 字段中,**输入**目标。没有预填充的内容 —— AWS Security Agent 不会自动发现 ALB 或 Route 53 记录。
- **路径 A(此账户中的 Route 53 托管区域):** 输入 `pentest.`(例如,`pentest.example.com`)
- **路径 B(ALB DNS 名称):** 输入来自 `terraform output -raw alb_dns_name` 的完整 ALB DNS 名称,例如 `aws-security-agent-pentest-alb-1234567890.us-east-1.elb.amazonaws.com`
2. 选择验证方法:**DNS_TXT**(推荐)或 **HTTP_ROUTE**
3. 点击 **Next**
#### 验证域名所有权
- **路径 A — Route 53 域名(同一账户):** 您输入的域名将出现在验证列表中。选择它并点击 **One-click verification** —— AWS Security Agent 会自动创建 TXT 记录。
- **路径 B — ALB DNS 名称或外部 DNS 提供商:** AWS Security Agent 无法向 AWS 管理的 ALB DNS 写入 TXT 记录,因此无法进行一键验证。您必须:
- 使用 **HTTP_ROUTE** 验证(推荐用于 ALB 目标):代理会提供一个路径 + token,并通过 HTTP 获取来验证。这“直接有效”,因为 ALB 已经可以访问。
- 或者在任何注册商处切换到您控制的域名的 **DNS_TXT**,并手动添加 TXT 记录。
- 验证成功后点击 **Next**。
#### 配置其他功能(可选)
- **VPC 设置:** 如果直接测试私有 EC2 实例,请从 Terraform 部署中选择 VPC 和子网
- **CloudWatch logs:** 选择或让代理创建一个日志组
- **Service access:** 使用默认 IAM 角色(推荐)
- 点击 **Save** 以启用渗透测试
### 第 5 步:运行渗透测试(Web 应用程序)
1. 在 AWS 控制台中,导航至您的 Agent Space 并点击 **Admin access** 以打开 Web 应用程序
2. 在左侧边栏中,点击 **Penetration Test**
3. 点击 **Create your first penetration test**
4. 配置测试:
- 选择已验证的域名作为目标
- 选择 IAM 角色和日志组
- (可选)启用 **automatic code remediation** 以让代理创建带有修复的 PR
5. 点击 **Next**
6. (可选)如果应用需要登录,请在 **Agent Space login prompt** 中提供凭证:
- 用户名:`admin`,密码:`admin123`(来自演示应用的样本数据)
7. (可选)上传额外的上下文文件(例如,`design-review/AnyBank Digital Portal Design Document.docx`)
8. 点击 **Create and execute**
### 第 6 步:审查发现
渗透测试完成后:
1. 导航到渗透测试详情屏幕
2. 查看按严重性组织的发现
### 预期发现
| 严重性 | 预期发现 |
|----------|-------------------|
| **严重** | 搜索和登录端点中的 SQL 注入、硬编码凭证、SSRF、不安全的反序列化 |
| **高** | 搜索中的 XSS、配置文件访问中的 IDOR、文件上传中的路径遍历、未加密的存储 |
| **中** | 弱会话管理、详细的错误消息、缺少安全标头、调试模式已启用 |
### 手动测试(可选)
您也可以在运行 Security Agent 之前手动测试漏洞。将 `TARGET` 设置为 `pentest.`(如果您使用了 Route 53)或原始的 ALB DNS 名称:
```
export TARGET="$(cd pen-test/terraform && terraform output -raw alb_dns_name)"
# SQL Injection
curl "http://$TARGET/search?q=' OR '1'='1"
# IDOR - 访问其他用户的个人资料
curl "http://$TARGET/profile?token=1"
curl "http://$TARGET/profile?token=2"
# Unauthenticated API - 暴露敏感数据
curl "http://$TARGET/api/users"
```
有关完整详细信息,请参阅 [`pen-test/README.md`](pen-test/README.md)。
## 成本估算
⚠️ **这些演示会部署产生实际费用的 AWS 资源。**
| 资源 | 演示 | 预估成本 |
|----------|------|-----------------|
| NAT Gateway | 演示 3 | ~$32/月 |
| ALB | 演示 3 | ~$16/月 |
| RDS db.t3.micro | 演示 3 | ~$15/月 |
| EC2 t3.micro | 演示 3 | ~$7/月 |
| Lambda | 演示 2 | 按调用付费 |
| API Gateway | 演示 2 | 按请求付费 |
| S3 | 演示 2 | < $1/月 |
| **总计(全部运行时)** | | **~$70/月** |
**建议:** 演示结束后立即销毁基础设施。
**注意:** 以上数值仅供参考,实际数值可能因使用情况而异。
## 清理
### 演示 2:AI 基础设施生成器
```
cd github-review/terraform
terraform destroy
```
### 演示 3:渗透测试
```
cd pen-test/terraform
terraform destroy
```
### AWS Security Agent(控制台)
1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/)
2. 删除所有渗透测试配置
3. 如果不再需要,可选择删除 Agent Space
## 其他资源
| 资源 | 链接 |
|----------|------|
| 测试与验证指南 | [TESTING.md](TESTING.md) |
| AWS Security Agent 文档 | [用户指南](https://docs.aws.amazon.com/securityagent/latest/userguide/) |
| AWS Security Agent 设置 | [设置指南](https://docs.aws.amazon.com/securityagent/latest/userguide/setup-security-agent.html) |
| 设计审查指南 | [创建设计审查](https://docs.aws.amazon.com/securityagent/latest/userguide/perform-design-review.html) |
| 渗透测试快速入门 | [快速入门指南](https://docs.aws.amazon.com/securityagent/latest/userguide/quickstart.html) |
| Amazon Bedrock 文档 | [用户指南](https://docs.aws.amazon.com/bedrock/latest/userguide/) |
| Amazon Bedrock 模型访问 | [启用模型](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) |
| Terraform AWS Provider | [文档](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) |
| OWASP Top 10 | [项目页面](https://owasp.org/www-project-top-ten/) |
## 安全
有关更多信息,请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。
## 许可证
本库基于 MIT-0 许可证授权。请参阅 [LICENSE](LICENSE) 文件。
## 目录
- [前置条件](#prerequisites)
- [架构概述](#architecture-overview)
- [配置参考](#configuration-reference)
- [演示 1:设计审查](#demo-1-design-review)
- [演示 2:AI 基础设施生成器](#demo-2-ai-infrastructure-generator)
- [演示 3:渗透测试](#demo-3-penetration-testing)
- [成本估算](#cost-estimate)
- [清理](#cleanup)
- [其他资源](#additional-resources)
## 前置条件
### 必备工具
在部署任何演示之前安装这些工具:
| 工具 | 版本 | 安装 | 验证 |
|------|---------|-------------|--------|
| AWS CLI | v2+ | [安装指南](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) | `aws --version` |
| Terraform | v1.0+ | [安装指南](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) | `terraform version` |
| Python | 3.12+ | [安装指南](https://www.python.org/downloads/) | `python3 --version` |
| pip | 最新版 | 包含在 Python 中 | `pip3 --version` |
### AWS 账户要求
- 一个具有创建 IAM 角色、Lambda 函数、API Gateway、S3 存储桶、EC2 实例、RDS 数据库、VPC 和 ALB 权限的 AWS 账户
- 配置了凭证的 AWS CLI:
```
aws configure
# 输入您的 AWS Access Key ID、Secret Access Key 和默认区域 (us-east-1)
```
- **AWS Security Agent 访问权限**(演示 1 和演示 3):您必须有权访问 [AWS Security Agent 控制台](https://console.aws.amazon.com/securityagent/)和 Web 应用程序
- **Amazon Bedrock 模型访问权限**(演示 2):在部署之前,您必须在 Bedrock 控制台中为您计划使用的模型[启用模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html)。默认配置使用 **Anthropic Claude Sonnet 4**,但可以通过覆盖 `bedrock_model_id` 变量来使用任何 Bedrock 支持的模型
### 特定演示的前置条件
| 前置条件 | 演示 1 | 演示 2 | 演示 3 |
|-------------|--------|--------|--------|
| AWS Security Agent Agent Space | ✅ 必需 | — | ✅ 必需 |
| 带有仓库的 GitHub 账户 | — | ✅ 必需 | — |
| GitHub 个人访问令牌 | — | ✅ 必需 | — |
| Route 53 托管区域 | — | — | 可选 |
| `requests` Python 包 | — | ✅ `pip install requests` | — |
GitHub Token 设置(演示 2)
使用以下权限在您的目标仓库上创建一个[细粒度个人访问令牌](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token): - **Contents**:读取和**写入**(分支 + 提交创建) - **Pull requests**:读取和**写入**(PR 创建) - **Metadata**:读取(自动授予) 该仓库必须已存在,并且在 `main` 分支上至少有一次提交(在创建时使用 GitHub 的 "Add a README" 选项是最简单的方法)。请安全地保存令牌 —— 您在 Terraform 部署期间会用到它。AWS Security Agent 设置(演示 1 和演示 3)
如果您尚未设置 AWS Security Agent: 1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/) 2. 点击 **Set up AWS Security Agent** 3. 为您的 Agent Space 输入一个名称(例如,`security-agent-demo`) 4. 在 User access configuration(用户访问配置)下选择 **IAM-only access** 5. 点击 **Set up AWS Security Agent** 这将创建您的 Agent Space 并建立 Web 应用程序。有关 SSO 访问的信息,请参阅[完整设置指南](https://docs.aws.amazon.com/securityagent/latest/userguide/setup-security-agent.html)。
### 渗透测试环境(演示 3)
### 使用的 AWS 服务
| 服务 | 演示 | 用途 |
|---------|------|---------|
| Amazon Bedrock | 演示 2 | Terraform 代码生成(默认为 Claude Sonnet 4,可配置) |
| AWS Lambda | 演示 2 | 请求处理和编排 |
| Amazon API Gateway | 演示 2 | REST API endpoint |
| Amazon S3 | 演示 2, 演示 3 | 上下文存储,存在漏洞的存储桶 |
| Amazon EC2 | 演示 3 | 存在漏洞的 Web 应用程序主机 |
| Amazon RDS (MySQL) | 演示 3 | 应用程序数据库 |
| Application Load Balancer | 演示 3 | 面向公众的入口点 |
| Amazon VPC | 演示 3 | 网络隔离 |
| Amazon Route 53 | 演示 3 | DNS 管理(可选) |
| AWS IAM | 全部 | 访问管理 |
## 配置参考
每个演示都使用 Terraform 变量进行配置。标记为 **Required**(必需)的变量没有默认值,用户必须通过 `terraform.tfvars` 或环境变量(`TF_VAR_
### 预期结果
代理应检测到所有 10 个安全领域的漏洞:
| 严重性 | 预期数量 |
|----------|---------------|
| 严重 | 6(授权、审计日志、信息保护、机密、默认安全、租户隔离) |
| 高 | 3(身份验证、特权访问、自定义日志测试) |
| 中 | 1(日志保护) |
## 演示 2:AI 基础设施生成器
一个 AI 驱动的系统,使用 Amazon Bedrock 将自然语言基础设施请求转换为 Terraform 代码,并自动创建 GitHub 拉取请求创建 PR 后,您可以使用 **AWS Security Agent 的代码审查功能** 来扫描生成的代码是否存在安全错误配置 —— 演示代理如何捕获 AI 生成的基础设施代码中的问题。
### 第 1 步:启用 Bedrock 模型访问(AWS 控制台)
为您计划使用的模型启用访问权限。默认模型是 **Anthropic Claude Sonnet 4**,但您可以通过在 `terraform.tfvars` 中设置 `bedrock_model_id` 变量来使用任何 Bedrock 支持的模型。
1. 在 AWS 控制台中导航至 [Amazon Bedrock](https://console.aws.amazon.com/bedrock/)
2. 在左侧边栏中,点击 **Model access**
3. 点击 **Modify model access**
4. 找到您选择的模型(例如,**Anthropic** → **Claude Sonnet 4**)并勾选复选框
5. 点击 **Next** → **Submit**
6. 等待访问状态显示为 **Access granted**
### 第 2 步:配置 Terraform 变量
导航至 Terraform 目录,并从示例文件创建您的 `terraform.tfvars`:
```
cd github-review/terraform
cp terraform.tfvars.example terraform.tfvars
```
使用您的 GitHub 详情编辑 `terraform.tfvars`(参见[配置参考](#demo-2-variables)):
```
github_token = "github_pat_..."
github_owner = "your-username"
github_repo = "your-repo"
```
### 第 3 步:部署基础设施
```
# 从 github-review/terraform/
# 创建 Lambda 部署包
zip -j lambda_function.zip ../lambda_function.py
# 部署基础设施(约 1 分钟)
terraform init
terraform plan
terraform apply
```
部署会创建:
1. ✅ API Gateway REST endpoint
2. ✅ 具有 Bedrock 访问权限的 Lambda 函数
3. ✅ 用于组织上下文的 S3 存储桶
4. ✅ 具有最小权限的 IAM 角色
### 第 4 步:将上下文上传到 S3
上传 Bedrock 用于标记生成基础设施的组织标签文件:
```
# 从 github-review/terraform/
aws s3 cp ../it-operations-tags.json s3://$(terraform output -raw s3_bucket_name)/it-operations-tags.json
```
### 第 5 步:测试 API
```
# 从 github-review/terraform/
cd ..
export API_URL=$(cd terraform && terraform output -raw api_gateway_url)
export API_KEY=$(cd terraform && terraform output -raw api_key)
# 运行单个测试(从 github-review/)
python3 test_request.py update_tags
# 运行所有测试用例
python3 test_request.py all
```
可用的测试用例:
| 名称 | 请求 |
|------|---------|
| `create_vpc` | 创建一个包含公有和私有子网的新 VPC |
| `update_tags` | 更新 EC2 文件上的 CostCenter 标签 |
| `create_ec2` | 创建带有 EBS 卷的 EC2 实例 |
### 第 6 步:验证
成功响应如下所示:
```
{
"terraform_code": "resource \"aws_vpc\" \"main\" { ... }",
"pr_url": "https://github.com/your-user/your-repo/pull/1",
"status": "success"
}
```
检查您的 GitHub 仓库中是否有包含生成的 Terraform 代码的新拉取请求。
### 第 7 步:运行 AWS Security Agent 代码审查
这是演示的关键部分 —— 使用 AWS Security Agent 审查生成的拉取请求是否存在安全问题。
1. 在 AWS 控制台中导航至 [AWS Security Agent](https://console.aws.amazon.com/securityagent/)
2. 通过连接您的仓库来设置 **GitHub 集成**(参见[代码审查指南](https://docs.aws.amazon.com/securityagent/latest/userguide/code-review.html))
3. AWS Security Agent 将自动审查新的拉取请求,并标记以下安全发现:
- 缺少加密配置
- 权限过大的 IAM 策略
- 无限制的安全组规则
- 缺少日志记录和监控
- 不合规的标签
4. 直接在 GitHub 拉取请求上查看代理的评论
有关 Lambda 函数流程的完整详细信息,请参阅 [`github-review/README.md`](github-review/README.md)。
## 演示 3:渗透测试
部署一个故意包含漏洞的 Web 应用程序,并针对其运行 AWS Security Agent 渗透测试。
包含哪些漏洞?
**应用程序层面:** - SQL 注入(搜索和登录端点) - 跨站脚本攻击(XSS) - 身份验证失效 - 访问控制失效(IDOR) - 敏感数据泄露 - 不安全的反序列化 - SSRF(服务器端请求伪造) - 路径遍历 **基础设施层面(不可利用):** - 未加密的 S3 存储桶 - 未加密的 RDS 存储 - 未加密的 EBS 卷 - 权限过大的 IAM 角色 - 无备份配置 - 缺少 CloudWatch 日志记录
### 预期发现
| 严重性 | 预期发现 |
|----------|-------------------|
| **严重** | 搜索和登录端点中的 SQL 注入、硬编码凭证、SSRF、不安全的反序列化 |
| **高** | 搜索中的 XSS、配置文件访问中的 IDOR、文件上传中的路径遍历、未加密的存储 |
| **中** | 弱会话管理、详细的错误消息、缺少安全标头、调试模式已启用 |
### 手动测试(可选)
您也可以在运行 Security Agent 之前手动测试漏洞。将 `TARGET` 设置为 `pentest.标签:AI代码生成, AI基础设施生成, Amazon Bedrock, AWS, AWS安全, CISA项目, Claude Sonnet, DevSecOps, DLL 劫持, DPI, ECS, GitHub集成, IaC安全, Terraform, 上游代理, 云安全态势管理, 代码安全审查, 前端应用, 反取证, 大语言模型, 安全代理, 安全合规, 安全设计审查, 安全评估, 白盒测试, 结构化查询, 网络代理, 自动化安全, 请求响应过滤, 逆向工具, 黑盒测试