“系统分配的”身份与应用程序注册的“服务主体”之间的区别

时间:2019-05-17 15:14:46

标签: azure-active-directory azure-web-sites

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

创建应用注册时,会创建两个对象:应用程序对象和租户中的服务主体(这是“服务主体 2”)[4]。您现在也可以使用此服务主体为其授予访问数据库的权限(在图像中标记为橙色),但此服务主体未绑定到您的 Azure 应用服务,也不代表它。换句话说,如果你想在你的应用服务中使用服务主体 2,除了在你的数据库中为这个服务主体创建一个用户之外,你还需要在创建新的 SQL 连接时获得这个服务主体的访问令牌到您的应用程序中的数据库。这是可能的,但有点不方便,使用系统分配的身份的好处在于您的应用服务已经知道它的服务主体,您不必自己管理它(例如,当您的应用服务被删除时删除它).

enter image description here

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

[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

答案 1 :(得分:0)

受管身份本质上是用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数据库的文档可以在这里找到: 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 Managed Identity Diagram for Virtual Machines.

除此之外,还可以在以下位置找到App Service托管身份文档: https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity

答案 2 :(得分:0)

您只能使用已在App Service中启用的托管身份对AAD进行身份验证,这最终使您可以根据角色/权限访问Azure SQL实例。我尝试使用在App Registration流程中创建的服务主体/企业应用程序进行身份验证,但该方法不起作用。 我看到的方式是,应用服务是运行/托管您的应用程序的内容,并且只有此托管标识/ SP可用于正在运行的应用程序以进行AAD身份验证。 服务主体/企业应用程序正在内部用于其他目的,我们的应用程序无法使用它来进行AAD身份验证。

答案 3 :(得分:0)

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