从 Azure应用服务安全地连接到 Azure 服务和数据库
你的应用服务可能需要连接到其他 Azure 服务,例如数据库、存储或其他应用。 本概述推荐了不同的连接方法及其使用时机。
目前,有关连接方法的决策与机密管理密切相关。 在连接字符串中使用连接机密(例如用户名和密码、机密密钥等)的常用模式不再被视为最安全的连接方法。 目前的风险甚至更高,因为威胁行动者会定期以爬网方式在公共 GitHub 存储库中窃取意外提交的连接机密。 对于云应用程序而言,最好的机密管理方式就是根本不提供机密。 迁移到 Azure 应用服务时,应用可能会从基于机密的连接开始,而应用服务可让你安全地保守机密。 但是,Azure 可以通过 Microsoft Entra 身份验证来帮助保护应用的后端连接,从而完全消除了应用中的机密。
连接方法 | 使用时机 |
---|---|
使用应用标识进行连接 | * 你希望从应用程序中完全删除凭据、密钥或机密。 * 下游 Azure 服务支持 Microsoft Entra 身份验证,例如 Microsoft Graph。 * 下游资源不需要知道当前已登录的用户,也不需要对当前已登录的用户进行精细授权。 |
代表已登录的用户进行连接 | * 应用必须代表已登录的用户访问下游资源。 * 下游 Azure 服务支持 Microsoft Entra 身份验证,例如 Microsoft Graph。 * 下游资源必须对当前已登录的用户执行精细授权。 |
使用机密进行连接 | * 下游资源需要连接机密。 * 应用连接到非 Azure 服务,例如本地数据库服务器。 * 下游 Azure 服务尚不支持 Microsoft Entra 身份验证。 |
使用应用标识进行连接
如果应用已使用单一的一组凭据来访问下游 Azure 服务,则你可以快速将连接转换为使用应用标识。 Microsoft Entra ID 提供的托管标识允许应用服务不使用机密来访问资源,并且你可以通过基于角色的访问控制 (RBAC) 来管理其访问权限。 托管标识可以连接到任何支持 Microsoft Entra 身份验证的 Azure 资源,并且身份验证将通过短期令牌进行。
下图说明了以下应用服务连接到其他 Azure 服务:
- A:用户访问 Azure 应用服务网站。
- B:使用托管标识从应用服务安全地连接到另一个 Azure 服务。
- C:使用托管标识从应用服务安全地连接到 Azure Graph。
使用应用程序机密连接到数据库的示例:
代表已登录的用户进行连接
应用可能需要代表已登录的用户连接到下游服务。 应用服务允许你使用最常见的标识提供者轻松验证用户身份(请参阅 Azure 应用服务和 Azure Functions 中的身份验证和授权)。 如果使用 Microsoft 提供者(Microsoft Entra 身份验证),则你可以将已登录的用户定向到任何下游服务。 例如:
- 运行数据库查询,用于返回已登录用户有权读取的机密数据。
- 以已登录用户的身份在 Azure Graph 中检索个人数据或执行操作。
下图演示一个应用程序代表已登录用户安全地访问 SQL 数据库。
一些常见的情况有:
使用机密进行连接
建议通过两种方式在应用中使用机密:使用 Azure 密钥保管库中存储的机密或应用服务应用设置中的机密。
使用 Key Vault 中的机密
Azure Key Vault 可用于安全地存储机密和密钥、监视机密的访问和使用以及简化应用程序机密的管理。 如果下游服务不支持 Microsoft Entra 身份验证或需要连接字符串或密钥,请使用密钥保管库来存储机密,并使用托管标识将应用连接到密钥保管库并检索机密。 应用可以访问密钥保管库机密,因为密钥保管库引用应用设置中的 。
与 Key Vault 集成的托管标识的优势包括:
- 仅限应用访问密钥保管库机密。
- 应用参与者(例如管理员)可以完全控制应用服务资源,但同时无权访问密钥保管库机密。
- 如果你的应用程序代码可以通过应用设置访问连接机密,则无需进行任何更改。
- Key Vault 提供监视和审核谁访问了机密的功能。
- 轮换密钥保管库机密不需要在应用服务中进行任何更改。
下图演示了应用服务使用托管标识连接到密钥保管库,然后使用密钥保管库中存储的机密访问 Azure 服务:
使用应用设置中的机密
对于使用机密(例如用户名、密码和 API 密钥)连接到服务的应用,应用服务可将这些机密安全地存储在应用设置中。 这些机密会在应用启动时作为环境变量注入到应用程序代码中。 应用程序设置在存储时始终进行加密(静态加密)。 要进行更高级的机密管理,例如机密轮换、访问策略和审核历史记录,请尝试使用密钥保管库。
使用应用程序机密连接到数据库的示例:
- 教程:将 ASP.NET Core 和 Azure SQL 数据库应用部署到 Azure 应用服务
- 教程:使用 Azure SQL 数据库将 ASP.NET 应用部署到 Azure
- 教程:将 PHP、MySQL 和 Redis 应用部署到 Azure 应用服务
- 将 Node.js + MongoDB Web 应用部署到 Azure
- 在 Azure 中部署使用 PostgreSQL 的 Python(Django 或 Flask)Web 应用
- 教程:使用 Linux 上的 Azure 应用服务和 Azure Cosmos DB 生成 Java Spring Boot Web 应用
后续步骤
了解如何:
- 将机密安全地存储在 Azure Key Vault 中。
- 使用托管标识访问资源。
- 使用应用服务应用设置存储机密。
- 以用户身份连接到 Microsoft Graph。
- 以用户身份连接到 SQL 数据库。