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

2 分的閱讀內容
0

我只想允許特定 IP 位址存取我的 Amazon API Gateway REST API。

簡短描述

若要只允許特定 IP 位址存取您的 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 以進行測試。如果您使用 PetStore 範例 API,請繼續執行 Create and attach a resource policy (建立並附加資源政策) 區段。

設定 API 方法

請完成下列步驟:

  1. 開啟 API Gateway console (API Gateway 主控台)。
  2. 選擇您的 REST API。
  3. Resources (資源) 窗格中的Methods (方法) 區段中,選擇 Create method (建立方法)。
  4. Method type (方法類型) 下的下拉式清單中,選擇 ANY (任意)。
  5. Integration type (整合類型) 中,選擇 Mock (模擬)。
  6. 選擇 Create method (建立方法)。
    **注意:**為了協助您測試設定,模擬整合會回應任何收到的請求。

建立並附加資源政策

請完成下列步驟:

  1. 開啟 API Gateway console (API Gateway 主控台)。

  2. 在導覽窗格中,選擇 Resource policy (資源政策)。

  3. 選擇 Create policy (建立政策)。

  4. Resource policy (資源政策) 文字方塊中,輸入下列範例資源政策:

    {
      "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"]
            }
          }
        }
      ]
    }

    **注意:**在 aws:SourceIp 中,將 sourceIpOrCIDRBlock 替換為您要授予存取權的 IP 位址。使用 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 端點。

  5. 選擇 Save changes (儲存變更)。

注意:Amazon CloudWatch Logs 中的 $context.identity.sourceIp 變數會列出呼叫您 REST API 的私有 IP 位址。如需詳細資訊,請參閱資料轉換的內容變數

部署 API

請完成下列步驟:

  1. 在 REST API 的 Resources (資源) 窗格中,選擇 Deploy API (部署 API)。
  2. Deployment stage (部署階段) 中,選擇 New stage (新階段)。
  3. Stage name (階段名稱) 中,輸入名稱。例如輸入「v1」或「demo」。
  4. 選擇 Deploy (部署)。

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

測試資源政策

若要確認您的 REST API 會向允許的 IP 位址傳回 HTTP 200 成功回應,請使用 curl 測試 API 的調用網址。或者,使用 Postman 網站上的 Postman 應用程式。然後,從沒有允許 IP 位址的環境中執行另一個測試,以檢查您的 REST API 是否傳回 HTTP 403 禁止錯誤。

**注意:**如果您無權存取多個環境,請設定 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。如果您使用 Amazon EC2 執行個體,請務必將該執行個體的 IP 位址新增至 API 的資源政策中。然後,重新部署您的 API。

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

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

Linux、Unix 和 macOS 環境:

curl -IX GET https://yourInvokeUrl/

Windows PowerShell:

curl https://yourInvokeUrl/

**注意:**將 https://your Invoke Url/ 替換為您的 REST API 調用網址。

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

相關資訊

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

API Gateway 資源政策範例

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

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