

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

# 连接到私人托管的工具
<a name="configuring-integrations-and-knowledge-connecting-to-privately-hosted-tools"></a>

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

AWS DevOps 可以使用自定义模型上下文协议 (MCP) 工具和其他集成来扩展代理，这些工具允许代理访问内部系统，例如私有包注册表、自托管可观测性平台、内部文档 API 和源代码管理实例（参见:）。[配置集成和知识](configuring-integrations-and-knowledge.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 Self-Managed

**注意**  
**如果您的私有托管工具从您的 VPC 内部向 AWS DevOps 代理发出出站请求，则也可以使用 VPC 终端节点保护这些流量，使其保持在 AWS 网络中。例如，这可以与通过 webhook 事件触发 DevOps 代理的工具一起使用（请参阅:[通过 Webhook 调用 DevOps 代理](configuring-integrations-and-knowledge-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是一项应用网络服务，可让您连接、保护和监控跨VPC、账户和计算类型的应用程序之间的通信，而无需管理底层网络基础架构。

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

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

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

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

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

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

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

![显示 AWS DevOps 代理通过 VPC 莱迪思连接的网络架构。](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 名称。
+ 您的安全组控制允许哪些流量通过 ENI。
+ 从目标服务的角度来看，请求来自您的 VPC 中 ENI 的私有 IP 地址。

## 为私有连接配置防火墙规则
<a name="configuring-firewall-rules-for-private-connections"></a>

使用私有连接时，从 AWS DevOps 代理到私有托管工具的流量来自您在创建私有连接时指定的子网中的资源网关 ENI。这与公共托管的工具连接不同，后者使用[安全](aws-devops-agent-security.md)页面上列出的静态 IP 地址。

**重要**  
在 **“[安全](aws-devops-agent-security.md)” 页面上发布的静态 IP 地址不****适用于私有连接。请勿在防火墙规则中将这些 IP 用于私有托管工具。

要允许 AWS DevOps 代理流量到达您的私有托管工具，请执行以下操作：

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

1. 在目标工具的安全组（例如 Grafana ALB 上的安全组）中，使用以下方法之一添加入站规则：
   + **引用安全组（推荐）**-允许来自连接到私有连接 ENI 的安全组的入站流量。如果您在创建私有连接时指定了安全组，请使用该安全组 ID 作为来源。例如：允许来自 TCP 443。`sg-0123456789abcdef0`
   + **子网 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 地址在您的私有连接生命周期内保持稳定。如果您删除并重新创建私有连接，则弹性网卡 IP 地址可能会更改。使用子网 CIDR 块或安全组引用可以避免在重新创建后更新规则。

## 创建私有连接
<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 中的子网** — 确定要在其中创建 ENI 的 1-20 个子网。我们建议在多个可用区中选择子网以实现高可用性。这些子网必须与您的目标服务建立网络连接。VPC Lattice 每个可用区只能使用一个子网。
+ **（可选）安全组**-如果您想使用特定规则控制流量，请准备最多五个安全组 ID 以附加到 ENI。如果省略安全组，则 AWS DevOps 代理会创建默认安全组。

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

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

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

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

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

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

1. 对于 **VPC**，请选择将部署资源网关 ENI 的 VPC。

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

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

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

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

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

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

1. （可选）对于**证书公钥**，如果您指定的主机地址使用私有证书颁发机构颁发的 TLS 证书，请输入证书的 PEM-encoded 公钥。这允许 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）的功能提供者选择私有连接时，私有连接将同时应用于功能提供者端点和令牌交换端点。确保私有连接配置的主机地址可以将流量路由到两个端点。

### 使用与能力提供者的私有连接，使用 AWS CLI
<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)额限制
+ **安全组规则**-验证附加到 ENI 的安全组是否允许您的服务监听的端口上的出站流量。此外，请验证您的服务的安全组是否允许目标端口上的入站流量。流量来自您的 VPC CIDR 范围内的 VPC 莱迪思数据平面 IP。您可以使用安全组引用（允许 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 代理从您的 VPC 中移除托管资源网关和 ENI 时，私有连接的状态将显示为 “正在删除连接”。删除完成后，该连接将不再出现在您的专用连接列表中。

### 使用删除私有连接 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 代理会从您的 VPC 中移除托管资源网关和 ENI。删除完成后，该连接将不再出现在您的专用连接列表中。

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

如果您的组织已经在使用 Amazon VPC Lattice 并管理自己的资源配置，则可以在自我管理模式下创建私有连接。您无需让 AWS DevOps 代理为您创建资源网关，而是提供指向您的目标服务的现有资源配置的 Amazon 资源名称 (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 莱迪思资源网关和资源配置的更多详细信息，请参阅 [Amazon VPC 莱迪思用户指南](https://docs.aws.amazon.com/vpc-lattice/latest/ug/)。

### Cross-region 连接
<a name="cross-region-connectivity"></a>

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

模式是：

1. 在代理空间区域的 VPC 和服务的 VPC 之间建立区域间连接（VPC 对等或 Transit Gateway 对等）。VPC CIDR 不得重叠。

1. 在代理空间的区域、具有对等连接的 VPC 中创建资源网关。

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

1. 使用该资源配置 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
```

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