我想知道在 Azure 中是否总是建议使用托管身份验证,主要是系统分配的还是服务主体? 与托管标识相比,何时应该在 Azure 中使用服务主体?其中一个的优点是什么? 任何帮助都将不胜感激。
我想知道在 Azure 中是否总是建议使用托管身份验证,主要是系统分配的还是服务主体? 与托管标识相比,何时应该在 Azure 中使用服务主体?其中一个的优点是什么? 任何帮助都将不胜感激。
托管标识是服务主体的一种类型。
服务主体可以是三种类型之一:应用程序、托管标识和遗留身份。将它们分为不同类型是基于其使用情况。因此,它们的具体处理也因其类型而异。
rickvdbosch提供了一篇文章的链接,介绍了服务主体中托管标识类型的详细信息。 对于那些想学习服务主体对象及其类型概念的人,这里有另一篇文章的链接: Azure Active Directory中的应用程序和服务主体对象。
服务主体
可以说,服务主体中最相关的部分是 Azure Active Directory 下的企业应用程序。它基本上是一个应用程序,允许您的用户应用程序根据基于 RBAC 的角色控制对 Azure 资源进行身份验证和访问。
它本质上是需要访问 Azure 资源的应用程序的标识符。简单来说,就像您必须为同事分配某些访问权限以便他/她可以访问 Azure 资源并执行所需的任务,您可以使用他们的电子邮件 ID 作为验证用户的一种方式。
托管标识
我们可以说,托管标识实际上是服务主体,它们在功能和目的上都是相同的。
唯一的区别是托管标识始终与 Azure 资源关联,而不像上面提到的应用程序或第三方连接器那样。它们会自动为您创建,包括凭据;这里的一个重要优点是没有人知道凭据。
有两种类型的托管标识:
1.) 系统分配的;在这种情况下,标识与单个 Azure 资源(如虚拟机、Web 应用程序、函数等)关联。接下来,它们也“属于” Azure 资源,这意味着当 Azure 资源被删除时,它们也会被删除。
2.) 用户分配的托管标识,这意味着您首先必须将其作为单独的 Azure 资源创建,然后将其链接到多个 Azure 资源。一个例子是与密钥保管库的集成,同一应用程序堆栈中属于不同工作负载服务需要从密钥保管库中读取信息。在这种情况下,可以创建一个“读取 KV”托管标识,并将其链接到 Web 应用程序、存储帐户、函数、逻辑应用程序等所有属于相同应用程序架构的资源。
Azure服务主体类似于一个应用程序,其他Azure资源可以使用其令牌进行身份验证,并授予对Azure资源的访问权限。
托管标识是一种特殊类型的服务主体,仅可与Azure资源一起使用。
两者之间的主要区别在于,在托管标识中,您无需在代码中指定任何凭据,而在服务主体中,您需要指定应用程序ID、客户端ID等来生成令牌以访问任何Azure资源。理想情况下,只有在您使用的服务不支持托管标识时,才应选择服务主体。
它们始终与 Azure 资源关联,而不是与应用程序或第三方连接器关联。
它们可以在资源创建时自动创建(适用于支持托管标识的资源)。
有两种类型:用户分配和系统分配。上述句子指的是后者;即使在资源创建时没有设置,也可以通过单击启用。
托管标识使用访问令牌,因此不需要凭据。
要设置服务主体,需要提供客户端 ID、租户 ID 和密码/密钥(例如作为环境变量)。
相比之下,从/通过托管标识资源访问目标资源是通过访问令牌完成的。
在我看来,问题在于复杂性:
一个必须对"身份"、"安全主体"、"服务主体"、"角色"等术语有透彻的理解,并了解它们之间的关系。
令牌的使用并不直观。
文档内容杂乱无章,我所做的大部分工作都是通过试错和在网上查找大量错误信息来完成的。
例如,请求令牌需要使用"根"资源 URI(在密钥保管库的情况下,为https://vault.azure.net
),并且需要在特定的"目标资源"上使用。后者很简单,但前者不是。不确定文档中是否明确说明了这一点,但它让我陷入了困境一段时间(参见例如this thread)。
其他一些怪异之处
注意
这些问题可能在其他工具(如Azure CLI)中不存在,或者我可能忽略了某些东西...
在门户上查找托管标识(MSI)
"用户分配的"托管标识有自己的子类别"托管标识",但这不会显示"系统分配的"托管标识。后者需要单独搜索。
资源组和托管标识
这仅基于我在门户上的经验,但似乎"系统分配的"托管标识不属于任何资源组(或者它们被隐藏了)。也就是说,当调用时,"用户分配的"托管标识明确显示它所属的资源组,但对于"系统分配的"托管标识,我找不到这些信息,而且这没有意义。后者与MSI资源紧密相关,因此我进入特定资源的资源组,列出所有成员,但它们也不会显示在那里。奇怪。
Azure 身份的简要概述(其中“身份”指的是 Azure Active Directory identities):
│
├─► user
│
├─► group
│ managed
└─► service ────► identity
principal (MSI)
服务主体
应用程序或服务用于访问特定 Azure 资源的安全标识。您可以将其视为应用程序的用户标识(用户名和密码或证书)。
(来源:分配 Azure 角色的步骤)
或
"一种应用程序,其令牌可用于身份验证并授予用户应用、服务或自动化工具对特定 Azure 资源的访问权限,当组织使用 Azure Active Directory 时"
实质上,通过使用服务主体,您可以避免在需要访问 Azure 资源时在 Azure AD 中创建“虚拟用户”(我们在本地 Active Directory 中称其为服务帐户)来管理身份验证。
(来源:解密服务主体 - 托管标识)
托管标识 (MSI)
托管标识(MSI)是 一种特殊类型的 服务主体,分配给支持托管标识的 Azure 资源,以便在访问其他 Azure 服务/资源时无需凭据。
(来源:此答案)
托管标识在功能和用途上与服务主体完全相同。实际上,它们实际上就是服务主体。
(来源:解密服务主体 - 托管标识)
MSI 资源:支持具有(或赋予)托管标识的 Azure 资源
目标资源:MSI 资源 正试图访问的 Azure 资源