保護從 Azure App 服務 到 Azure 服務和資料庫的連線

你的應用程式服務可能需要連接其他 Azure 服務,例如資料庫、儲存空間或其他應用程式。 此概觀建議不同的連線方法,以及使用連線的時間。

目前,連線方法的決策與祕密管理密切相關。 在連接字串中使用連線祕密 (例如使用者名稱和密碼、祕密金鑰等) 的常見模式不再視為最安全的連線方法。 風險在現今更高,因為威脅行為者經常爬取公開的 GitHub 倉庫,尋找意外提交的連線秘密。 對於雲端應用程式而言,最好的祕密管理是根本不使用祕密。 當你遷移到 Azure App 服務 時,你的應用程式可能一開始就有基於秘密的連線,而 App Service 則讓你能安全地保留機密。 不過,Azure 可以透過 Microsoft Entra 認證,協助保護應用程式的後端連線,完全消除應用程式中的秘密。

連線方式 使用時機
使用應用程式身分識別進行連線 * 您希望從應用程式完全移除認證、金鑰或祕密。
* 下游的 Azure 服務支援 Microsoft Entra 認證,例如 Microsoft Graph。
* 下游資源不需要知道目前的登入使用者,也不需要進行目前登入使用者的細微授權。
代表登入的使用者進行連線 * 應用程式必須代表登入的使用者存取下游資源。
* 下游的 Azure 服務支援 Microsoft Entra 認證,例如 Microsoft Graph。
* 下游資源必須執行目前登入使用者的細微授權。
使用認證密鑰連線 * 下游資源需要連接憑證。
* 您的應用程式連接非 Azure 服務,例如本地資料庫伺服器。
* 下游的 Azure 服務尚未支援 Microsoft Entra 認證。

使用應用程式身分識別進行連線

如果你的應用程式已經使用單一憑證來存取下游的 Azure 服務,你可以快速將連線轉換成使用 App 身份。 Microsoft Entra ID 的 managed identity 讓 App Service 可以無需秘密來存取資源,且您可以透過角色基礎存取控制(RBAC)來管理該存取權限。 受管理身份可以連接到任何支援 Microsoft Entra 認證的 Azure 資源,且驗證過程通常使用短暫的憑證。

以下圖片展示了一個應用程式服務與其他 Azure 服務的連接:

  • 答:使用者造訪 Azure 應用程式服務網站。
  • B:使用受管理的身分識別安全地從應用程式服務連接至另一個 Azure 服務。
  • C:使用受管理的身份,安全地從 App Service 連接到 Microsoft Graph。

圖表:顯示受控識別在使用或不使用使用者身分識別的情況下存取資源。

使用應用程式秘密連線到資料庫的範例:

代表登入的使用者進行連線

您的應用程式可能需要代表登入的使用者連線到下游服務。 App Service 讓你能輕鬆使用最常見的身份提供者來驗證使用者(參見 Azure App 服務 和 Azure Functions 中的認證與授權)。 如果你使用 Microsoft 供應商(Microsoft Entra 認證),你就可以將登入的使用者流向任何下游服務。 例如:

  • 執行資料庫查詢,以傳回登入使用者獲授權讀取的機密資料。
  • 在 Microsoft Graph 中以登入使用者身份取得個人資料或採取行動。

以下圖片展示了應用程式代表登入使用者安全存取 SQL 資料庫的過程。

教學課程案例的架構圖。

以下是一些常見的情節:

使用憑證連線

在應用程式中使用秘密有兩種建議方式:使用儲存在 Azure Key Vault 的秘密,或是 App Service 應用程式設定中的秘密。

使用來自 金鑰保存庫 的機密資料

Azure Key Vault 可用於安全儲存秘密與金鑰、監控秘密的存取與使用,並簡化應用程式秘密的管理。 如果下游服務不支援 Microsoft Entra 認證,或需要 連接字串 或金鑰,請使用 金鑰保存庫 儲存您的秘密,並以管理身份將應用程式連接到 金鑰保存庫,並取得秘密資料。 你的應用程式可以在應用程式設定中以 金鑰保存庫參考 的形式存取金鑰保存庫祕密。

與 金鑰保存庫 整合的託管身份帶來的好處包括:

  • 對金鑰保存庫祕密的存取僅限於應用程式。
  • 應用程式參與者 (例如系統管理員) 可能能夠完全控制 App Service 資源,但是同時無法存取金鑰保存庫祕密。
  • 如果您的應用程式程式碼已透過應用程式設定存取連線祕密,則不需要變更任何程式碼。
  • 金鑰保存庫 提供監控與稽核誰存取了機密資料。
  • 更換金鑰保存庫密鑰不需要在 App Service 中進行任何更動。

以下圖片展示了 App Service 使用管理身份連接到 金鑰保存庫,然後利用儲存在 金鑰保存庫 中的秘密存取 Azure 服務:

圖示中顯示應用程式服務使用儲存在 金鑰保存庫 並以受管理的身分管理的秘密來連接 Foundry Tools。

使用應用程式設定中的祕密

對於使用祕密 (例如使用者名稱、密碼和 API 金鑰) 連線到服務的應用程式,App Service 可以將這些祕密安全地儲存在應用程式設定中。 這些秘密會在應用程式啟動時插入您的應用程式程式碼做為環境變數。 應用程式設定一律會在儲存時加密 (靜態加密)。 若想管理更進階的秘密,例如秘密輪替、存取政策和稽核歷史,可以試試 using 金鑰保存庫。

使用應用程式秘密連線到資料庫的範例: