如何使用介面 VPC 端點存取其他帳戶中的 API Gateway 私有 REST API?
我想使用介面虛擬私有雲端 (VPC) 端點存取另一 AWS 帳戶中的 Amazon API Gateway 私有 REST API。
簡短描述
若要使用介面 VPC 端點存取另一 AWS 帳戶的 API Gateway 私有 REST API,請完成以下步驟:
- 在一個帳戶 (帳戶 A) 的 Amazon Virtual Private Cloud (Amazon VPC) 建立介面端點。
- 在第二個帳戶 (帳戶 B) 建立 API Gateway 私有 REST API。
- 為私有 REST API 設定資源政策,以便允許介面端點調用 API。
- 為私有 REST API 設定方法。
- 部署私有 REST API。
- 從帳戶 A 呼叫私有 REST API 以測試設定。
注意: Amazon API Gateway 私有 REST API 及 VPC 端點必須位於相同的 AWS 區域。
解決方法
在一個帳戶 (帳戶 A) 的 Amazon VPC 建立介面端點
建立新的介面 VPC 端點
在帳戶 A,按照為 API Gateway execute-api 建立介面 VPC 端點的說明進行操作。
重要:對於政策,選擇完整存取權。最佳做法是使用 VPC 端點政策,透過 API ID 限制端點存取權。另一個最佳做法是使用 API Gateway 資源政策限制主體對端點的存取權。如需詳細資訊,請參閱套用最低權限許可。
建立介面端點時,請考慮採取下列動作:
- 最佳做法是在不同的「可用區域」選取多個子網路。設定跨多個可用區域的子網路時,介面端點對潛在的 AZ 故障更具彈性。
- 啟用私有 DNS 以使用公有或私有 DNS 連線到您的私有 REST API。
**注意:**當您為介面 VPC 端點啟用私有 DNS 時,您將無法從 Amazon VPC 存取 API Gateway 公有 API。如需詳細資訊,請參閱為什麼從 VPC 連線至我的 API Gateway API 時出現 HTTP 403 禁止錯誤? - 您的安全群組必須具有允許來自 Amazon VPC 中一個 IP 地址範圍中的 TCP 連接埠 443 輸入 HTTPS 流量的規則。規則也可以來自 Amazon VPC 中的其他安全群組。
**注意:**如果您沒有符合上述任一要求的安全群組,則建立新的安全群組。如果您未指定安全群組,則預設安全群組會與端點網路介面建立關聯。
獲取介面端點的 VPC 端點 ID
建立介面端點後,會顯示 VPC 端點 ID。複製新介面端點的 VPC 端點 ID (例如:vpce-1a2b3c456d7e89012)。然後,選擇關閉。
**注意:**建立和設定私有 REST API 時,請使用此 ID。
獲取介面端點的公有 DNS 名稱
選擇關閉後,端點頁面會在 Amazon VPC 主控台中顯示。在端點頁面的詳細資訊標籤下 DNS 名稱欄中,複製介面端點的公有 DNS 名稱,例如:vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com。
在第二個帳戶 (帳戶 B) 中建立 API Gateway 私有 REST API
- 在帳戶 B 中,開啟 API Gateway 主控台。
- 選擇建立 API。
- 對於選擇 API 類型,在 REST API 私有下選擇建置。
- 在建立頁面中,保持選擇通訊協定設定為 REST。
- 對於建立新 API,請選擇新增 API。
- 在設定下輸入下列資訊:
對於 API 名稱,請輸入名稱。
(可選) 對於描述,輸入描述。
將端點類型設為私有。
對於 VPC 端點 ID,輸入介面端點 ID。然後,選擇新增。
**注意:**當您將介面端點與私有 REST API 建立關聯,API Gateway 會產生新的 Amazon Route 53 別名記錄。您可以使用 Route53 別名來存取您的私有 API。 - 選擇建立 API。
如需詳細資訊,請參閱在 Amazon API Gateway 建立私有 API。
為私有 REST API 設定資源政策,以便允許介面端點調用 API
1. 在 API Gateway 主控台的導覽窗格中,在 API 下選擇資源政策。
2. 在資源政策頁面中,將下列範例資源策略貼到文字方塊:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c456d7e89012" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*" } ] }
**注意:**請以介面端點 ID 取代 vpce-1a2b3c456d7e89012。
如需詳細資訊,請參閱設定私有 API 的資源政策。
為私有 REST API 設定方法
- 在 API Gateway 主控台導覽窗格,從 API 下選擇資源。
- 在資源窗格中選擇動作,然後選擇建立方法。
- 從 / resource 節點的下拉式清單中選擇 ANY,然後選擇核取記號圖示。
- 在 / - ANY - Setup 窗格的整合類型選擇模擬。
**注意:**模擬整合將回應任何收到的請求。 - 選擇儲存。
如需詳細資訊,請參閱在 API Gateway 設定 REST API 方法。
部署私有 REST API
- 在 API Gateway 主控台的資源窗格中,選擇動作,然後選擇部署 API。
- 在部署 API 對話方塊,輸入下列資訊:
對於部署階段,請選擇 [新階段]。
在階段名稱中,輸入名稱,例如 dev 或 test。 - 選擇部署。
- 在階段編輯器窗格上,尋找訊息: 如果已啟用私有 DNS,請使用此 URL:。複製私有 REST API 的調用 URL。
**注意:**使用私有 REST API 的調用 URL 測試設定。
如需詳細資訊,請參閱使用 API Gateway 主控台部署私有 API。
從帳戶 A 呼叫私有 REST API 以測試設定
- 在帳戶 A 中,在與您的介面端點相同的 Amazon VPC 中啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
重要:選擇您與介面端點關聯的安全群組。 - 連線至 Amazon EC2 執行個體。
**注意:**EC2 執行個體可能會對您的 AWS 帳戶產生費用。如果您建立要測試的執行個體,請在完成時終止執行個體,以防止重複產生費用。 - 從 Amazon EC2 執行個體的命令列,執行下列任何一個 curl 命令來呼叫帳戶 B 的私有 REST API。
**注意:**如需詳細資訊,請參閱使用端點專屬的公有 DNS 主機名稱調用私有 API。如需有關 curl 的詳細資訊,請參閱 curl 專案網站。
對於私有 DNS 名稱
執行下列命令:
curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
**注意:**用您的私有 API 的調用 URL 取代 https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name。只有在您為介面端點開啟私有 DNS 時,此命令才有效。如需詳細資訊,請參閱使用私有 DNS 名稱調用私有 API。
對於 Route 53 別名
執行下列命令:
curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
**注意:**使用您的 API 的 ID 取代 a1bc234d5e,使用介面端點 ID 取代 vpce-1a2b3c456d7e89012,使用您的 API 的區域取代 region。請以您部署私有 API 的階段名稱取代 stage-name。如需詳細資訊,請參閱使用 Route53 別名存取您的私有 API。
對於具有主機標頭的公有 DNS 名稱
執行下列命令:
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"
**注意:**使用介面端點的公有 DNS 名稱取代 vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com,使用您部署了私有 API 的階段名稱取代 stage-name。 使用您私有 API 的調用 URL 取代 a1bc234d5e.execute-api.region.amazonaws.com。
對於具有 x-apigw-api-id 標頭的公有 DNS 名稱
執行下列命令:
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"
**注意:**使用介面端點的公有 DNS 名稱取代 vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com,使用您部署了私有 API 的階段名稱取代 stage-name。 請以您的 API ID 取代 a1bc234d5e。
4. 檢閱命令輸出。連線成功時,API Gateway 會傳回 200 OK 的回應。
相關資訊
相關內容
- 已提問 4 個月前lg...
- 已提問 7 個月前lg...
- 已提問 8 個月前lg...
- AWS 官方已更新 5 個月前
- AWS 官方已更新 2 個月前
- AWS 官方已更新 5 個月前