元鉴
返回中文阅读流

AWS Machine Learning Blog

使用 Amazon Bedrock AgentCore Runtime 将 AWS API MCP Server 与 Amazon Quick 集成

本文展示如何使用支持 Model Context Protocol (MCP) 的 Amazon Bedrock AgentCore Runtime,通过 AWS API MCP Server 连接 Amazon Quick 与 AWS 服务,创建无需切换工具的对话 AI 助手。

中文内容

已翻译official company source英文原文2026-05-21

随着您的 AWS 基础设施不断扩展,运营工作流自然会变得更加复杂。SRE 和 DevOps 工程师需要花费大量时间在 AWS Management Console、CLI 文档以及多个服务控制面板之间切换上下文。他们需要手动将业务问题转换为正确的 API 语法,串联跨服务调用,并为每个新的使用场景重复构建相同的集成模式。这种摩擦会随着时间推移不断累积。事件调查需要在不同界面之间交叉引用 Amazon CloudWatch Logs、Amazon Elastic Compute Cloud(Amazon EC2)实例状态以及 AWS Identity and Access Management(IAM)策略。容量规划意味着要手动查询多个服务并汇总结果。安全审计则需要一致且可重复的 API 调用序列,而从零开始编写这些脚本非常耗时。

本文将向您展示如何使用支持 Model Context Protocol(MCP)的 Amazon Bedrock AgentCore Runtime,通过 AWS API MCP Server 将 Amazon Quick 与 AWS 服务连接起来,从而创建一个对话式 AI 助手,将自然语言转换为 AWS Command Line Interface(AWS CLI)命令,使您在关键时刻无需在工具之间切换。

解决方案概述

借助 Amazon Bedrock AgentCore Runtime 和 MCP 支持,自然语言查询可直接转换为 AWS API 调用。你可以询问:“显示 us-east-1 中所有正在运行的 EC2 实例”,并立即获得准确结果,而无需在工具之间切换或记忆 API 语法。你的请求会在现有 IAM 权限范围内安全运行,并通过完整的 Amazon CloudWatch 审计跟踪满足合规要求。你无需为每个工作流重新构建连接逻辑,而是可以通过单一、可复用的集成,标准化 AI 代理与 AWS 服务交互的方式。下图展示了 Amazon Bedrock AgentCore Runtime 如何通过 AWS API MCP Server 将 Amazon Quick 连接到 AWS 服务。

Architecture Diagram

它在日常运维中的工作方式:

  1. 你用自然语言提出问题:“显示 us-east-1 中正在运行的 EC2 实例”。
  2. Amazon Quick 自定义代理会解读你的意图。
  3. Amazon Cognito 对请求进行身份验证:Quick 使用你配置的 Client ID 和 Client Secret,通过 OAuth 2.0 客户端凭证流程,从你的 Amazon Cognito 用户池获取 JWT 令牌。
  4. 代理连接到 AWS API MCP Server:经过身份验证的请求到达 Amazon Bedrock AgentCore Runtime,后者会根据你的 Cognito 身份提供程序配置验证 JWT 令牌。
  5. AgentCore Runtime 授权并路由请求:在验证你的 Cognito 令牌后,AgentCore Runtime 会安全地调用在容器化环境中运行的 AWS API MCP Server。
  6. MCP 服务器转换你的请求:你的自然语言查询会被转换为相应的 AWS CLI 命令。
  7. AWS 服务执行命令:使用你配置的 IAM 执行角色,该命令以最小权限针对 AWS 服务运行。
  8. 结果以可读格式返回:无需 CLI 语法。你会直接在 Quick 界面中获得结构化、可读的结果。

先决条件

要跟随本文操作,你必须具备以下先决条件。

账户和访问要求:

  • 具有管理员访问权限的 AWS 账户
  • Amazon Quick Enterprise 订阅(最低为 Professional 层级)
  • 访问 AWS Marketplace – AWS API MCP Server
  • 用于创建以下资源的 IAM 权限:Amazon Cognito 用户池、IAM 角色和策略、Amazon Bedrock AgentCore Runtime 代理、Amazon CloudWatch 日志组

所需软件和工具:

  • 已安装并配置 AWS CLI(演练中的 URL 编码步骤需要)

所需知识和专业能力:

  • 对 IAM 角色和策略的基本理解(已列出)
  • 熟悉 OAuth 2.0 认证流程
  • 了解 JWT(JSON Web Token)概念

附加信息:

  • 预计完成时间:30–45 分钟
  • 预计每月费用:对于单个 Enterprise 用户每月运行约 500 次查询的情况,预计费用约为 292 美元/月,主要由 Amazon Quick Enterprise 订阅(40 美元/用户/月)和基础设施费用(250 美元/账户/月)构成。

设置解决方案

手动部署

要实施该解决方案,请完成以下步骤:

  1. 设置 Amazon Cognito 用户池——用于身份验证。
  2. 创建 IAM 角色——用于授权。
  3. 创建 Amazon Bedrock AgentCore Runtime 代理。
  4. 在 Amazon Quick 中配置 AWS API MCP Server 的集成。
  5. 在 Amazon Quick 中创建自定义聊天代理。

本文中某些截图的视觉布局可能与您的 AWS Management Console 中的布局有所不同。

设置 Amazon Cognito 用户池

Amazon Cognito 为你的应用程序提供身份验证和授权。在此解决方案中,你配置一个 Cognito 用户池来生成 JWT 令牌,用于对发送到 Amazon Bedrock AgentCore Runtime 的请求进行身份验证。使用 Amazon Cognito 进行 JWT 身份验证时,你在 CreateAgentRuntime 操作期间配置授权方,指定你的身份提供商(IdP)特定的发现 URL 和允许的客户端。你现有的代理代码无需修改。你将授权方配置添加到运行时部署中。当调用实体或用户调用你的代理时,他们会在 Authorization 标头中将其 IdP 特定的访问令牌作为 bearer token 传递。AgentCore Runtime 使用 AgentCore Identity 根据你配置的授权方自动验证此令牌,并拒绝未经授权的请求。

为 JWT 身份验证创建 Amazon Cognito 用户池,使用唯一的应用程序名称,并将应用程序类型设为 Machine-to-machine application,如以下截图所示。为应用程序提供一个名称,然后选择 create user directory。

当你使用机器到机器应用程序创建 Cognito 用户池时,Amazon Cognito 会自动为你的应用程序创建一个资源服务器。资源服务器定义自定义 OAuth 2.0 范围,用于指定你的应用程序可以请求的权限

AmazonCognito-ApplicationResourceSetup

CognitoUserPool

在新创建的用户池菜单中,导航到 Branding 并选择 Domain。选择已创建的 Resource server,然后选择 edit。向自定义范围添加 write 范围,并更新 read 和 write 的描述。

Cognito-ResouceServer

read 和 write 范围控制对 AWS API MCP Server 的访问:

  • Read 范围——允许应用程序查询 AWS 资源(例如,列出 EC2 实例或描述 Amazon Simple Storage Service (Amazon S3) 存储桶)。
  • Write 范围——允许应用程序修改 AWS 资源(例如,创建资源或更新配置)。

这些作用域映射到 MCP 服务器在代表经过身份验证的请求执行 AWS CLI 命令时所使用的 IAM 权限。

创建 IAM 角色

要在 Amazon Bedrock AgentCore Runtime 中运行代理或工具,您需要一个 IAM 执行角色。有关创建 IAM 角色的信息,请参阅 IAM 角色创建。

为 Amazon Bedrock AgentCore Runtime 创建所需的信任策略和执行角色。有关更多详细信息,请参阅 AgentCore Runtime 的 IAM 权限。将下面的 YOUR_ACCOUNR_ID 替换为您的 AWS 账户 ID。

以下代码用于 AgentCore Runtime 信任策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AssumeRolePolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "YOUR_ACCOUNT_ID"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:bedrock-agentcore:*:YOUR_ACCOUNT_ID:*"
        }
      }
    }
  ]
}

以下代码用于 AgentCore Runtime 执行角色:

以下 IAM 策略向你的执行角色授予拉取 AWS API MCP Server 容器镜像并写入运行时日志所需的权限。该容器镜像托管在 AWS 托管的公共 Amazon Elastic Container Registry(Amazon ECR)存储库中。你无需自行构建或维护该镜像。

要查找最新的容器 URI,请访问:AWS Marketplace – AWS API MCP Server。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRImageAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:us-east-1:709825985650:repository/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogStreams",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:YOUR_ACCOUNT_ID:log-group:/aws/bedrock-agentcore/runtimes/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:YOUR_ACCOUNT_ID:log-group:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:YOUR_ACCOUNT_ID:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*"
            ]
        },
        {
            "Sid": "ECRTokenAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
            ],
            "Resource": [ "*" ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "bedrock-agentcore"
                }
            }
        },
        {
            "Sid": "GetAgentAccessToken",
            "Effect": "Allow",
            "Action": [
                "bedrock-agentcore:GetWorkloadAccessToken",
                "bedrock-agentcore:GetWorkloadAccessTokenForJWT",
                "bedrock-agentcore:GetWorkloadAccessTokenForUserId"
            ],
            "Resource": [
              "arn:aws:bedrock-agentcore:us-east-1:YOUR_ACCOUNT_ID:workload-identity-directory/default",
              "arn:aws:bedrock-agentcore:us-east-1:YOUR_ACCOUNT_ID:workload-identity-directory/default/workload-identity/*"
            ]
        }
    ]
}

为该角色附加特定权限,以定义它可以代表你执行哪些操作。本示例使用一个缩小范围的只读策略,授予对所有存储桶的 s3:ListBucket 和 s3:GetObject 权限。出于发现和探索目的,这里有意设置得较为宽泛。

注意:使用通配符资源(arn:aws:s3:::*)会授予对你账户中每个 S3 存储桶的访问权限。这对于初始设置和测试是可以接受的,但在生产环境中违反最小权限原则。在部署到生产环境之前,请将通配符替换为具体的存储桶 ARN:

"Resource": [
"arn:aws:s3:::your-specific-bucket",
"arn:aws:s3:::your-specific-bucket/*"
]

示例角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeImages"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ec2:Region": "us-east-1"
        }
      }
    }
  ]
}

创建 Amazon Bedrock AgentCore Runtime 代理

在 Amazon AgentCore 中,从菜单中选择运行时,然后选择 host/agent 工具。为你的运行时代理提供一个唯一名称。对于 Agent Source,选择 ECR 容器选项,并输入来自 AWS Marketplace 的镜像 URI。

BedrockAgentCore-AgentSource

在同一页面的权限部分,选择上一步创建的现有角色。

Agentcore-servicerole

在同一页面的入站身份验证部分,选择 MCP 协议和 JWT 令牌作为入站身份验证类型。对于 JWT 架构配置,使用现有的身份提供商配置(第一步创建的 Cognito 身份池)。

Agentcore-Inboundauth

从你的 Cognito 用户池信息中获取发现 URL。查找令牌签名密钥 URL,其格式如下:https://cognito-idp.$REGION.amazonaws.com/$POOL_ID/.well-known/jwks.json

将 jwks.json 替换为 openid-configuration。你的最终 URL 应类似于以下示例:https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ev5CwXjma/.well-known/openid-configuration

将允许的客户端添加到你的配置中。通过在左侧面板中选择 App Client,导航到你的 Cognito 用户池中的 App Client 部分。从 App client information 中复制客户端 ID,并将其添加到允许的客户端部分。

为你的 AgentCore Runtime 部署配置高级设置。在 Advanced configurations 下,本演练中将默认网络模式保持设置为 Public。这允许运行时在初始设置和测试期间可通过互联网访问。

对于生产部署,选择 VPC 选项以将网络访问限制在私有、受控环境中。对于处理敏感数据或需要网络隔离的工作负载,这是推荐方法。接下来,按以下部分所示添加你的环境变量,然后选择 Create agent。

  • 正文:AUTH_TYPE:“no-auth”
  • 正文:AWS_API_MCP_HOST:“0.0.0.0”
  • 正文:AWS_API_MCP_PORT:“8000”
  • 正文:AWS_API_MCP_STATELESS_HTTP:“true”
  • 正文:AWS_API_MCP_TRANSPORT:“streamable-http”
  • 正文:AWS_API_MCP_ALLOWED_HOSTS = “*”
  • 正文:AWS_API_MCP_ALLOWED_ORIGINS = “*”

了解 AgentCore 上的 AWS API 身份验证

Variable Description AWS_API_MCP_TRANSPORT Sets the transport protocol to streamable HTTP for MCP communications. AWS_API_MCP_STATELESS_HTTP Enables stateless HTTP mode, required for streamable-http transport. AWS_API_MCP_PORT Port on which the MCP server listens for incoming requests. AWS_API_MCP_HOST Binds the server to available network interfaces within the container. AWS_API_MCP_ALLOWED_ORIGINS Allows requests from any origin. Acceptable within the AgentCore Runtime controlled execution environment. AWS_API_MCP_ALLOWED_HOSTS Allows requests from any host. Scoped to the container network boundary enforced by AgentCore Runtime. AUTH_TYPE Disables MCP server-level authentication. Authentication is handled by AgentCore Runtime using JWT token validation. For information, see the following security note.

AUTH_TYPE 被设置为 no-auth,因为 MCP 服务器本身不执行身份验证。在通过 Amazon Bedrock AgentCore Runtime 部署时,这是有意为之且安全的。AgentCore Runtime 充当安全边界。在请求到达你的 MCP 服务器容器之前,AgentCore Runtime 会强制执行 JWT 令牌验证。它使用来自 AgentCore Identity 的公钥验证加密签名,验证令牌声明(签发者、受众、过期时间),并拒绝未提供有效 OAuth 2.0 bearer token 的请求。换句话说:MCP 服务器信任 AgentCore Runtime 已经对调用方进行了身份验证。这与 API Gateway 后方的内部微服务所使用的模式相同。服务本身不会再次进行身份验证,因为网关已经完成了身份验证。

注意:如果你在 AgentCore Runtime 之外运行此 MCP 服务器(例如,直接在 EC2 实例上运行,或作为独立容器运行),请不要使用 AUTH_TYPE: no-auth。在这种情况下,服务器会在没有身份验证层的情况下暴露。

AWS_API_MCP_ALLOWED_HOSTS 和 AWS_API_MCP_ALLOWED_ORIGINS 的通配符值(*)在本教程中是有意设置为宽泛范围的。在生产环境中,请将这些值替换为你的工作负载所需的具体主机名和来源,以强制执行最小权限网络访问。

在 Amazon Quick 中创建自定义聊天代理

现在你已经在 Amazon Bedrock AgentCore Runtime 中运行了 AWS API MCP 服务器,接下来让我们在 Amazon Quick 中创建一个自定义聊天代理,用于通过自然语言交互执行 AWS CLI 命令。

导航到 Amazon Quick 控制台,访问集成设置。在左侧导航面板中,选择 Integrations,然后选择 Actions。添加 MCP 协议集成,以将 Amazon Quick 与托管在 Amazon Bedrock AgentCore Runtime 上的 MCP 服务器连接起来。

要配置集成详细信息,请输入集成元数据。为你的集成提供一个描述性的 Name,然后添加一个清晰的 Description,说明该集成的用途。

Quick-MCPIntegration

对于端点配置,请获取你的 Amazon Bedrock AgentCore Runtime ARN。导航到你的代理的 Tools Details 部分。从 Runtime 部分复制 Runtime ARN。

ARN 格式示例:

正文:arn:aws:bedrock-agentcore:us-east-1:123456789123:runtime/demoagent-LmNop08QoR

端点 URL 应采用以下格式,将 Region 替换为你的 AWS 区域,并按照步骤创建经过 URL 编码的 ARN。

https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{url-encoded-arn}/invocations?qualifier=DEFAULT

要创建经过 URL 编码的 ARN,请在终端中运行以下命令:

echo "YOUR_ARN" | sed 's/:/%3A/g; s/\//%2F/g'
[System.Uri]::EscapeDataString("YOUR_ARN")

注意:bash 命令需要在 Linux、macOS,或已安装 WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)的 Windows 上运行。Windows PowerShell cmdlet 可在 Windows 系统上原生运行,无需额外依赖。最后,请保持启用自动发布选项。要在 Amazon Quick 与 MCP 服务器之间建立安全通信,请使用您的 Amazon Cognito 用户池凭证配置服务身份验证。

注意:Amazon Cognito 是一项完全托管的 AWS 身份服务,用于处理应用程序的身份验证和授权。应用程序客户端密钥在静态存储和传输过程中均会加密保存。您的凭证不会以明文形式传输。Cognito 还支持按需轮换客户端密钥,因此您可以为每个应用程序客户端最多保留两个有效密钥,以实现零停机轮换。

在身份验证设置页面出现提示时,选择“服务身份验证”作为您的身份验证方法。

要查找您的 Client ID 和 Client Secret:

  1. 打开 Amazon Cognito 控制台。
  2. 选择 User Pools,然后选择您的用户池。
  3. 在左侧导航窗格中,选择 App clients(位于 Applications 下)。
  4. 选择您的应用客户端。App client ID 会直接显示在此页面上。
  5. 选择显示客户端密钥以显示应用客户端密钥。

注意:请像对待密码一样对待您的客户端密钥。对于生产部署,请使用 AWS Secrets Manager 安全地存储它。不要将其嵌入客户端代码或版本控制中。

对于令牌 URL,请使用您的用户池域来构建它:

  1. 在用户池的左侧导航窗格中,向下滚动到品牌设置部分。
  2. 选择域。你的 Cognito 域将以以下格式显示在此处:https://your-domain.auth.region.amazoncognito.com
  3. 在该域后追加 /oauth2/token,以形成完整的令牌端点:https://your-domain.auth.region.amazoncognito.com/oauth2/token

输入 Client ID、Client Secret 和 Token URL 后,选择 Create and Continue。

MCP-ClientCredentials

注意:在 Amazon Quick 中,你的凭证会使用 AWS Key Management Service(AWS KMS)进行加密。默认情况下,Quick 使用服务托管的 AWS KMS 密钥来加密数据源凭证和 OAuth 令牌。对于合规要求更严格的组织,账户管理员可以配置客户托管密钥,以保持对加密密钥生命周期的完全控制,包括能够即时撤销访问权限,并维护凭证访问的可审计日志。

接下来,设置此操作的共享偏好设置。选择是否与其他团队成员共享此操作,并配置适当的访问权限。选择“完成”,并确认该操作出现在“操作”部分中。

现在,让我们构建一个会话式代理,用于将自然语言转换为 AWS CLI 命令。在 Amazon Quick 控制台中导航到代理创建页面,在左侧面板中选择“自定义代理”,然后选择“创建聊天代理”。

使用描述性提示词配置该代理:

提示词:创建一个会话式代理,使用户能够使用自然语言执行 AWS CLI 命令。通过 aws-api-mcp 连接器将用户请求转换为相应的 AWS API 调用。

Amazon Quick 会根据你的提示自动检测并选择 MCP 连接器。请确认正确的集成已与你的代理关联。选择 Launch Agent,使其可用于测试。

Quick-LaunchChatAgent

自动化部署

对于自动化部署,请按照 GitHub 中的说明,在 Amazon Bedrock Runtime 中部署 AWS API MCP 服务器。此外,要部署 Cognito 用户池和应用客户端,请按照 AWS 文档中《Set up Cognito user pool for authentication》附录部分的说明操作。

最后,要设置 Amazon Quick 与 AWS API MCP 服务器之间的集成,请按照 Amazon Quick 中《Create Custom Chat Agent》部分提到的步骤操作。

测试解决方案

要验证自定义聊天代理功能,请访问新创建的自定义聊天代理的聊天界面,并测试自然语言命令:

提示词:显示 us-east-1 区域中正在运行的 EC2 实例。

Quick-PromptTesting

清理

为避免产生持续费用,请清理您作为此解决方案一部分创建的资源。

  1. 删除 Amazon Quick 资源。移除您启用的 Amazon Quick 功能,包括您的自定义聊天代理、Spaces 和 Flows。
  2. 移除 MCP 集成。删除您创建的 Amazon Quick MCP 操作。
  3. 清理 Amazon Bedrock 资源。删除 Amazon Bedrock AgentCore 代理及其关联的 IAM 执行角色。
  4. 删除 Amazon Cognito 用户池。最后,移除你为身份验证创建的 Amazon Cognito 用户池。

结论

在本文中,你了解了如何使用 Amazon Bedrock AgentCore Runtime 和 AWS API MCP Server 将 Amazon Quick 与 AWS 服务连接起来。当你通过 MCP 标准化 AI 代理与基础设施交互的方式时,可以避免针对每个新用例重新构建自定义集成模式。

从这里开始,你可以扩展此模式以自动化常见的运营查询。你还可以构建面向安全、成本优化或容量规划的特定领域代理,并使用 Amazon Quick Flows 和 Amazon Quick Automate 与事件管理工作流集成。其结果是以更一致、更安全、更高效的方式大规模管理 AWS 基础设施。

关于作者

原文标题

Integrating AWS API MCP Server with Amazon Quick using Amazon Bedrock AgentCore Runtime