在我的Azure管道创建了一个Azure sql数据库之后,我想执行一些sql。
有问题的 sql 必须由经过 AAD 身份验证的用户执行。
管道的服务连接是数据库的 AAD 身份验证用户。
如果我愿意让脚本使用服务主体机密,那么我可以构造一个 OAuth 调用来检索持有者令牌并使用它来连接到数据库。
但是,由于 powershell 脚本在服务主体的上下文中运行,我有一种直觉,有一种更好的方法可以使用服务主体连接到数据库,而无需依赖机密。
任何想法我该怎么做?
解决方案是:
我添加了一个检索持有者令牌的 Azure CLI 任务。然后,我将其传递给使用该令牌的Azure Powershell任务。
$token= & az account get-access-token --resource=https://database.windows.net --query accessToken
Write-Host("##vso[task.setvariable variable=sqlToken]$token")
可以在 Azure管道的 Azure Powershell 任务中尝试以下脚本,以获取资源https://database.windows.net/
的访问令牌
$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$databaseAccessToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://database.windows.net/").AccessToken
$databaseAccessToken