Azure active directory 区别于;“系统分配”;身份和应用程序注册“;服务负责人“;

Azure active directory 区别于;“系统分配”;身份和应用程序注册“;服务负责人“;,azure-active-directory,azure-web-app-service,Azure Active Directory,Azure Web App Service,有人能帮我理解在AAD中创建应用注册时创建的服务主体与在应用服务的标识刀片上启用“系统分配”时创建的托管标识之间的区别吗 我们有一个我们正在开发的应用程序服务,我们已经为其创建了应用程序注册,我们还启用了系统分配的标识。当我们进入AAD下的企业应用程序并搜索我们的应用程序时,会出现两个条目。一个用于托管标识,另一个用于作为应用程序注册的一部分创建的服务主体。我们正在尝试了解我们将使用哪一个来授予应用程序写入Azure SQL DB的权限。托管身份本质上是使用Microsoft逻辑包装的服务主体,

有人能帮我理解在AAD中创建应用注册时创建的服务主体与在应用服务的标识刀片上启用“系统分配”时创建的托管标识之间的区别吗


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

托管身份本质上是使用Microsoft逻辑包装的服务主体,以简化访问资源的过程。尽管有时添加更多的层可能会使事情复杂化,但其目的是使其更容易、更简单,并且减少消费者的交互

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

使用托管标识从应用程序服务访问azure SQL db的教程可在以下位置找到:

使用Azure AD保护Azure SQL DB的文档可以在以下位置找到:

此外,Microsoft官方文档中还解释了托管身份:

需要注意的是,有两种托管标识

来自文档:

直接在Azure上启用系统分配的托管标识 服务实例。启用标识后,Azure将创建一个 Azure AD租户中受信任的实例的标识 实例的订阅。在创建标识后 将凭据设置到实例上。生命周期 系统分配的标识直接绑定到Azure服务 实例,该实例已在其上启用。如果实例被删除,Azure 自动清除Azure AD中的凭据和标识

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

来自官方文档的图片也给出了一个使用MSI(托管服务标识)的VM的好例子

这一点如下所示:

除此之外,还可以在以下位置找到应用程序服务管理的身份文档:

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

我想进一步阐述一下,因为Azure中有关服务主体和应用程序注册的主题可能会令人困惑

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

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

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

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

[2]

[3]


[4]

只是一个小纸条。应用程序注册可能与