12

有人可以帮助我了解在 AAD 中创建应用注册时创建的服务主体与在应用服务的身份刀片上启用“系统分配”时创建的托管身份之间的区别吗?

我们有一个正在开发的应用服务,我们已经为其创建了应用注册,并且我们还启用了系统分配的标识。当我们进入 AAD 下的企业应用程序并搜索我们的应用程序时,它会出现 2 个条目。一个用于托管标识,一个用于作为应用注册的一部分创建的服务主体。我们正在尝试了解我们将使用哪一个来授予应用程序写入 Azure SQL DB 的权限。

4

4 回答 4

6

托管标识本质上是使用 Microsoft 逻辑包装的服务主体,以使访问资源更简单。尽管有时添加更多层可能会使事情复杂化,但其想法是使其更容易、更简单且与消费者互动更少。

对于您的方案,您需要考虑您想要做什么。您是否希望通过受 AAD 保护的 Azure SQL DB 获得更多控制权并实现自己的逻辑,或者尝试利用 Microsoft 的托管标识来保护/访问 Azure SQL DB 资源。(理想情况下,托管身份路径应该更少工作)

可在此处找到使用托管身份从应用服务访问 azure SQL 数据库的教程: https ://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect -msi

可以在此处找到使用 Azure AD 保护 Azure SQL DB 的文档: https ://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication

此外,托管身份在此处的官方 Microsoft 文档中进行了说明: https ://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview

请务必注意,有两种托管身份。

从文档中:

系统分配的托管标识直接在 Azure 服务实例上启用。启用标识后,Azure 会在实例订阅信任的 Azure AD 租户中为实例创建一个标识。创建身份后,会将凭据配置到实例上。系统分配标识的生命周期直接与启用它的 Azure 服务实例相关联。如果实例被删除,Azure 会自动清理 Azure AD 中的凭据和标识。

用户分配的托管标识创建为独立的 Azure 资源。通过创建过程,Azure 在 Azure AD 租户中创建一个受正在使用的订阅信任的身份。创建标识后,可以将标识分配给一个或多个 Azure 服务实例。用户分配标识的生命周期与其分配到的 Azure 服务实例的生命周期分开管理。

官方文档中的图片还提供了一个使用 MSI(托管服务标识)的 VM 的很好示例。

这在下面提供: 用于虚拟机的 Microsoft 托管标识图。

除此之外,可以在此处找到 App Service Managed Identity 文档: https ://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity

于 2019-05-17T16:27:40.587 回答
3

我想进一步详细说明,因为围绕 Azure 中的服务主体和应用程序注册的主题可能会令人困惑。

正如您所注意到的,当您为 Azure 中的资源启用系统分配的托管标识时,将在您的 AAD 租户中创建服务主体。此服务主体与资源的生命周期相关联,换句话说:如果您删除应用服务,Azure 将为您删除服务主体 [2]。

除了服务主体之外,租户中还有其他对象类型:用户主体和应用程序对象。顾名思义,用户主体标识用户,而服务主体可用于标识 Azure 中的资源或应用程序对象。您可以为这两种类型的主体分配角色,正如您所提到的,您可以在数据库中创建一个新用户并使用系统分配的标识(下图中的服务主体 1)让 Azure SQL 知道您的应用服务有权访问数据库 [3]。这在图像中以红色标记。

当您创建应用注册时,会创建两个对象:租户中的应用程序对象和服务主体(这是“服务主体 2”)[4]。您现在也可以使用此服务主体为其授予访问数据库的权限(在图像中标记为橙色),但此服务主体未绑定到您的 Azure 应用服务,也不代表它。换句话说,如果您想在应用服务中使用服务主体 2,除了在数据库中为此服务主体创建用户之外,您还需要在创建新 SQL 连接时获取此服务主体的访问令牌到应用程序中的数据库。它'

在此处输入图像描述

长话短说:在您的用例中使用系统分配的托管标识

[2] https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview#managed-identity-types

[3] https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi#grant-permissions-to-managed-identity

[4] https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals

于 2021-02-27T12:26:30.397 回答
0

您只能使用您在应用服务中启用的托管标识对 AAD 进行身份验证,这最终允许您基于角色/权限访问您的 Azure SQL 实例。我尝试使用作为应用程序注册过程的一部分创建的服务主体/企业应用程序进行身份验证,但它不起作用。我看到它的方式是应用服务是运行/托管您的应用程序的东西,并且只有此托管标识/SP 可用于您正在运行的应用程序以对 AAD 进行身份验证。服务主体/企业应用程序在内部用于其他目的,我们的应用程序无法使用它来向 AAD 进行身份验证。

于 2020-05-21T07:21:08.343 回答
0

只是一个小便条。应用注册可能在没有服务主体的情况下存在。应用注册可能代表一个被消费的应用,不一定是消费者。

于 2021-03-08T17:54:31.300 回答