Azure Pipeline 使用服务主体连接到 SQL 数据库

Azure Pipeline connect to SQL DB using service principal

在我的 azure 管道创建了一个 azure sql 数据库后,我想执行一些 sql。

有问题的 sql 必须由经过 AAD 身份验证的用户执行。

管道的服务连接是数据库的 AAD 身份验证用户。

如果我愿意让脚本使用服务主体机密,那么我可以构造一个 OAuth 调用来检索不记名令牌并使用它连接到数据库。

然而,由于 powershell 脚本是 运行 在服务主体的上下文中,我有一种直觉,有一种更好的方法可以使用服务主体连接到数据库,而不依赖于秘密。

有什么办法可以做到这一点吗?

您可以在 azure pipeline 的 azure powershell 任务中尝试以下脚本来获取资源的 accesstoken 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

解决方案是:

我添加了一个 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")