【问题标题】:Retrieve key vault secret into a variable using azure cli task使用 azure cli 任务将密钥库机密检索到变量中
【发布时间】:2021-10-30 07:16:03
【问题描述】:

我正在尝试将密码从密钥库机密检索到 azure CLI 任务中的变量中。但它没有填充任何值。 请在 YAML 任务下方找到:

- task: AzureCLI@2
  displayName: Retrieve and store key vault secret
  inputs:
    azureSubscription: 'azureSubscription'
    scriptType: pscore
    scriptLocation: inlineScript
    inlineScript: |
      $secret=$(az keyvault secret show --name "passwordSecret" --vault-name "passwordKeyVault")

如果我在任何地方使用 $(secret),它只会给我价值 $(secret) 而不是密码。这是正确的方法吗?有人可以指导我完成这个吗?

【问题讨论】:

    标签: powershell azure-devops yaml azure-resource-manager azure-cli


    【解决方案1】:

    您需要将其映射到 Azure Pipelines 变量,为此您应该使用 logging command

    由于您从 KeyVault 获取您的值,我建议您在 Azure Pipelines 中也将其视为机密。所以你需要使用这个语法:

        Write-Host "##vso[task.setvariable variable=secretSauce;issecret=true]$secret"
    

    其中secretSauce 是您将创建的 Azure Pipeline 变量的名称。

    这将导致将*** 放在日志中通常会出现您的秘密的任何位置。

    但是,机密不会自动映射到环境变量,如果您需要通过环境变量访问该值,则需要使用 env mapping。

    【讨论】:

    • 我试过这个。我正在使用部署任务通过 ARM 模板部署一些资源,例如 azure sql server 和 sql db。因此,在此部署任务中,我试图覆盖用于 sqlAdminPassword 的参数,例如:overrideParameters: > -sqlAdminPassword $(secretSauce),但这只是给了我 $(secretSauce) 的值,而不是变量 secretSauce 中的实际值。此外,所有其他参数都被正确覆盖。我在这里做错了吗?
    【解决方案2】:

    这是因为您没有设置管道变量,而只是设置了脚本的变量。要在 ADO 管道中设置/更新变量,您可以添加以下命令:

    Write-Host "##vso[task.setvariable variable=testvar;issecret=true]testvalue"
    

    查看How to read and set DevOps Pipeline variables using Azure PowerShell? 和Use output from AzureCLI@2 as variable in Azure DevOps Pipeline 了解更多信息。

    【讨论】:

    • 省略 isSecret=true 意味着该秘密将在任何时候在日志中泄漏。
    【解决方案3】:

    问题已解决。 keyVault 与通用 arm 模板同时部署,导致密钥中出现“没有可用的当前版本”。因此,$secret 无法获取任何值。 我为密钥保管库创建了一个单独的部署任务并且它有效。感谢大家的回复。

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多