【问题标题】:Does azure key vault support regular text files?azure key Vault 是否支持常规文本文件?
【发布时间】:2020-10-12 15:48:23
【问题描述】:

我有一个在管道中使用的文本文件,这个特定文件包含管道用于对某些服务进行身份验证的秘密。文件如下所示。

app1|resource1|secret1
app2|resource2|secret2

此文件用于将密钥映射到每个应用程序。有人告诉我,我可以使用 azure key vault 来存储这些信息,但我只能看到 ssh 密钥、证书和键值对字符串的选项。

很高兴听到任何建议。我还应该注意目前我正在使用天蓝色的“安全文件”来存储这个文件,但是它不是很直观,因为每次需要更新文件时,你必须删除当前文件,上传一个新文件然后编辑管道再次添加。

另外,我需要一个可以存储此文件的中心位置,以便团队中的任何人都可以编辑它,而不仅仅是我。

【问题讨论】:

  • 处理此问题的正常方法是将模板存储在源代码管理中,并在部署时使用来自keyvault的值转换模板。此外,拥有自己的定制文件格式而不是使用 XML、JSON 或 YAML 之类的格式有点奇怪。

标签: azure azure-devops azure-keyvault azureportal


【解决方案1】:

您可以尝试使用RegEx Match & Replace 任务来替换文本文件中的秘密。此任务用正则表达式匹配替换文件内容。

所需的配置选项是:

  • 文件路径 : 选择要运行常规的文件 表达式搜索。
  • 使用正则表达式:输入正则表达式 没有修饰符。 (Eg. (?:\d*.)?\d+) 了解更多关于常规 来自Microsoft RegEx Quick Reference 的表达式并测试您的 正则表达式在线使用RegExr
  • 替换值:输入要替换为正则表达式匹配的值。

【讨论】:

    【解决方案2】:

    所以我通过获取文件内容并对其进行 base64 编码解决了这个问题,就像这样

    base64 -w0 mapping_file.txt
    

    “-w0”将所有内容放在一行中,然后将输出存储为 azure key vault secret 的值:

    映射文件:编码值

    在我的脚本中,我简单地解码值并按原样使用内容。我的团队成员现在可以访问 azure key vault,获取值,对其进行解码、编辑和编码。

    【讨论】:

    • 感谢您在这里分享您的解决方案,请您接受您的解决方案作为答案吗?因此,对于遇到相同问题的其他成员轻松找到解决方案将很有帮助。祝你有美好的一天:)
    【解决方案3】:

    是的,Azure 支持纯文本文件。在文档中,他们将其称为multi-line secret,而不是常规文本文件。

    我有一个类似的问题,我必须创建一个包含 *.json 文件的密钥,其中包含许多其他参数中的私钥。

    我通过在终端中使用以下命令解决了这个问题。

    #Create the secret
    az keyvault secret set --name SECRET_NAME --vault-name KEYVAULT_NAME --file FILE_NAME_WITH_ABSOLUT_PATH
    
    #Download the secret
    az keyvault secret download --name SECRET_NAME --vault-name KEYVAULT_NAME --file FILE_NAME_WITH_ABSOLUT_PATH
    

    如果您需要在管道中使用该文件,您可以通过两个步骤(任务)解决该问题:

    1. 从 KeyVault 读取密钥(与普通密码相同)。这会将文件的内容存储在管道变量中。
    2. 创建一个将管道变量的内容存储在文件中的任务。例如,此任务可以是 bash。

    您可以按照以下示例进行操作:

    parameters:
      - name: azureSubscription
        type: string
        default: 'my-subscription'
    
    ...
    
    variables:
      - name: secretFileName
        value: /home/vsts/.config/appName/my-secret-file-name.json
    
    ...
    # Your pipeline ...
    ...
    
     - task: AzureKeyVault@1
       displayName: "Reads the secret from Azure KeyVault"
       inputs:
         azureSubscription: ${{ parameters.azureSubscription }}
         KeyVaultName: "my-keyvault"
         SecretsFilter: 'my-secret'
         RunAsPreJob: false
    
     - task: Bash@3
       displayName: "Create the file that contains the secret"
       inputs:
         targetType: 'inline'
         script: |
           echo "Create the directory... "
           DIR="$(dirname "${$FILE_NAME}")"
           mkdir -p $DIR
           cd $DIR
           pwd
           echo "Create the file for Private Key..."
           FILE="$(basename "${$FILE_NAME}")"
           echo $MY_SECRET > $FILE
           ls -la
       env:
         MY_SECRET: $(my-secret)
         FILE_NAME: $(secretFileName)
    

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 2016-05-01
      • 2021-09-27
      • 2018-05-20
      • 1970-01-01
      • 2021-01-20
      • 2021-10-11
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多