共用方式為


保護 Azure Functions

在許多方面,對無伺服器函式進行安全開發、部署和作業的規劃,與任何 Web 架構或雲端裝載的應用程式非常相似。 Azure App Service 提供適用於函式應用程式的裝載基礎結構。 此文章可為您提供執行函式程式碼的安全性策略,以及 App Service 如何協助保護您的函式。

Azure App Service 會主動保護及強化其平台元件,包括 Azure 虛擬機(VM)、記憶體、網路連線、Web 架構,以及管理和整合功能。 App Service 會持續進行嚴格的合規性檢查,以確保:

如需 Azure 中基礎結構和平臺安全性的詳細資訊,請參閱 Azure 信任中心

如需遵循 Microsoft 雲端安全性基準測試的一組安全性建議,請參閱適用於 Azure Functions 的 Azure 安全性基準

安全作業

此節將引導您以盡可能安全的方式來設定和執行函式應用程式。

適用於雲端的 Defender

適用於雲端的 Defender 會在入口網站中與您的函數應用程式整合。 其免費提供可能與設定相關之安全性弱點的快速評量。 在專用方案中執行的函數應用程式也可以使用適用於雲端的 Defender 增強型安全性功能,但需支付額外費用。 如需詳細資訊,請參閱 App Service 防護程式

記錄和監視

偵測攻擊的方法之一是透過活動監視和記錄分析。 Functions 會與 Application Insights 整合,以收集函數應用程式的記錄、效能和錯誤資料。 Application Insights 會自動偵測效能異常,並隨附強大的分析工具,以協助您診斷問題及了解如何使用您的函式。 如需詳細資訊,請參閱監視 Azure Functions

Functions 也會與 Azure 監視器記錄整合,讓您能夠將函式應用程式記錄與系統事件合併,以便分析。 您可以使用診斷設定,將函式平台記錄和計量的資料流匯出設定到您選擇的目的地,例如 Logs Analytics 工作區。 如需詳細資訊,請參閱使用 Azure 監視器記錄監視 Azure Functions

針對企業層級的威脅偵測和回應自動化,將您的記錄和事件串流處理到 Logs Analytics 工作區。 接著,您可以將 Microsoft Sentinel 連線到此工作區。 如需詳細資訊,請參閱 什麼是Microsoft Sentinel

如需更多對於可檢視性的安全性建議,請參閱適用於 Azure Functions 的 Azure 安全性基準

保護 HTTP 端點

公開暴露的 HTTP 端點為惡意行為者提供了攻擊媒介。 保護 HTTP 端點時,您應該使用分層式安全性方法。 這些技術可用於減少公開暴露的 HTTP 端點的弱點,依照從最基本到最安全且限制性的順序排列:

需要 HTTPS

根據預設,用戶端可以使用 HTTP 或 HTTPS 來連線到函式端點。 您應該將 HTTP 重新導向至 HTTPS,因為 HTTPS 會使用 TLS 通訊協定來提供安全連線,這兩者都是加密和驗證的。 若要了解做法,請參閱強制使用 HTTPS

當您需要 HTTPS 時,應該也需要最新的 TLS 版本。 若要了解做法,請參閱強制使用 TLS 版本

如需詳細資訊,請參閱保護連線 (TLS)

函式存取金鑰

函式可讓您使用金鑰來增加存取您的函式端點的難度。 除非 HTTP 觸發程序函數的 HTTP 存取層級設定為 anonymous,否則要求必須在要求中包含存取金鑰。 如需詳細資訊,請參閱在 Azure Functions 中使用存取金鑰

雖然存取金鑰可以針對不必要的存取提供一些緩和措施,但真正保護函式端點的唯一方式,就是對存取您函式的用戶端實作正面驗證。 接著,您可以根據身分識別進行授權決策。

為了獲得最高層級的安全性,您也可以使用私人端點或透過隔離執行來保護虛擬網路內的整個應用程式架構。 。

停用系統管理端點

函式應用程式可以在 /admin 路由下提供系統管理端點,其可用於取得主機狀態資訊和執行測試叫用等作業。 公開時,對這些端點的要求必須包含應用程式的主要金鑰。 系統管理作業也可透過 Azure Resource Manager Microsoft.Web/sites API 取得,其提供 Azure RBAC。 您可以將 /admin 站台屬性設定為 functionsRuntimeAdminIsolationEnabled,以停用 true 端點。 無法在Linux取用SKU上執行的應用程式設定此屬性,而且無法針對在 Azure Functions 1.x 版上執行的應用程式設定此屬性。 如果您使用 1.x 版,您必須先 移轉至 4.x 版

啟用 App Service 驗證/授權

App Service 平臺可讓您使用 Microsoft Entra ID 和數個非Microsoft識別提供者來驗證用戶端。 您可以使用此策略為函式實作自訂授權規則,並可使用來自函式程式碼的使用者資訊。 如需詳細資訊,請參閱 Azure App Service 中的驗證和授權 和使用 用戶端身分識別

使用「Azure API 管理」(APIM) 來驗證要求

APIM 為傳入要求提供了各種 API 安全性選項。 如需詳細資訊,請參閱 API 管理驗證原則。 備妥 APIM 之後,您可以設定讓函數應用程式只接受來自您 APIM 執行個體 IP 位址的要求。 如需詳細資訊,請參閱 IP位址限制

權限

如同任何應用程式或服務,目標是以最低的可能權限來執行您的函式應用程式。

使用者管理權限

Functions 支援內建的 Azure 角色型存取控制 (Azure RBAC)。 Functions 所支援的 Azure 角色是參與者擁有者讀者

權限會在函式應用層級生效。 您必須具備參與者角色,才能執行大部分函式應用程式層級的工作。 您也需要參與者角色和監視讀取者權限,才能在 Application Insights 中檢視記錄資料。 只有擁有者角色可以刪除函式應用程式。

依權限組織函式

儲存在應用程式設定中的連接字串和其他認證,會為函式應用程式中的所有函式提供與相關聯資源中相同的權限集。 請考慮藉由將未使用那些認證的函式移至個別函式應用程式,來將可存取特定認證的函式數目降至最低。 您一律可以使用函式鏈結之類的技術,在不同函式應用程式的函式之間傳遞資料。

受控身分識別

來自 Microsoft Entra ID 的受控識別可讓您的應用程式輕鬆地存取其他 Microsoft受 Entra 保護的資源,例如 Azure Key Vault。 Azure 平臺會管理身分識別,因此您不需要布建或輪替任何秘密。 如需有關 Microsoft Entra ID 中受控識別的詳細資訊,請參閱 Azure 資源的受控識別

您可以將兩種類型的身分識別授與您的應用程式:

  • 系統指派的身分識別會繫結至應用程式,並在刪除該應用程式時一併刪除。 應用程式只能有一個系統指派的身分識別。
  • 使用者指派的身分識別是一項獨立 Azure 資源,可指派給您的應用程式。 應用程式可以有多個使用者指派的身分識別。 一個使用者指派的身分識別可以指派給多個 Azure 資源,例如兩個 App Service 應用程式。

受控識別可以用來取代來自某些觸發程序和繫結的連線秘密。 請參閱身分識別型連線

如需詳細資訊,請參閱 為 App Service 和 Azure Functions 使用受控身分識別

限制 CORS 存取

跨原始來源資源共用 (CORS) \(英文\) 是一種方式,讓在另一個網域中執行的 Web 應用程式能夠對您的 HTTP 觸發程序端點提出要求。 App Service 提供內建支援,可在 HTTP 要求中處理所需的 CORS 標題。 CORS 規則定義於函式應用程式層級上。

使用允許所有網站存取端點的通配符很誘人。 這種方法會失敗 CORS 的目的,這是為了協助防止跨網站腳本攻擊。 請改為針對必須存取您端點之每個 Web 應用程式的網域,新增個別的 CORS 項目。

管理密碼

若要能夠連線到執行程式碼所需的各種服務和資源,函式應用程式需要能夠存取祕密 (例如連接字串和服務金鑰)。 此節說明如何儲存函式所需的祕密。

絕對不要將祕密儲存於函式程式碼中。

應用程式設定

根據預設,您會將函式應用程式和繫結所使用的連接字串及祕密儲存為應用程式設定。 此方法可讓您的函式程式代碼和函式所使用的各種系結使用這些認證。 應用程式設定 (金鑰) 名稱可用來擷取實際值,也就是祕密。

例如,每個函式應用程式都需要一個相關聯且由執行階段使用的儲存體帳戶。 根據預設,此儲存體帳戶的連線會儲存在名為 AzureWebJobsStorage 的應用程式設定中。

應用程式設定和連接字串會以加密方式儲存在 Azure 中。 只有在應用程式啟動時,才會將其解密,然後插入至應用程式的處理序記憶體。 加密金鑰會定期輪替。 如果您希望管理祕密的安全儲存體,則應用程式設定應改為參考 Azure Key Vault 祕密。

在本機電腦上開發函式時,您也可以按預設在 local.settings.json 檔案中對設定進行加密。 如需詳細資訊,請參閱加密本機設定檔

Key Vault 參考

雖然應用程式設定對大部分的功能都足夠,但您可能需要在多個服務間共用相同的機密資訊。 在此情況下,重複儲存祕密會導致更多潛在的弱點。 一種更安全的方法是使用集中式祕密儲存服務,並使用對此服務的參考,而不是祕密本身。

Azure Key Vault 是提供集中式祕密管理的服務,可完整控制存取原則和稽核歷程記錄。 您可以在應用程式設定中,使用 Key Vault 參考來取代連接字串或金鑰。 如需詳細資訊,請參閱應用服務和 Azure 功能的 Key Vault 參考資料

身分識別型連線

身分識別可能會用來取代秘密來連線到某些資源。 方法的優點是不需要管理秘密,而且可提供更精細的訪問控制和稽核。

當您撰寫程式代碼來建立 支援Microsoft Entra 驗證的 Azure 服務連線時,您可以使用身分識別,而不是秘密或連接字串。 每個服務的文件涵蓋了這兩種連線方法的詳細資料。

某些 Azure Functions 繫結延伸模組可以設定為使用身分識別型連線來存取服務。 如需詳細資訊,請參閱設定身分識別型連線

設定使用量配額

考慮為使用量方案中執行的函式設定使用量配額。 當您對函式應用程式中的函式執行總次數設定每日 GB-sec 限制時,達到該限制時執行就會停止。 這種方法可能有助於防止惡意碼在您的函式中運行。 若要了解如何估計函式的取用量,請參閱估計取用量方案成本

資料驗證

函式所使用的觸發程序和繫結不會提供任何額外的資料驗證。 您的程式碼必須驗證接收自觸發程序或輸入繫結的所有資料。 如果上游服務遭到入侵,您不希望未經驗證的輸入流經您的函式。 例如,如果您的函式將來自 Azure 儲存體佇列的資料儲存於關聯式資料庫中,您就必須驗證該資料並將命令參數化,以避免受到 SQL 插入式攻擊。

請勿假設傳入您函式的資料已經過驗證或處理。 確認寫入至輸出繫結的資料有效,也是個不錯的主意。

處理錯誤

儘管這看似基本,但在您的函式中撰寫良好的錯誤處理很重要。 未處理的錯誤會冒升至主機,由執行環境來處理這些錯誤。 不同的繫結會以不同方式進行錯誤的處理。 如需詳細資訊,請參閱 Azure Functions 錯誤處理

停用遠端偵錯

除非您正主動對函式進行偵錯,否則,需確定已停用遠端偵錯。 您可以在入口網站內函式應用程式 [設定] 的 [一般設定] 索引標籤中停用遠端偵錯。

限制 CORS 存取

Azure Functions 支援跨原始資源共用 (CORS)。 您可在入口網站中,以及透過 Azure CLI 來設定 CORS。 CORS 允許的原始來源清單適用於函數應用程式層級。 在啟用 CORS 的情況下,回應會包含 Access-Control-Allow-Origin 標頭。 如需詳細資訊,請參閱 跨原始來源資源分享(英文)。

請勿在允許的來源清單中使用萬用字元, 而是改為列出您希望從中取得要求的特定網域。

儲存加密的資料

Azure 儲存體會加密待用儲存體帳戶中的所有資料。 如需詳細資訊,請參閱待用資料的 Azure 儲存體加密

根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以提供客戶管理的金鑰,以用於 Blob 和檔案資料的加密。 這些金鑰必須存在於 Azure Key Vault 中,Functions 才能存取儲存體帳戶。 若要深入瞭解,請參閱 使用客戶管理的密鑰加密待用應用程式數據

函式應用程式經常相依於其他資源,因此保護應用程式的一部分會保護這些外部資源。 大部分函數應用程式至少包含對 Application Insights 和 Azure 儲存體的相依性。 如需保護這些資源的指引,請參閱適用於 Azure 監視器的 Azure 安全性基準適用於儲存體的 Azure 安全性基準

重要事項

儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。

您還應該針對應用程式邏輯相依的任何資源類型,參閱相關指引,無論是觸發程序和繫結,還是函式程式碼。

安全部署

Azure Functions 工具整合,可讓您輕鬆地將區域函式專案程式碼發佈至 Azure。 在考慮 Azure Functions 拓撲的安全性時,請務必了解部署的運作方式。

部署認證

App Service 部署需要一組部署認證。 這些部署認證可用來保護您的函式應用程式部署。 App Service 平臺會管理部署認證。 憑證在靜態時會被加密。

有兩種部署認證:

  • 用戶範圍 或用戶層級認證會為用戶的整個 Azure 帳戶提供一組部署認證。 透過角色型訪問控制 (RBAC) 或共同管理者許可權授與應用程式存取權的使用者,只要擁有這些許可權,就可以使用其用戶層級認證。

    您可以使用使用者範圍認證,透過 Azure 帳戶有權限存取的任何訂用帳戶中的本機 Git 或 FTP/S,將任何應用程式部署到 App Service。 您不會與任何其他 Azure 使用者共用這些認證。 您可以隨時重設使用者範圍認證。

  • 應用程式範圍 或應用層級認證是每個應用程式一組認證,只能用來部署該應用程式。 這些認證會在建立時針對每個應用程式自動產生,且無法手動設定,但可以隨時重設密碼。

    用戶必須至少有應用程式 參與者層級許可權 ,包括內建 的網站參與者 角色,才能透過 RBAC 授與應用層級認證的存取權。 讀者 角色無法發佈且無法存取這些認證。

目前,部署認證不支援 Key Vault。 若要深入了解管理部署認證,請參閱設定 Azure App Service 的部署認證

停用 FTP

根據預設,每個函式應用程式均已啟用 FTP 端點。 您可以使用部署認證來存取 FTP 端點。

不建議使用 FTP 來部署函式程式碼。 FTP 部署是手動的,而且需要您同步處理觸發程序。 如需詳細資訊,請參閱 FTP 部署

當您不打算使用 FTP 時,應該在入口網站中加以停用。 如果您選擇使用 FTP,則應該強制使用 FTPS

保護 scm 端點

每個函式應用程式都有一個由進階工具 (Kudu) 服務所使用的對應 scm 服務端點,可供部署和其他 App Service 網站延伸模組使用。 函式應用程式的 scm 端點一律是格式為 https://<FUNCTION_APP_NAME>.scm.azurewebsites.net 的 URL。 當您使用網路隔離來保護函式時,也必須考慮此端點。

藉由擁有個別的 scm 端點,您可以控制在虛擬網路中隔離或執行之函式應用程式的部署和其他進階工具功能。 scm 端點支援基本驗證 (使用部署認證),以及透過您 Azure 入口網站認證進行的單一登入。 如需詳細資訊,請參閱存取 Kudu 服務

持續安全性驗證

由於在開發程序中的每個步驟都必須考慮安全性,因此,也可以在持續部署環境中實作安全性驗證。 這種方法有時稱為 DevSecOps。 針對您的部署管線使用 Azure DevOps,可讓您在部署程序中整合驗證。 如需詳細資訊,請參閱 保護您的 Azure Pipelines

網路安全性

限制對函式應用程式的網路存取,可讓您控制可存取函式端點的人員。 函式會使用 App Service 基礎結構,讓您的函式不需要使用因特網路由位址或限制對函式端點的因特網存取,即可存取資源。 若要深入了解這些網路功能選項,請參閱 Azure Functions 網路功能選項

設定存取限制

存取限制可讓您定義允許/拒絕規則的清單,以控制對應用程式的流量。 規則會依照優先順序進行評估。 如果未定義任何規則,您的應用程式會接受來自任何位址的流量。 如需詳細資訊,請參閱 Azure App 服務 存取限制

保護儲存體帳戶

建立函式應用程式時,您必須建立或連結至支援 Blob、佇列及資料表儲存體的一般用途 Azure 儲存體帳戶。 您可以將此儲存體帳戶取代為受虛擬網路保護且由服務端點或私人端點啟用存取權的儲存體帳戶。 如需詳細資訊,請參閱將儲存體帳戶限定於虛擬網路

將函式應用程式部署至虛擬網路

Azure 私人端點 (部分機器翻譯) 是一種網路介面,可讓您以私人且安全的方式連線至由 Azure Private Link 提供的服務。 私人端點會使用您虛擬網路中的私人 IP 位址,有效地將服務帶入到您的虛擬網路。

您可以將私人端點用於託管到彈性使用量 (部分機器翻譯)、彈性進階 (部分機器翻譯) 和專用 (App Service) (部分機器翻譯) 方案的函式。

如果您想要對私人端點進行呼叫,必須確定您的 DNS 查閱會解析為私人端點。 您可以透過下列其中一種方法強制執行此行為:

  • 與 Azure DNS 私人區域整合。 當您的虛擬網路沒有自訂 DNS 伺服器時,這會自動完成。
  • 管理應用程式所使用 DNS 伺服器中的私人端點。 若要管理私人端點,您必須知道端點位址,並使用 A 記錄來參考您嘗試連線到的端點。
  • 將您自己的 DNS 伺服器設定為轉送至 Azure DNS 私人區域

若要深入了解,請參閱將私人端點用於 Web 應用程式

以隔離方式部署函式應用程式

Azure App Service 環境提供一個可供執行您函式的專用主控環境。 這些環境可讓您設定一個單一前端閘道,可用來驗證所有傳入要求。 如需詳細資訊,請參閱 整合 ILB App Service 環境與 Azure 應用程式閘道

使用閘道服務

閘道服務 (例如 Azure 應用程式閘道Azure Front Door) 可讓您設定 Web 應用程式防火牆 (WAF)。 WAF 規則可用來監視或封鎖偵測到的攻擊,為您的函式提供額外保護層。 若要設定 WAF,您的函式應用程式必須在 ASE 中或使用私人端點 (預覽) 來執行。 如需詳細資訊,請參閱 使用私人端點

後續步驟