当前位置: 首页 > 知识库问答 >
问题:

Python Azure SDK:从应用程序配置服务获取密钥库引用值

云镜
2023-03-14

我想在应用程序配置服务中检索Azure密钥库引用的秘密。在dotnet中,这是小菜一碟,只需添加Options.configureKeyVault,就可以像下面这样检索secret:

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处理,当您试图检索KeyVault引用的secret时,您只需要得到字符串:

'{“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

我不喜欢这个解决方案,尤其是字符串解析,尽管它很有效,但我想不出更好的方法。你有什么想法如何以更聪明/更干净的方式做这件事吗?

共有1个答案

扶珂
2023-03-14

我想这应该是最简单的办法。此外,您应该查阅信息以获得承载令牌

RESR API--Web应用程序-获取应用程序设置密钥库引用

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

 类似资料:
  • 这个Python脚本被部署为从Azure函数应用程序运行在Linux消费计划上,这个脚本被期望从Azure密钥库中读取机密。 除了代码部署之外,还进行了以下配置 null 此错误说明应用程序没有密钥库上的机密获取权限,但如上所述,将角色分配给在密钥库上具有阅读器角色的功能应用程序。 配置中可能出现的问题是什么?如何缓解?

  • 我设置了一个简单的应用程序服务来使用/测试Azure应用程序配置 Azure应用程序配置包含2个非密钥库条目和1个密钥库引用条目 使用正确的访问策略设置密钥库,允许获取/列出Azure应用程序配置的托管服务标识的机密 当我在Azure App Config中添加指向KeyVault的条目时,应用程序将不会启动(HTTP错误500.30-ANCM进程内启动失败),日志显示此异常: 异常信息:Micr

  • 在运行net472 web应用程序的Azure应用程序服务中,我从密钥库访问证书,如下所示: 这一行抛出一个错误

  • 问题内容: 我尝试从KeyStore获取密钥。我通过Keytool创建了一个密钥库: keytool -genkeypair -dname“ cn = Mark Jones,ou = JavaSoft,o = Sun,c = US” -alias business2 -keypass abcdtest -keystore C:\ workspace \ XMLSample \ keystore \

  • 我在过去为Azure函数使用了很多秘密,现在我试图使用一个密钥,RSA加密,4096位。这是一个私有的PuTTy.ppk键,我已经将其导出为。pem类型以满足Azure的要求。我有一个Python 3.7应用程序,我已经在其中部署了所需的功能,并尝试在应用程序设置中引用所需的键,下面的语句是: @microsoft.keyvault(secreturi=https://{thevault-addr

  • 我有一个web应用程序,我想使用Spring Boot的服务器配置。这两个应用程序都位于本地主机上。我从头开始创建了前两个应用程序,它们一起工作,但当我使用具有许多依赖项(不仅仅是云配置和web依赖项)的客户端时,它就不再工作了。我怎么知道?我在服务器的属性文件中有一个变量,我试图在我的客户机中用@Value(“${atena}”)来使用它,错误出现在java中。lang.IllegalArgum