如何僅允許特定 IP 地址存取我的 API Gateway REST API?

2 分的閱讀內容
0

我想要只允許特定 IP 地址存取我的 Amazon API Gateway REST API。如何限制對我的 API Gateway REST API 的存取?

簡短說明

為您的 REST API 建立資源政策,使用該資源政策拒絕未經明確允許的任何 IP 地址的存取。

將資源政策連接至 REST API 後,從指定 IP 地址 (允許的使用者) 呼叫 API 的使用者,便可以存取該 API。來自任何其他 IP 地址的呼叫都會遭到拒絕存取,並收到 HTTP 403 禁止錯誤。

若要封鎖特定 IP 地址並允許所有其他 IP 地址的存取,請參閱範例: 根據來源 IP 地址或範圍拒絕 API 流量

**注意事項:**API Gateway HTTP API 目前不支援資源政策

解決方案

**注意事項:**對於下列程序,您可以使用現有 API Gateway REST API 或建立範例 REST API 進行測試。如果您使用範例 API (PetStore),請跳至第二節: 建立並連接只允許特定 IP 地址存取您 API Gateway REST API 的資源政策

設定 API 方法

1.    開啟 API Gateway 主控台

2.    選擇您的 REST API。

3.    在資源窗格中,選擇動作。然後,選擇建立方法

4.    在 / 資源節點下的下拉式清單中,選擇任何。然後,選擇核取記號圖示。

5.    在 / - 任何 - 設定窗格中,在整合類型中選擇模擬

6.    選擇儲存

**注意事項:**模擬整合會回應任何收到的請求,這有助於以後進行測試。

建立並連接只允許特定 IP 地址存取您 API Gateway REST API 的資源政策

1.    開啟 API Gateway 主控台

2.    在左側導覽窗格中,選擇資源政策

3.    在資源政策文字欄位中,貼上下列範例資源政策:

範例資源政策

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
        }
      }
    }
  ]
}

3.    在 aws:SourceIp 中,使用您想授予存取權限的特定 IP 地址取代 sourceIpOrCIDRBlock 值。您也可以使用 CIDR 標記法指定 IP 地址的範圍。

以 CIDR 標記法列出的範例公有 IP 地址字串

["52.95.36.0/22", "15.230.39.196/31", "52.93.178.219/32"]

重要事項:aws:SourceIp 條件值僅適用於公有 IP 地址範圍。若要允許私有 IP 地址範圍的存取,請改為使用條件值 aws:VpcSourceIp。然後,對於 aws:VpcSourceIp 值,輸入透過介面 VPC 端點叫用私有 API 端點之 HTTP 用戶端的私有 IP 地址。請注意,您只能透過介面 VPC 端點在 API Gateway 中叫用私有 API 端點。如需相關資訊,請參閱 aws:VpcSourceIp

4.    選擇儲存

注意事項:Amazon CloudWatch Logs 中的 $context.identity.sourceIp 變數會列出呼叫您 REST API 的任何私有 IP 地址。如需相關資訊,請參閱資料模型、授權方、對應範本和 CloudWatch 存取記錄的 $context 變數

部署 API

1.    在 REST API 的資源窗格中,選擇動作

2.    選擇部署 API

3.    在部署階段中,選擇**[新階段]**。

4.    在階段名稱中,輸入名稱。例如:v1 或 demo。

5.    選擇部署

**重要事項:**每次變更 REST API 的資源政策時,都必須重新部署 REST API。

測試資源政策

透過使用 curlPostman 應用程式測試 API 的叫用 URL,確認您的 REST API 會對允許的 IP 地址傳回 HTTP 200 OK 回應。然後,從沒有允許的 IP 地址的環境中執行另一個測試,確認您的 REST API 傳回 HTTP 403 禁止錯誤。

**注意事項:**如果您沒有使用多個環境進行測試的權限,可以設定 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。如果您使用 Amazon EC2 執行個體進行測試,請務必先將該執行個體的 IP 地址新增至 API 的資源政策中。然後,重新部署您的 API。

使用 curl 測試您的 REST API 是否存在 HTTP 200 OK 回應或 HTTP 403 錯誤

根據您的作業系統,執行下列其中一個命令。

**重要事項:**使用 REST API 的叫用 URL 取代 https://yourInvokeUrl/

對於 Linux、Unix 和 macOS 環境,請執行下列命令:

curl -IX GET https://yourInvokeUrl/

對於 Windows PowerShell,請執行下列命令:

curl https://yourInvokeUrl/

如果資源政策設定正確,則允許的環境會收到 HTTP 200 OK 回應。遭拒絕的環境會收到 HTTP 403 禁止錯誤。


相關資訊

建立 API Gateway 資源政策並將其連接至 API

API Gateway 資源政策範例

Amazon API Gateway 的存取政策語言概觀

在 API Gateway 中控制和管理 REST API 的存取