代码之家  ›  专栏  ›  技术社区  ›  wwnde

设置Azure环境凭据()

  •  0
  • wwnde  · 技术社区  · 4 年前

    我使用的是具有动态IP地址的Azure虚拟机。登录后,我能够使用以下python代码检索机密,没有任何问题;

    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")
    

    我需要在VM打开但未登录时检索机密,以使其他进程能够运行。当我注销时,我注意到上面的代码失败了。系统管理员给了我 AZURE_CLIENT_ID , AZURE_CLIENT_SECRET , AZURE_TENANT_ID VAULT_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

    我试着用这个密码找回我的秘密,

    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,以便将其设置为与EnvironmentCredentials相同,因为我相信登录时恢复机密的原因是登录时缓存了凭据?

    非常感谢您的帮助。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Joy Wang    4 年前

    如何纠正这一点,或者我做错了什么?

    该错误表示您的服务主体在密钥库中没有正确的秘密权限-> Access policies ,要解决此问题,请将错误消息中提到的应用程序(服务主体)添加到 访问策略 Get azure门户中密钥库中的秘密权限。如果仍然不起作用,请尝试在 System variables 而不是 User variables for xxx 如您的屏幕截图所示。

    我是否有办法打印DefaultAzureCredentials,以便将其设置为与EnvironmentCredentials相同,因为我相信登录时恢复机密的原因是登录时缓存了凭据?

    没有必要这样做 DefaultAzureCredential 尝试按以下顺序通过以下机制进行身份验证,请参阅 here 。如果您之前没有设置环境变量,则应使用VM的托管标识进行身份验证。