您的應用程式服務可能會需要連線到其他 Azure 服務,例如資料庫、儲存體或其他應用程式。 此概觀建議不同的連線方法,以及使用連線的時間。
目前,連線方法的決策與祕密管理密切相關。 在連接字串中使用連線祕密 (例如使用者名稱和密碼、祕密金鑰等) 的常見模式不再視為最安全的連線方法。 目前的風險甚至更高,因為威脅行為者會定期耙梳公用 GitHub 存放庫,以取得意外認可的連線祕密。 對於雲端應用程式而言,最好的祕密管理是根本不使用祕密。 移轉至 Azure App Service 時,應用程式可能會從以祕密為基礎的連線開始,而 App Service 可讓您安全地保留祕密。 不過,Azure 可透過 Microsoft Entra 驗證來協助保護您的應用程式後端連線,進而完全消除應用程式中的祕密。
| 連線方式 | 使用時機 |
|---|---|
| 使用應用程式身分識別進行連線 | * 您希望從應用程式完全移除認證、金鑰或祕密。 * 下游 Azure 服務支援 Microsoft Entra 驗證,例如 Microsoft Graph。 * 下游資源不需要知道目前的登入使用者,也不需要進行目前登入使用者的細微授權。 |
| 代表登入的使用者進行連線 | * 應用程式必須代表登入的使用者存取下游資源。 * 下游 Azure 服務支援 Microsoft Entra 驗證,例如 Microsoft Graph。 * 下游資源必須執行目前登入使用者的細微授權。 |
| 使用秘密連線 | * 下游資源需要連線祕密。 * 您的應用程式會連線到非 Azure 服務,例如內部部署資料庫伺服器。 * 下游 Azure 服務尚未支援 Microsoft Entra 驗證。 |
使用應用程式身分識別進行連線
如果您的應用程式已使用一組認證來存取下游 Azure 服務,即可快速將連線轉換成改用應用程式身分識別。 來自 Microsoft Entra ID 的受控識別可讓 App Service 在不使用祕密的情況下存取資源,而且您可以透過角色型存取控制 (RBAC) 來管理其存取權。 受控識別可以連線到任何支援 Microsoft Entra 驗證的 Azure 資源,並使用短期權杖進行驗證。
下圖示範下列連線至其他 Azure 服務的 App Service:
- A:使用者造訪 Azure 應用程式服務網站。
- B:使用受控識別安全地從 App Service 連線到另一個 Azure 服務。
- C:使用受控識別安全地從 App Service 連線到 Microsoft Graph。
使用應用程式秘密連線到資料庫的範例:
- 教學課程:使用無祕密的受控識別從 App Service 連線至 Azure 資料庫
- 教學課程:使用受控識別從 .NET App Service 連線到 SQL Database 而不使用秘密
- 教學課程:使用受控識別,在無祕密的情況下,從 JAVA Tomcat App Service 連線至 PostgreSQL 資料庫
代表登入的使用者進行連線
您的應用程式可能需要代表登入的使用者連線到下游服務。 App Service 可讓您使用最常見的識別提供者輕鬆地驗證使用者 (請參閱 Azure App Service 和 Azure Functions 中的驗證和授權)。 如果使用 Microsoft 提供者 (Microsoft Entra 驗證),您就可以將登入的使用者流動至任何下游服務。 例如:
- 執行資料庫查詢,以傳回登入使用者獲授權讀取的機密資料。
- 在 Microsoft Graph 中以登入使用者的身分擷取個人資料或採取動作。
下圖示範代表登入使用者安全地存取 SQL 資料庫的應用程式。
以下是一些常見的情節:
使用秘密連線
有兩種建議的方式可在您的應用程式中使用祕密:使用儲存在 Azure Key Vault 中的祕密,或使用 App Service 應用程式設定中的祕密。
從 Key Vault 使用祕密
Azure Key Vault 可用來安全地儲存秘密和密鑰、監視秘密的存取和使用,以及簡化應用程式秘密的管理。 如果下游服務不支援 Microsoft Entra 驗證或需要連接字串或金鑰,請使用 Key Vault 來儲存祕密,並使用受控識別將您的應用程式連線到 Key Vault 並擷取祕密。 您的應用程式可以在應用程式設定中將金鑰保存庫祕密作為 Key Vault 參考進行存取。
與金鑰保存庫整合的受控識別優點包括:
- 對金鑰保存庫祕密的存取僅限於應用程式。
- 應用程式參與者 (例如系統管理員) 可能能夠完全控制 App Service 資源,但是同時無法存取金鑰保存庫祕密。
- 如果您的應用程式程式碼已透過應用程式設定存取連線祕密,則不需要變更任何程式碼。
- Key Vault 可監視和稽核存取祕密的人員。
- 輪替金鑰保存庫祕密不需要在 App Service 中進行任何變更。
下圖示範 App Service 使用受控識別連線到 Key Vault,然後使用儲存在 Key Vault 的祕密來存取 Azure 服務:
使用應用程式設定中的祕密
對於使用祕密 (例如使用者名稱、密碼和 API 金鑰) 連線到服務的應用程式,App Service 可以將這些祕密安全地儲存在應用程式設定中。 這些秘密會在應用程式啟動時插入您的應用程式程式碼做為環境變數。 應用程式設定一律會在儲存時加密 (待用加密)。 若要進行更進階的祕密管理 (例如祕密輪替、存取原則和稽核歷程記錄),請嘗試使用 Key Vault。
使用應用程式秘密連線到資料庫的範例:
- 教學課程:將 ASP.NET Core 和 Azure SQL Database 應用程式部署至 Azure App Service 中
- 教學課程:使用 Azure SQL Database 將 ASP.NET 應用程式部署至 Azure
- 教學課程:將 PHP、MySQL 和 Redis 應用程式部署至 Azure App Service
- 將 Node.js + MongoDB Web 應用程式部署到 Azure
- 在 Azure 中使用 PostgreSQL 部署 Python (Flask) Web 應用程式
- 在 Azure 中使用 PostgreSQL 部署 Python (Django) Web 應用程式
- 在 Azure 中使用 PostgreSQL 部署 Python (FastAPI) Web 應用程式
- 教學課程:使用 Linux 上的 App Service 和 MySQL 建置 Tomcat Web 應用程式
- 教學課程:使用 Linux 上的 Azure App Service 和 Azure Cosmos DB 建置 Java Spring Boot Web 應用程式
相關內容
- 將祕密安全地儲存在 Azure Key Vault 中。
- 使用受控識別存取資源。
- 使用 App Service 應用程式設定來儲存秘密。
- 以使用者身分連線至 Microsoft Graph。
- 以使用者身分連線到 SQL 資料庫。
- 以使用者身分連線至另一個 App Service 應用程式。
- 以使用者身分連線至另一個 App Service 應用程式,然後連線至下游服務。