如何使用 Azure CLI 从 Azure Vault 获取 API 机密

问题描述 投票:0回答:1

主题:将 API 凭据移动到 Azure Vault 并通过 Azure CLI 检索

嗨,团队,

我目前正在使用 RestAssured 框架进行 API 自动化,并将 API ID 和密码直接存储在我们的存储库中。我想通过从存储库中删除这些凭据并将它们存储在 Azure Key Vault 中来增强安全性。

您能否指导我如何使用 Azure CLI 从 Azure Key Vault 检索 API ID 和密码,同时在我的笔记本电脑和 Azure 管道中本地运行测试?

当前设置:

API 测试包括端点和 POST 请求主体。 我已经为请求添加了标头。 我计划用变量 {client-secret} 替换 API ID 和密码。 要求:

如何配置代码以使用 {client-secret} 变量发送 POST 请求。 确保 {client-secret} 变量从 Azure Key Vault 获取 API ID 和密码。 谢谢您的协助!

azure-devops azure-pipelines azure-keyvault rest-assured api-authorization
1个回答
0
投票

在本地计算机上,可以使用 Azure CLI 命令“

az keyvault secret download
”从 Azure Key Vault 获取机密。该命令会将秘密值保存到自动创建的指定文件中。然后您可以从文件中读取值以在后续命令行/脚本中使用。

例如,我有两个秘密(

myUsername
myPassword
)存储在 Azure Key Vault 中。

enter image description here

在本地计算机上,我可以运行以下命令行来下载机密值。

az login
az keyvault secret download --vault-name BrightRanKV --name myUsername --file myUsername.txt
az keyvault secret download --vault-name BrightRanKV --name myPassword --file myPassword.txt

在 Azure DevOps 管道中,有内置任务 AzureKeyVault@2 可用于从 Azure Key Vault 下载机密。

  1. 在管道所在的 Azure DevOps 项目中,转到 项目设置 > 服务连接,创建到 Azure Key Vault 所在的 Azure 订阅的 Azure 资源管理器服务连接(ARM 连接)在.

    enter image description here

  2. 确保 ARM 连接使用的服务主体具有 Azure Key Vault 中秘密权限GetList

    enter image description here

  3. 然后在管道中,您可以使用 AzureKeyVault@2 任务上的 ARM 连接进行授权。

steps:
# Download the specified secrets from Azure KeyVault.
# The task will set the secrets as pipeline secret variables using the same secret names.
- task: AzureKeyVault@2
  displayName: 'Download Secrets from Azure KeyVault'
  inputs:
    azureSubscription: 'ArmConnection'
    KeyVaultName: 'BrightRanKV'
    SecretsFilter: 'myUsername, myPassword'

# In the subsequent script tasks (such as bash, powershell, etc..),
# you need to map the secret variables as environment variables.
# Then you can call the environment variables in the scripts.
- bash: |
    echo "MY_USERNAME = $MY_USERNAME"
    echo "MY_PASSWORD = $MY_PASSWORD"
  env:
    MY_USERNAME: $(myUsername)
    MY_PASSWORD: $(myPassword)

- powershell: |
    echo "MY_USERNAME = ${env:MY_USERNAME}"
    echo "MY_PASSWORD = ${env:MY_PASSWORD}"
  env:
    MY_USERNAME: $(myUsername)
    MY_PASSWORD: $(myPassword)
  1. 由于这些值是机密,因此当您尝试在管道中打印这些值时,出于安全原因,它们将始终在输出日志中被屏蔽为“
    ***
    ”。这是为了保护您存储在机密中的敏感信息。

© www.soinside.com 2019 - 2024. All rights reserved.