

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

# 为数据源配置 VPC 连接
<a name="kb-managed-vpc-configuration"></a>

一些数据源在无法通过公共互联网访问的私有资源上运行，例如您使用 VPC 中的内部负载均衡器预置的本地 Confluence 数据中心实例。要抓取这些数据源，您需要创建 VPC 配置。Amazon Bedrock 使用该配置为您的 VPC 预置私有网络路径并访问资源。

VPC 配置是您的知识库中的一种可重复使用的资源。您创建一次，然后通过一个或多个数据源中的 ID 对其进行引用。当您创建需要私有连接的数据源时，您可以选择现有的 VPC 配置或创建新的 VPC 配置。

**注意**  
当 Amazon Bedrock 预置 VPC 配置时，它会承担与您的知识库关联的 AWS Identity and Access Management (IAM) 角色，在您的账户中创建少量网络资源。Amazon Bedrock 创建的每个资源都有标签`ManagedBy=VPCProxyService`，该角色只能对带有该标签的资源执行操作。请参阅[知识库 IAM 角色权限](#kb-managed-vpc-configuration-role)。

## 你提供什么
<a name="kb-managed-vpc-configuration-provide"></a>

要创建 VPC 配置，您需要提供以下内容：


**VPC 配置输入**  

| Input | 为什么需要它 | 
| --- | --- | 
| 一个 VPC 和一个或多个子网 | Amazon Bedrock 将网络入口点（私有网关）放置到您的 VPC 的位置。您提供来自所选 VPC 的 1—6 个子网。 | 
| 资源目标和端口 | 您要访问的资源的私有 IP 地址或 DNS 名称（和端口）。 | 
| 知识库 IAM 角色 | Amazon Bedrock 扮演这个角色是为了在您的账户中预置网络资源。请参阅[知识库 IAM 角色权限](#kb-managed-vpc-configuration-role)。 | 

您不提供安全组。Amazon Bedrock 使用您的 VPC 的默认安全组作为网关。确保默认安全组的出站（出口）规则允许在请求的端口上到达您的目标。请参阅[从默认安全组退出](#kb-managed-vpc-configuration-egress)。

## 网络要求
<a name="kb-managed-vpc-configuration-network"></a>

Amazon Bedrock 通过仅使用私有网络接口（没有公有 IP 地址）创建的私有网关访问您的资源。网关通过 VPC 的私有（本地）网络到达您的目标，无法访问公有 IP 地址。必须可以从 VPC 内部私下访问您的资源目标：
+ 内部负载均衡器 (`scheme: internal`)，其 DNS 名称解析为私有地址（例如`10.{{x}}`、`172.{{x}}`、或`192.168.{{x}}`）。
+ 私有 IP 地址或解析为 VPC 内私有地址的私有 DNS 名称。

不支持面向互联网的负载均衡器。即使是 VPC 内的 DNS 查询，面向互联网的负载均衡器也会返回其公有 IP 地址，私有网关无法访问这些地址。如果您的资源目前仅通过面向互联网的负载均衡器公开，请在同一 VPC 中创建（或指向）内部负载均衡器，并使用其 DNS 名称作为资源目标。

## 创建 VPC 配置
<a name="kb-managed-vpc-configuration-create"></a>

------
#### [ Console ]

**添加 VPC 配置**

1. 在数据源配置中，在 ** VPC 配置下**，选择**添加 VPC 配置**。如果已经存在合适的配置，请改为选择该配置以在数据源中重复使用。

1. （可选）输入配置**的**名称**和**描述。

1. 对于 ** VPC ID**，选择用于连接的 VPC。

1. 对于**子网 ID**，从所选 VPC 中选择一个或多个子网。

1. 对于**资源目标**，输入资源的主机名或 IP 地址（例如，`10.0.1.50`或`confluence.internal.example.com`）。

1. 对于**端口**，输入要连接的端口号（例如，`443`或`8090`）。

1. 对于**协议**，选择 **HTTP** 或 **HTTPS**。

1. 对于**解析模式**，选择资源目标地址的解析方式：
   + **公共 ** — 资源目标是可公开解析的主机名或 IP 地址。
   + **在 VPC 中 ** — 资源目标只能在您的 VPC 内解析。这是内部资源的常见情况。

1. （可选）对于**主机标头**，输入要随请求一起发送的`Host`标头值。仅当您的资源（或上游路由器）通过 HTTP `Host` 标头进行路由时才设置此项。

1. （HTTPS 为必填项）对于 ** TLS 服务器名称**，请输入资源的预期的 TLS 证书身份（主题备用名称）。允许使用最左边的单个通配符（例如，）。`*.example.com`

1. 选择**创建**。

------
#### [ API ]

要创建 VPC 配置，`CreateVpcConfiguration`请发送请求。所有操作均通过`knowledgeBaseId`路径参数限定在知识库中；请求正文不包含账户 ID 或角色 ARN，因为 Amazon Bedrock 会解析知识库中的这些操作。

```
POST /knowledgebases/{{knowledgeBaseId}}/vpcconfigurations/
```

请求正文使用以下字段。


**CreateVpcConfiguration 字段**  

| 字段 | 必填 | 描述 | 
| --- | --- | --- | 
| vpcId | 是 | VPC 的 ID。匹配^vpc-[a-zA-Z0-9]\+$，最多 64 个字符。 | 
| subnetIds | 是 | 来自指定 VPC 的 1—6 个子网 ID。每场比赛^subnet-[a-zA-Z0-9]\+$。 | 
| resourceTarget | 是 | 资源的 IPv4 地址或 DNS 名称（1—255 个字符）。请参阅[资源目标限制](#kb-managed-vpc-configuration-target)。 | 
| port | 是 | 要连接的端口 (1—65535)。 | 
| protocol | 是 | HTTP 或 HTTPS。 | 
| resolutionMode | 是 | PUBLIC 或 IN\_VPC。IN\_VPC当目标仅在您的 VPC 内部解析时使用。 | 
| tlsServerName | 有条件 | protocol为必填项HTTPS。主机名与资源的 TLS 证书（最多 253 个字符）相匹配。允许使用最左边的单个通配符。不得包含端口。 | 
| hostHeader | 否 | 要发送的 HTTP Host 标头值（最多 255 个字符）。仅当您的资源按Host标头路由时才进行设置。 | 
| name | 否 | 人类可读的名称（1—128 个字符）。 | 
| description | 否 | 描述（最多 512 个字符）。 | 
| clientToken | 否 | 一种等性标记。 | 

创建是异步的。`CreateVpcConfiguration`返回状态为 a `vpcConfigurationId` 的`202`响应`CREATING`。轮询`GetVpcConfiguration`直到状态为`CREATED`（或者`CREATE_FAILED`，在这种情况下`statusMessage`列出原因）。`ListVpcConfigurations`用于列出配置和`DeleteVpcConfiguration`删除配置。

**注意**  
如果您在具有相同子网集的同一 VPC 中创建多个配置，它们共享一个网关。另一组子网提供单独的网关。

------

## 协议、TLS 服务器名称和主机标头
<a name="kb-managed-vpc-configuration-fields"></a>

这三个设置是最常见的错误配置。使用以下指南选择正确的值。

`protocol`  
选择`HTTP`通过纯文本 HTTP 调用资源，或`HTTPS`通过 TLS 调用资源。

`tlsServerName`  
`protocol`为必填项`HTTPS`。这是调用期间与资源的 TLS 证书主题备用名称匹配的服务器名称。将其设置为颁发证书的主机名（例如，`app.internal.example.com`）。允许使用最左边的单个通配符（例如，）。`*.example.com`如果通过 IP 地址访问资源但提供了名称证书，则设置`tlsServerName`为该名称。如果证书不匹配，则调用将失败 TLS 身份检查。此值必须是没有端口的主机名。

`hostHeader`  
可选，并且是独立于的应用层问题。`tlsServerName`仅当您的资源、上游路由器或入口通过 HTTP `Host` 标头进行路由，并且该主机与您原本发送的主机不同时才进行设置。如果您的资源为单个站点提供服务且未经路由`Host`，请将其保持未设置状态。

`resolutionMode`  
`PUBLIC`选择资源目标是可公开解析的名称还是公有 IP 地址。选择`IN_VPC`何时资源目标仅在您的 VPC（私有 DNS 或私有 IP 地址）内解析，这是内部资源的常见情况。字面上的私有 IP 目标（例如`10.0.5.20`）可在任何一种模式下运行，因为没有 DNS 名称需要解析。

## 资源目标限制
<a name="kb-managed-vpc-configuration-target"></a>

Amazon Bedrock 会在您创建配置`resourceTarget`时进行验证，以防止服务针对自身或内部基础设施。以下目标被拒绝：
+ 环回地址 (`127.0.0.0/8`、`::1`) 和。`localhost`
+ Link-local 地址 (`169.254.0.0/16`,`fe80::/10`)，包括实例元数据终端节点`169.254.169.254`。
+ 通配符或任意本地地址 (`0.0.0.0`,`::`) 和区块。`0.0.0.0/8`
+ 多播地址。
+ IPv6 文字。网关已配置 IPv4-only，因此 IP 目标必须是点阵四边形的 IPv4 地址。

允许 DNS 名称。验证无法解决这些问题，因此必须仍然可以从您的网关子网访问目标。

## 从默认安全组退出
<a name="kb-managed-vpc-configuration-egress"></a>

由于 Amazon Bedrock 使用您的 VPC 的默认安全组作为网关，因此该安全组的出口规则必须允许接通。`resourceTarget` `port`如果默认安全组被锁定，则创建会很快失败并显示明确的消息，而不是稍后超时。在创建配置之前，请确保出口规则允许流量从网关子网到目标和端口。

## 知识库 IAM 角色权限
<a name="kb-managed-vpc-configuration-role"></a>

Amazon Bedrock 承担与您的知识库关联的 IAM 角色来预置并随后拆除您账户中的网络资源。该角色必须授予以下创建和删除权限，以及允许重试删除的读取权限。Amazon Bedrock 创建的每个资源都有标签`ManagedBy=VPCProxyService`，破坏性权限受该标签的限制，因此该角色只能对该功能创建的资源采取行动。
+ **创建 ** — `vpc-lattice:CreateResourceGateway`、、`vpc-lattice:CreateResourceConfiguration`、`vpc-lattice:TagResource`、、`vpc-lattice:PutResourcePolicy``ram:CreateResourceShare``ram:TagResource``ram:AssociateResourceShare`、和`iam:CreateServiceLinkedRole`（一次性创建，适用于 VPC Lattice 服务相关角色）。
+ **删除 ** — `vpc-lattice:DeleteResourceGateway` `vpc-lattice:DeleteResourceConfiguration`、和`ram:DeleteResourceShare`。
+ **读取（验证和函数）**— `vpc-lattice:GetResourceGateway`、、、`vpc-lattice:GetResourceConfiguration``ram:GetResourceShares``ec2:DescribeSubnets`、`ec2:DescribeSecurityGroups`和。`ec2:DescribeVpcs`

**重要**  
同时授予`vpc-lattice:GetResourceGateway`和`vpc-lattice:GetResourceConfiguration`。由于删除权限是标签范围的，因此删除已删除的资源会返回访问被拒绝的错误，而不是未找到的错误。Amazon Bedrock 使用这些未标记的读取权限来区分已删除的资源（视为成功）是否存在真正的权限问题。没有它们，在部分失败后重试的删除可能会卡住。

以下示例策略授予所需的权限。将 {{region}} 和 {{accountId}} 替换为您自己的值。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VpcProxyCreateTagged",
            "Effect": "Allow",
            "Action": [
                "vpc-lattice:CreateResourceGateway",
                "vpc-lattice:CreateResourceConfiguration",
                "vpc-lattice:TagResource"
            ],
            "Resource": [
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourcegateway/*",
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourceconfiguration/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/ManagedBy": "VPCProxyService",
                    "aws:ResourceTag/ManagedBy": "VPCProxyService"
                },
                "ForAllValues:StringEquals": { "aws:TagKeys": ["ManagedBy"] }
            }
        },
        {
            "Sid": "VpcProxyPutResourcePolicy",
            "Effect": "Allow",
            "Action": "vpc-lattice:PutResourcePolicy",
            "Resource": [
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourceconfiguration/*"
            ],
            "Condition": {
                "StringEquals": { "aws:ResourceTag/ManagedBy": "VPCProxyService" }
            }
        },
        {
            "Sid": "VpcProxyRamCreate",
            "Effect": "Allow",
            "Action": "ram:CreateResourceShare",
            "Resource": "*",
            "Condition": {
                "StringEquals": { "aws:RequestTag/ManagedBy": "VPCProxyService" },
                "StringEqualsIfExists": {
                    "ram:RequestedResourceType": "vpc-lattice:ResourceConfiguration"
                }
            }
        },
        {
            "Sid": "VpcProxyRamAssociate",
            "Effect": "Allow",
            "Action": "ram:AssociateResourceShare",
            "Resource": "*",
            "Condition": {
                "StringEquals": { "aws:ResourceTag/ManagedBy": "VPCProxyService" }
            }
        },
        {
            "Sid": "VpcProxyRamTagOnCreate",
            "Effect": "Allow",
            "Action": "ram:TagResource",
            "Resource": [
                "arn:aws:ram:{{region}}:{{accountId}}:resource-share/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/ManagedBy": "VPCProxyService",
                    "aws:ResourceTag/ManagedBy": "VPCProxyService"
                },
                "ForAllValues:StringEquals": { "aws:TagKeys": ["ManagedBy"] }
            }
        },
        {
            "Sid": "VpcProxyDeleteTagged",
            "Effect": "Allow",
            "Action": [
                "vpc-lattice:DeleteResourceConfiguration",
                "vpc-lattice:DeleteResourceGateway"
            ],
            "Resource": [
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourcegateway/*",
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourceconfiguration/*"
            ],
            "Condition": {
                "StringEquals": { "aws:ResourceTag/ManagedBy": "VPCProxyService" }
            }
        },
        {
            "Sid": "VpcProxyRamDeleteTagged",
            "Effect": "Allow",
            "Action": "ram:DeleteResourceShare",
            "Resource": [
                "arn:aws:ram:{{region}}:{{accountId}}:resource-share/*"
            ],
            "Condition": {
                "StringEquals": { "aws:ResourceTag/ManagedBy": "VPCProxyService" },
                "StringLike": { "ram:ResourceShareName": "vpc-proxy-share-*" }
            }
        },
        {
            "Sid": "VpcProxyGetResource",
            "Effect": "Allow",
            "Action": [
                "vpc-lattice:GetResourceConfiguration",
                "vpc-lattice:GetResourceGateway"
            ],
            "Resource": [
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourcegateway/*",
                "arn:aws:vpc-lattice:{{region}}:{{accountId}}:resourceconfiguration/*"
            ]
        },
        {
            "Sid": "VpcProxyRamGetResourceShares",
            "Effect": "Allow",
            "Action": "ram:GetResourceShares",
            "Resource": "*"
        },
        {
            "Sid": "VpcProxyEc2Describe",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VpcProxyLatticeServiceLinkedRole",
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": [
                "arn:aws:iam::{{accountId}}:role/aws-service-role/vpc-lattice.amazonaws.com/*"
            ],
            "Condition": {
                "StringEquals": { "iam:AWSServiceName": "vpc-lattice.amazonaws.com" }
            }
        }
    ]
}
```

## 生命周期
<a name="kb-managed-vpc-configuration-lifecycle"></a>
+ VPC 配置过渡`CREATING`到`CREATED`或到`CREATE_FAILED`。当您将其删除时，状态为`DELETING`、或`DELETE_FAILED`。
+ 创建和删除是异步的。投票`GetVpcConfiguration`以追踪进度。失败时，`statusMessage`列出可采取行动的原因，例如缺少权限。
+ 删除是等效的。部分完成的删除会在您重试时收缩。