通过使用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添加到配置映射中,但应用程序失败,并显示以下消息:
为数据库设定种子时出错。
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资源,字符串授权,布尔值forceRefresh,CancellationToken cancellationToken)
在Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsync(String资源中,字符串tenantId,布尔值forceRefresh,CancellationToken cancellationToken)
-内部异常堆栈跟踪结束
在System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
在System.Threading.Tasks.Task`1.get_Result()
在MvcMovie.DataAccess.MovieContext..ctor(DbContextOptions`1选项中)
在MvcMovie.DataAccess.SeedData.Initialize(IServiceProvider serviceProvider)
at MvcMovie.Program.Main(String[]参数)
发布于 2021-05-03 17:38:11
来自Kubernetes的AAD Pod身份: AKS和aks-engine集群需要一个身份来与documentation通信。此标识可以是托管标识(以系统分配的标识或用户分配的标识的形式),也可以是服务主体。本节介绍在使用AAD Pod身份之前需要执行的各种角色分配。如果没有正确的角色分配,你的Azure群集将没有从基础虚拟机(VM)或虚拟机比例集(VMSS)分配和取消分配标识的正确权限。
我缺少为群集系统分配的以下角色分配的托管标识:“托管标识操作员”、“虚拟机贡献者”
此外,需要在创建AKS集群的同一资源组中创建访问数据库的用户分配的托管身份。
https://stackoverflow.com/questions/67340042
复制相似问题