Python Azure Функция - Проверка подлинности MSI с помощью Key Vault - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь настроить Python Azure функцию, которая будет использовать управляемую идентификацию для извлечения секретов из хранилища ключей. Я дал своему приложению-функции разрешение Managed Identity для доступа и извлечения секретов из Key Vault. Я настроил свой сценарий Python как таковой в соответствии с документами Microsoft, представленными здесь:

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 Ответ

1 голос
/ 07 мая 2020

Вам необходимо заменить 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)
...