YAML流水线部署Azure Analysis Services时配置AAD认证Azure SQL数据源的方法
AAS 对接AAD认证Azure SQL DB的PowerShell配置方案(无密码优先)
以下方案均适配YAML流水线部署场景,优先推荐无需硬编码/存储凭证的实现方式:
方案1:使用AAS托管身份认证(最优无密码方案)
生产环境优先选择该方案,无需维护任何凭证,安全性最高
- 前置操作:为AAS实例开启系统托管身份/用户分配托管身份,将该托管身份添加为Azure SQL DB的AAD用户,授予
db_datareader等所需的访问权限 - 给流水线服务主体授予AAS实例的管理员权限,无需额外存储任何凭证
- PowerShell配置示例:
# 安装依赖模块 Install-Module -Name SqlServer, Az.AnalysisServices -Force -AllowClobber # 连接AAS实例 Connect-AzAnalysisServices -Instance "asazure://<AAS所在区域>.asazure.windows.net/<你的AAS实例名>" # 读取目标模型的数据源 $aasDb = Get-AzAnalysisServicesDatabase -InstanceName "<AAS实例名>" -Name "<你的模型数据库名>" $targetDatasource = $aasDb.Model.DataSources | Where-Object {$_.Name -eq "<你的数据源名称>"} # 配置托管身份模式的连接字符串 $targetDatasource.ConnectionString = "Data Source=tcp:<SQL服务器名>.database.windows.net,1433;Initial Catalog=<SQL数据库名>;Authentication=Active Directory Managed Identity;Connect Timeout=30" # 保存配置修改 $aasDb.Update()
方案2:使用AAD服务主体证书认证(无密码方案)
适合需要用独立服务身份访问SQL DB的场景,用证书替代密码:
- 前置操作:为AAD服务主体配置非对称证书,将该服务主体添加为SQL DB的AAD用户并授予访问权限,证书存储在Azure Key Vault中
- 流水线从Key Vault直接读取证书,无需明文存储敏感信息
- PowerShell配置示例:
# 从Key Vault读取证书 $cert = Get-AzKeyVaultCertificate -VaultName "<你的Key Vault名称>" -Name "<证书存储名称>" $certThumbprint = $cert.Thumbprint # 配置服务主体证书模式的连接字符串 $targetDatasource.ConnectionString = "Data Source=tcp:<SQL服务器名>.database.windows.net,1433;Initial Catalog=<SQL数据库名>;Authentication=Active Directory Service Principal;Application Id=<服务主体客户端ID>;Certificate Thumbprint=$certThumbprint;Certificate Store Location=CurrentUser"
方案3:动态注入AAD访问令牌
适合临时测试、一次性部署场景:
- 前置操作:给流水线服务主体授予SQL DB的访问权限
- PowerShell动态获取访问令牌注入配置,无需长期存储凭证,令牌默认1小时有效期
- 配置示例:
# 获取Azure SQL专属的AAD访问令牌 $sqlAccessToken = (Get-AzAccessToken -ResourceUrl "https://database.windows.net").Token # 配置带令牌的连接字符串 $targetDatasource.ConnectionString = "Data Source=tcp:<SQL服务器名>.database.windows.net,1433;Initial Catalog=<SQL数据库名>;Password=$sqlAccessToken;Persist Security Info=True"
注意:该方案令牌过期后数据源会连接失败,仅适合一次性部署场景,不建议生产环境长期使用
方案4:AAD用户名密码认证(仅兼容说明,不推荐)
特殊场景需要使用账号密码时,将账号密码存储在Azure Key Vault中,流水线读取后配置:
$targetDatasource.ConnectionString = "Data Source=tcp:<SQL服务器名>.database.windows.net,1433;Initial Catalog=<SQL数据库名>;Authentication=Active Directory Password;User ID=<AAD用户名>;Password=<对应用户密码>"
内容的提问来源于stack exchange,提问作者user94118
相关产品推荐
相关产品推荐

