python - 从我的本地计算机上读取 Azure Keyvault 的值
问题描述
我不确定如何从本地计算机对 Azure 密钥库进行身份验证。虽然我知道我可能永远不想在生产场景中这样做,但我确实想在生产之前测试它的使用。
那可能吗?
虽然我确实看到了几个选项,但我没有使用 DefaultAzureCredential 以及我后来尝试过的 CertificateCredential、ClientSecretCredential,每个选项都有自己的错误,我并不完全理解。
默认的告诉我: azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'appid=a79ae17f-90f7-4341-a2f7-b4ae4abad7d2;oid=cb8a8745-1567-4cd7-b8a0-5cecd6afe6c6;iss =https://sts.windows.net/98d1d263-cc4b-4d75-96a6-daf642242d3b/' 没有秘密 获得密钥保管库 'AnotherKV2;location=eastus' 的权限
azure.core.exceptions.HttpResponseError:(禁止)用户、组或应用程序 'appid={MYAPPID};oid={SomeOID};iss=https://sts.windows.net/98d1d263-cc4b-4d75-96a6- daf642242d3b/' 没有获得密钥保管库“{MyKVName};location=eastus”的权限。有关解决此问题的帮助,请参阅https://go.microsoft.com/fwlink/?linkid=2125287
这很奇怪,原因有两个:
首先,虽然我确实在我的订阅中定义了一个带有 {MYAPPID} 的 SP,但我不记得曾经在我的本地机器上使用过它,所以我的本地应用程序如何具有与(我假设是自动生成的)相同的 APPID当我使用以下命令创建服务主体时得到: az ad sp create-for-rbac --name "MyApp"
其次,查看我的 keyvault 的访问策略,似乎 {MYAPPID} 有权对所有事情做正确的事
我错过了什么吗?是否应该以其他方式完成?(或者根本没有?)
解决方案
当您在本地运行代码时,会自动使用由名为、和DefaultAzureCredential
的环境变量描述的服务主体。AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
所以要使用它,请先Set environmental variables
在本地的高级设置中,使用创建的AD App的值az ad sp create-for-rbac
。
要访问 keyvault 机密,您需要将与 AD 应用相关的服务主体添加到Access policies
具有正确机密权限的 keyvault 中Get, List
。
注意:请确保服务主体与您的 keyvault 在同一个 Azure AD 租户中,添加时请APP ID/Client ID
直接搜索,因为两个不同的应用程序可以具有相同的名称。
然后使用下面的代码,它对我有用。
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://keyvaultname.vault.azure.net/", credential=credential)
retrieved_secret = client.get_secret("sec789")
print(retrieved_secret.value)
有关更多详细信息,请参阅https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-python
推荐阅读
- python - 如何生成列表
与zeep? - php - Yii如何上传视频和音频?
- javascript - TinyMCE如何在右侧显示同一页面的内容?
- sublimetext3 - Sublime Text 3,侧边栏增强功能不起作用
- c# - 如何在 C# 中按 Id 获取特定报告
- c# - .Net Core 与 .NET Framework 性能问题
- javascript - 大型(5977x8340)画布未在 ios 上显示
- symfony4 - 如何在 Symfony 4 的 EntityType 中设置选定的选项
- pci-compliance - 采集卡数据 PCI 级别
- python - 无法使用 pip 安装特定版本的 tensorflow