具有托管标识(用户分配)的 Azure SQL 无法针对 AAD 使用

Posted

技术标签:

【中文标题】具有托管标识(用户分配)的 Azure SQL 无法针对 AAD 使用【英文标题】:Azure SQL with Managed Identity (user-assigned) failed to use against AAD 【发布时间】:2021-11-20 21:33:53 【问题描述】:

我正在尝试利用 AAD 身份访问 Azure SQL 服务器,而不是 SQL 服务器用户。 我正在关注这篇文章https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure。 我需要根据 Microsoft 文档做的是在数据库中创建包含的用户。所以我从 Azure Function 应用程序执行此操作。

CREATE USER [existing group in AAD] FROM EXTERNAL PROVIDER
ALTER ROLE db_datareader ADD MEMBER [existing group in AAD]

函数应用能够登录 SQL Server,因为它的服务主体设置为 SQL Server 的 Azure Active Directory 管理员。

我遇到了异常:

Principal 'existing group in AAD' could not be resolved. Error message: 'AADSTS700016: Application with 
identifier '168d4e19-6718-4e50-8f96-c280e821ad6c' was not found in the directory 'my directory'. This can
happen if the application has not been installed by the administrator of the tenant or consented to by any
user in the tenant. You may have sent your authentication request to the wrong tenant.

所以我将系统分配托管标识分配给 SQL 服务器。然后我得到了:

Server identity does not have Azure Active Directory Readers permission. Please follow the steps here : https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-service-principal

我根据需要为该身份分配了 Directory Readers 权限,并且它开始工作。

我的问题是我需要使用用户分配托管身份,所以我做了同样的事情,但遇到了第一个异常,例如没有为 SQL 服务器分配身份。

任何想法为什么系统分配的身份有效但用户分配的身份无效?

【问题讨论】:

你用的是什么类型的sql server? azure sql,管理实例,其他? 我正在使用 Azure SQL 【参考方案1】:

此错误可能是由以下因素之一引起的:

    确保您使用应用程序 ID 作为客户端 ID。

    此问题表示您在配置 代码中的客户 ID 或租户 ID;首先,仔细检查两者 根据您的服务原则(租户 ID 和 客户 ID)。

该问题表明租户之间存在差异 您的应用注册位置以及您指定的租户 您的应用程序已在应用程序代码或 门户网站。您必须在应用程序代码中设置租户 ID。这是 通常在 web.config 或应用程序设置文件中找到。然后,使用 您在代码中指定的相同租户 ID,您必须注册 门户网站上的应用程序。此外,请确保您的应用程序 ID 和 双方的客户端 ID 相同,并且其中的所有变量 您的应用程序设置/web.config 与您在 门户。

【讨论】:

我没有在代码中指定应用 ID、客户端 ID、租户 ID。我只是在函数应用程序中使用此连接字符串,它将解析要使用的正确身份。 ``` string connectionString = $"Server=serverName.database.windows.net; Database=dbName; Authentication=Active Directory Default"; ```我需要在某个地方明确指定吗?【参考方案2】:

好的,这是我的问题的答案:“目前,Azure SQL 的服务器标识不支持用户分配的托管标识 (UMI)。”

https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-service-principal#enable-service-principals-to-create-azure-ad-users

【讨论】:

以上是关于具有托管标识(用户分配)的 Azure SQL 无法针对 AAD 使用的主要内容,如果未能解决你的问题,请参考以下文章

如果用户是用户分配托管标识,则确定 Azure SQL Server 中的用户名

使用自动化帐户中用户分配的托管标识连接到 Azure 存储帐户(使用 Azure RM 模块)

系统分配的托管标识的 Azure ARM 角色分配第一次运行失败

如何使用用户分配的托管标识访问 Azure 中 Function App Config 的 Key Vault

如何获取Azure App Service的特定用户分配的托管服务标识的令牌?

如何将 Azure 托管标识分配给 Azure 存储帐户?