Как токен доступа генерируется из управляемого удостоверения в Azure, используемого с Python SDK? - PullRequest
0 голосов
/ 29 октября 2019

В Azure я настроил виртуальную машину с управляемой идентификацией. Я следую инструкциям здесь https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-linux-vm-access-arm

Так что теперь у меня есть токен доступа. Но я не могу понять, как мне использовать этот токен для доступа к своему хранилищу ключей? Я использую Python SDK. Глядя на документы для SDK здесь https://docs.microsoft.com/en-us/python/api/azure-keyvault/azure.keyvault?view=azure-python

Существует класс токена доступа AccessToken(scheme, token, key) Я предполагаю, что могу использовать свой токен, сгенерированный ранее здесь. Но что такое схема и ключ? Документы не объясняют это. Или я смотрю на неправильный класс для использования с токеном?

1 Ответ

0 голосов
/ 30 октября 2019

Я бы не рекомендовал использовать управляемую идентификационную информацию виртуальной машины для доступа к KeyVault. Вам следует создать субъект-службу, если вы собираетесь запускать сценарии / код.

Лучший способ сделать это с помощью интерфейса командной строки Azure. См. здесь для получения инструкций по установке интерфейса командной строки и обратитесь к this или this для создания субъекта службы.

Лучший способуправлять ресурсами в Python можно с помощью ADAL, который задокументирован:

https://github.com/AzureAD/azure-activedirectory-library-for-python

В вашем случае, однако, управление KeyVault стало немного проще, поскольку библиотека KeyVault для Python также предоставляетозначает для вас аутентификацию без непосредственного использования ADAL для получения вашего токена доступа. См. Здесь:

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

from azure.keyvault import KeyVaultClient
from azure.common.credentials import ServicePrincipalCredentials

credentials = ServicePrincipalCredentials(
    client_id = '...',
    secret = '...',
    tenant = '...'
)

client = KeyVaultClient(credentials)

# VAULT_URL must be in the format 'https://<vaultname>.vault.azure.net'
# KEY_VERSION is required, and can be obtained with the KeyVaultClient.get_key_versions(self, vault_url, key_name) API
key_bundle = client.get_key(VAULT_URL, KEY_NAME, KEY_VERSION)
key = key_bundle.key

В приведенном выше описании client_id, secret и tenant (id) являются выходами команды az ad sp create-for-rbac --name {APP-NAME} CLI.

Не забудьте просмотреть и настроить назначения ролей для созданного вами sp. И ваш KeyVault безопасен только на тех устройствах, которые имеют доступ к учетным данным вашего sp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...