gpt4 book ai didi

python - 读取 Azure DevOps 管道中的 key 保管库 secret

转载 作者:行者123 更新时间:2023-12-03 05:21:52 28 4
gpt4 key购买 nike

我正在使用 Azure DevOps yaml 管道。我的存储帐户和其他应用程序值作为 secret 保存在 key 保管库中。我通过将变量组链接到 Azure key 保管库(将变量组连接到 key 保管库的服务连接)来创建变量组。这样我就可以将所有 secret 保存在我的变量组的 key 保管库中。

我需要在管道中读取这些值并使用它们。我基本上可以阅读它们,但它们的值显示为***,无法真正评估。我尝试从管道中的变量组中读取它们,如下所示:

pool: 
vmImage: ubuntu-20.04

trigger: none


variables:
- group: check_kv_vargroup

stages:

- stage: Read_KV_Secrets_And_Evaluate_Values
displayName: 'Deploy Stage in Dev env'

jobs:

- job: download_wheel_from_build_pipeline
steps:

- bash: |
echo "WorkspaceName is:"
echo "$(WorkspaceName)"
echo "sample-secret is:"
echo "$(sample-secret)"
displayName: GetKVValues

- task: PythonScript@0
displayName: "Evaluate KV Secrets In Pipeline"
name: "get_secret_values"
inputs:
scriptSource: 'filePath'
scriptPath: evaluate-kv-secrets.py
env:
SampleSecret: '$(sample-secret)'

管道的输出如下(sample-secret 和 WorkspaceName 都是保存在 Key Vault 中的 secret ,并添加到我的 DevOps 变量组中):

variable values are read but are not shown

变量已读取,但它们的值不清楚,因此我无法使用它们。为了确保可以评估该值,我添加了一个任务来运行 python 脚本,以查看是否可以在管道中的 python 代码中读取该值。这是evaluate-kv-secrets.py,它是上面管道中的第二个任务。管道将变量传递给 python 脚本,如下所示:

import os


if os.environ["sample-secret"] == 123:
print("secret from key vault is read properly.")
else:
print("Key vault value cannot be evaluated in the pipeline.")

下面您可以看到管道中 python 脚本的输出:

python script was not able to read key vault values

它无法读取值,这就是“else”部分被执行的原因。但该值会传递给 python 脚本,否则会引发空值错误。

我找到了this link直接从 keystore 读取管道中的值,我做了以下管道:

pool:
vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@1
inputs:
azureSubscription: 'MyServiceConnectionName' ## YOUR_SERVICE_CONNECTION_NAME
KeyVaultName: 'rg-poc400-kv' ## YOUR_KEY_VAULT_NAME
SecretsFilter: 'sample-secret' ## YOUR_SECRET_NAME. Default value: *
RunAsPreJob: true

- bash: |
echo "sample-secret is:"
echo "$(sample-secret)"
displayName: GetKVValues

- task: PythonScript@0
displayName: "Evaluate KV Secrets In Pipeline"
name: "get_secret_values"
inputs:
scriptSource: 'filePath'
scriptPath: evaluate-kv-secrets.py
env:
SampleSecret: '$(sample-secret)'

AzureKeyVault@1 任务不以纯文本形式显示值,如下所示:

AzureKeyVault doesn't show the value in plain text.

两种方式都读取值,但它们不是以纯文本形式显示,因此 python 脚本无法评估传递的值。

所以问题是我们如何读取管道中 keystore 中的 secret 值,以便我们可以评估它们的值以使用或以纯文本形式显示它们?我知道它们是 secret ,但我希望当我获取它们时至少我能够像 if 语句一样评估它们的值。当我使用服务连接进行连接时,我已经是有权读取这些值的人了。我还知道,如果我创建一个变量组并将这些值保留为纯文本,我就可以访问它们,但这不是我的问题。我想将所有这些值保存在 key 保管库中。如果将它们保存在 key 保管库中、保存在变量组中并保持同步,那就太费力了。谢谢。

最佳答案

@e-erfan - Azure DevOps 打印 secret 的屏蔽值是正常的。这对于安全最佳实践很有好处,因为您不希望凭据保留在日志中。

使用从 Azure Key Vault 检索到的 secret 应该没有问题。只需在下一步中使用该值即可。

您将看到传递给 docker login 命令的 key 成功,因为您有一个有效的密码!

 - task: AzureKeyVault@1
name: KeyVaultSecrets
displayName: Get Secret from Key Vault
inputs:
azureSubscription: 'Build Pipeline Service Connection'
KeyVaultName: 'aspnet4you-keyvault'
SecretsFilter: 'aspnet4you-acr'



- task: Bash@3
name: EchoSamlpleSecret
displayName: EchoSamlpleSecret
inputs:
targetType: 'inline'
script: |
# Write your commands here
echo 'Hello world'
echo "sample-secret is:" $(aspnet4you-acr)

- script: docker login -u $(dockerId) -p $(aspnet4you-acr) $(dockerId).azurecr.io
displayName: login to Azure Container Registry (ACR)

关于python - 读取 Azure DevOps 管道中的 key 保管库 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71514746/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com