Python Azure功能-使用密钥库进行MSI身份验证

时间:2020-05-06 20:02:30

标签: python python-3.x azure azure-functions azure-keyvault

我正在尝试设置一个Python Azure函数,该函数将使用托管身份从密钥库中检索机密。我已授予我的Function App的“托管身份”权限,以访问和从Key Vault检索机密。我已经根据此处显示的Microsoft文档对Python脚本进行了配置:

https://docs.microsoft.com/en-us/python/api/overview/azure/key-vault?view=azure-python

我尝试使用MSI身份验证,而不是使用默认凭据,如此处所述:

https://docs.microsoft.com/en-us/azure/developer/python/azure-sdk-authenticate#mgmt-auth-msi

如果我使用MSI身份验证链接中提供的示例,则它可以工作。但是,当我使用Key Vault方法时,会收到以下错误:

MSIAuthentication' object has no attribute 'get_token'

我的代码如下

    if name:
        # Create MSI Authentication
        credentials = MSIAuthentication()

        try:
            secret_client = SecretClient(vault_url="https://myvault.vault.azure.net", credential=credentials)

            secret = secret_client.get_secret("mySecret") 

            return func.HttpResponse(f"My super secret is: {secret.value}!")

        except Exception as e:
            err = "type error: " + str(e)
            return func.HttpResponse(f"{err}")

关于如何使这种方法起作用的任何建议。

TIA

(我知道我可以利用应用程序设置来建立指向Key Vault的链接并在我的Python脚本中引用该变量。此方法的问题在于,密钥库密钥是当密钥旋转时,有必要重新启动功能应用程序)

1 个答案:

答案 0 :(得分:1)

您需要将MSIAuthentication更改为ManagedIdentityCredential。然后它将正常工作。此处的示例代码:

from azure.identity import ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

credentials = ManagedIdentityCredential()

secret_client = SecretClient(vault_url="https://myKeyvault.vault.azure.net", credential=credentials)
secret = secret_client.get_secret("mysecret")
print(secret.value)