Как использовать управляемую пользователем идентификацию из облачной функции Azure (python) при отправке запроса в Azure KeyVault?

Моя текущая настройка:

Мой парень DevOps создал учетную запись, управляемую пользователем, и добавил ее в политику доступа хранилища ключей Azure.
Я создал приложение-функцию testing-01 и назначил ему User-ManagedIdentity в настройках платформы.
Я использую Python 3.6 как язык времени выполнения.

Это мой вспомогательный метод, который я использую, чтобы проверить, могу ли я получить доступ к секретам из хранилища ключей. и я возвращаю его ответ.

def cred_checker():
    credential = ManagedIdentityCredential()
    # credential = ManagedIdentityCredential(client_id='client_id 
    vault_name= "myvault"
    client = SecretClient(vault_url=f"https://{vault_name}.vault.azure.net/", credential=credential)
    username = client.get_secret(name="username")
    password= client.get_secret(name="password")

    return f"AKV client created successfully {client} .<br> name: {username},<br> pass: {password} " 

Я могу создать клиента без ошибок. Но когда я пытаюсь извлечь из него секрет, я получаю ClientAuthenticationError:

Exception while executing function: Functions.HttpTriggerFunc <--- Result: Failure Exception: ClientAuthenticationError: Unexpected response '{'statusCode': 400, 'message': 'Unable to load requested managed identity.', 'correlationId': '92daf146-fed2-4a75-8359-9r955939815e'}'

person rand0mb0t    schedule 08.11.2019    source источник


Ответы (2)


При использовании назначенного пользователем удостоверения необходимо указать _ 1_ MSI в _ 2_.

credential = ManagedIdentityCredential(client_id="xxxxxxxx")

Чтобы получить client_id, перейдите в свое приложение-функцию -> Identity -> User assigned -> щелкните свой идентификатор, назначенный пользователем -> скопируйте файл client_id.

введите здесь описание изображения

person Joy Wang    schedule 11.11.2019
comment
Я также пробовал этот подход, если вы видите комментарий (комментарий python) в моей функции. Не сработало. - person rand0mb0t; 11.11.2019

Вот как вы могли бы использовать Managed Identity в Python:

from msrestazure.azure_active_directory import MSIAuthentication
creds = MSIAuthentication()
client = SecretClient(vault_url=MyVaultUrl, credentials=creds)

Однако для того, чтобы это работало, вам необходимо назначить идентификатор вашей функции Azure как часть развертывания. Если вы используете terraform, есть провайдер, который вы можете использовать, и он принимает блок идентификации {}, в котором вы можете указать type = "UserAssigned" и identity_ids = ["id1", "id2", ...]

person latenighter    schedule 15.04.2020