使用 Terraform 在 Amazon Bedrock 上使用 CrewaI 框架部署代理系统 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Terraform 在 Amazon Bedrock 上使用 CrewaI 框架部署代理系统

Vanitha Dontireddy,亚马逊 Web Services

摘要

这种模式演示了如何使用与 A mazon Bedrock 和 Terraform 集成的 Crewai 框架来实现可扩展的多代理人工智能系统。该解决方案使组织能够通过基础设施即代码 (IaC) 创建、部署和管理复杂的 AI 代理工作流程。在这种模式下,CrewaI 多代理编排功能与 Amazon Bedrock 基础模型和 Terraform 基础设施自动化相结合。因此,团队可以构建生产就绪的人工智能系统,以最少的人为监督来处理复杂的任务。该模式实现了企业级安全性、可扩展性和运营最佳实践。

先决条件和限制

先决条件

限制

  • 代理交互受模型上下文窗口的限制。

  • 大规模部署的 Terraform 状态管理注意事项适用于这种模式。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按地区划分的AWS 服务。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。

架构

在这种模式下,会发生以下相互作用:

  • Amazon Bedrock 通过其基础模型套件为特工情报奠定了基础 (FMs)。它为 AI 代理提供自然语言处理 (NLP)、推理和决策能力,同时保持高可用性和可扩展性。

  • CrewaI 框架是创建和管理 AI 代理的核心编排层。它可以在与 Amazon Bedrock 集成的同时处理代理通信协议、任务委派和工作流程管理。

  • Terraform 通过代码管理整个基础设施堆栈,包括计算资源、网络、安全组和 AWS Identity and Access Management (IAM) 角色。它可确保跨环境进行一致的、受版本控制的部署。Terraform 部署创建了以下内容:

    • AWS Lambda 运行 CrewaI 应用程序的函数

    • 用于存储代码和报告的亚马逊简单存储服务 (Amazon S3) Service 存储桶

    • 具有适当权限的 IAM 角色

    • Amazon CloudWatch 日志

    • 由亚马逊计划执行 EventBridge

下图说明了使用 Amazon Bedrock 和 Terraform 部署 Crewai 多代理系统的架构。

使用 Terraform 和 Amazon Bedrock 部署 Crewai 多代理系统的工作流程。

图表显示了以下工作流:

  1. 用户克隆存储库。

  2. 用户运行命令terraform apply来部署 AWS 资源。

  3. Amazon Bedrock 模型配置包括指定用于配置 CrewaI 代理的基础模型 (FM)。

  4. 已建立 EventBridge 规则,根据定义的计划触发 Lambda 函数。

  5. 当触发(通过计划或手动触发)时,Lambda 函数将初始化并担任具有访问权限和 A AWS 服务 mazon Bedrock 权限的 IAM 角色。

  6. CrewaI 框架从 YAML 文件加载代理配置,并创建专门的 AI 代理(AWS 基础设施安全审计组)。Lambda 函数按顺序执行这些代理来扫描 AWS 资源、分析安全漏洞并生成全面的审计报告。

  7. CloudWatch 日志从 Lambda 函数中捕获详细的执行信息,保留期为 365 天,并且 AWS Key Management Service (AWS KMS) 加密以满足合规性要求。这些日志提供了对代理活动、错误跟踪和性能指标的可见性,从而可以对安全审计过程进行有效的监控和故障排除。

  8. 安全审计报告会自动生成并存储在指定的 Amazon S3 存储桶中。自动设置有助于保持一致的安全监控,同时最大限度地减少运营开销。

初始部署后,该工作流程无需人工干预即可为您的 AWS 基础架构提供持续的安全审计和报告。

AI 代理概述

这种模式会创建多个 AI 代理,每个代理都有独特的角色、目标和工具:

  • 安全分析师代理收集和分析 AWS 资源信息。

  • 渗透测试器代理可识别 AWS 资源中的漏洞。

  • 规专家代理根据合规性标准检查配置。

  • 报告撰写者代理将调查结果汇编成综合报告。

这些代理人协作完成一系列任务,利用他们的集体技能进行安全审计并生成全面的报告。(该config/agents.yaml文件概述了该团队中每个特工的能力和配置。)

安全分析处理包括以下操作:

  1. 安全分析师代理会检查收集到的有关 AWS 资源的相关数据,例如:

    • 亚马逊弹性计算云 (Amazon EC2) 实例和安全组

    • 亚马逊 S3 存储桶和配置

    • IAM 角色、策略和权限

    • 虚拟私有云 (VPC) 配置和网络设置

    • Amazon RDS 数据库和安全设置

    • Lambda 函数和配置

    • 审计范围 AWS 服务 内的其他

  2. 渗透测试器代理可识别潜在的漏洞。

  3. 代理商通过 CrewaI 框架进行协作以分享调查结果。

报告生成包括以下操作:

  1. 报告撰写者代理汇编所有其他代理的调查结果。

  2. 安全问题按服务、严重程度和合规性影响进行分类。

  3. 针对每个已发现的问题生成补救建议。

  4. 将以 markdown 格式创建一份全面的安全审计报告,并上传到指定的 Amazon S3 存储桶。保留历史报告,用于合规性跟踪和安全态势改进。

记录和监控活动包括:

  • CloudWatch 日志会捕获执行细节和任何错误。

  • Lambda 执行指标会被记录下来以供监控。

可用性和规模

您可以将可用代理扩展到四个以上的核心代理。要使用其他专业代理进行扩展,请考虑以下新的代理类型:

  • 威胁情报专家代理可以执行以下操作:

    • 监控外部威胁源并与内部发现进行关联

    • 提供与您的基础架构相关的新出现威胁的背景信息

    • 根据野外主动利用情况对漏洞进行优先级排序

  • 合规框架代理人可以专注于特定的监管领域,例如:

    • 支付卡行业数据安全标准 (PCI DSS) 合规代理

    • 1996 年 Health Insurance 流通与责任法案 (HIPAA) 合规代理人

    • 系统和组织控制 2 (SOC 2) 合规代理

    • 《通用数据保护条例》(GDPR) 合规代理

通过深思熟虑地扩展可用代理,该解决方案可以提供更深入、更专业的安全见解,同时保持大型 AWS 环境的可扩展性。有关实现方法、工具开发和扩展注意事项的更多信息,请参阅其他信息

工具

AWS 服务

  • Amazon Bedrock 是一项完全托管的人工智能服务,可通过统一的 API 提供高性能基础模型 (FMs) 以供使用。

  • Amazon CloudWatch Lo gs 可帮助您集中所有系统和应用程序的日志, AWS 服务 这样您就可以监控它们并安全地将其存档。

  • Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如, AWS Lambda 函数、使用 API 目的地的 HTTP 调用端点或其他 AWS 账户目的地的事件总线。在这种模式中,它用于安排和协调代理工作流程。

  • AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • 适用于 Python (Boto3) 的 AWS SDK是一个软件开发套件,可帮助您将 Python 应用程序、库或脚本与集成 AWS 服务。

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。在这种模式中,它为代理工件和状态管理提供对象存储。

其他工具

  • CrewaI 是一个基于 Python 的开源框架,用于构建多代理人工智能系统。

  • Terraform 是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。

代码存储库

此模式的代码可在 GitHub deploy-crewai-agents-terraform存储库中找到。

最佳实践

  • 使用带亚马逊 DynamoDB 锁定功能的 Amazon S3 后端,对 Terraform 实施适当的状态管理。有关更多信息,请参阅使用 Terraform AWS 提供程序的最佳实践中的后端最佳实践。

  • 使用工作区将开发、暂存和生产环境分开。

  • 遵循最低权限原则,授予执行任务所需的最低权限。有关更多信息,请参阅 IAM 文档中的授予最低权限安全最佳实践

  • 通过 CloudWatch 日志启用详细的日志记录和监控。

  • 为代理操作实现重试机制和错误处理。

操作说明

Task描述所需技能

克隆存储库。

要在本地计算机上克隆此模式的存储库,请运行以下命令:

git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git" cd deploy-crewai-agents-terraform
DevOps 工程师

编辑环境变量。

要编辑环境变量,请执行以下操作:

  1. terrafor m 目录terraform.tfvars.example中根据示例创建一个terraform.tfvars文件。

  2. 编辑环境变量以使用您自己的信息。

DevOps 工程师

创建基础架构。

要创建基础架构,请运行以下命令:

cd terraform
terraform init
terraform plan

仔细审查执行计划。如果计划的更改可以接受,则运行以下命令:

terraform apply --auto-approve
DevOps 工程师
Task描述所需技能

访问代理。

AWS 基础设施安全审计和报告团队中的代理是作为 Lambda 函数部署的。要访问代理,请使用以下步骤:

  1. 登录 AWS Management Console 并打开 AWS Lambda 控制台,网址为https://console.aws.amazon.com/lambda/

  2. 在 “函数” 页面上,找到并选择名为{project_name}\ function 的函数(在 Terraform 变量中定义)。

  3. 在函数的页面上,您可以执行以下操作:

    • 查看配置详细信息。

    • 监控执行指标。

    • 查看 CloudWatch 日志。

    • 手动测试该功能。

DevOps 工程师

(可选)配置代理的手动执行。

代理配置为按每日计划(UTC 时间午夜)自动运行。但是,您可以使用以下步骤手动触发它们:

  1. 在 Lambda 控制台中,选择名为的函数。{project_name}

  2. 在函数页面上,选择测试选项卡。

  3. 使用空的 JSON 对象创建新的测试事件{}

  4. 要执行该事件,请选择测试

有关更多详细信息,请参阅 Lambda 文档中的在控制台中测试 Lambda 函数

DevOps 工程师

访问代理日志以进行调试。

CrewaI 代理在 Lambda 环境中运行,他们拥有执行安全审计和在 Amazon S3 中存储报告的必要权限。输出是一份降价报告,可对您的 AWS 基础架构进行全面的安全分析。

要帮助对代理行为进行详细调试,请执行以下操作:

  1. 在中 AWS Management Console,导航到 CloudWatch 日志。

  2. 找到您的 Lambda 函数的日志组。

  3. 查找带有代理名称的日志条目(例如,基础设施映射专家探索性安全分析师)。

  4. 查看日志,深入了解每个代理的操作。

DevOps 工程师

查看代理执行的结果。

要查看代理执行的结果,请执行以下操作:

  1. 在中 AWS Management Console,导航至 Amazon S3。

  2. 打开名为{project_name}-reports-{random_suffix}(如您的 Terraform 变量中所定义)的 Amazon S3 存储桶。

报告以基于时间戳的文件名存储,如下所示:security-audit-report-YYYY-MM-DD-HH-MM-SS.md)

DevOps 工程师

监控代理的执行情况。

要通过 CloudWatch 日志监控代理的执行情况,请执行以下操作:

  1. 在中 AWS Management Console,导航到 CloudWatch。

  2. 转到日志组

  3. 选择名为的日志组/aws/lambda/{project_name}-function

  4. 日志流中,选择最新的日志流以查看详细的执行信息。

DevOps 工程师

自定义代理行为。

要修改代理或其任务,请执行以下操作:

  1. 更新本地存储库中的配置文件:

    • 以下文件定义了每个代理的角色、权能和设置:src/aws_infrastructure_security_audit_and_reporting/config/agents.yaml

    • 以下文件定义了代理的任务和工作流程:

    src/aws_infrastructure_security_audit_and_reporting/config/tasks.yaml

  2. 要重新打包和更新 Lambda 函数,请使用以下命令:

cd terraform
terraform apply
DevOps 工程师
Task描述所需技能

删除已创建的资源。

要删除由此模式创建的所有基础架构,请运行以下命令:

terraform plan -destroy
警告

以下命令将永久删除由此模式创建的所有资源。在删除任何资源之前,该命令将提示您进行确认。

仔细审查销毁计划。如果计划的删除是可以接受的,则运行以下命令:

terraform destroy
DevOps 工程师

故障排除

事务解决方案

代理行为

有关此问题的信息,请参阅 Amazon Bedrock 文档中的测试代理行为并对其进行故障排除

Lambda 网络问题

有关这些问题的信息,请参阅 Lambda 文档中的 Lambda 中的网络问题疑难解答

IAM 权限

有关这些问题的信息,请参阅 IAM 文档中的 IAM 疑难解答

相关资源

AWS 博客

AWS 文档

其他资源

其他信息

本节包含有关实现方法、工具开发和扩展注意事项的信息,这些注意事项与之前在《自动化与规模》中讨论的内容有关。

实施方法

请考虑使用以下方法来添加代理:

  1. 代理配置:

    • config/agents.yaml文件中添加新的代理定义。

    • 为每位代理定义专门的背景故事、目标和工具。

    • 根据代理专业配置内存和分析功能。

  2. 任务编排:

    • 更新config/tasks.yaml文件以包含新的代理特定任务。

    • 在任务之间创建依赖关系,以帮助确保正确的信息流。

    • 在适当的情况下实现并行任务执行。

技术实施

以下是拟议的威胁情报专家代理agents.yaml文件中的新增内容:

Example new agent configuration in agents.yaml threat_intelligence_agent: name: "Threat Intelligence Specialist" role: "Cybersecurity Threat Intelligence Analyst" goal: "Correlate AWS security findings with external threat intelligence" backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." verbose: true allow_delegation: true tools: - "ThreatIntelligenceTool" - "AWSResourceAnalyzer"

工具开发

借助 CrewaI 框架,您可以采取以下措施来提高安全审计人员的效率:

  • 为新代理创建自定义工具。

  • 与外部集成 APIs 以获取威胁情报。

  • 针对不同的 AWS 服务情况开发专门的分析仪。

扩展注意事项

在扩展您的 AWS 基础设施安全审计和报告系统以处理更大的环境或更全面的审计时,请考虑以下扩展因素:

  • 计算资源

    • 增加 Lambda 内存分配以处理其他代理。

    • 考虑将代理工作负载分成多个 Lambda 函数。

  • 成本管理

    • 随着代理数量的增加,监控 Amazon Bedrock API 的使用情况。

    • 根据审计范围实施选择性代理激活。

  • 协作效率

    • 优化代理之间的信息共享。

    • 为复杂的环境实现分层代理结构。

  • 知识库增强

    • 为代理提供其领域的专业知识库。

    • 使用新的安全最佳实践定期更新代理知识。