【问题标题】:Use Azure pipeline secret variable to set environment variables on build agent使用 Azure 管道秘密变量在构建代理上设置环境变量
【发布时间】:2021-02-08 23:14:51
【问题描述】:

我们有一些依赖于一些秘密的功能测试。这些机密是从 Azure Key Vault (AKV) 获得的,为了从构建代理连接,我使用环境变量和AzureIdentity。我使用 powershell 在构建代理机器上设置了这些环境变量。当我使用非秘密管道变量时,一切正常,但是当我切换到 AZURE_CLIENT_SECRET 的秘密管道变量时,身份验证开始失败。我尝试了使用脚本从秘密管道变量设置环境变量的方法,但它不起作用。我也尝试了here 提到的方法,但这也不起作用。关于如何使用秘密管道变量设置环境变量的任何建议?

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    关于如何使用秘密管道变量设置环境变量的任何建议?

    如果您在下面的管道中设置秘密变量。

    然后使用脚本的环境或在变量块中映射变量以将秘密传递到您的管道,如下面的脚本。详情请见:Set secret variables

    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
      env:
        MY_MAPPED_ENV_VAR: $(PAT) # the recommended way to map to an env variable
    

    如果您使用 Azure Key Vault 变量,我们会在 Azure Key Vault 下方创建一个秘密变量 (PAT)。

    所以我们可以在变量组中link secrets from an Azure key vault,如下所示。

    现在我们可以在下面的脚本中使用这个变量组。详情请见:Reference secret variables in variable groups

    variables: 
    - group: 'AKVgroup' # variable group
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
      env:
        MY_MAPPED_ENV_VAR: $(PAT) # the recommended way to map to an env variable
    

    另一种方法是使用Azure Key Vault task,如下面的脚本。详情请见:Use secrets from Azure Key Vault in Azure Pipelines

    - task: AzureKeyVault@1
      inputs:
        azureSubscription: 'ARM'
        KeyVaultName: 'edwardkey'
        SecretsFilter: '*'
        RunAsPreJob: true
    
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
      env:
        MY_MAPPED_ENV_VAR: $(PAT) # the recommended way to map to an env variable
    

    【讨论】:

    • Edward,我没有使用 AZKV 任务,因为它仅限于构建管道。我已经在问题中提到 SetSecretVAriables 文档中提到的方法不起作用。我也不能使用变量组,因为我不希望该变量可用于其他管道。
    • 如果您的机密变量存储在 Azure 密钥保管库中,建议使用变量组来管理它。您可以取消选中变量组中的“允许访问所有管道”选项,以便其他管道无法访问此变量组,并按照此文档docs.microsoft.com/en-us/azure/devops/pipelines/library/… 管理变量组权限。
    【解决方案2】:

    如果您将秘密作为参数显式传递给脚本,则脚本将有权访问它。 如果您想使用它来设置环境变量以在以后的脚本中使用,您可以使用不同的环境变量名称并让脚本发布您希望它在后续脚本中可用。这有点违背了保密的目的,但如果那是你想要的。

    【讨论】:

    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2019-11-08
    • 2023-01-22
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多