API Gateway HTTP API 控制客戶端訪問 IP 源

前言

在 API Gateway REST API 中我們可以配置 Resource policy 來實現對特定客戶端 IP 地址的限制. 然而 HTTP API 并不提供這個功能, 不過我們可以用 Lambda 搓一個 Authorizer 實現等效的功能.

創建 Lambda authorizer

import json
import os
import ipaddressdef lambda_handler(event, context):# Get the client's source IP address# Make sure the HTTP is using version 2.0 payload formatclient_ip = event.get('requestContext', {}).get('http', {}).get('sourceIp')# Envinronment variable ALLOWED_CIDR seperate CIDRs by comma, example:# 1.1.1.0/24,1.1.2.0/24allowed_cidr_str = os.environ.get('ALLOWED_CIDR')allowed_cidr = [cidr.strip() for cidr in allowed_cidr_str.split(',')]is_authorized = Falseif client_ip:ip = ipaddress.ip_address(client_ip)for cidr_str in allowed_cidr:cidr = ipaddress.ip_network(cidr_str, strict=False)if ip in cidr:is_authorized = Trueprint(f'{ip} in {cidr} is {is_authorized}')breakelse:print(f'{ip} in {cidr} is {is_authorized}')                return {"isAuthorized": is_authorized}

代碼很簡單, 不再贅述. 這里主要需要注意:

  • HTTP API Authorizer Payload format version 需要指定為 2.0, 否則獲取客戶端 IP 的路徑不一樣.
  • 保存代碼后需要額外創建一個環境變量 ALLOWED_CIDR 用來定義允許的客戶端 CIDR 格式地址, 多個中間用 , 分隔.
    在這里插入圖片描述

配置 HTTP API

這里就用之前在文章 https://blog.csdn.net/lpwmm/article/details/149313858 中創建好的 HTTP API 作為例子.

  • 創建 Authorizer
    在這里插入圖片描述
    注意事項
    1. Payload format version 選擇 2.0
    2. 刪除 Identity sources 因為之前創建的這個 HTTP API 是轉發請求給后面的 Flask Web 應用, 并不是單純的 API 調用, 所以客戶端會是瀏覽器匿名訪問, 請求的 Headers 中當然也不會包含 Authorization 這種信息. 如果不刪除的話 API Gateway 會直接拒絕請求, 后面的 Lambda authorizer 也不會被調用
    3. 也是因為沒有 Identity sources, 所以 Authorizer caching 不能開啟.
      在這里插入圖片描述
  • 將 Authorizer 附加到資源定義
    在這里插入圖片描述
    注意, 不同的 Resource 需要分別附加 Authorizer
    在這里插入圖片描述

結尾

因為 HTTP API 配置了 Auto deploy, 因此上面的配置修改會立即生效, 不過也需要等個幾秒鐘的時間, 再使用瀏覽器訪問 HTTP API Stage URL 進行測試.

對于沒有在允許列表中的客戶端 IP 地址訪問時瀏覽器會返回:

{"message": "Forbidden"
}

后續只需要維護 Lambda 環境變量 ALLOWED_CIDR 內容就可以方便的管理允許訪問 HTTP API 的客戶端 IP.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914945.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914945.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux搭建LAMP環境(CentOS 7 與 Ubuntu 雙系統教程)

Linux搭建LAMP環境 一、LAMP 環境核心概念 定義:由 Linux、Apache、MySQL、PHP 四大組件組成的開源 Web 應用平臺本質:四個獨立開源軟件的組合體,因長期協同使用形成高度兼容性,成為動態網站和服務器的主流解決方案 二、LAMP 四大…

c# 開機自動啟動程序

以下是兩種實現C#軟件開機自啟動的常用方法&#xff0c;根據需求選擇適合的方案&#xff1a; 方法1&#xff1a;通過注冊表實現&#xff08;需管理員權限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C語言---動態內存管理

為什么要有動態內存分配我們在學習動態內存管理之前&#xff0c;一直都是通過開辟變量&#xff0c;或者是開辟數組的方式來在內存的棧區開辟空間的&#xff0c;但是這樣的開辟方式有局限性&#xff0c;因為一旦開辟之后&#xff0c;它們的大小就無法改變&#xff0c;就缺少了很…

C++標準庫(std)詳解

C標準庫&#xff08;std&#xff09;詳解——目錄C標準庫&#xff08;std&#xff09;詳解一、命名空間&#xff08;namespace&#xff09;二、主要組件1. 輸入輸出流&#xff08;<iostream>&#xff09;2. 字符串處理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升級詳解:3. 搭建node/python服務器升級(native ota原生API)

一、OTA兩種方式&#xff1a;app_update 與 esp_https_ota 區別 ESP32/ESP32-S2/ESP32-C3等可通過Wi-Fi或以太網下載新固件到OTA分區實現運行時升級。ESP-IDF提供兩種OTA升級方法&#xff1a; 使用app_update組件的原生API使用esp_https_ota組件的簡化API(支持HTTPS升級) 本次…

byte[]作為接口參數傳遞的方法

在C#中通過WebService或API傳遞byte參數&#xff08;如文件、圖像等二進制數據&#xff09;時&#xff0c;通常有以下幾種實現方式&#xff1a; ?1. 使用Base64編碼&#xff08;推薦REST API&#xff09;? 將byte數組轉換為Base64字符串傳輸&#xff0c;適用于JSON格式的API&…

元宇宙與Web3的深度融合:構建沉浸式數字體驗的愿景與挑戰

一、技術特征與融合基礎1. 元宇宙的技術架構&#xff08;2025年&#xff09;空間構建技術&#xff1a;3D建模與渲染&#xff1a;實時渲染引擎&#xff08;如Unity HDRP&#xff09;支持路徑追蹤光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D場景。…

什么是腦裂

腦裂定義&#xff1a; 腦裂是分布式系統中由于網絡分區&#xff08;Network Partition&#xff09;導致集群節點被分割成多個獨立子集&#xff0c;每個子集認為自己是唯一合法的集群&#xff0c;從而導致數據不一致或系統行為異常的現象。詳細工作原理&#xff1a;發生原因&…

川翔云電腦:云端算力新標桿,創作自由無邊界

一、旗艦機型&#xff1a;4090Ultra 48G 顯存顛覆硬件限制 川翔云電腦最新上線的RTX 4090Ultra 48G 顯存機型&#xff0c;采用 NVIDIA Ada Lovelace 架構&#xff0c;單卡顯存容量達 48GB GDDR6X&#xff0c;較傳統 4090 翻倍&#xff0c;可直接加載 1200 萬面數的超復雜模型&a…

貪心算法(排序)

碼蹄集OJ-活動安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

詳解序數回歸損失函數ordinal_regression_loss:原理與實現

在醫療 AI 領域&#xff0c;很多分類任務具有有序類別的特性&#xff0c;如疾病嚴重程度&#xff08;輕度→中度→重度&#xff09;、腫瘤分級&#xff08;G1→G2→G3&#xff09;等。這類任務被稱為序數回歸&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完庫與建完表后后:1.分別查詢student表和score表的所有記錄student表&#xff1a;score表:2.查詢student表的第2條到5條記錄SELECT * FROM student LIMIT 1,4;3.從student表中查詢計算機系和英語系的學生的信息SELECT * FROM student-> WHERE department IN (計算機系, 英…

二分答案之最大化最小值

參考資料來源靈神在力扣所發的題單&#xff0c;僅供分享學習筆記和記錄&#xff0c;無商業用途。 核心思路&#xff1a;本質上是求最大 應用場景&#xff1a;在滿足條件的最小值區間內使最大化 檢查函數&#xff1a;保證數據都要大于等于答案 補充&#xff1a;為什么需要滿…

OCR 賦能檔案數字化:讓沉睡的檔案 “活” 起來

添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09;企業產品檔案包含設計圖紙、檢測報告、生產記錄等&#xff0c;傳統數字化僅靠掃描存檔&#xff0c;后續檢索需人工逐份翻閱&#xff0c;效率極低。?OCR 產品檔案解決方案直擊痛點&#xff1a;通過智能識別技…

力扣118.楊輝三角

思路1.新建一個vector的vector2.先把空間開出來&#xff0c;然后再把里面的值給一個個修改開空間的手段&#xff1a;new、構造函數、reserve、resize因為我們之后要修改里面的數據&#xff0c;這就意味著我們需要去讀取這個數據并修改&#xff0c;如果用reserve的話&#xff0c…

Python 網絡爬蟲 —— 提交信息到網頁

一、模塊核心邏輯“提交信息到網頁” 是網絡交互關鍵環節&#xff0c;借助 requests 庫的 post() 函數&#xff0c;能模擬瀏覽器向網頁發數據&#xff08;如表單、文件 &#xff09;&#xff0c;實現信息上傳&#xff0c;讓我們能與網頁背后的服務器 “溝通”&#xff0c;像改密…

SpringMVC4

一、SpringMVC 注解與項目開發流程1.1注解的生命周期- Target、Retention 等元注解&#xff1a;- Target(ElementType.TYPE) &#xff1a;說明這個注解只能用在類、接口上。- Retention(RetentionPolicy.RUNTIME) &#xff1a;說明注解在運行時保留&#xff0c;能通過反射獲取…

數據結構排序算法總結(C語言實現)

以下是常見排序算法的總結及C語言實現&#xff0c;包含時間復雜度、空間復雜度和穩定性分析&#xff1a;1. 冒泡排序 (Bubble Sort)思想&#xff1a;重復比較相鄰元素&#xff0c;將較大元素向后移動。 時間復雜度&#xff1a;O(n)&#xff08;最好O(n)&#xff0c;最壞O(n)) 空…

嵌入式學習-PyTorch(2)-day19

很久沒有學了&#xff0c;期間打點滴打了一個多星期&#xff0c;太累了&#xff0c;再加上學了一下Python語法基礎&#xff0c;再終于開始重新學習pytorchtensorboard 的使用import torch from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs…

Prompt Engineering 快速入門+實戰案例

資料來源&#xff1a;火山引擎-開發者社區 引言 什么是 prompt A prompt is an input to a Generative AI model, that is used to guide its output. Prompt engineering is the process of writing effective instructions for a model, such that it consistently generat…