

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

# 连接到私人托管的工具
<a name="configuring-capabilities-for-aws-devops-agent-connecting-to-privately-hosted-tools"></a>

## 私有连接概述
<a name="private-connections-overview"></a>

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

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

**注意**  
**如果您的私有托管工具从您的 VPC 内部向 AWS DevOps 代理发出出站请求，则也可以使用 VPC 终端节点保护这些流量，使其保持在 AWS 网络中。例如，这可以与通过 webhook 事件触发 DevOps 代理的工具一起使用（请参阅:[通过 Webhook 调用 DevOps 代理](configuring-capabilities-for-aws-devops-agent-invoking-devops-agent-through-webhook.md)）。有关更多信息，请参阅 [VPC 终端节点 (AWS PrivateLink)](aws-devops-agent-security-vpc-endpoints-aws-privatelink.md)。

### 私有连接的工作原理
<a name="how-private-connections-work"></a>

私有连接可在 AWS DevOps 代理和您的 VPC 中的目标资源之间创建安全的网络路径。在幕后， AWS DevOps 代理使用 Amazon [VPC Lattice](https://docs.aws.amazon.com/vpc-lattice/latest/ug/) 来建立这条安全的私有连接路径。VPC Lattice 是一项应用网络服务，可让您连接、保护和监控跨 VPCs账户和计算类型的应用程序之间的通信，而无需管理底层网络基础设施。

创建私有连接时，会发生以下情况：
+ 您提供与目标服务具有网络连接的 VPC、子网和（可选）安全组。
+ AWS DevOps 代理创建服务管理的[资源网关](https://docs.aws.amazon.com/vpc/latest/privatelink/resource-gateway.html)，并在您指定的子网中配置其弹性网络接口 (ENIs)。
+ 代理使用资源网关通过私有网络路径将流量路由到目标服务的 IP 地址或 DNS 名称。

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

### 安全性
<a name="security"></a>

私有连接的设计具有多层安全性：
+ **没有公共互联网暴露** — AWS DevOps 代理和您的目标服务之间的所有流量都留在 AWS 网络上。您的服务永远不需要公有 IP 地址或互联网网关。
+ **服务控制的资源网关**-服务管理的资源网关在您的账户中是只读的。它只能由 AWS DevOps 代理使用，其他服务或委托人无法通过它路由流量。您可以在记录所有VPC Lattice API调用的[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)日志中对此进行验证。
+ **您的安全组，您的规则**-您可以控制流向您拥有和管理的 ENIs 直通安全组的入站和出站流量。如果您未指定安全组， AWS DevOps 代理会创建一个默认安全组，其范围仅限于您定义的端口。
+ **权限最低的服务相关角色** — AWS DevOps 代理使用[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)仅创建必要的 VPC Lattice 和 Amazon EC2 资源。此角色仅限于标记为的资源，`AWSAIDevOpsManaged`并且无法访问您账户中的任何其他资源。

**注意**  
**如果您的组织有限制VPC Lattice API操作的[服务控制策略 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)，则服务管理的资源网关是通过服务相关角色创建的。确保您 SCPs 允许服务相关角色执行必要的操作。

### 架构
<a name="architecture"></a>

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

![](http://docs.aws.amazon.com/zh_cn/devopsagent/latest/userguide/images/7cd6182e6b8d.png)


在此架构中：
+ AWS DevOps 代理向您的目标服务发起请求。
+ Amazon VPC Lattice 通过您的 VPC 中的服务托管资源网关路由请求。有关使用您自己的 VPC 莱迪思资源的高级设置，请参阅[使用现有 VPC 莱迪思资源的高级设置](#advanced-setup-using-existing-vpc-lattice-resources)。
+ 您的 VPC 中的 ENI 接收流量并将其转发到目标服务的 IP 地址或 DNS 名称。
+ 您的安全组控制允许哪些流量通过 ENIs。
+ 从目标服务的角度来看，请求来自您的 VPC ENIs 内的私有 IP 地址。

## 创建私有连接
<a name="create-a-private-connection"></a>

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

**注意**  
**VPC Lattice 不支持以下可用区：`use1-az3`、`usw1-az2`、`apne1-az3`、`apne2-az2`、、`euc1-az2`、`euw1-az4``cac1-az3`、`ilc1-az2`。

### 先决条件
<a name="prerequisites"></a>

在创建私有连接之前，请确认您已具备以下条件：
+ **活跃的代理空间**-您的账户中需要一个现有的代理空间。如果没有，请参阅[开始使用 AWS DevOps 代理](getting-started-with-aws-devops-agent.md)。
+ **可私密访问的目标服务** — 您的 MCP 服务器、可观测性平台或其他服务必须能够通过已知的私有 IP 地址或 DNS 名称从部署资源网关的 VPC 访问。只要该服务可以从资源网关子网进行路由，就可以在同一 VPC、对等 VPC 或本地运行。该服务必须在您在创建连接时指定的端口上提供 TLS 最低版本为 1.2 的 HTTPS 流量。
+ **您的 VPC 中的子网** — 确定要在其中创建 1-20 个子网。 ENIs 我们建议在多个可用区中选择子网以实现高可用性。这些子网必须与您的目标服务建立网络连接。VPC Lattice 每个可用区只能使用一个子网。
+ **（可选）安全组**-如果您想使用特定规则控制流量，请准备最多五个安全组 IDs 以附加到 ENIs。如果省略安全组，则 AWS DevOps 代理会创建默认安全组。

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

### 使用控制台创建私有连接
<a name="create-a-private-connection-using-the-console"></a>

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

1. 在导航窗格中，选择**能力提供商**，然后选择**专用连接**。

1. 选择**建立新的连接**。

1. 在**名称**中，输入连接的描述性名称，例如`my-mcp-tool-connection`。

1. 对于 **VP** C，选择 ENIs 将部署资源网关的 VPC。

1. 对于**子网**，请选择一个或多个子网（最多 20 个）。我们建议在至少两个可用区中选择子网。

1. 在 **IP 地址类型**中，选择目标服务的 IP 地址类型（`IPv4``IPv6`、或`DualStack`）。

1. （可选）在 “** IPv4 地址数**” 中，如果您选择了 IP 地址类型 IPv4 或 Dualstack，则可以输入资源网关每 IPv4 个 ENI 的地址数。默认为每 IPv4 个 ENI 有 16 个地址。

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

1. （可选）对于**端口范围**，请指定目标应用程序监听的 TCP 端口（例如，`443`或`8080-8090`）。您最多可以指定 11 个端口范围。

1. 在**主机地址**中，输入目标服务的 IP 地址或 DNS 名称（例如，`mcp.internal.example.com`或`10.0.1.50`）。必须可以从选定的 VPC 访问该服务。如果您选择 DNS 名称，则该名称必须可以从选定的 VPC 中解析。

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

1. 选择**创建连接**。

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

如果状态更改为 “**创建失败**”，请验证以下内容：
+ 您指定的子网具有可用的 IP 地址。
+ 您的账户尚未达到 VPC 莱迪思服务配额。
+ 没有任何限制性的 IAM 策略阻止服务相关角色创建资源。

**注意**  
**这些步骤也可以通过在注册功能提供者`Create a new private connection`期间进行选择来执行。有关更多信息，请参阅[使用与能力提供者的私有连接](#use-a-private-connection-with-a-capability-provider)。

### 使用 AWS CLI 创建私有连接
<a name="create-a-private-connection-using-the-aws-cli"></a>

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

```
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`，您的私人连接已准备就绪，可以使用。

## 使用与功能提供商的私有连接
<a name="use-a-private-connection-with-a-capability-provider"></a>

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

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

### 使用控制台与能力提供者建立私有连接
<a name="use-a-private-connection-with-a-capability-provider-using-the-console"></a>

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

![](http://docs.aws.amazon.com/zh_cn/devopsagent/latest/userguide/images/a2a7ffb70ffe.png)


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

1. 在 “**能力提供者**” 部分中，选择**注册**。

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

1. 在注册详细信息视图中，输入您要使用私有连接连接的终端节点 URL（例如`https://mcp.internal.example.com`）。

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

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

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

**注意**  
**当您为使用 OAuth 身份验证（客户端凭据或 3LO）的功能提供者选择私有连接时，私有连接将同时应用于功能提供者端点和令牌交换端点。确保私有连接配置的主机地址可以将流量路由到两个端点。

### 使用 C AWS LI 与功能提供者建立私有连接
<a name="use-a-private-connection-with-a-capability-provider-using-the-aws-cli"></a>

您可以通过包含`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
```

## 验证私有连接
<a name="verify-a-private-connection"></a>

在专用连接达到 “**活动**” 状态并已被功能提供商使用后，请验证 AWS DevOps 代理是否可以访问您的目标服务：

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

1. 开始新的聊天会话。

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

1. 确认代理返回来自私有服务的结果。

如果连接失败，请检查以下内容：
+ **VPC Lattice 限制**-确认您尚未达到任何资源网关或其他 [VPC 莱迪思配](https://docs.aws.amazon.com/vpc-lattice/latest/ug/quotas.html)额限制
+ **安全组规则**-验证附加到的安全组是否 ENIs 允许您的服务监听的端口上的出站流量。此外，请验证您的服务的安全组是否允许目标端口上的入站流量。流量从您的 VPC CIDR IPs 范围内的 VPC 莱迪思数据平面到达。您可以使用安全组引用（允许 ENI 安全组作为来源），也可以允许从 VPC CIDR 入站。
+ **子网连接**-验证您选择的子网是否可以将流量路由到您的服务。如果服务在不同的子网中运行，请确认路由表允许它们之间的流量。
+ **服务可用性**-确认您的服务正在运行并接受预期端口上的连接。
+ **不支持的可用区**-验证您的子网是否位于支持的可用区中。运行`aws ec2 describe-subnets --subnet-ids <your-subnet-ids> --query 'Subnets[*].[SubnetId,AvailabilityZoneId]'`并检查上面列出的不支持的可用区。

## 删除私有连接
<a name="delete-a-private-connection"></a>

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

### 使用控制台删除私有连接
<a name="delete-a-private-connection-using-the-console"></a>

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

1. 在导航窗格中，选择**能力提供商**，然后选择**专用连接**。

1. 选择要删除的专用连接的 “**操作**” 菜单，然后选择 “**删除**”。

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

### 使用 AWS CLI 删除私有连接
<a name="delete-a-private-connection-using-the-aws-cli"></a>

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

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

## 使用现有 VPC 莱迪思资源进行高级设置
<a name="advanced-setup-using-existing-vpc-lattice-resources"></a>

如果您的组织已经在使用 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 莱迪思用户指南](https://docs.aws.amazon.com/vpc-lattice/latest/ug/)。

## 相关主题
<a name="related-topics"></a>
+ [VPC 终端节点 (AWS PrivateLink)](aws-devops-agent-security-vpc-endpoints-aws-privatelink.md)
+ [连接 MCP 服务器](configuring-capabilities-for-aws-devops-agent-connecting-mcp-servers.md)
+ [为 AWS DevOps 代理配置功能](configuring-capabilities-for-aws-devops-agent.md)
+ [AWS DevOps 代理安全](aws-devops-agent-security.md)
+ [DevOps 代理 IAM 权限](aws-devops-agent-security-devops-agent-iam-permissions.md)