簡體   English   中英

從 CI/CD 引用 Azure Key Vault 秘密 YAML

[英]Referencing Azure Key Vault secrets from CI/CD YAML

我們有一個多階段 YAML 管道,它對現有的一組 Azure 資源執行 CI/CD

階段是

  1. 建造
  2. 部署到開發和運行測試
  3. 如果之前成功 - 部署到生產並運行測試

我們在部署階段使用AzureRmWebAppDeployment任務,並使用該任務的 AppSettings 參數來指定特定於環境的設置。 例如

- task: AzureRmWebAppDeployment@4
      displayName: 'Deploy Azure App Service'
      inputs:
        azureSubscription: '$(azureSubscriptionEndpoint)'
        appType: '$(webAppKind)'
        WebAppName: 'EXISTING__AZURE_RESOURCENAME-DEV'
        Package: '$(Pipeline.Workspace)/**/*.zip'
        AppSettings: >
          -AzureAd:CallbackPath /signin-oidc
          -AzureAd:ClientId [GUID was here]
          -AzureAd:Domain [domain was here]
          -AzureAd:Instance https://login.microsoftonline.com/ 
          -AzureAd:TenantId [Id was here]
          -EmailServer:SMTPPassword SECRETPASSWORD
          -EmailServer:SMTPUsername SECRETUSERNAME

該集合中有兩個設置, EmailServer: SMTPUsernameEmailServer: SMTPPassword我想從 Azure KeyVault 中提取。 我知道如何使用語法從 Azure 門戶引用 KV 秘密

@Microsoft.KeyVault(SecretUri=https://our.vault.azure.net/secrets/SendGridPassword/ReferenceGuidHere)

但是我如何引用 YAML 管道中的值,以便它設置在 Azure 中?

正如 Thomas 在此評論中指出的, 從 CI/CD YAML 引用 Azure Key Vault secrets

我可以像這樣在 YAML 文件中明確設置值:

-EmailServer:SMTPPassword @Microsoft.KeyVault(SecretUri=https://our.vault.azure.net/secrets/SendGridPassword/ReferenceGuidHere)

您需要將 AzureKeyVault@1 任務與 RunAsPreJob 設置為 true,這將使您的密鑰保管庫值可用作 CI/CD 作業環境變量,因此您可以將其用作 $(KEY-OF-SECRET-VALUE) 在您的 rest工作的各個階段。

以下 yaml 文件是一個工作示例。 我們為 python 單元測試設置了一組從 Azure key-vault 提供的環境變量

trigger:
  batch: true # disable concurrent build for pipeline
  branches:
    include:
    - '*'  # CI start for all branches

pool:
  vmImage: ubuntu-16.04

stages:

- stage: Test
  jobs:
  - job: sample_test_stage
    steps:
    - task: AzureKeyVault@1
      inputs:
        azureSubscription: 'YOUR SUBSCRIPTION HERE'
        KeyVaultName: 'THE-KEY-VAULT-NAME'
        SecretsFilter: '*'
        RunAsPreJob: true
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '3.7'
    - script : python -m unittest discover -v -s tests
      displayName: 'Execute python unittest'
      env: { MY-ENV-VAL-1: $(SECRET-VALUE-1), MY-ENV-VAL-2: $(SECRET-VALUE-2)}

請注意,有時您需要批准 AzureDevops 和另一個 Azure 服務(如 KeyVault)之間的連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM