View a markdown version of this page

連線至私有託管工具 - AWS DevOps 代理程式

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

連線至私有託管工具

私有連線概觀

AWS DevOps 代理程式可以使用自訂模型內容通訊協定 (MCP) 工具和其他整合進行擴充,這些工具可讓代理程式存取內部系統,例如私有套件登錄檔、自我託管可觀測性平台、內部文件 APIs 和來源控制執行個體 (請參閱:設定整合和知識)。這些服務通常在 Amazon Virtual Private Cloud (Amazon VPC) 內執行,但有限制或沒有公有網際網路存取,這表示預設情況下, AWS DevOps 代理程式無法連線這些服務。

適用於 AWS DevOps Agent 的私有連線可讓您安全地將 Agent Space 連線至 VPC 中執行的服務,而不會將其公開至公有網際網路。私有連線可與需要連線到私有端點的任何整合搭配使用,包括 MCP 伺服器、自我託管 Grafana 或 Splunk 執行個體,以及 GitHub Enterprise Server 和 GitLab 自我管理等來源控制系統。

注意

如果您的私有託管工具從 VPC 向 AWS DevOps 代理程式發出傳出請求,也可以使用 VPC 端點來保護此流量,使其保留在 AWS 網路中。例如,這可與透過 Webhook 事件觸發 DevOps 代理程式的工具搭配使用 (請參閱:透過 Webhook 叫用 DevOps 代理程式)。如需詳細資訊,請參閱VPC 端點 (AWS PrivateLink)。

私有連線的運作方式

私有連線會在 AWS DevOps Agent 與 VPC 中的目標資源之間建立安全的網路路徑。在幕後, AWS DevOps 代理程式會使用 Amazon VPC Lattice 來建立此安全的私有連線路徑。VPC Lattice 是一種應用程式聯網服務,可讓您跨 VPCs、帳戶和運算類型連線、保護和監控應用程式之間的通訊,而無需管理基礎網路基礎設施。

當您建立私有連線時,會發生下列情況:

  • 您可以提供具有目標服務網路連線能力的 VPC、子網路和 (選用) 安全群組。

  • AWS DevOps Agent 會建立服務管理的資源閘道,並在您指定的子網路中佈建其彈性網路介面 (ENIs)。

  • 代理程式會使用 資源閘道,透過私有網路路徑將流量路由到目標服務的 IP 地址或 DNS 名稱。

資源閘道由 AWS DevOps Agent 完全管理,並顯示為帳戶中的唯讀資源 (名為 aidevops-{your-private-connection-name})。您不需要設定或維護它。在您的 VPC 中建立的唯一資源是您指定的子網路中的 ENIs。這些 ENIs做為私有流量的進入點,完全由 服務管理。他們不接受來自網際網路的傳入連線,而且您可以透過自己的安全群組保留對流量的完全控制。

安全

私有連線的設計具有多層安全性:

  • 不公開網際網路 – AWS DevOps Agent 與您的目標服務之間的所有流量都會保留在 AWS 網路上。您的服務永遠不需要公有 IP 地址或網際網路閘道。

  • 服務控制的資源閘道 – 您帳戶中的服務受管資源閘道為唯讀。它只能由 AWS DevOps Agent 使用,其他服務或委託人都無法透過它路由流量。您可以在 AWS CloudTrail 日誌中驗證這一點,這會記錄所有 VPC Lattice API 呼叫。

  • 您的安全群組、規則 – 您可以透過您擁有和管理的安全群組來控制 ENIs的傳入和傳出流量。如果您未指定安全群組, AWS DevOps Agent 會建立預設安全群組,範圍限定於您定義的連接埠。

  • 具有最低權限的服務連結角色 – AWS DevOps Agent 使用服務連結角色來僅建立必要的 VPC Lattice 和 Amazon EC2 資源。此角色的範圍是標記 的資源AWSAIDevOpsManaged,且無法存取您帳戶中的任何其他資源。

注意

如果您的組織具有限制 VPC Lattice API 動作的服務控制政策 (SCPs),則服務受管資源閘道會透過服務連結角色建立。確保您的 SCPs服務連結角色的必要動作。

Architecture

下圖顯示私有連線的網路路徑。

網路架構顯示透過 VPC Lattice 連線 AWS 的 DevOps 代理程式。

在此架構中:

  • AWS DevOps 代理程式會對目標服務發出請求。

  • Amazon VPC Lattice 會透過 VPC 中的服務受管資源閘道路由請求。如需使用您自己的 VPC Lattice 資源的進階設定,請參閱使用現有 VPC Lattice 資源的進階設定。

  • VPC 中的 ENI 會收到流量,並將其轉送至目標服務的 IP 地址或 DNS 名稱。

  • 您的安全群組會管理透過 ENIs 允許哪些流量。

  • 從目標服務的角度來看,請求源自 VPC 內 ENIs的私有 IP 地址。

設定私有連線的防火牆規則

透過私有連線,從 AWS DevOps Agent 到私有託管工具的流量來自您在私有連線建立期間指定的子網路中的 Resource Gateway ENIs。這與公開託管的工具連線不同,其使用安全頁面上列出的靜態 IP 地址。

重要

在安全頁面上發佈的靜態 IP 地址不適用於私有連線。 請勿在防火牆規則中將這些 IPs 用於私有託管的工具。

若要允許 AWS DevOps 代理程式流量到達您的私有託管工具:

  1. 識別您在建立私有連線時指定的子網路。

  2. 在目標工具的安全群組 (例如,Grafana ALB 上的安全群組) 中,使用下列其中一種方法新增傳入規則:

    • 參考安全群組 (建議) – 允許來自連接到私有連線 ENIs之安全群組的傳入流量。如果您在建立私有連線期間指定安全群組,請使用該安全群組 ID 做為來源。例如:允許來自 的 TCP 443sg-0123456789abcdef0。

    • 子網路 CIDR 允許清單 – 允許來自您在私有連線建立期間所指定子網路之 CIDR 區塊的傳入流量。例如,如果您的子網路 CIDR 為 10.0.1.0/24:允許來自 的 TCP 44310.0.1.0/24。

若要尋找子網路 CIDR 區塊,請使用您在私有連線建立期間指定的子網路 IDs執行下列命令:

aws ec2 describe-subnets \ --subnet-ids subnet-0123456789abcdef0 subnet-0123456789abcdef1 \ --query 'Subnets[*].[SubnetId,CidrBlock]' \ --output table
注意

ENI IP 地址在私有連線的生命週期內保持穩定。如果您刪除並重新建立私有連線,則 ENI IP 地址可能會變更。使用子網路 CIDR 區塊或參考安全群組可避免在重新建立後更新規則。

建立私有連線

您可以使用 AWS 管理主控台或 CLI AWS 建立私有連線。

注意

VPC Lattice 不支援下列可用區域:use1-az3、usw1-az2、apne1-az3、apne2-az2、euc1-az2、euw1-az4、cac1-az3、ilc1-az2。

先決條件

建立私有連線之前,請確認您有下列項目:

  • 作用中的客服人員空間 – 您需要帳戶中現有的客服人員空間。如果您沒有帳戶,請參閱 開始使用 AWS DevOps 代理程式。

  • 可私有連線的目標服務 – 您的 MCP 伺服器、遠端 A2A 代理程式、可觀測性平台或其他服務必須可從部署資源閘道的 VPC 的已知私有 IP 地址或 DNS 名稱進行連線。只要可從資源閘道子網路路由,此服務就可以在相同的 VPC、對等 VPC 或內部部署中執行。服務必須在您建立連線時指定的連接埠上,提供最低 TLS 版本為 1.2 的 HTTPS 流量。

  • VPC 中的子網路 – 識別要建立 ENIs的 1-20 個子網路。建議您選取多個可用區域中的子網路,以獲得高可用性。這些子網路必須具有與目標服務的網路連線能力。VPC Lattice 可以使用每個可用區域一個子網路。

  • (選用) 安全群組 – 如果您想要使用特定規則控制流量,請準備最多五個安全群組 IDs以連接到 ENIs。如果您省略安全群組, AWS DevOps Agent 會建立預設安全群組。

私有連線是帳戶層級的資源。建立私有連線後,您可以在需要連接相同主機的多個整合和客服人員空間中重複使用該連線。

注意

在服務受管模式中, AWS DevOps 代理程式會在您指定的 VPC 和子網路中建立資源閘道,且該 VPC 屬於與私有連線相同的帳戶。 AWS DevOps 代理程式無法在不同的帳戶中建立資源閘道。如果您的目標服務在另一個 AWS 帳戶或內部部署中執行,請選擇下列其中一項:

  • 透過 VPC 對等互連、 AWS Transit Gateway 或虛擬私有網路 (VPN) 連線,將路由提供給閘道的 VPC。閘道會保留在此帳戶中,而流量會透過該連線到達目標。路由必須存在於閘道的 VPC 中,而不只是在目標執行的帳戶中。

  • 使用自我管理模式。在目標執行的帳戶中建立資源閘道和資源組態、透過 AWS Resource Access Manager (AWS RAM) 與此帳戶共用資源組態、接受共用,然後使用該資源組態的 ARN 建立私有連線。請參閱使用現有 VPC Lattice 資源的進階設定。

使用主控台建立私有連線

  1. 開啟 AWS DevOps 代理程式主控台。

  2. 在導覽窗格中,選擇能力提供者,然後選擇私有連線。

  3. 選擇建立新的連線。

  4. 針對名稱,輸入連線的描述性名稱,例如 my-mcp-tool-connection。

  5. 針對 VPC,選取將部署資源閘道 ENIs VPC。

  6. 針對子網路,選取一或多個子網路 (最多 20 個)。我們建議在至少兩個可用區域中選擇子網路。

  7. 針對 IP 地址類型,選取目標服務的 IP 地址類型 (IPv4、 IPv6或 DualStack)。

  8. (選用) 對於 IPv4 地址數量,如果您為 IP 地址類型選取 IPv4 或 Dualstack,則可以為資源閘道輸入每個 ENI 的 IPv4 地址數量。預設為每個 ENI 16 個 IPv4 地址。

  9. (選用) 對於安全群組,選取現有的安全群組 (最多 5 個),以限制允許哪些流量到達您的目標服務。如果您未選取任何 ,則會建立預設安全群組。

  10. (選用) 對於連接埠範圍,指定目標應用程式接聽的 TCP 連接埠 (例如 443或 8080-8090)。您最多可以指定 11 個連接埠範圍。如果您未指定任何連接埠範圍,連線443只允許連接埠。連線會將流量捨棄到設定範圍以外的任何連接埠,而不會發生錯誤。如果您的端點 URL 包含非標準連接埠 (例如 https://tools.example.com:8089/mcp),請在此處包含該連接埠。您無法在建立連線之後變更連接埠範圍。若要新增連接埠,請刪除連線並重新建立。

  11. 針對主機地址,輸入目標服務的 IP 地址或 DNS 名稱 (例如 mcp.internal.example.com或 10.0.1.50)。該服務必須可從選取的 VPC 連線。如果您輸入 DNS 名稱,解析方式取決於您在下一個步驟中選擇的 DNS 解析模式。

  12. 針對 DNS 解析,選擇主機地址 DNS 名稱的解析方式:

    • 公有 (預設) – DNS 名稱使用公有 DNS 解析。如果您輸入 DNS 名稱做為主機地址,則必須可公開解析。當您的主機名稱具有公有 DNS 記錄 (可以指向私有 IP 地址) 時,請使用此模式。如果您將 IP 地址指定為主機地址,則此設定沒有效果。

    • 在 VPC 中 – DNS 名稱從 VPC 內容中解析,因此僅存在於私有託管區域中的主機名稱會在沒有任何公有 DNS 記錄的情況下正確解析。當您的目標服務的主機名稱為 VPC 的私有時,請使用此模式。

  13. (選用) 如果私有憑證授權機構 (CA) 為您的主機地址發行 TLS 憑證,請完成此步驟。針對憑證公有金鑰,輸入目標服務的完整 PEM 編碼憑證鏈。依序列出憑證:分葉 (伺服器) 憑證、所有中繼 CA 憑證,以及根 CA 憑證。如果鏈結不完整,連線會失敗。 AWS DevOps 代理程式接著會驗證並信任 TLS 連線。

  14. 選擇建立連線。

連線狀態會變更為建立進行中。此程序最多可能需要 10 分鐘。當狀態變更為作用中時,表示網路路徑已就緒。

如果狀態變更為建立失敗,請確認下列事項:

  • 您指定的子網路具有可用的 IP 地址。

  • 您的帳戶尚未達到 VPC Lattice 服務配額。

  • 沒有任何限制性 IAM 政策阻止服務連結角色建立資源。

注意

這些步驟也可以在功能提供者註冊Create a new private connection期間選取 來執行。如需詳細資訊,請參閱使用與功能提供者的私有連線。

使用 CLI AWS 建立私有連線

執行下列命令來建立私有連線。將預留位置值取代為您自己的值。

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"], "dnsResolution": "PUBLIC" } }'

dnsResolution 欄位控制 hostAddress DNS 名稱的解析方式。有效值為 PUBLIC(省略時為預設值) 和 IN_VPC。IN_VPC 當您的主機地址僅在 VPC 內解析時 (例如,私有託管區域中的名稱),請使用 。如果您指定 的 IP 地址hostAddress,此欄位不會有任何影響。

回應包含連線名稱和 的狀態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,您的私有連線即可使用。

使用與功能提供者的私有連線

若要使用私有連線,您可以在功能提供者註冊期間連結至該連線。可搭配私有連線使用的支援功能包括:GitHub、Remote Agent、、 GitLab MCP Server和 Grafana。您可以使用 AWS 管理主控台或 CLI AWS 執行此步驟。

注意

註冊功能提供者時, AWS DevOps 代理程式會驗證端點是否可連線並回應。在完成註冊之前,請確定您的目標服務正在執行並接受連線。

使用主控台與功能提供者使用私有連線

在 AWS DevOps 代理程式主控台中,可透過選取「使用私有連線連線至端點」選項,在註冊期間將私有連線連結至功能。

使用選取的私有連線核取方塊連線至端點。
  1. 開啟 AWS DevOps 代理程式主控台並導覽至您的代理程式空間。

  2. 在能力提供者區段中,選擇註冊。

  3. 選取註冊您要搭配私有連線使用的功能類型。

  4. 在註冊詳細資訊檢視中,輸入您要使用私有連線 (例如,) 連線到的端點 URLhttps://mcp.internal.example.com。

  5. 選取使用私有連線連線至端點。

  6. 選取對應至您要連線之端點 URL 的現有私有連線,或選取建立新的私有連線來建立。

  7. 完成能力提供者的註冊程序。

注意

當您為使用 OAuth 身分驗證 (用戶端登入資料或 3LO) 的功能提供者選取私有連線時,私有連線會同時套用至功能提供者端點和字符交換端點。確保私有連線已設定主機地址,可將流量路由到兩個端點。

主機地址和端點 URL

私有連線和功能提供者各會取得一個地址。兩者不可互換:

  • 私有連線上的主機地址是連線路由的目標。它可以是 IP 地址或 DNS 名稱,當它是 DNS 名稱時,連線的 DNS 解析模式會決定解析方式。

  • 功能提供者上的端點 URL 是 AWS DevOps 代理程式請求的 URL,包括其結構描述、連接埠和路徑。

這兩個值不必相同,因此只有在 VPC 內解析的主機名稱不必出現在主機地址中。如果您服務的主機名稱是 VPC 的私有主機名稱,您有兩個選項:

  • 將連線的 DNS 解析設為在 VPC 中,並使用主機地址和端點 URL 的主機名稱。

  • 將主機地址設定為目標的私有 IP 地址,並將主機名稱保留在端點 URL 中。

您可以在建立連線時選擇 DNS 解析模式,因此請先決定要哪個選項。如需有關這兩個值之間產生不相符之症狀的資訊,請參閱 DNS 主機地址無法解析,或流量到達錯誤的位置。

透過不同的私有連線路由端點和 OAuth 字符交換

對於以 OAuth 為基礎的 MCP 伺服器和遠端代理程式功能提供者,代理程式會向兩個不同的端點提出請求:目標 URL (您註冊的 MCP 伺服器或遠端代理程式端點) 和交換 URL (OAuth 字符交換端點)。根據預設,兩者都會privateConnectionName使用單一 。如果這兩個端點可透過不同的私有網路路徑存取,您可以使用 targetUrlPrivateConnectionName和 exchangeUrlPrivateConnectionName 改為透過自己的私有連線路由每個端點:

  • targetUrlPrivateConnectionName – 用來連接 MCP 伺服器或遠端代理程式端點的私有連線 (目標 URL)。

  • exchangeUrlPrivateConnectionName – 用來連接 OAuth 字符交換端點的私有連線 (交換 URL)。

您可以指定 或兩者。如果您只設定一個端點,則會透過公有網際網路到達另一個端點 (它不會回復到另一個私有連線)。

重要

targetUrlPrivateConnectionName 和 exchangeUrlPrivateConnectionName無法在相同的請求privateConnectionName中與 結合。使用單一 privateConnectionName(適用於兩個端點) 或每個端點的名稱,而非兩者。

下列範例會註冊透過兩個不同的私有連線到達其端點及其字符交換端點的 OAuth 用戶端登入資料 MCP 伺服器:

aws devops-agent register-service \ --service mcpserver \ --target-url-private-connection-name my-target-connection \ --exchange-url-private-connection-name my-exchange-connection \ --service-details '{ "mcpserver": { "name": "my-mcp-tool", "endpoint": "https://mcp.internal.example.com", "authorizationConfig": { "oAuthClientCredentials": { "clientName": "MyOAuthClient", "clientId": "client-id", "clientSecret": "secret-value", "exchangeUrl": "https://auth.internal.example.com/token" } } } }' \ --region us-east-1

使用 AWS CLI 搭配功能提供者使用私有連線

您可以透過包含 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 Lattice 配額限制

  • 安全群組規則 – 確認連接至 ENIs的安全群組允許您服務接聽之連接埠上的傳出流量。同時驗證服務的安全群組是否允許目標連接埠上的傳入流量。流量來自 VPC CIDR 範圍內的 VPC Lattice 資料平面 IPs。您可以使用參考安全群組 (允許 ENI 安全群組做為來源) 或允許從 VPC CIDR 傳入。

  • 子網路連線 – 確認您選取的子網路可以將流量路由到您的服務。如果服務在不同子網路中執行,請確認路由表允許它們之間的流量。

  • 服務可用性 – 確認您的服務正在預期連接埠上執行並接受連線。

  • 不支援的可用區域 - 確認您的子網路位於支援的可用區域。執行aws ec2 describe-subnets --subnet-ids <your-subnet-ids> --query 'Subnets[*].[SubnetId,AvailabilityZoneId]'並檢查上述不支援的可用區域。

刪除私有連線

您可以使用 AWS 管理主控台或 CLI AWS 刪除未使用的私有連線。

使用主控台刪除私有連線

  1. 開啟 AWS DevOps 代理程式主控台。

  2. 在導覽窗格中,選擇功能提供者,然後選擇私有連線。

  3. 選取您要刪除之私有連線的動作功能表,然後選取移除。

私有連線的狀態將顯示為「移除連線」,而 AWS DevOps 代理程式會從 VPC 中移除受管資源閘道和 ENIs。刪除完成後,連線不會再出現在私有連線清單中。

使用 CLI AWS 刪除私有連線

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

回應會傳回 DELETE_IN_PROGRESS. AWS DevOps 代理程式的狀態,將受管資源閘道和 ENIs 從 VPC 中移除。刪除完成後,連線不會再出現在私有連線清單中。

使用現有 VPC Lattice 資源的進階設定

如果您的組織已使用 Amazon VPC Lattice 並管理您自己的資源組態,您可以在自我管理模式中建立私有連線。您可以提供指向目標服務的現有資源組態的 Amazon Resource Name (ARN),而不是讓 AWS DevOps Agent 為您建立資源閘道。

當您:

  • 想要完全控制資源閘道和資源組態生命週期。

  • 需要在多個 AWS 帳戶或服務之間共用資源組態。

  • 需要資源閘道才能在與目標服務相同的帳戶中執行,而不是在您建立私有連線的帳戶中執行。

  • 需要 VPC Lattice 存取日誌,以進行詳細的流量監控。

  • 執行hub-and-spoke網路架構。

若要使用 CLI AWS 建立自我管理的私有連線:

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 Lattice 資源閘道和資源組態的詳細資訊,請參閱 Amazon VPC Lattice 使用者指南。

跨區域連線

私有連線必須在 AWS 與客服人員空間相同的區域中建立。如果您的目標服務在不同區域中執行,請使用自我管理模式搭配區域間 VPC 對等互連或 Transit Gateway 對等互連來彌補差距。

模式為:

  1. 在客服人員空間區域中的 VPC 和服務 VPC 之間建立區域間連線 (VPC 對等互連或傳輸閘道對等互連)。VPC CIDRs不得重疊。

  2. 在具有對等連線的 VPC 中的客服人員空間區域中建立資源閘道。

  3. 在指向服務 IP 地址的客服人員空間區域中建立資源組態 (可透過對等連線路由)。

  4. 使用該資源組態 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