Azure DevOps az cli 以用户身份从管道登录

时间:2021-02-12 14:09:11

标签: azure azure-devops terraform azure-cli

我正在尝试创建一个管道,我将在其中针对来自 Azure DevOps 管道的 Azure 订阅运行 terraform 配置。一切正常,但是当我尝试使用 az cli 以用户身份登录时失败:

[root@edoc2-7bdc69555-ftbzt ctdocs]# cat db_config.php
<?php
$dbhost = "10.100.16.11";
$dbuser = "demo-docs";
$dbpass = "DBPASSWORD";
$db = "demodocsdb";
?>

虽然从我本地的 cli 可以做到ERROR: Authentication failed due to error of 'Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.' This typically happens when attempting a Microsoft account, which requires interactive login. Please invoke 'az login' to cross check. More details are available at https://github.com/AzureAD/microsoft-authentication-library-for-python/wiki/Username-Password-Authentication ERROR: Please run 'az login' to setup account.

命令是从脚本执行的,因为登录后我将转到需要这些凭据的 terraform 命令:

az log in -u user -p pass

我知道使用用户而不是服务主体不是最佳做法,但现在我必须坚持使用这种方法。那么有没有办法从 Azure DevOps 管道自动登录 az?

2 个答案:

答案 0 :(得分:2)

az login -u $(secretUser) -p $(secretPassword)

将用户 ID 和密码放入 Azure Key Vault,命名为 secretUsersecretPassword,然后使用 AzureKeyVault@1 任务填充它

  - task: AzureKeyVault@1
    inputs:
      ConnectedServiceName: Your Service Connection Name
      KeyVaultName: Your Key Vault Name
      SecretsFilter: 'secretUser,secretPassword'
      RunAsPreJob: true 
  - script: |
      az login -u $(secretUser) -p $(secretPassword)
      terraform init
      terraform plan

答案 1 :(得分:2)

可以使用 Azure CLI 任务代替脚本任务

它的工作方式与普通脚本任务类似,您可以使用 scriptType 属性选择要运行的脚本语言:

<块引用>

脚本类型:PowerShell/PowerShell Core/Bat/Shell 脚本。选择 在 Linux 代理或 batch/ps/pscore 上运行时的 bash/pscore 脚本 在 Windows 代理上运行时的脚本。 PowerShell Core 脚本可以运行 在跨平台代理(Linux、macOS 或 Windows)上

它还在 azureSubscription 输入中接受服务连接引用。服务连接应该是 Azure Resource Manager 类型,可以通过 automatically 或使用 existing service principal 创建。

azure 连接详细信息安全地存储在服务连接中,当您的脚本开始执行 Azure CLI 时,已经使用服务连接登录了

以下是您的管道任务的外观示例

- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: <Name of the Azure Resource Manager service connection>
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      terraform init
      terraform plan