什麼是無伺服器安全?

無伺服器是指雲端運算中的一種雲端原生開發模式,它允許開發人員建立和運行應用程式和服務,而無需管理基礎架構,或伺服器端的 IT。無伺服器模式中的應用程式依賴管理雲端服務與功能即服務 (FaaS) 的組合,這些服務可抽象出管理、修補及保護基礎架構與虛擬機器的需求。

無伺服器架構的優點

O'Reilly 表示,到 2020 年, 40% 的組織表示已完全採用無伺服器架構。自此之後的幾年,serverless 已經成為主流的應用程式執行環境。 2024 年雲端原生安全狀況報告 顯示,在未來 24 個月內,70% 的調查受訪者表示計劃增加使用量,顯示 雲端原生安全 將進一步成長。

採用無伺服器模式對應用程式開發有幾種嚴重性的好處:

  • 降低營運開銷:由於沒有伺服器需要管理,開發人員和 DevOps 不需要擔心大規模擴充基礎架構、安裝和維護代理程式,或其他基礎架構相關的作業。
  • 增加敏捷性:由於無伺服器應用程式非常依賴資料庫和認證等管理服務,因此開發人員可以專注於應用程式的實際業務邏輯,這些邏輯通常會在 FaaS 上執行,例如 AWS® Lambda 或 Google Cloud Functions。
  • 降低成本:在無伺服器應用程式中使用的大多數服務,客戶只需為使用量付費。例如,透過 AWS Lambda,客戶可為其功能的執行付費。這通常會對成本產生重大影響,因為他們不必像使用虛擬機器一樣,為未使用的容量付費。
無分割模型的組成部分
圖 1:無分割模型的組成部分

 

無伺服器應用程式需要無伺服器安全性

隨著軟體開發和 IT 作業的重大進展,攻擊媒介和安全風險也隨之改變。在從虛擬化到 容器的早期,安全性專業人員必須適應並尋找加固、防禦和管理基礎結構的新方法。在應用程式安全性方面,無伺服器應用程式的概念是有史以來最大的範式轉變之一。

傳統上,組織會依賴基礎架構和網路型工具來保護應用程式。他們會使用防火牆檢查流量,嘗試使用入侵偵測系統偵測惡意活動,或使用執行階段應用程式自我防護 (RASP) 技術保護應用程式。即使使用容器,組織仍可在一定程度上依賴底層基礎架構的安全性。

無伺服器應用程式由分散式雲端服務共同組成,例如觸發 Lambda Function 的 S3 bucket,再由 Lambda Function 觸發 DynamoDB®。在此架構中,沒有防火牆、IDS/IPS 工具或任何儀器代理或伺服器式防護方法的餘地。無伺服器模式不再專注於網路檢測和存取控制清單,而是將安全性的重點轉移到 IAM 權限、行為保護和 強化程式碼

在無斷線模型中的應用
圖 2:在無斷線模型中的應用

 

無伺服器攻擊向量

採用無伺服器安全性可讓應用程式從安全性的角度獲得強大的先機,因為組織不再需要擔心基礎架構、網路或主機安全性。然而,新的攻擊媒介已經出現,而熟悉的攻擊也針對無伺服器環境重新想像。讓我們來看看其中一個範例 (完整清單請參閱雲端安全聯盟的 Top 12 Risks for Serverless Applications):

事件資料注入

應用程式中的注入瑕疵是目前最常見的風險之一,許多安全編碼最佳實務指南都已詳細說明。從高層級來看,當不信任的輸入在執行或評估之前直接傳送到解釋器時,就會發生注入缺陷。不過,在無伺服器架構的情境中,函式事件資料注入並不嚴格限制於使用者直接輸入(例如來自 Web API 呼叫的輸入)。大多數無伺服器架構都提供許多事件來源,可以觸發無伺服器函式的執行。

事件資料注入來源範例包括

  • 雲端儲存事件 (例如 AWS S3®、Azure Blob Storage、Google Cloud Storage)
  • NoSQL 資料庫事件 (例如 AWS DynamoDB、Azure Cosmos DB®)
  • SQL 資料庫事件
  • 串流處理事件 (例如 Amazon Kinesis®)
  • 程式碼變更與新程式碼儲存庫代碼提交
  • HTTP API 呼叫

每個事件輸入可能包含不同的訊息格式,而這些事件訊息的不同部分可能包含攻擊者控制的或其他危險的輸入。豐富的事件來源增加了潛在的攻擊面,並在嘗試保護無伺服器函式以防止事件資料注入時引入了複雜性。這一點尤其真確,因為無伺服器架構不如網頁環境那麼容易理解,開發人員知道哪些訊息部分不應該被信任(例如 GET/POST 參數、HTTP 標頭等)。

事件資料注入攻擊面
圖 3:事件資料注入攻擊面

 

保護無伺服器應用程式

有效的無伺服器安全性著重於確保程式碼完整性、嚴格的權限和行為分析。

  • 存取權限:為無伺服器函式和其他服務維護 最低權限存 苃。例如,如果 AWS Lambda 函式需要存取 DynamoDB 表,請確定它只能執行業務邏輯所需的特定動作。
  • 漏洞掃描:透過定期掃描脆弱的第三方相依性、組態錯誤和過度允許的角色,確保程式碼和 基礎結構即程式碼模板的完整性
  • 執行階段防護:使用執行階段防護偵測惡意事件輸入和異常函式行為,並視需要限制每個函式存取檔案、主機、網際網路和產生子進程的能力。

 

無伺服器常見問題

無伺服器運算 (Serverless Computing),也稱為無伺服器架構 (serverless architecture),是一種軟體設計方法,可讓工程師建立並執行應用程式,而無需管理底層基礎架構。取而代之的是,雲端供應商為數位或雲端原生組織佈建伺服器,以執行應用程式、資料庫和儲存系統。
Function-as-a-Service 是一種雲端運算服務,可讓客戶因應事件執行程式碼到雲端,而無需管理複雜的...
無伺服器架構是一種 FaaS,開發人員將應用程式程式碼寫成一組獨特的函式,目的是回應 HTTP 請求或類似事件來執行特定任務。功能部署到雲端服務提供商帳戶後,雲端服務提供商會在雲端服務提供商提供的伺服器上執行功能。
雲端供應商提供的無伺服器服務範例包括 Google Cloud Functions、AWS Lambda 和 Microsoft Azure Functions。
上一頁 雲端安全性是共同的責任
下一頁 什麼是政策即程式碼?