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

3 分的閱讀內容
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 以測試設定。

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

解決方法

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

建立新的介面 VPC 端點

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

重要:對於政策,選擇完整存取權。最佳做法是使用 VPC 端點政策,透過 API ID 限制端點存取權。另一個最佳做法是使用 API Gateway 資源政策限制主體對端點的存取權。如需詳細資訊,請參閱套用最低權限許可

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

獲取介面端點的 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

  1. 在帳戶 B 中,開啟 API Gateway 主控台
  2. 選擇建立 API
  3. 對於選擇 API 類型,在 REST API 私有下選擇建置
  4. 建立頁面中,保持選擇通訊協定設定為 REST
  5. 對於建立新 API,請選擇新增 API
  6. 設定下輸入下列資訊:
    對於 API 名稱,請輸入名稱。
    (可選) 對於描述,輸入描述。
    端點類型設為私有
    對於 VPC 端點 ID,輸入介面端點 ID。然後,選擇新增
    **注意:**當您將介面端點與私有 REST API 建立關聯,API Gateway 會產生新的 Amazon Route 53 別名記錄。您可以使用 Route53 別名來存取您的私有 API
  7.  選擇建立 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 設定方法

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

如需詳細資訊,請參閱在 API Gateway 設定 REST API 方法

部署私有 REST API

  1. API Gateway 主控台資源窗格中,選擇動作,然後選擇部署 API
  2. 部署 API 對話方塊,輸入下列資訊:
    對於部署階段,請選擇 [新階段]
    階段名稱中,輸入名稱,例如 devtest
  3. 選擇部署
  4.  在階段編輯器窗格上,尋找訊息: 如果已啟用私有 DNS,請使用此 URL:。複製私有 REST API 的調用 URL
    **注意:**使用私有 REST API 的調用 URL 測試設定。

如需詳細資訊,請參閱使用 API Gateway 主控台部署私有 API

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

  1. 在帳戶 A 中,在與您的介面端點相同的 Amazon VPC 中啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體
    重要:選擇您與介面端點關聯的安全群組
  2. 連線至 Amazon EC2 執行個體
    **注意:**EC2 執行個體可能會對您的 AWS 帳戶產生費用。如果您建立要測試的執行個體,請在完成時終止執行個體,以防止重複產生費用。
  3. 從 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 的回應。

相關資訊

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

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

多區域私有 API 閘道