使用 AAD 身份验证从 AKS 集群访问 azure sql db

Accessing azure sql db from AKS cluster using AAD authentication

我可以通过使用 AAD 身份验证从应用程序服务中的 .net 核心应用程序 运行 访问 sql server azure。为了能够这样做,必须在 sql 服务器中注册用户分配的托管身份,这是通过以下 article 中的步骤完成的。 此外,必须指定 AzureServicesAuthConnectionString (RunAs=App;AppId=c5309486-960d-46f4-bbea-XXX) 以允许应用程序代码从 Azure 令牌提供程序请求身份验证令牌,更多信息 here

现在我正在尝试将我的应用程序迁移到 AKS 群集中。我正在按照 https://www.cloudiqtech.com/implementing-azure-ad-pod-identity-in-aks-cluster/ to install Azure identity into cluster by using kubernetess application https://github.com/Azure/aad-pod-identity 的说明进行操作 创建所有配置后,我还将 AzureServicesAuthConnectionString 添加到配置映射,但应用程序失败并显示以下消息:

为数据库做种时发生错误。

System.AggregateException:出现一个或多个错误。 (参数:连接字符串:RunAs=App;AppId=a349660d-cbfd-45fc-a917-XXX,资源:https://database.windows.net/,权限:。异常消息:尝试使用托管服务身份获取令牌。无法访问令牌已获取。操作已取消。)

---> Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:RunAs=App;AppId=a349660d-cbfd-45fc-a917-XXX,资源:https://database.windows.net/,权限:。异常消息:尝试使用托管服务身份获取令牌。无法获取访问令牌。操作已取消。

在Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAuthResultAsyncImpl(字符串资源、字符串授权、布尔值forceRefresh、CancellationToken cancellationToken)

在 Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsync(字符串资源、字符串租户 ID、布尔 forceRefresh、CancellationToken cancellationToken)

---内部异常堆栈跟踪结束---

在 System.Threading.Tasks.Task`1.GetResultCore(布尔 waitCompletionNotification)

在 System.Threading.Tasks.Task`1.get_Result()

在 MvcMovie.DataAccess.MovieContext..ctor(DbContextOptions`1 选项)

在 MvcMovie.DataAccess.SeedData.Initialize(IServiceProvider 服务提供商)

在MvcMovie.Program.Main(字符串[]参数)

来自 Kubernetes 的 AAD Pod 标识 documentation: AKS 和 aks-engine 集群需要一个标识才能与 Azure 通信。此身份可以是托管身份(以系统分配的身份或用户分配的身份的形式)或服务主体。本节介绍在使用 AAD Pod Identity 之前需要执行的各种角色分配。如果没有正确的角色分配,你的 Azure 群集将没有正确的权限来分配和取消分配底层虚拟机 (VM) 或虚拟机规模集 (VMSS) 的身份。

我缺少以下角色分配给集群系统分配的托管身份:“托管身份操作员”、“虚拟机贡献者”

此外,需要在创建 AKS 群集的同一资源组中创建访问数据库的用户分配托管标识。