繁体   English   中英

从我的本地机器上读取 Azure Keyvault 的值

[英]Read a value from an Azure Keyvault from my local machine

我不确定如何从我的本地计算机对 Azure 密钥库进行身份验证。 虽然我知道我可能永远不想在生产场景中这样做,但我确实想在生产之前测试它的使用。

那可能吗?

虽然我确实看到了几个选项,但我没有使用 DefaultAzureCredential 以及我后来尝试的 CertificateCredential、ClientSecretCredential,每个选项都有自己的错误,我并不完全理解。

默认的告诉我: azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'appid=a79ae17f-90f7-4341-a2f7-b4ae4abad7d2;oid=cb8a8745-1567-4cdfe6a0-5cdacda6; =https://sts.windows.net/98d1d263-cc4b-4d75-96a6-daf642242d3b/' 没有秘密 获得密钥保管库 'AnotherKV2;location=eastus' 的权限

azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'appid={MYAPPID};oid={SomeOID};iss=https://sts.windows.net/98d1d263-cc4b-4d75-96a6- daf642242d3b/' 没有获得密钥保管库“{MyKVName};location=eastus”的权限。 有关解决此问题的帮助,请参阅https://go.microsoft.com/fwlink/?linkid=2125287

这很奇怪,原因有两个:

  1. 首先,虽然我确实在我的订阅中定义了一个带有 {MYAPPID} 的 SP,但我不记得曾经在我的本地机器上使用过它,所以我的本地应用程序如何具有与(我假设是自动生成的)相同的 APPID当我使用以下命令创建服务主体时得到: az ad sp create-for-rbac --name "MyApp"

  2. 其次,查看我的 keyvault 的访问策略,似乎 {MYAPPID} 有权对所有事情做正确的事

我错过了什么吗? 是否应该以其他方式完成? (或者根本没有?)

在本地运行代码时, DefaultAzureCredential会自动使用名为AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET的环境变量描述的服务主体。

所以要使用它,请先在本地高级设置中Set environmental variables ,使用az ad sp create-for-rbac的 AD App 的值即可。

要访问 keyvault 机密,您需要将与 AD 应用相关的服务主体添加到具有正确机密权限Get, List的 keyvault 的Access policies中。

注意:请确保服务主体与您的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM