aws-samples/sample-aws-agent-registry-demo

GitHub: aws-samples/sample-aws-agent-registry-demo

AWS 官方的 Agent Registry 演示项目,展示如何构建集中式 AI Agent 资源目录并实现发布、审批与发现的全流程治理。

Stars: 2 | Forks: 0

# AWS Agent Registry 示例演示应用程序 这是一个示例项目,演示了如何使用 AWS Agent Registry 创建一个集中式目录,以便在您的组织内组织、管理和发现资源。所有资源均使用 AWS SAM 进行部署。 本演示中使用了以下三个角色: - **Publisher** – 希望与其他团队共享其 agent、MCP server、工具或 agent skill 的开发者或团队。 - **Administrator 或 Curator** – 注册表所有者,负责接收有关新提交的通知、进行审查,并根据组织标准予以批准或拒绝。此角色也可以是注册表本身的管理员,负责管理注册表的生命周期事件(如创建、更新和删除)。 - **Consumer** – 搜索注册表以发现已批准的功能并在运行时使用它们的开发者或 agent。 在本演示中,您将扮演所有这三个角色。在实际用例中,它们通常是不同的个人/团队/AI agent。 本解决方案遵循 AWS 共担责任模型。AWS 负责“云本身的安全”(基础设施、托管服务),而您负责“云内部的安全”(IAM 配置、应用程序代码、数据验证和监控)。有关更多信息,请参阅[共担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。 ## 前置条件 - 拥有可访问 Bedrock AgentCore API 的 AWS 账户 - 如果您还没有账户,请[创建 AWS 账户](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html)并登录。 - 能够通过 AWS Management Console 和 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli) 访问 AWS 账户。您使用的 [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam) 用户必须具有进行必要 AWS 服务调用和管理本文提到的 AWS 资源的权限。在为 IAM 用户授予权限时,请遵循[最小权限原则](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。 - 已安装并配置好 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。您需要 AWS CLI 2.34.60 或更高版本。 - [已安装 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - 已安装 [AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) - 已安装 Python 3.14 或更高版本以及 Pip3 ## 部署 AWS 资源 您将创建以下 AWS 资源: - 1 个 AWS Agent Registry(通过 Custom Resource) - 5 个 AWS Lambda 函数(custom resource、publisher、consumer、reviewer、notification) - 5 个 IAM 角色(每个 Lambda 对应一个) - 1 个 SNS Topic + 邮件订阅 - 1 个 EventBridge Rule(在 pending-approval 状态变更时触发) 1. 克隆仓库并导航至项目目录: ``` git clone https://github.com/aws-samples/sample-aws-agent-registry-demo.git cd sample-aws-agent-registry-demo ``` 2. 运行以下命令进行构建: ``` sam build ``` 3. 运行以下命令以部署所需的 AWS 资源: ``` sam deploy --guided ``` 系统将提示您输入: | 参数 | 描述 | 是否必填 | |-----------|-------------|----------| | **AdminEmail** | 用于接收批准通知的电子邮件地址 | 是 | | **RegistryName** | 注册表名称(默认:`agent-registry-demo`) | 否 | 4. 部署完成后,确认发送到您的 AdminEmail 地址的 SNS 订阅电子邮件。 5. 从堆栈输出中设置环境变量(后续所有步骤均会用到)。请替换 `your-stack-name`: ``` STACK_NAME= export REGISTRY_ID=$(aws cloudformation describe-stacks \ --stack-name $STACK_NAME \ --query "Stacks[0].Outputs[?OutputKey=='RegistryId'].OutputValue" \ --output text) export PUBLISHER_FUNCTION_NAME=$(aws cloudformation describe-stacks \ --stack-name $STACK_NAME \ --query "Stacks[0].Outputs[?OutputKey=='PublisherFunctionName'].OutputValue" \ --output text) export CONSUMER_FUNCTION_NAME=$(aws cloudformation describe-stacks \ --stack-name $STACK_NAME \ --query "Stacks[0].Outputs[?OutputKey=='ConsumerFunctionName'].OutputValue" \ --output text) export REVIEWER_FUNCTION_NAME=$(aws cloudformation describe-stacks \ --stack-name $STACK_NAME \ --query "Stacks[0].Outputs[?OutputKey=='ReviewerFunctionName'].OutputValue" \ --output text) echo "Registry ID: $REGISTRY_ID" echo "Publisher: $PUBLISHER_FUNCTION_NAME" echo "Consumer: $CONSUMER_FUNCTION_NAME" echo "Reviewer: $REVIEWER_FUNCTION_NAME" ``` ## 测试解决方案 ### A. Publisher 工作流 您现在扮演 **publisher** 角色。您将按照给定的架构发布 4 条示例记录: ![Publisher 工作流](https://raw.githubusercontent.com/aws-samples/sample-aws-agent-registry-demo/main/diagrams/aws-agent-registry-publisher.png) 1. 创建一个 Python 虚拟环境: ``` python3 -m venv .venv source .venv/bin/activate pip3 install boto3 strands-agents ``` 2. 运行以下命令以发布 4 条示例记录: ``` python demo/publish_sample_records.py ``` 该脚本将发布以下记录: | # | 记录类型 | 名称 | 预期 Reviewer 得分 | |---|------|------|------------------------| | 1 | MCP Server | `aurora-mysql-troubleshooting-runbook` | HIGH(批准) | | 2 | A2A Agent | `investigation-jira-agent` | HIGH(批准) | | 3 | Agent Skill | `lambda-troubleshooting-skill` | MEDIUM(拒绝 — 缺少团队/资产 ID) | | 4 | 自定义 | `s3-data-export-utility` | LOW(拒绝 — 描述模糊,无团队/资产 ID) | 发布后,管理员/curator(即您)将收到每条记录的电子邮件通知。 ### B. Consumer 工作流 您现在是 **consumer**。 ![Consumer 工作流](https://raw.githubusercontent.com/aws-samples/sample-aws-agent-registry-demo/main/diagrams/aws-agent-registry-consumer.png) 运行以下命令以查找已批准的记录。您将无法获得任何记录(`"count": 0`)。尽管 publisher 已成功将记录发布到 AWS Agent Registry,但它们尚未获得批准。Consumer 只能发现已批准的记录。这提供了治理机制。 ``` aws lambda invoke \ --function-name $CONSUMER_FUNCTION_NAME \ --cli-binary-format raw-in-base64-out \ --payload '{"action": "search", "query": "runbook", "max_results": 10}' \ output.json && cat output.json ``` ### C. Administrator/Curator 工作流 您现在扮演 **Administrator/Curator** 角色。 ![Administrator 工作流](https://static.pigsec.cn/wp-content/uploads/repos/cas/9d/9d70be04a8fccbd8f1e6ac43193d6ab699b8572c9f288cc6427b0a69f83863d1.png) 1. 运行批准建议 agent,根据定义的评估标准评估所有待处理记录: ``` python3 demo/approval_recommender_agent.py --list-pending ``` 该 agent 会对每条记录进行评分(HIGH/MEDIUM/LOW),并提供反馈以推荐 APPROVE 或 REJECT。 2. 根据建议,批准或拒绝每条记录。您也可以自行判断。请将 `record-id` 替换为上一步骤输出中的记录 ID: ``` # 批准 record aws bedrock-agentcore-control update-registry-record-status \ --registry-id $REGISTRY_ID \ --record-id \ --status APPROVED \ --status-reason "Looks good." # 拒绝 record aws bedrock-agentcore-control update-registry-record-status \ --registry-id $REGISTRY_ID \ --record-id \ --status REJECTED \ --status-reason "Missing details." ``` ### D. Consumer 工作流 - 再探 您再次扮演 **Consumer** 角色。 请等待约 5 分钟,以便批准状态生效。 1. 要通过直接调用 consumer Lambda 函数进行测试,请运行以下命令以查找已批准的记录。 ``` aws lambda invoke \ --function-name $CONSUMER_FUNCTION_NAME \ --cli-binary-format raw-in-base64-out \ --payload '{"action": "search", "query": "runbook", "max_results": 10}' \ output.json && cat output.json ``` 2. 要使用 agent 进行测试,请运行以下命令: ``` python3 demo/consumer_agent.py --query "Find me Aurora MySQL troubleshooting help" ``` 您现在将根据搜索找到相关的已批准记录。尝试使用不同的查询进行验证,以确保 consumer 只能找到已批准的记录。 ## 清理 如果您仅为了演示目的而跟随操作,为避免产生未来费用,请运行以下命令以删除本仓库中创建的资源: ``` sam delete deactivate #To deactivate the Python virtual environment. ``` ## 安全 有关更多信息,请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。 ## 许可证 本库采用 MIT-0 许可证授权。请参阅 LICENSE 文件。
标签:AI代理, AWS, AWS SAM, DPI, MCP, 示例项目, 资源注册中心, 逆向工具