我只想允許特定 IP 位址存取我的 Amazon API Gateway REST API。
簡短描述
若要只允許特定 IP 位址存取您的 REST API,請建立拒絕所有其他 IP 位址存取的資源政策。
將資源政策附加到 REST API 後,具有權限的使用者可以從指定的 IP 位址呼叫 API。您的 API 拒絕來自任何其他 IP 位址的呼叫,並顯示「HTTP 403 Forbidden」錯誤。
若要封鎖特定 IP 位址並允許所有其他 IP 位址的存取,請參閱範例: 根據來源 IP 位址或範圍拒絕 API 流量。
**注意:**您可以對 API Gateway HTTP API 使用資源政策。
解決方法
設定 API 方法
要測試存取權,請使用您現有的 API Gateway REST API 或建立範例 REST API。如果您使用 PetStore 範例 API,請繼續執行 Create and attach a resource policy (建立並附加資源政策)。
若要為您現有的 REST API 建立模擬整合,請完成以下步驟:
- 開啟 API Gateway console (API Gateway 主控台)。
- 選擇您的 REST API。
- 在 Resources (資源) 窗格的Methods (方法) 下,選擇 Create method (建立方法)。
- 在 Method type (方法類型) 中,選取 ANY (任何)。
- 在 Integration type (整合類型) 中,選擇 Mock (模擬)。
**注意:**模擬整合將回應任何收到的請求。
- 選擇 Create method (建立方法)。
建立並附加資源政策
請完成下列步驟:
- 開啟 API Gateway console (API Gateway 主控台)。
- 選擇您的 REST API。
- 在導覽窗格中,選擇 Resource policy (資源政策)。
- 選擇 Create policy (建立政策)。
- 在 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"]
}
}
}
]
}
**注意:**將 sourceIpOrCIDRBlock 替換為您要授予存取權的 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 端點。
- 選擇 Save changes (儲存變更)。
若要尋找呼叫您 REST API 的私有 IP 位址,請檢查 Amazon CloudWatch Logs。如需詳細資訊,請參閱教學課程: 檢視 CloudWatch Logs。
部署 API
請完成下列步驟:
- 開啟 API Gateway console (API Gateway 主控台)。
- 選擇您的 REST API。
- 在 REST API 的 Resources (資源) 窗格中,選擇 Deploy API (部署 API)。
- 在 Deployment stage (部署階段) 中,選擇 New stage (新階段)。
- 在 Stage name (階段名稱) 中,輸入名稱。例如輸入 v1 或 demo。
- 選擇 Deploy (部署)。
**重要:**每次變更 REST API 的資源政策時,都必須重新部署 REST API。
測試資源政策
根據您的作業系統 (OS),執行以下其中一個命令,以測試允許的 IP 位址環境。
Linux、Unix 和 macOS 環境:
curl -IX GET https://yourInvokeUrl/
Windows PowerShell:
curl https://yourInvokeUrl/
**注意:**使用 REST API 的叫用 URL 取代 https://yourInvokeUrl/。
如果資源政策設定正確,則允許的環境會收到「HTTP 200 OK」回應。從未受允許的 IP 位址環境中重新執行相同命令。遭拒絕的環境應收到「HTTP 403 Forbidden」錯誤。
若要測試您的資源政策,您也可以使用 Postman 網站上的 Postman 應用程式。
**注意:**如果您無權存取多個環境,請啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。接著,將該執行個體的 IP 位址新增至您的 API 資源政策,然後重新部署 API。
相關資訊
建立 API Gateway 資源政策並將其連接至 API
API Gateway 資源政策範例
Amazon API Gateway 的存取政策語言概觀
在 API Gateway 中控制和管理對 REST API 的存取權