與使用者通訊時,Function Compute使用TLS 1.2及以上協議加密傳輸調用請求及回包,內部通訊使用私人協議防止資訊泄露及篡改。本頁面分模組闡述資料面安全性保障。
接入服務安全性保障
在資料面內部流程中,接入服務主要負責函數的調用。
作為函數調用的入口,接入服務通過使用Server Load Balancer實現負載平衡及網路安全防護。更多資訊,請參見Server Load Balancer。
函數預設只允許公網訪問,使用者可配置只允許從特定的VPC訪問函數,兩者之間互斥。
從調用模式角度區分,函數調用可分為同步調用、非同步呼叫和非同步任務:
同步調用
一來一回(request-response)調用模式,不會緩衝調用請求資訊,不會對函數執行錯誤重試。
非同步呼叫
在接受到調用請求後,會緩衝至Simple Message Queue (formerly MNS),緩衝成功後立即返迴響應。隨後Function Compute非同步從Simple Message Queue (formerly MNS)中擷取請求執行,Function Compute保證請求至少執行一次。
不同使用者使用的Simple Message Queue (formerly MNS)隊列至少使用帳號層級隔離,對於調用量大的函數,可以使用函數層級隔離。
調用失敗時,對於函數執行錯誤,Function Compute會預設重試3次,對於其它錯誤,如限流和系統錯誤等,會採用二進位退避方式重試,使用者可配置重試次數及最大訊息存活時間。
非同步呼叫執行完成時,Function Compute支援配置結果回調,使用者可以使用結果回調儲存呼叫事件及校正調用結果等。
非同步任務
對比非同步呼叫,非同步任務提供更豐富的任務控制及可觀測能力,使用者可以選擇終止執行非同步任務。具體資訊,請參見非同步任務。
調度服務安全性保障
在資料面內部流程中,調度服務主要負責計算節點、函數執行個體的生命週期管理及調用路由。
計算節點
Function Compute混合使用ECS神龍裸金屬伺服器及ECS虛擬機器兩種機型,可實現使用者級動態遷移。
調度服務為每使用者預設提供折算總共50~600 CPU邏輯核和100~1200 GB記憶體的計算節點,通過池化提供一半核和記憶體突發能力,資源集區耗盡時,調度服務以不超過360核/分鐘的速度為使用者擴容,擴容速度超限時會產生限流錯誤。詳情請參見單帳號各地區計算節點限制。
計算節點最大存活時間長度不超過120小時,當調度服務檢測到計算節點異常時,會提前重建計算節點。
函數執行個體
函數執行個體分為按量執行個體及預留執行個體兩種類型,按量執行個體由函數調用觸發動態生產,閑置5分鐘時自動釋放,預留執行個體由使用者配置初始值及自動擴縮容策略觸發生產,閑置時不會釋放。
調度服務為每使用者預設提供300函數執行個體突發能力,超過此限制時,以不超過300執行個體/分鐘的速度為使用者擴容,擴容速度超限時會產生限流錯誤,使用者可通過加入DingTalk使用者群(DingTalk群號64970014484)申請擴充函數執行個體突發上限。
函數執行個體最大存活時間長度為不超過36小時,當函數代碼或配置發生變化、函數逾時、記憶體超限或用戶端主動終止錯誤時,調度服務會重建容器執行個體,另外可能由於均衡負載等原因,提前重建函數執行個體。
調用路由
調用服務使用bin-pack演算法實現調用路由,同一個函數執行個體可能被多次函數調用複用,來自同一用戶端的調用請求,可能被分發至不同的函數執行個體執行,使用者不可假設函數執行個體資源,比如全域變數及檔案寫入或者在不同調用間共用或不共用等。
調度服務會根據使用者函數逾時配置限制每次函數調用請求佔用函數執行個體的時間,逾時後會主動回收函數執行個體。
計算節點安全性保障
計算節點負責執行使用者函數代碼,Function Compute使用神龍裸金屬及ECS虛擬機器兩種類型的計算節點,如下圖所示。本節由外向內分別闡述各層的安全措施。
計算節點層提供阿里雲標準的安全防護能力
計算節點提供以下阿里雲標準的安全防護能力。具體資訊,請參見阿里雲安全白皮書。
多可用容災:一個地區的計算節點分佈於多個可用性區域,具備可用性區域容災能力。
隔離的VPC環境:計算節點位於隔離的VPC環境內,使用者不可以直接存取計算節點。
漏洞修複或安全升級:Function Compute負責計算節點的漏洞修複及安全升級,且升級過程對使用者透明。
函數執行個體提供使用者或函數層級的隔離能力
虛擬化層級安全隔離
神龍裸金屬計算節點可運行來自不同使用者的函數執行個體,使用阿里雲安全沙箱提供函數層級虛擬化及容器隔離,ECS虛擬機器只允許運行同使用者的函數執行個體,藉助ECS隔離提供使用者層級虛擬化隔離,使用Runc等容器技術實現函數層級的容器隔離。
函數執行個體網路訪問受限,使用者決定網路外訪許可權
函數執行個體配置私人IP地址,使用者不可直接存取,且執行個體間網路不可達,網路隔離使用open vSwitch、iptables和routing tables實現。使用者可配置4種外部網路訪問模式:
僅允許函數訪問公網:函數執行個體只能訪問公網,此模式為預設模式。
僅允許函數訪問VPC:函數執行個體只能訪問配置的VPC網路,比如RDS、NAS和ECS的私人IP地址等。
允許函數既能訪問公網,也能訪問VPC:函數執行個體既能訪問公網,也能訪問配置的VPC網路。
既不允許函數訪問公網,也不允許訪問VPC:函數執行個體完全無訪問外部網路的許可權。
函數執行個體資源受限
CPU算力根據記憶體大小配置成比例分配,但函數執行個體冷啟動期間,允許臨時突破限制以加速冷啟動,最長持續20s。函數執行個體預設配置512 MB檔案系統容量及1 Gbps網路頻寬,如果使用者選擇效能執行個體,可最大提供10 GB檔案系統容量及5 Gbps網路頻寬。
函數執行個體閑時凍結
當不執行函數請求時,函數執行個體將被凍結,在下次請求執行前解凍。
函數執行個體允許登入
通過鑒權的使用者可登入名稱下函數執行個體,便於線上問題定位。
漏洞修複及安全升級
Function Compute負責函數執行個體沙箱容器的漏洞修複及安全升級,且升級過程對使用者透明。
運行時環境輔助使用者提升安全能力
提供臨時身份憑證
Function Compute為使用者配置的執行角色申請臨時身份憑證,這些憑證將通過環境變數注入運行時環境,且調用時通過輸入參數傳遞至使用者代碼,使用者可通過臨時身份憑證訪問外部阿里雲服務。
收集合函式執行異常資訊
運行時環境將為使用者收集合函式執行異常資訊及日誌,輔助使用者識別是否有異常發生。
提供生命週期回調提供擴充能力
運行時環境為使用者提供初始化(Initializer)、 凍結前(PreFreeze)和停止前(PreStop)等回調,輔助使用者按需擴充安全能力。
非持久化環境
運行時環境提供的檔案系統及記憶體,在函數執行個體釋放時隨之釋放,使用者不可使用函數執行個體的本地檔案系統及記憶體持久化資料,如果使用者需要持久化,可以配置阿里雲File Storage NAS或持久化儲存至Object Storage Service。
不可變代碼及層(Layer)
使用者對代碼目錄/code及層目錄/opt的修改,只對本執行個體生效,不會改寫同函數其它執行個體的代碼及庫。
漏洞修複及安全升級
運行時環境的漏洞修複及庫升級,如果涉及使用者相容性,會通過站內信、簡訊等方式提前知會使用者,對於自訂運行時或自訂容器鏡像,運行時的安全保障由使用者自行負責。另外對於Java、C#或Golang等編譯型語言,Function Compute提供的SDK安全性漏洞的修複需要使用者自行更新依賴並重新編譯上傳。
運行時環境版本支援時間與社區同步
由於社區對各種運行時環境版本有明確的支援時間,社區不再支援的運行時版本,Function Compute會同步給出支援截止時間,會按照禁止新增函數、禁止修改存量函數和禁止函數啟動並執行順序逐漸停止支援,Function Compute不保障停止支援的運行時版本可以一直正常的執行。