在 Azure 中整合托管标识与身份验证/授权标识

Posted

技术标签:

【中文标题】在 Azure 中整合托管标识与身份验证/授权标识【英文标题】:Consolidating Managed Identity vs Authentication/Authorization Identity in Azure 【发布时间】:2020-08-31 17:48:11 【问题描述】:

我遇到了需要管理资源身份的情况,但我发现自己需要为资源创建两个 clientID。

我有一个要访问 Azure 密钥保管库的函数应用。为了让函数应用使用@Microsoft.KeyVault(ServiceUri='url') 在应用程序设置中引用密钥保管库数据,我需要两个步骤。

    开启托管身份

    在 Key Vault 中,授予资源访问权限。

这很好用,门户显示资源现在已向 Azure AD 注册。

但是,我还需要正在运行的代码来访问密钥保管库,并且我需要打开身份验证/授权。这会在 Azure AD 中创建一个 second 注册,这次是作为注册应用程序,带有第二个 ClientId。我还需要让这个新创建的资源访问密钥保管库。

有什么方法可以整合在 Azure AD 中创建的这两种资源?有没有办法说这个资源需要有托管的身份并且也是一个注册的身份验证应用程序?

【问题讨论】:

【参考方案1】:

它们实际上是两个不同的东西。托管标识不像应用注册那样是完整的服务主体。它只能用于访问“天蓝色服务”,它是一种不同类型的对象。这么快的答案是否定的,真的没有办法把这两件事合二为一。

如果您所做的只是尝试从代码中访问密钥库,那么您实际上不需要打开身份验证之类的东西。 就实际屏幕而言,这可能有点过时了,但想法是一样的:https://integration.team/blog/retrieve-azure-key-vault-secrets-using-azure-functions-and-managed-service-identity/ .您基本上可以在代码中获取托管标识的令牌,并使用它从代码中访问密钥库。

但如果您的要求是在功能应用应用程序设置中进行身份验证并具有密钥库引用,那么您需要两者,因为应用程序设置中的密钥库引用只能由系统托管身份完成,并且只能完成身份验证通过应用程序注册。

【讨论】:

"如果您的要求是在功能应用应用程序设置中进行身份验证和密钥库引用,那么您需要两者,因为应用程序设置中的密钥库引用只能由系统托管身份完成,并且身份验证只能通过应用注册来完成。”是的,这是我遇到的问题,我目前正在这样做。我知道他们有两个不同的目的,但如果一个包含另一个会很好。目前,我正在使用与托管标识不同的名称注册应用程序

以上是关于在 Azure 中整合托管标识与身份验证/授权标识的主要内容,如果未能解决你的问题,请参考以下文章

使用托管标识在 Azure 中应用服务到应用服务身份验证

使用托管标识从 Azure Logic 应用向 Azure Function 进行身份验证

使用 Azure 托管服务标识和应用服务身份验证的服务到服务身份验证?

在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证

C# - 具有托管服务标识的 Azure 存储 [关闭]

Azure API 管理 + Azure 函数和托管标识