View a markdown version of this page

连接到私有托管的工具 - AWS DevOps 代理人

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

连接到私有托管的工具

私有连接概述

AWS DevOps 可以使用自定义模型上下文协议 (MCP) 工具和其他集成来扩展代理,使代理可以访问内部系统,例如私有包注册表、自托管可观测性平台、内部文档 API 和源代码控制实例(参见:)。配置集成和知识这些服务通常在亚马逊虚拟私有云 (Amazon VPC) 内运行,公共互联网访问受限或没有访问权限,这意味着 AWS DevOps 代理在默认情况下无法访问它们。

AWS DevOps 代理的私有连接使您可以安全地将代理空间连接到在 VPC 中运行的服务,而无需将其暴露在公共互联网上。私有连接适用于需要到达私有端点的任何集成,包括 MCP 服务器、自托管 Grafana 或 Splunk 实例,以及企业服务器和等 GitHub 源代码控制系统。 GitLab Self-Managed

注意

如果您的私有托管工具从您的 VPC 内向 AWS DevOps 代理发出出站请求,则还可以使用 VPC 终端节点保护这些流量,使其保持在 AWS 网络内。例如,这可以与通过 webhook 事件触发 DevOps 代理的工具一起使用(参见:通过 Webhook 调用 DevOps 代理)。有关更多信息,请参阅 VPC 终端节点 (AWS PrivateLink)。

私有连接的工作原理

私有连接会在 AWS DevOps 代理和您的 VPC 中的目标资源之间创建安全的网络路径。在幕后, AWS DevOps 代理使用亚马逊 VPC Lattice 来建立这种安全的私有连接路径。VPC Lattice 是一项应用程序网络服务,可让您连接、保护和监控应用程序之间跨 VPC、账户和计算类型的通信,而无需管理底层网络基础设施。

创建私有连接时,会发生以下情况:

  • 您提供与目标服务具有网络连接的 VPC、子网和(可选)安全组。

  • AWS DevOps 代理创建服务管理资源网关并在您指定的子网中配置其弹性网络接口 (ENI)。

  • 代理使用资源网关通过私有网络路径将流量路由到目标服务的 IP 地址或 DNS 名称。

资源网关完全由 AWS DevOps 代理管理,在您的账户(已命名aidevops-{your-private-connection-name})中显示为只读资源。您无需对其进行配置或维护。在您的 VPC 中创建的唯一资源是您指定子网中的 ENI。这些 ENI 充当私人流量的入口点,完全由该服务管理。他们不接受来自互联网的入站连接,您可以通过自己的安全组完全控制他们的流量。

安全性

私有连接的设计具有多层安全性:

  • 没有公开的互联网泄露 —— AWS DevOps 代理和目标服务之间的所有流量都留在 AWS 网络上。您的服务永远不需要公有 IP 地址或互联网网关。

  • Service-controlled 资源网关 -服务管理的资源网关在您的账户中是只读的。它只能由 AWS DevOps 代理使用,任何其他服务或主体都无法通过它路由流量。你可以在记录所有 VPC Lattice API 调用的AWS CloudTrail日志中对此进行验证。

  • 您的安全组,您的规则 — 您可以通过自己拥有和管理的安全组来控制 ENI 的入站和出站流量。如果您未指定安全组,则 AWS DevOps 代理会创建一个范围限于您定义的端口的默认安全组。

  • Service-linked 权限最低的角色 — AWS DevOps 代理使用服务相关角色仅创建必要的 VPC 莱迪思和亚马逊 EC2 资源。此角色的作用域仅限于标记的资源AWSAIDevOpsManaged,不能访问您账户中的任何其他资源。

注意

如果您的组织制定了限制 VPC Lattice API 操作的服务控制策略 (SCP),则服务管理资源网关是通过服务相关角色创建的。确保您的 SCP 允许对服务相关角色执行必要操作。

架构

下图显示了私有连接的网络路径。

网络架构显示 AWS DevOps 代理通过 VPC Lattice 进行连接。

在此架构中:

  • AWS DevOps 代理向您的目标服务发起请求。

  • 亚马逊 VPC Lattice 通过您的 VPC 中的服务管理资源网关路由请求。有关使用您自己的 VPC 莱迪思资源进行高级设置,请参阅使用现有 VPC 莱迪思资源进行高级设置。

  • 您的 VPC 中的 ENI 接收流量并将其转发到目标服务的 IP 地址或 DNS 名称。

  • 您的安全组管理允许哪些流量通过 ENI。

  • 从目标服务的角度来看,该请求源自您的 VPC 中 ENI 的私有 IP 地址。

为私有连接配置防火墙规则

使用私有连接,从 AWS DevOps 代理到您的私有托管工具的流量来自您在创建私有连接期间指定的子网中的资源网关 ENI。这与公共托管的工具连接不同,后者使用安全页面上列出的静态 IP 地址。

重要

在 “安全” 页面上发布的静态 IP 地址不适用于私有连接。不要在私有托管工具的防火墙规则中使用这些 IP。

要允许 AWS DevOps 代理流量访问您的私人托管工具,请执行以下操作:

  1. 确定您在创建私有连接时指定的子网。

  2. 在目标工具的安全组(例如 Grafana ALB 上的安全组)中,使用以下方法之一添加入站规则:

    • 安全组引用(推荐)-允许来自连接到私有连接 ENI 的安全组的入站流量。如果您在创建私有连接时指定了安全组,请使用该安全组 ID 作为来源。例如:允许来自 sg-0123456789abcdef0 TCP 443。

    • 子网 CIDR 许可清单 -允许来自您在创建私有连接期间指定的子网的 CIDR 块的入站流量。例如,如果您的子网 CIDR 是10.0.1.0/24:允许 TCP 443 来自。10.0.1.0/24

要查找您的子网 CIDR 块,请使用您在创建私有连接期间指定的子网 ID 运行以下命令:

aws ec2 describe-subnets \ --subnet-ids subnet-0123456789abcdef0 subnet-0123456789abcdef1 \ --query 'Subnets[*].[SubnetId,CidrBlock]' \ --output table
注意

ENI IP 地址在您的私有连接生命周期内保持稳定。如果您删除并重新创建私有连接,ENI IP 地址可能会更改。使用子网 CIDR 块或安全组引用可避免在重新创建后需要更新规则。

创建私有连接

您可以使用 AWS 管理控制台或 AWS CLI 创建私有连接。

注意

VPC Lattice 不支持以下可用区:use1-az3、、usw1-az2、apne1-az3、apne2-az2、euc1-az2、、euw1-az4cac1-az3、ilc1-az2。

先决条件

在创建私有连接之前,请确认您具备以下条件:

  • 活跃的代理空间 -您的账户中需要现有的代理空间。如果没有,请参阅开始使用 AWS DevOps 代理。

  • 私密访问的目标服务 -必须能够通过部署资源网关的 VPC 中的已知私有 IP 地址或 DNS 名称访问您的 MCP 服务器、远程 A2A 代理、可观测性平台或其他服务。只要可以从资源网关子网路由,该服务就可以在同一 VPC、对等 VPC 或本地运行。该服务必须使用您在创建连接时指定的端口上提供至少 TLS 版本 1.2 的 HTTPS 流量。

  • 您的 VPC 中的子网 — 确定将在其中创建 ENI 的 1—20 个子网。我们建议在多个可用区中选择子网以实现高可用性。这些子网必须与您的目标服务建立网络连接。VPC 莱迪思可以使用每个可用区一个子网。

  • (可选)安全组 -如果您想使用特定规则控制流量,请准备最多五个安全组 ID 以附加到 ENI。如果省略安全组,则 AWS DevOps 代理会创建默认安全组。

私有连接是账户级别的资源。创建私有连接后,可以在需要连接到同一台主机的多个集成和代理空间中重复使用该连接。

注意

在服务管理模式下, AWS DevOps 代理会在您指定的 VPC 和子网中创建资源网关,并且该 VPC 与私有连接属于同一个账户。 AWS DevOps 代理无法在其他账户中创建资源网关。如果您的目标服务在其他 AWS 账户或本地运行,请选择以下选项之一:

  • 通过 VPC 对等互连、 AWS 传输网关或虚拟专用网络 (VPN) 连接为网关的 VPC 提供通往目标的路由。网关保留在该账户中,流量通过该连接到达目标。该路由必须存在于网关的 VPC 中,而不仅仅是目标运行的账户中。

  • 使用自我管理模式。在运行目标的账户中创建资源网关和资源配置,通过资源访问管理器 (AWS RAM) 与该账户共享 AWS 资源配置,接受共享,然后使用该资源配置的 ARN 创建私有连接。请参阅使用现有 VPC Lattice 资源进行高级设置。

使用控制台创建私有连接

  1. 打开 AWS DevOps 代理控制台。

  2. 在导航窗格中,选择能力提供者,然后选择私有连接。

  3. 选择建立新的连接。

  4. 在 “名称” 中,输入连接的描述性名称,例如my-mcp-tool-connection。

  5. 对于 VPC,选择将部署资源网关 ENI 的 VPC。

  6. 对于子网,选择一个或多个子网(最多 20 个)。我们建议在至少两个可用区中选择子网。

  7. 对于 IP 地址类型,选择目标服务的 IP 地址类型(IPv4IPv6、或DualStack)。

  8. (可选)对于 IPv4 地址数量,如果您为 IP 地址类型选择了 IPv4 或双栈,则可以输入资源网关每个 ENI 的 IPv4 地址数。默认为每个 ENI 提供 16 个 IPv4 地址。

  9. (可选)对于安全组,选择现有安全组(最多 5 个)以限制允许哪些流量到达目标服务。如果您未选择任何安全组,则会创建默认安全组。

  10. (可选)对于端口范围,指定目标应用程序监听的 TCP 端口(例如,443或8080-8090)。您最多可以指定 11 个端口范围。如果您未指定任何端口范围,则连接443仅允许端口。连接会毫无错误地丢弃到配置范围之外的任何端口的流量。如果您的终端节点 URL 包含非标准端口(例如,https://tools.example.com:8089/mcp),请在此处添加该端口。创建连接后,您无法更改端口范围。要添加端口,请删除连接并重新创建。

  11. 对于主机地址,输入目标服务的 IP 地址或 DNS 名称(例如,mcp.internal.example.com或10.0.1.50)。必须可以从所选 VPC 访问该服务。如果您输入 DNS 名称,其解析方式取决于您在下一步中选择的 DNS 解析模式。

  12. 对于 DNS 解析,请选择主机地址 DNS 名称的解析方式:

    • 公共(默认)— 使用公有 DNS 解析 DNS 名称。如果您输入 DNS 名称作为主机地址,则该名称必须是可公开解析的。当您的主机名有公有 DNS 记录(可以指向私有 IP 地址)时,请使用此模式。如果您指定 IP 地址作为主机地址,则此设置无效。

    • 在 VPC 中 — DNS 名称是在您的 VPC 环境中解析的,因此仅存在于私有托管区域的主机名可以正确解析,没有任何公有 DNS 记录。当目标服务的主机名专用于您的 VPC 时,请使用此模式。

  13. (可选)如果私有证书颁发机构 (CA) 为您的主机地址颁发了 TLS 证书,请完成此步骤。对于证书公钥,输入目标服务的完整 PEM-encoded 证书链。按顺序列出证书:首先是树叶(服务器)证书,然后是所有中间 CA 证书,然后是根 CA 证书。如果链不完整,则连接失败。 AWS DevOps 然后,代理会验证并信任 TLS 连接。

  14. 选择创建连接。

连接状态更改为 “正在创建” 。此过程最多可能需要 10 分钟。当状态更改为 “活动” 时,网络路径已准备就绪。

如果状态更改为 “创建失败”,请验证以下内容:

  • 您指定的子网具有可用的 IP 地址。

  • 您的账户尚未达到 VPC 莱迪思服务配额。

  • 没有任何限制性的 IAM 策略阻止服务相关角色创建资源。

注意

也可以通过在能力提供者注册Create a new private connection期间进行选择来执行这些步骤。有关更多信息,请参阅使用与能力提供者的私有连接。

使用创建私有连接 AWS CLI

运行以下命令创建私有连接。请将占位符值替换为您自己的值。

aws devops-agent create-private-connection \ --name my-mcp-tool-connection \ --mode '{ "serviceManaged": { "hostAddress": "mcp.internal.example.com", "vpcId": "vpc-0123456789abcdef0", "subnetIds": [ "subnet-0123456789abcdef0", "subnet-0123456789abcdef1" ], "securityGroupIds": [ "sg-0123456789abcdef0" ], "portRanges": ["443"], "dnsResolution": "PUBLIC" } }'

该dnsResolution字段控制 hostAddress DNS 名称的解析方式。有效值为PUBLIC(省略时的默认值)和IN_VPC。IN_VPC当您的主机地址仅在 VPC 内部解析(例如,私有托管区域中的名称)时使用。如果您为指定 IP 地址hostAddress,则此字段无效。

响应包括连接名称和状态CREATE_IN_PROGRESS:

{ "name": "my-mcp-tool-connection", "status": "CREATE_IN_PROGRESS", "resourceGatewayId": "rgw-0123456789abcdef0", "hostAddress": "mcp.internal.example.com", "vpcId": "vpc-0123456789abcdef0" }

要检查连接状态,请使用以下describe-private-connection命令:

aws devops-agent describe-private-connection \ --name my-mcp-tool-connection

当状态为时ACTIVE,您的私有连接已准备就绪,可供使用。

使用与能力提供者的私有连接

要使用私有连接,可以在能力提供者注册期间链接到该连接。可用于私有连接的支持功能包括:GitHub、GitLab、MCP ServerRemote Agent、和Grafana。您可以使用 AWS 管理控制台或 AWS CLI 执行此步骤。

注意

注册能力提供者时, AWS DevOps 代理会验证端点是否可访问且正在响应。在完成注册之前,请确保您的目标服务正在运行并接受连接。

使用控制台与能力提供者进行私有连接

在 AWS DevOps 代理控制台中,通过选择 “使用私有连接连接到端点” 选项,可以在注册期间将私有连接链接到某个功能。

选中 “使用专用连接连接到端点” 复选框。
  1. 打开 AWS DevOps 代理控制台并导航到您的代理空间。

  2. 在 “能力提供者” 部分中,选择注册。

  3. 对于要在私有连接中使用的权能类型,选择注册。

  4. 在注册详细信息视图中,输入要使用私有连接连接的终端节点 URL(例如,https://mcp.internal.example.com)。

  5. 选择 “使用私有连接连接到端点” 。

  6. 选择与要连接的端点 URL 相对应的现有私有连接,或者选择创建新的私有连接来创建一个。

  7. 完成能力提供者的注册流程。

注意

当您为使用 OAuth 身份验证(客户端凭据或 3LO)的能力提供商选择私有连接时,私有连接适用于能力提供者端点和令牌交换端点。确保使用可以将流量路由到两个端点的主机地址配置私有连接。

主机地址和端点 URL

私有连接和能力提供者各取一个地址。两者不可互换:

  • 私有连接上的主机地址是连接路由到的目标。它可以是 IP 地址或 DNS 名称,当它是 DNS 名称时,连接的 DNS 解析模式决定其解析方式。

  • 能力提供者上的端点 URL 是 AWS DevOps 代理请求的 URL,包括其架构、端口和路径。

这两个值不必相同,因此仅在您的 VPC 内部解析的主机名不必出现在主机地址中。如果您的服务的主机名是您的 VPC 私有的,则有两种选择:

  • 将连接的 DNS 解析设置为 In VPC,并使用主机名作为主机地址和终端节点 URL。

  • 将主机地址设置为目标的私有 IP 地址,并将主机名保留在端点 URL 中。

您在创建连接时选择 DNS 解析模式,因此请先决定要使用哪个选项。有关这两个值不匹配所产生的症状的信息,请参阅 DNS 主机地址无法解析或流量到达错误的地方。

通过不同的私有连接路由端点和 OAuth 令牌交换

对于 OAuth-based MCP 服务器和远程代理功能提供商,代理向两个不同的端点发出请求:目标 URL(您注册的 MCP 服务器或远程代理端点)和交换 URL(OAuth 令牌交换端点)。默认情况下,两者privateConnectionName都使用单个。如果可以通过不同的私有网络路径访问这两个端点,则可以使用targetUrlPrivateConnectionName和exchangeUrlPrivateConnectionName通过其自己的私有连接来路由每个端点:

  • targetUrlPrivateConnectionName— 用于访问 MCP 服务器或远程代理端点(目标 URL)的专用连接。

  • exchangeUrlPrivateConnectionName— 用于访问 OAuth 令牌交换端点(交换 URL)的私有连接。

您可以指定其中一个或两者。如果您仅设置一个,则可以通过公共互联网访问另一个端点(它不会回退到另一个私有连接)。

重要

targetUrlPrivateConnectionName并且exchangeUrlPrivateConnectionName不能在同一个请求privateConnectionName中结合使用。使用单个名称privateConnectionName(适用于两个端点)或每个端点的名称,不能同时使用这两个名称。

以下示例注册了一个 OAuth 客户端凭证 MCP 服务器,该服务器通过两个独立的私有连接到达其端点和令牌交换端点:

aws devops-agent register-service \ --service mcpserver \ --target-url-private-connection-name my-target-connection \ --exchange-url-private-connection-name my-exchange-connection \ --service-details '{ "mcpserver": { "name": "my-mcp-tool", "endpoint": "https://mcp.internal.example.com", "authorizationConfig": { "oAuthClientCredentials": { "clientName": "MyOAuthClient", "clientId": "client-id", "clientSecret": "secret-value", "exchangeUrl": "https://auth.internal.example.com/token" } } } }' \ --region us-east-1

使用与能力提供商的私有连接 AWS CLI

您可以通过添加private-connection-name参数来使用私有连接注册功能。以下是使用my-mcp-tool-connection私有连接注册具有 API 密钥授权的 MCP 服务器的示例。请将占位符值替换为您自己的值。

aws devops-agent register-service \ --service mcpserver \ --private-connection-name my-mcp-tool-connection \ --service-details '{ "mcpserver": { "name": "my-mcp-tool", "endpoint": "https://mcp.internal.example.com", "authorizationConfig": { "apiKey": { "apiKeyName": "api-key", "apiKeyValue": "secret-value", "apiKeyHeader": "x-api-key" } } } }' \ --region us-east-1

验证私有连接

在私有连接进入活动状态并已被能力提供者使用后,验证 AWS DevOps 代理是否可以访问您的目标服务:

  1. 打开 AWS DevOps 代理控制台并导航到您的代理空间。

  2. 开始新的聊天会话。

  3. 调用使用由您的私有连接支持的集成的命令。例如,如果您的 MCP 工具提供对内部知识库的访问权限,请向代理询问一个需要该知识库的问题。

  4. 确认代理返回私有服务的结果。

如果连接失败,请检查以下内容:

  • VPC 莱迪思限制 -确认您未达到任何资源网关或其他 VPC 莱迪思配额限制

  • 安全组规则 -验证连接到 ENI 的安全组是否允许您的服务监听的端口上的出站流量。还要验证您的服务的安全组是否允许目标端口上的入站流量。流量来自您的 VPC CIDR 范围内的 VPC 莱迪思数据平面 IP。您可以使用安全组引用(允许 ENI 安全组作为来源)或允许从 VPC CIDR 入站。

  • 子网连接 -验证您选择的子网是否可以将流量路由到您的服务。如果服务在不同的子网中运行,请确认路由表允许它们之间的流量。

  • 服务可用性 -确认您的服务正在运行并接受预期端口上的连接。

  • 不支持的可用区 -验证您的子网是否在支持的可用区内。运行aws ec2 describe-subnets --subnet-ids <your-subnet-ids> --query 'Subnets[*].[SubnetId,AvailabilityZoneId]'并检查上面列出的不支持的可用区域。

删除私有连接

您可以使用 AWS 管理控制台或 AWS CLI 删除未使用的私有连接。

使用控制台删除私有连接

  1. 打开 AWS DevOps 代理控制台。

  2. 在导航窗格中,选择能力提供者,然后选择私有连接。

  3. 选择要删除的私有连接的 “操作” 菜单,然后选择 “移除” 。

私有连接将显示为 “正在删除连接” 的状态,而 AWS DevOps 代理将从您的 VPC 中移除托管资源网关和 ENI。删除完成后,该连接将不再出现在您的私有连接列表中。

使用删除私有连接 AWS CLI

aws devops-agent delete-private-connection \ --name my-mcp-tool-connection

响应返回的状态为DELETE_IN_PROGRESS。 AWS DevOps 代理将托管资源网关和 ENI 从您的 VPC 中移除。删除完成后,该连接将不再出现在您的私有连接列表中。

使用现有 VPC Lattice 资源进行高级设置

如果您的组织已经使用 Amazon VPC Lattice 并管理自己的资源配置,则可以在自管理模式下创建私有连接。您无需让 AWS DevOps 代理为您创建资源网关,而是提供指向目标服务的现有资源配置的亚马逊资源名称 (ARN)。

这种方法在以下情况下很有用:

  • 想要完全控制资源网关和资源配置生命周期。

  • 需要在多个 AWS 账户或服务之间共享资源配置。

  • 需要资源网关在与目标服务相同的账户中运行,而不是在创建私有连接的账户中运行。

  • 需要 VPC Lattice 访问日志以进行详细的流量监控。

  • 运行星型网络架构。

要使用 AWS CLI 创建自我管理的私有连接,请执行以下操作:

aws devops-agent create-private-connection \ --name my-advanced-connection \ --mode '{ "selfManaged": { "resourceConfigurationId": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-0123456789abcdef0" } }'

有关设置 VPC 莱迪思资源网关和资源配置的更多详细信息,请参阅亚马逊 VPC 莱迪思用户指南。

Cross-region 连接

私有连接必须在与代理空间相同的 AWS 区域中创建。如果您的目标服务在其他区域运行,请使用自我管理模式和区域间 VPC 对等互连或 Transit Gateway 对等互连来弥合差距。

模式是:

  1. 在代理空间区域内的 VPC 与服务的 VPC 之间建立区域间连接(VPC 对等互连或过境网关对等)。VPC CIDR 不得重叠。

  2. 使用对等连接在 VPC 中的代理空间区域中创建资源网关。

  3. 在代理空间的区域中创建指向服务的 IP 地址的资源配置(可通过对等连接路由)。

  4. 使用该资源配置 ARN 创建自管理的私有连接。

例如,如果您的代理空间已进入us-east-1且您的 MCP 服务器在ap-southeast-2:

aws devops-agent create-private-connection \ --name cross-region-connection \ --mode '{ "selfManaged": { "resourceConfigurationId": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-0123456789abcdef0" } }' \ --region us-east-1