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

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

连接到私人托管的工具

私有连接概述

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

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

注意

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

私有连接的工作原理

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

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

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

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

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

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

安全性

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

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

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

  • 您的安全组,您的规则-您可以控制流向您拥有和管理的 ENIs 直通安全组的入站和出站流量。如果您未指定安全组, AWS DevOps 代理会创建一个默认安全组,其范围仅限于您定义的端口。

  • 权限最低的服务相关角色 — AWS DevOps 代理使用服务相关角色仅创建必要的 VPC Lattice 和 Amazon EC2 资源。此角色仅限于标记为的资源,AWSAIDevOpsManaged并且无法访问您账户中的任何其他资源。

注意

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

架构

下图显示了专用连接的网络路径。

在此架构中:

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

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

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

  • 您的安全组控制允许哪些流量通过 ENIs。

  • 从目标服务的角度来看,请求来自您的 VPC ENIs 内的私有 IP 地址。

创建私有连接

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

注意

VPC Lattice 不支持以下可用区:use1-az3usw1-az2apne1-az3apne2-az2、、euc1-az2euw1-az4cac1-az3ilc1-az2

先决条件

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

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

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

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

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

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

使用控制台创建私有连接

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

  2. 在导航窗格中,选择能力提供商,然后选择专用连接

  3. 选择建立新的连接

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

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

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

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

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

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

  10. (可选)对于端口范围,请指定目标应用程序监听的 TCP 端口(例如4438080-8090)。您最多可以指定 11 个端口范围。

  11. 主机地址中,输入目标服务的 IP 地址或 DNS 名称(例如,mcp.internal.example.com10.0.1.50)。必须可以从选定的 VPC 访问该服务。如果您选择 DNS 名称,则该名称必须可以从选定的 VPC 中解析。

  12. (可选)对于证书公钥,如果您指定的主机地址使用私有证书颁发机构颁发的 TLS 证书,请输入证书的 PEM 编码公钥。这允许 AWS DevOps 代理信任与目标服务的 TLS 连接。

  13. 选择创建连接

连接状态更改为 “正在创建”。此过程最多可能需要 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"] } }'

响应包括连接名称和状态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,您的私人连接已准备就绪,可以使用。

使用与功能提供商的私有连接

要使用私有连接,可以在注册功能提供商的过程中链接到该私有连接。可用于私有连接的支持功能包括:GitHubGitLabMCP Server、和Grafana。您可以使用 AWS 管理控制台或 AWS CLI 执行此步骤。

注意

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

使用控制台与能力提供者建立私有连接

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

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

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

  3. 为要用于私有连接的功能类型选择 “注册”。

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

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

  6. 要么选择与您要连接的终端节点 URL 相对应的现有私有连接,要么选择创建新的私有连接来创建私有连接。

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

使用 C AWS LI 与功能提供者建立私有连接

您可以通过包含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 Lattice 限制-确认您尚未达到任何资源网关或其他 VPC 莱迪思配额限制

  • 安全组规则-验证附加到的安全组是否 ENIs 允许您的服务监听的端口上的出站流量。此外,请验证您的服务的安全组是否允许目标端口上的入站流量。流量从您的 VPC CIDR IPs 范围内的 VPC 莱迪思数据平面到达。您可以使用安全组引用(允许 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 代理 ENIs 从您的 VPC 中移除托管资源网关时,私有连接的状态将显示为 “正在删除连接”。删除完成后,该连接将不再出现在您的专用连接列表中。

使用 AWS CLI 删除私有连接

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

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

使用现有 VPC 莱迪思资源进行高级设置

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

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

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

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

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

  • 运行 hub-and-spoke网络架构。

要使用 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 莱迪思资源网关和资源配置的更多详细信息,请参阅 Amazon VPC 莱迪思用户指南