如何使用介面 VPC 端點存取其他帳戶中的 API Gateway 私有 REST API?

4 分的閱讀內容
0

我想使用介面虛擬私有雲端 (VPC) 端點存取另一 AWS 帳戶中的 Amazon API Gateway 私有 REST API。

簡短描述

若要使用介面 VPC 端點存取另一 AWS 帳戶的 API Gateway 私有 REST API,請完成以下步驟:

  1. 在一個帳戶 (帳戶 A) 的 Amazon Virtual Private Cloud (Amazon VPC) 建立介面端點。
  2. 在第二個帳戶 (帳戶 B) 建立 API Gateway 私有 REST API。
  3. 為私有 REST API 設定資源政策,以便允許介面端點調用 API。
  4. 為私有 REST API 設定方法。
  5. 部署私有 REST API。
  6. 從帳戶 A 呼叫私有 REST API 以測試設定。

注意: API Gateway 私有 REST API 及 VPC 端點必須位於相同的 AWS 區域。

解決方法

在一個帳戶 (帳戶 A) 的 Amazon VPC 建立介面端點

建立新的介面 VPC 端點

在帳戶 A,請按照在您的 VPC 中為 API Gateway 建立介面 VPC 端點中的說明進行操作。

**重要:**在 Policy (政策),選擇 Full access (完整存取權)。最佳做法是使用 VPC 端點政策來根據 API ID 限制端點存取。另一個最佳做法是使用 API Gateway 資源政策來限制主體對端點的存取。如需詳細資訊,請參閱套用最小權限

建立介面端點時,請考慮採取下列動作:

獲取介面端點的 VPC 端點 ID

建立介面端點後,會顯示 VPC 端點 ID。複製新介面端點的 VPC 端點 ID (例如:vpce-1a2b3c456d7e89012)。

**注意:**建立和設定私有 REST API 時,請使用此 VPC 端點 ID

獲取介面端點的公有 DNS 名稱

Endpoints (端點) 頁面會顯示在 Amazon VPC 主控台中。在 Endpoints (端點) 頁面的 Details (詳細資料) 索引標籤中,從 DNS names (DNS 名稱) 欄位複製介面端點的公有 DNS 名稱。例如:vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com

在第二個帳戶 (帳戶 B) 中建立 API Gateway 私有 REST API

  1. 在帳戶 B 中,開啟 API Gateway console (API Gateway 主控台)。
  2. 選擇 Create API (建立 API)。
  3. Choose an API type (選擇 API 類型) 的 REST API Private (REST API 私有) 下選擇 Build (建置)。
  4. API details (API 詳細資訊) 下,輸入下列資訊:
    API name (API 名稱) 中,輸入名稱。
    (選用) 在 Description (描述) 中,輸入描述。
    Endpoint Type (端點類型) 設為 Private (私有)。
    VPC Endpoint IDs (VPC 端點 ID),輸入介面端點 ID。然後,選擇 Add (新增)。
    **注意:**當您將介面端點與私有 REST API 建立關聯,API Gateway 會產生新的 Amazon Route 53 別名記錄。您可以使用 Route53 別名來存取您的私有 API
  5. 選擇 Create API (建立 API)。

如需詳細資訊,請參閱建立私有 VPC

為私有 REST API 設定資源政策,以便允許介面端點調用 API

  1. API Gateway console )API Gateway 主控台) 的導覽窗格中,在您的 API 下選擇 Resource Policy (資源政策)。
  2. Resource Policy (資源政策) 頁面中,將下列範例資源策略貼到文字方塊:
    {  "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:/*/*/*"
        }
      ]
    }
    **注意:**將 vpce-1a2b3c456d7e89012 替換為介面端點 ID。

如需詳細資訊,請參閱設定私有 API 的資源政策

為私有 REST API 設定方法

  1. API Gateway console (API Gateway 主控台) 導覽窗格中,在您的 API 下選擇 Resources (資源)。
  2. Resources (資源) 窗格中選擇 Actions (動作),然後選擇 Create Method (建立方法)。
  3. / resource 節點的下拉式清單中選擇 ANY (任何),然後選擇核取記號圖示。
  4. / - ANY - Setup 窗格的 Integration type (整合類型) 中,選擇 Mock (模擬)。
    **注意:**模擬整合將回應任何收到的請求。
  5. 選擇 Save (儲存)。

如需詳細資訊,請參閱 API Gateway 中的 REST API 的方法

部署私有 REST API

  1. API Gateway console (API Gateway 主控台) 的 Resources (資源) 窗格中,選擇 Actions (動作),然後選擇 Deploy API (部署 API)。
  2. Deploy API (部署 API) 對話方塊中,輸入下列資訊:
    對於部署階段,請選擇 [新階段]
    對於階段名稱,輸入名稱。例如,dev (開發) 或 test (測試)。
  3. 選擇 Deploy (部署)。
  4. Stage Editor (階段編輯器) 窗格中,尋找訊息如果啟用私有 DNS,請使用此網址:。複製私有 REST API 的調用網址。
    **注意:**使用私有 REST API 的調用網址測試設定。

如需詳細資訊,請參閱部署私有 VPC

從帳戶 A 呼叫私有 REST API 以測試設定

  1. 在帳戶 A 中,在與您的介面端點相同的 VPC 中啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體
    **重要:**選擇您與介面端點關聯的安全群組。
  2. 連線至 Amazon EC2 執行個體
    **注意:**EC2 執行個體可能會在您的 AWS 帳戶上產生費用。如果您建立要測試的執行個體,請在完成時終止執行個體,以防止產生額外費用。
  3. 從 EC2 執行個體的命令列,執行下列任何一個 curl 命令來呼叫帳戶 B 的私有 REST API。
    **注意:**如需詳細資訊,請參閱使用端點專屬的公有 DNS 主機名稱調用私有 API
    對於私有 DNS 名稱
    執行下列命令:
    curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
    
    **注意:**將 https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name 替換為您私有 API 的調用網址。只有在您為介面端點開啟私有 DNS 時,此命令才有效。如需詳細資訊,請參閱使用私有 DNS 名稱調用私有 API
    對於 Route53 別名
    執行下列命令:
    curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
    
    **注意:**將 a1bc234d5e 替換為您 API 的 ID,將 vpce-1a2b3c456d7e89012 替換為您的介面端點 ID,並將 region 替換為您 API 的區域。將 stage-name 替換為您部署私有 API 之階段的名稱。如需詳細資訊,請參閱使用 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"
    
    **注意:**將 vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com 替換為您介面端點的公有 DNS 名稱,將 stage-name 替換為您部署私有 API 之階段的名稱。將 a1bc234d5e.execute-api.region.amazonaws.com 替換為您私有 API 的調用網址。
    對於具有 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"
    
    **注意:**將 vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com 替換為您介面端點的公有 DNS 名稱,將 stage-name 替換為您部署私有 API 之階段的名稱。將 a1bc234d5e 替換為您 API 的 ID。
  4. 檢閱命令輸出。連線成功時,API Gateway 會傳回 200 正常回應。

相關資訊

如何對連線至 API Gateway 私有 API 端點時出現的問題進行疑難排解?

使用介面 VPC 端點存取 AWS 服務

多區域私有 API 閘道