python-3.x - 设置 Azure 环境凭据()

标签 python-3.x azure python-requests azure-active-directory azure-keyvault

我使用的是具有动态 IP 地址的 Azure VM。当我登录时,我可以使用以下 python 代码检索 secret ,没有任何问题;

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url="https://xxxx/", credential=credential)
secret = secret_client.get_secret("testSecret")

我需要在虚拟机打开但未登录时检索 secret 以启用其他进程运行。我注意到当我注销时上面的代码失败了。系统管理员向我提供了 AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_IDVAULT_URL,以便我将它们设置为环境凭据。

我在CMD中设置它们如下;

SETX AZURE_CLIENT_ID "pppp"
SETX AZURE_CLIENT_SECRET "mmmm"
SETX AZURE_TENANT_ID "kkkk"
SETX VAULT_URL "xxxx"

当我检查系统环境设置时,我可以看到它们已设置enter image description here

我尝试使用此代码检索我的 secret ,

from azure.keyvault.secrets import SecretClient
VAULT_URL = os.environ["VAULT_URL"]
credential = EnvironmentCredential()
client = SecretClient(vault_url=VAULT_URL, credential=credential)
password = client.get_secret("testSecret").value

我收到这个错误

raise HttpResponseError(response=response, model=error)
azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'pppp;iss=https://sts.windows.net/kkkk/' does not have secrets get permission on key vault 'name of my vault-vault;location=australiasoutheast'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287

问题 系统管理员确认颁发的凭据是服务主体的正确详细信息。

  1. 如何纠正这个问题或者我做错了什么?
  2. 有没有办法让我打印 DefaultAzureCredentials,以便将其设置为与 EnvironmentCredential 相同,因为我相信登录时恢复 secret 的原因是登录时凭据会被缓存?

我们将非常感谢您的帮助。

最佳答案

How can correct this or what am I doing wrong?

该错误表示您的服务主体在 keyvault 中没有正确的 secret 权限 -> 访问策略,要解决此问题,请将错误消息中提到的应用程序(服务主体)添加到使用 Azure 门户中的 keyvault 中的 Get secret 权限访问策略。如果仍然不起作用,请尝试在系统变量中设置环境变量,而不是xxx的用户变量,如屏幕截图所示。

Is there a way for me to print DefaultAzureCredentials so that I set the same as EnvironmentCredential because I believe why I recover secrets when I am logged in is that the credentials are cached when I sign in?

无需执行此操作,DefaultAzureCredential 尝试按此顺序通过以下机制进行身份验证,请参阅 here 。如果您之前未设置环境变量,则应使用虚拟机的托管身份进行身份验证。

关于python-3.x - 设置 Azure 环境凭据(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64473359/

相关文章:

python - 如何使用 mpl_toolkits.axes_grid1.inset_locator.mark_inset 控制 zorder 和裁剪?

python - 给定两个字符串,如何将较短的字符串分配给一个变量,将较长的字符串分配给另一个变量

Python 请求 - Azure RM API 返回 200 状态代码,但返回 400 内容

security - 为什么 Azure AD 在 Multi-Tenancy 场景中无法登录非管理员?

python azure webApp,带有 openai

python - 如何将具有不同长度值的列表转换为字典?

python - 更新/追加 Pandas 数据框

python - 以编程方式更新 Zapier 存储

python - Spotify 授权代码(不是访问 token )即将过期 - 我该如何规避此问题?

python - 使用 Python 请求登录 Morningstar.com