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

时间:2021-04-30 20:24:45

标签: azure-sql-database azure-aks azure-managed-identity

我可以使用 AAD 身份验证从我在应用服务中运行的 .net 核心应用程序访问 sql server azure。为了能够做到这一点,必须在 sql server 中注册用户分配的托管标识,并按照此 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/ 的说明使用 kubernetess 应用程序 https://github.com/Azure/aad-pod-identity 将 Azure 身份安装到集群中 创建所有配置后,我还将 AzureServicesAuthConnectionString 添加到配置映射,但应用程序失败并显示以下消息:

为 DB 设定种子时发生错误。

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(String resource, String authority, Boolean forceRefresh, CancellationToken cancelationToken)

在 Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsync(String resource, String tenantId, Boolean forceRefresh, CancellationToken cancelationToken)

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

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

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

在 MvcMovie.DataAccess.MovieContext..ctor(DbContextOptions`1 options)

在 MvcMovie.DataAccess.SeedData.Initialize(IServiceProvider serviceProvider)

在 MvcMovie.Program.Main(String[] args)

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题