最近创建了一个正在运行的函数应用程序。函数应用托管 C# 和 PowerShell 函数,该函数在启用 MSI 的情况下按预期工作
下面是 PowerShell 代码,Github中的完整代码
Write-Output "PowerShell Timer trigger function executed at:$(get-date)";
# Get MSI AUTH
$endpoint = $env:MSI_ENDPOINT
$secret = $env:MSI_SECRET
$sqlTokenURI = "https://database.windows.net&api-version=2017-09-01"
$header = @{'Secret' = $secret}
$authenticationResult = Invoke-RestMethod -Method Get -Headers $header -Uri ($endpoint +'?resource=' +$sqlTokenURI)
# CONNECT TO SQL
$SqlServer = $env:SQL_SERVER_NAME
$SqlServerPort = 1433
$Database = "azuredwmonitordb"
$Conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=tcp:$($SqlServer),1433; Initial Catalog=$($Database);")
$Conn.AccessToken = $authenticationResult.access_token
# Open the SQL connection
$Conn.Open()
$Cmd=new-object system.Data.SqlClient.SqlCommand("SELECT @@SERVERNAME", $Conn)
$Cmd.CommandTimeout=120
# Execute the SQL command
$Ds=New-Object system.Data.DataSet
$Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd)
[void]$Da.fill($Ds)
# Output the count
$Ds.Tables.Column1
# Close the SQL connection
$Conn.Close()
这两个函数实现相同的逻辑:
- 从提供者处检索 Auth 令牌
- 使用令牌连接到 Azure SQL 服务器
但是,当使用 PowerShell 函数时,第一步有效,但在第二步尝试建立连接时,出现以下错误:
执行函数时出现异常:Functions.dm_pdw_exec_sessions。Microsoft.Azure.WebJobs.Script:PowerShell 脚本错误。System.Management.Automation:使用“0”参数调用“Open”的异常:“用户'NT AUTHORITY\ANONYMOUS LOGON'登录失败。”。.Net SqlClient 数据提供者:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败
我在过去看到过没有为 Azure SQL 服务器(用户不在主服务器中)正确启用 AAD 身份验证,但这里不是这种情况。