

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定資料來源的 VPC 連線
<a name="kb-managed-vpc-configuration"></a>

有些資料來源會在無法透過公有網際網路連線的私有資源上執行，例如您在 VPC 中使用內部負載平衡器前置的現場部署 Confluence 資料中心執行個體。若要編目這些資料來源，您可以建立 VPC 組態。Amazon Bedrock 使用 組態將私有網路路徑佈建到您的 VPC 並連接 資源。

VPC 組態是知識庫上的可重複使用資源。您建立一次，然後透過來自一或多個資料來源的 ID 來參考它。當您建立需要私有連線的資料來源時，您可以選取現有的 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 名稱。

不支援面向網際網路的負載平衡器。面向網際網路的負載平衡器會將其公有 IP 地址傳回至 VPC 內 DNS 查詢，而私有閘道無法連線到這些地址。如果您的資源目前僅透過面向網際網路的負載平衡器公開，請在相同的 VPC 中建立 （或指向） 內部負載平衡器，並使用其 DNS 名稱做為資源目標。

## 建立 VPC 組態
<a name="kb-managed-vpc-configuration-create"></a>

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

**新增 VPC 組態**

1. 在資料來源組態中，在 **VPC 組態**下，選擇**新增 VPC 組態**。如果適當的組態已存在，請選取它，以在資料來源之間重複使用它。

1. （選用） 輸入組態**的名稱**和**描述**。

1. 針對 **VPC ID**，選取要用於連線的 VPC。

1. 針對**子網路 IDs**，從選擇的 VPC 選取一或多個子網路。

1. 針對**資源目標**，輸入資源的主機名稱或 IP 地址 （例如 `10.0.1.50`或 `confluence.internal.example.com`)。

1. 針對**連接埠**，輸入要連線的連接埠號碼 （例如， `443`或 `8090`)。

1. 針對**通訊協定**，選擇 **HTTPS** 或 **HTTP**。

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 IDs。每個 都符合 ^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 當目標僅在 VPC 內解析IN\_VPC時，請使用 。 | 
| tlsServerName | 有條件 | 當 protocol為 時為必要HTTPS。主機名稱符合資源的 TLS 憑證 （最多 253 個字元）。允許單一最左邊萬用字元。不得包含連接埠。 | 
| hostHeader | 否 | 要傳送的 HTTP Host標頭值 （最多 255 個字元）。只有在您的資源依 Host標頭路由時才設定 。 | 
| name | 否 | 人類可讀的名稱 (1-128 個字元）。 | 
| description | 否 | 描述 （最多 512 個字元）。 | 
| clientToken | 否 | 等冪符記。 | 

建立是非同步的。 會`CreateVpcConfiguration`傳回狀態為 `vpcConfigurationId`且為 的`202`回應`CREATING`。輪詢`GetVpcConfiguration`直到狀態為 `CREATED`（或 `CREATE_FAILED`，在此情況下為原因`statusMessage`命名）。使用 `ListVpcConfigurations` 列出組態，並使用 `DeleteVpcConfiguration` 移除組態。

**注意**  
如果您在具有相同子網路集的相同 VPC 中建立多個組態，它們會共用一個閘道。一組不同的子網路會佈建個別的閘道。

------

## 通訊協定、TLS 伺服器名稱和主機標頭
<a name="kb-managed-vpc-configuration-fields"></a>

這三個設定是最常見的設定錯誤。使用下列指引來選擇正確的值。

`protocol`  
選擇透過純文字 HTTP `HTTP`叫用資源，或透過 TLS `HTTPS`叫用資源。

`tlsServerName`  
當 `protocol`為 時為必要`HTTPS`。這是叫用期間與資源的 TLS 憑證主體別名相符的伺服器名稱。將其設定為憑證發行的主機名稱 （例如 `app.internal.example.com`)。允許單一最左邊萬用字元 （例如 `*.example.com`)。如果 IP 地址到達資源，但顯示名稱的憑證，請將 `tlsServerName`設定為該名稱。如果憑證不相符，呼叫 TLS 身分檢查會失敗。此值必須是沒有連接埠的主機名稱。

`hostHeader`  
選用，以及獨立於 的應用程式層考量`tlsServerName`。只有當您的資源或上游路由器或輸入透過 HTTP `Host`標頭路由，且該主機與您原本要傳送的內容不同時，才進行設定。如果您的資源為單一網站提供服務，但未透過 路由`Host`，請將其取消設定。

`resolutionMode`  
選擇資源目標是可公開解析的名稱或公有 IP 地址`PUBLIC`的時間。選擇資源目標僅在 VPC （私有 DNS 或私有 IP 地址） 內解析`IN_VPC`的時間，這是內部資源的常見案例。常值私有 IP 目標 （例如 `10.0.5.20`) 可在任一模式下運作，因為沒有 DNS 名稱可解析。

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

Amazon Bedrock 會在您建立組態`resourceTarget`時驗證，以防止服務被導向至本身或內部基礎設施。下列目標會遭到拒絕：
+ 回送地址 (`127.0.0.0/8`、`::1`) 和 `localhost`。
+ 連結本機地址 (`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`命名可採取動作的原因，例如缺少許可。
+ 刪除是等冪的。部分完成的刪除會在您重試時收斂。