[英]Python Azure SDK: get Key Vault referenced value from App Configuration service
我想在应用配置服务中检索 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"}'
。
我已经“解决”了这个写作 function:
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
我不喜欢这个解决方案,尤其是字符串解析,即使它正在工作,但我想不出更好的方法来做到这一点。 您有任何想法如何以更智能/更清洁的方式进行操作吗?
我认为这应该是最简单的方法。 此外,您应该查阅信息以获得Bearer token
。
RESR API --Web 应用程序 - 获取应用程序设置 Key Vault 参考
您可以在代码中使用import requests
。 下面的帖子可以向您展示如何发送帖子请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.