【问题标题】:Python Azure SDK: get Key Vault referenced value from App Configuration servicePython Azure SDK:从应用配置服务获取 Key Vault 引用值
【发布时间】:2020-12-23 19:00:32
【问题描述】:

我想在应用配置服务中检索 Azure Key Vault 引用的机密。 在 dotnet 中它是小菜一碟,您只需添加 options.ConfigureKeyVault 并可以像这样检索秘密:

var credential = new DefaultAzureCredential();
var config = new ConfigurationBuilder().AddAzureAppConfiguration(options => {
        options.Connect(
            new Uri("https://app-cf.azconfig.io"), credential
        ).Select("*", "label");
        options.ConfigureKeyVault(kv => {
            kv.SetCredential(credential);
        });
    }).Build();
    var test = config.GetValue<string>("secret_name");

但在 Python 中,我还没有找到在 AzureAppConfigurationClient 中添加 KeyVault 处理的任何方法,当您尝试检索 Key Vault 引用的机密时,您只需获得字符串:

'{"uri":"https://kv-name.vault.azure.net/secrets/SecretName"}'.

我已经“解决”了这个写作功能:

import json
from pathlib import Path
from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

def get_appcf_label(base_url: str, label: str) -> dict:
    """Get app configurations for specified label."""
    credential = DefaultAzureCredential()
    client = AzureAppConfigurationClient(base_url, credential)
    filtered_listed = client.list_configuration_settings(
        key_filter="*", label_filter=label
    )
    config = dict()
    for item in filtered_listed:
        if (
            item.content_type
            == "application/vnd.microsoft.appconfig.keyvaultref+json;charset=utf-8"
        ):
            url_parts = Path(json.loads(item.value)["uri"]).parts
            vault_url = "//".join(url_parts[:2])
            kv_secret = url_parts[-1]
            kv_client = SecretClient(vault_url, credential)
            secret_val = kv_client.get_secret(kv_secret).value
            config.update({item.key: secret_val})
        else:
            config.update({item.key: item.value})
    return config

我不喜欢这个解决方案,尤其是字符串解析,尽管它可以工作,但我想不出更好的方法来做到这一点。您对如何以更智能/更清洁的方式进行操作有任何想法吗?

【问题讨论】:

  • 您对这个问题有任何顾虑吗?
  • @Szymon Osiecki 您是否能够使用 SDK 本身找到更好的解决方案?

标签: python azure reference azure-keyvault azure-app-configuration


【解决方案1】:

你可以通过rest api获取价值。

我认为这应该是最简单的方法。另外,您应该查阅资料以获取Bearer token

RESR API --Web Apps - Get App Setting Key Vault Reference

您可以在代码中使用import requests。下面的帖子可以告诉你如何发送帖子请求。

Using API microsoft translator in a Python script

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2020-12-06
    • 1970-01-01
    • 2022-07-22
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多