使用 Azure Devops 管道连接 AzAccount?

Connect-AzAccount with Azure Devops Pipeline?

我发现很难找到 最佳和安全的 方式来使用 connect-azaccount 和 azure devops 管道。我在管道中有以下这个用于创建 azure 资源的简单 powershell 脚本。为了简单起见,我只使用了资源组的创建:

$Location = "Location Name"
$resourceGroupName = "Resource Group Name"

try {

    #Creation of Resource Group
    $resourceGroup = Get-AzResourceGroup -ResourceGroupName $resourceGroupName -ErrorAction SilentlyContinue 

    if($null -eq $resourceGroup)
    {
        New-AzResourceGroup -Name $resourceGroupName -Location $Location
    }

    else
    {
        Write-Host "The ResourceGroup with the name: $resourceGroupName already exists."
    }

} 


catch 
{
    Write-Host "Error occurred: $_"
}

这里的问题是当管道正在 运行 并且它到达 Powershell 任务时,它给我一个错误,发生错误:运行 Connect-AzAccount to login .

我的问题是,老实说,我不知道哪种方式是最安全的连接方式,无需输入任何用户凭据。它应该直接连接并创建资源。 请注意,我正在使用多重身份验证。为了实现这一目标,我找到了几种解决方案,但我需要帮助来选择最佳方法。我通过在 Yaml 文件中添加 powershell 任务找到了几种解决方案。这是向 运行 脚本显示 powershell 任务的 Yaml:

  - task: PowerShell@2
    inputs:
      filePath: '$(Pipeline.Workspace)/Deploy/functionapp.ps1'

选项 1:

Connect-AzAccount -Tenant 'xxxx-xxxx-xxxx-xxxx' -SubscriptionId 'yyyy-yyyy-yyyy-yyyy'

现在的问题是租户 ID 和订阅将在代码中可见,这是一个非常糟糕的做法

选项 2 是使用以下脚本:

$User = "xxx@xxxx.onmicrosoft.com"
$PWord = ConvertTo-SecureString -String "<Password>" -AsPlainText -Force
$tenant = "<tenant id>"
$subscription = "<subscription id>"
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
Connect-AzAccount -Credential $Credential -Tenant $tenant -Subscription $subscription

这与第一个非常相似,但如果我没记错的话,它仅限于特定用户。

选项 3 是使用服务主体:

$azureAplicationId ="Azure AD Application Id"
$azureTenantId= "Your Tenant Id"
$azurePassword = ConvertTo-SecureString "strong password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Connect-AzAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal

我不知道创建服务委托人是否会产生任何费用以及我应该采取哪些步骤才能使其发挥作用。

老实说,我对这一切都是陌生的,有人能告诉我实现这一目标的确切步骤是什么吗?感谢您的回答:)

最安全的方法是 create an Azure Resource Manager service connection 并在您的管道中使用它。您可以使用自动方式创建它,也可以使用之前创建的服务主体手动创建它。