Azure Key Vault 是否支持常规文本文件?

Does azure key vault support regular text files?

我有一个在管道中使用的文本文件,这个特定文件包含管道用于对某些服务进行身份验证的秘密。该文件看起来像这样。

app1|resource1|secret1
app2|resource2|secret2

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

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

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

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

所需的配置选项是:

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

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

base64 -w0 mapping_file.txt

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

mapping-file: encoded_value

在我的脚本中,我简单地解码值并按原样使用内容。我的团队成员现在可以转到 Azure Key Vault,获取值,对其进行解码、编辑和编码。

是的,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)