Как проверить подлинность пользователя с помощью BLOB-объекта хранилища Azure в python? - PullRequest
0 голосов
/ 23 декабря 2018

Я ищу способ аутентификации пользователя по контейнеру BLOB-объектов Azure.Пример кода (да, предупреждение новичка) работает просто отлично, используя ключ доступа к учетной записи хранения, но это неудобно, как передача полного контроля над всей учетной записью хранения любому, кто украл учетные данные.

Пример аутентификации (из https://azure.microsoft.com/en-us/resources/samples/storage-python-getting-started/) выглядит следующим образом:

block_blob_service = BlockBlobService(account_name='<acc>', account_key='<key>')

У меня есть пользователь службы, настроенный в Active Directory с ролью в учетной записи хранения, ограничивающей его использование контейнера BLOB-объектов; он предназначенничего не делать, кроме как записывать новые элементы в один конкретный контейнер.

Я хотел бы использовать учетные данные этого пользователя в скрипте python, чтобы в случае утечки не было доступа к другим ресурсам хранилища.создать ключ доступа на основе комбинации ресурса и идентификатора или аналогичного способа достижения этой цели? Я просматривал документы API Azure Python API, но ничего не добился.

Редактировать: Я немного сделалЯ создал субъект-службу с соответствующими ограничениями IAM. Похоже, что при успешном входе в системуhis:

credentials = ServicePrincipalCredentials( client_id=<>, secret=<>, tenant=<>)
print(credentials)

Что дает мне объект:

<msrestazure.azure_active_directory.ServicePrincipalCredentials object at 0x7f34f52668d0>

И ошибка, если я даю неверные учетные данные.Итак, отлично, у меня есть объект учетных данных.Что теперь?Я не могу найти способ передать его в BlockBlobService.

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете обратиться к этой статье для аутентификации в Azure Active Directory из приложения для доступа к BLOB-объектам.

1. Зарегистрируйте свое приложение с клиентом Azure AD

2. Предоставление разрешений зарегистрированного приложения хранилищу Azure

3. Код Python:

import adal
from azure.storage.blob import (
    BlockBlobService,
    ContainerPermissions,
)
from azure.storage.common import (
    TokenCredential
)

RESOURCE = "https://storage.azure.com/"
clientId = "***"
clientSecret = "***="
tenantId = "***"
authority_url = "https://login.microsoftonline.com/" + tenantId

print(authority_url)
context = adal.AuthenticationContext(authority_url)

token = context.acquire_token_with_client_credentials(
    RESOURCE,
    clientId,
    clientSecret)
print(token)

tokenCre = TokenCredential(token["accessToken"])

blobService = BlockBlobService(account_name="***", token_credential=tokenCre)

blobService.list_blobs(container_name="***")
for i in blobService.list_blobs(container_name="***"):
    print(i.properties.name)
...