View a markdown version of this page

Amazon API Gateway REST API 阶段作为目标 - Amazon Bedrock AgentCore

Amazon API Gateway REST API 阶段作为目标

API Gateway REST API 目标将你的网关连接到 REST API 的某个阶段。网关将传入的 MCP 请求转换为发送给 REST API 的 HTTP 请求并处理响应格式。当您添加或更新 API Gateway 目标时,Gate AgentCore way 会代表您调用 API Gateway 的 GetExportAPI。

您可以在目标配置中指定工具筛选器和工具覆盖。工具过滤器允许您在网关上使用特定的资源路径和 HTTP 方法组合作为工具。这些过滤器会创建一个允许列表,该列表仅显示您指定为工具的操作。

您也可以从 API Gateway 控制台将 API Gateway REST API 阶段配置为网关目标。要了解更多信息,请参阅 Amazon API AgentCore Gateway 文档中的向网关添加阶段

主要考虑因素和限制

使用 API Gateway REST API 阶段作为目标时,请记住以下要求和限制:

  • 您的 API 必须与您的 AgentCore 网关在同一个账户中。

  • 您的 API 必须与您的 AgentCore 网关位于同一区域。

  • 你的 API 必须是 API Gateway REST API。我们不支持 API Gateway HTTP APIWebSocket API。

  • 您的 API 必须配置为公共终端节点类型。不支持私有终端节点。要创建可以访问您的 VPC 中资源的网关目标,您应该使用公有终端节点和 API Gateway 私有集成

  • 如果您的 REST API 具有使用AWS_IAM授权且需要 API 密钥的方法,则 AgentCore Gateway 将不支持此方法。它将被排除在处理范围之外。

  • 如果您的 API 使用代理资源,例如/pets/{proxy+}, AgentCore Gateway 将不支持此方法。

  • 要设置你的 API 网关目标,Gate AgentCore way 会代表你调用 API Gateway 的 GetExportAPI,以获取 REST API 定义的 OpenAPI 3.0 格式导出。有关此问题以及它可能如何影响您的 Target 配置的更多详细信息,请参阅 API Gateway 导出。

API Gateway 工具配置

当你将 API Gateway REST API 添加为网关目标时,你需要提供 API 网关工具配置。API Gateway 工具配置定义了您的 REST API 中的哪些操作将作为工具公开。它需要工具筛选器列表来选择要显示的操作,也可以选择接受工具覆盖来自定义工具元数据,例如工具名称和描述。

工具过滤器

工具筛选器允许您使用路径和方法组合选择 REST API 操作。每个过滤器都支持两种路径匹配策略:

  • 显式路径-匹配单个特定路径,例如 /pets/{petId}

  • 通配符路径-匹配所有以指定前缀开头的路径,例如 /pets/ *

每个过滤器都指定路径和 HTTP 方法列表。过滤器解析为你的 API 中存在的匹配组合。多个过滤器可以重叠,重复项会自动删除。

工具覆盖

默认情况下,MCP 工具名称取自与您的过滤器匹配operationId的每个路径和方法组合。如果没有筛选器匹配项,则需要使用相应的工具替换来提供名称。operationId如果同时缺少operationId和覆盖名称,则目标创建和更新将无法通过验证。有关 AgentCore Gateway 中工具名称的更多信息,请参阅了解 AgentCore 网关工具的命名方式

工具覆盖是可选的。它们允许您在筛选后为特定操作自定义工具名称或描述。每个覆盖都必须指定一个显式路径和一个 HTTP 方法。不支持通配符。覆盖必须与您的 API 中存在的操作相匹配,并且必须与您的过滤器解析的其中一个操作相对应。您无法覆盖未选择的操作。如果您在从操作中导入时遇到错误,operationId则可以改用工具覆盖。

API Gateway 工具配置示例

以下 API Gateway 工具配置示例,展示了如何使用筛选器和替代项。所有示例都使用具有以下路径和方法的 API:

/pets/{petId} - GET /pets/{petId} - POST /pets/{petId} - OPTIONS /pets - GET /pets - OPTIONS / - GET

通配符路径和方法列表

工具配置:

{ "filterPath": "/pets/*", "methods": ["GET", "POST"] }

结果

  • GET /pets/{petId}

  • POST /pets/{petId}

明确的路径和方法列表

工具配置:

{ "filterPath": "/pets/{petId}", "methods": ["GET", "POST"] }

结果

  • GET /pets/{petId}

  • POST /pets/{petId}

显式路径和显式方法列表(最具体)

工具配置:

{ [ { "filterPath": "/pets/{petId}", "methods": ["POST"] }, { "filterPath": "/pets/{petId}", "methods": ["GET"] } ] }

结果

  • GET /pets/{petId}

  • POST /pets/{petId}

混合搭配显式路径和通配符路径:

工具配置:

{ [ { "filterPath": "/pets/{petId}", "methods": ["GET"] }, { "filterPath": "/*", "methods": ["GET"] } ] }

结果

  • GET /pets/{petId}

  • GET /pets/

工具筛选器和工具覆盖

您可以提供工具过滤器并添加替换。该覆盖在 REST API 中指定资源路径,例如 /pets,以及要为指定路径公开的 HTTP 方法。覆盖必须与 REST API 中的现有路径明确匹配。

工具配置

{ "toolFilters": [ { "filterPath": "/pets/*", "methods": ["GET", "POST"] }, { "filterPath": "/", "methods": ["GET"] } ], "toolOverrides": [ { "path": "/pets/{petId}", "method": "GET", "name": "GetPetById", "description": "Retrieve a specific pet by its ID" } ] }

结果

  • GET /pets/{petId}— 与第一个匹配toolFilter,但名称和描述将根据中的条目被覆盖 toolOverrides

  • POST /pets/{petId}— 与第一个匹配,toolFilter但将使用导出的 OpenAPI 规范中的operationIddescription作为工具名称和描述

  • GET /— 与第二个显式工具过滤器匹配,该过滤器命名了路径和单个方法

API Gateway 导出

要设置您的 API 网关目标,Gat AgentCore eway 会代表您调用 API Gateway 的GetExport操作,以获取 API 定义的 OpenAPI 3.0 格式导出。这有助于网关正确地将传入的 MCP 请求转换为 HTTP 请求并处理响应。以下是 AgentCore Gateway 何时调用该 GetExport 操作的注意事项:

  • 该 GetExport 请求使用转发访问会话发出,并使用呼叫者的证书。

    • 创建目标的调用者必须有权GetExport在 API Gateway 中调用 API。

    • GetExport请求将被登录 CloudTrail。

  • 导出的 API 受与 OpenAPI 目标类型相同的注意事项和限制约束。

  • 从 API Gateway 导出的 OpenAPI 规范的最大大小为 50 MB。

更新 REST API 上的 operationID

重要

导出的 OpenAPI 规范必须包含要作为工具公开的所有操作的operationId字段。在 operationId MCP 界面中用作工具名称。

您可以更新您的 REST API,以确保返回的 OpenAPI 定义GetExportoperationId设置。这是提供工具覆盖的替代方案。以下说明了两种设置方法operationId

通过更新你的 OpenAPI 定义来设置操作 ID

通过调用GetExport、更新缺少operationId的操作并重新导入 API,从已部署的 API 阶段导出 OpenAPI 定义。

  1. 通过调用,从已部署的 API 阶段导出 OpenAPI 定义。GetExport你可以用 CLI 来做到这一点:

    aws apigateway get-export \ --rest-api-id rest-api-id \ --stage-name api-stage \ --export-type oas30 \ --parameters 'extensions=apigateway' \ '/path/to/api_oas30_template.json'
  2. 手动编辑 OpenAPI 定义,将添加到缺少该operationId属性的操作中。

  3. 使用导入更新后的 OpenAPI 定义。PutRestApi你可以用 AWS CLI 来做到这一点:

    aws apigateway put-rest-api \ --rest-api-id rest-api-id \ --mode merge \ --body 'fileb:///path/to/api_oas30_template.json'
  4. 使用 AWS CLI 将您的 API 重新部署到您的舞台:

    aws apigateway create-deployment \ --rest-api-id rest-api-id \ --stage-name api-stage \ --description 'deployment-description'

通过更新 REST API 的方法来设置 operation ID

您可以使用UpdateMethod命令将 API Gateway 方法配置为operationName添加。导出 API 后,operationName会变成operationId

  1. UpdateMethod使用 AWS CLI 致电:

    aws apigateway update-method \ --rest-api-id rest-api-id \ --resource-id resource-id \ --http-method http-method \ --patch-operations '[ { "op": "replace", "path": "/operationName", "value": operation-id } ]'
  2. 使用 AWS CLI 将您的 API 重新部署到您的舞台:

    aws apigateway create-deployment \ --rest-api-id rest-api-id \ --stage-name api-stage \ --description 'deployment-description'

API Gateway API 支持的出站授权方法

您可以将 AgentCore 网关目标配置为通过出站身份验证调用您的 API。

AgentCore Gateway 支持 API 网关目标的以下类型的出站授权:

  • IAM-based 出站授权-使用网关服务角色通过签名版本 4(Sigv4 或 sigv 4A)对网关目标的访问进行身份验证。要求您的 API Gateway API 启用 IAM 授权。

  • API 密钥 — 使用 AgentCore 网关管理的 API 密钥调用您的 API。这与 API Gateway 中的 API 密钥不同。

  • 无授权(不推荐)-某些目标类型允许您选择绕过出站授权。

要了解更多信息,请参阅为您的网关设置出站授权

IAM 出站授权

API Gateway 允许你使用 IAM 保护你的 REST API。启用 IAM 授权后,客户必须使用签名版本 4(Sigv4 或 sigv4A)使用证书签署请求。 AWS

设置 IAM 出站授权

  1. 根据AgentCore 网关服务角色权限创建具有正确信任权限的 IAM 角色

  2. 向您的角色添加允许该操作的策略execute-api:Invoke以及与您用于设置目标的 REST API ID 和阶段相对应的资源,例如以下策略:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:aws-region:account-id:rest-api-id/api-stage/*/*", "Effect": "Allow" } ] }

API Gateway 资源政策

API Gateway 资源策略是您附加到 API Gateway REST API 的 JSON 策略文档,用于控制指定的委托人是否可以调用该 API。为了让 AgentCore Gateway 使用资源策略调用您的 REST API,您必须执行以下操作:

  • AWS_IAM对于您作为工具提供的任何 REST API 方法,请将方法授权类型设置为。

  • 配置您的资源策略以允许bedrock-agentcore.amazonaws.com委托人调用您的服务。您可以向策略中添加其他委托人。

以下是 API 资源策略的示例,该策略授予 AgentCore 网关对您的 REST API 的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-west-2:111122223333:abcd123/*/*/*", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:bedrock-agentcore:us-west-2:111122223333:gateway/my-gateway-d4jrgkaske" } } } ] }

API 密钥出站授权

要使用 API 密钥设置出站授权,您可以使用 AgentCore 身份服务创建凭据提供者,并使用您通过 API Gateway 配置的 API 密钥。

设置 API 密钥出站授权

  1. 根据在 API Gateway 中为 R EST API 设置 API 密钥,在 API Gateway 中创建 API 密钥。

  2. 按照步骤使用 API 密钥设置出站授权,提供您通过 AP I Gateway 创建的 API 密钥。