如何在AKS代理池管道中用Azure用户托管标识连接Azure SQL
使用用户分配托管标识(UAMI)从AKS管道连接Azure SQL数据库
前提确认
确保AKS代理池的节点已关联目标UAMI,否则无法通过该标识获取认证令牌。
PowerShell 实现步骤
- 获取UAMI的Azure SQL访问令牌
- 利用令牌构建连接,执行用户创建/添加操作
# 获取UAMI针对Azure SQL的访问令牌 $token = (Get-AzAccessToken -ResourceUrl "https://database.windows.net/").Token # 替换为你的SQL服务器和数据库名称 $connectionString = "Server=tcp:<SQL_SERVER_NAME>.database.windows.net,1433;Initial Catalog=<DB_NAME>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" # 安装SqlServer模块(首次运行需执行) Install-Module -Name SqlServer -Force -Scope CurrentUser # 执行SQL命令,创建/添加AAD用户 Invoke-SqlCmd -ConnectionString $connectionString -AccessToken $token -Query @" CREATE USER [AAD_PRINCIPAL_NAME] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [AAD_PRINCIPAL_NAME]; "@
Bash 实现步骤
- 通过Azure CLI获取UAMI的访问令牌(AKS节点已关联UAMI时,az cli会自动使用该标识认证)
- 使用
sqlcmd工具传递令牌完成连接并执行SQL
# 获取Azure SQL访问令牌 TOKEN=$(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv) # 替换为你的SQL服务器和数据库名称,执行用户创建命令 sqlcmd -S <SQL_SERVER_NAME>.database.windows.net -d <DB_NAME> -U any@any -P $TOKEN -Q "CREATE USER [AAD_PRINCIPAL_NAME] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [AAD_PRINCIPAL_NAME];"
注意事项
- 替换代码中的
<SQL_SERVER_NAME>、<DB_NAME>、<AAD_PRINCIPAL_NAME>为实际值(AAD_PRINCIPAL_NAME可以是AAD用户的UPN或AAD组的名称) - Bash环境需提前安装Azure CLI和
sqlcmd工具 - 确保UAMI已被设置为目标SQL数据库的AAD管理员
内容的提问来源于stack exchange,提问作者RAagent
相关产品推荐
相关产品推荐

