Не удается найти ключ учетной записи Azure с помощью клиента службы BLOB-объектов (azure python sdk)

Я использую Имя: azure-mgmt-storage Версия: 16.0.0 Обзор: Клиентская библиотека управления хранилищем Microsoft Azure для Python Домашняя страница: https://github.com/Azure/azure-sdk-for-python

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

from azure.mgmt.storage import StorageManagementClient

subscription_client = Subscription(tenant=tenant_id, client_id=client_id, secret=client_secret)
service_principals = subscription_client.credentials
subscription_id = subscription_client.find_subscription_id()
storage_client = StorageManagementClient(credential=service_principals, subscription_id=subscription_id)
storage_account_list = storage_client.storage_accounts.list()
for storage_account in storage_account_list:
    blob_service_client = BlobServiceClient(account_url=storage_account.primary_endpoints.blob,credential=service_principals)
                    account_info = blob_service_client.get_service_properties()
    keys = blob_service_client.credential.keys()

Когда я оцениваю выражение blob_service_client.credential, значение равно

<azure.identity._credentials.client_secret.ClientSecretCredential object at 0x05747E98>
  1. blob_service_client.api_version оценивается как 2020-02-10.

  2. И blob_service_client.credential.account_key или blob_service_client.credential.account_key() оценивается как {AttributeError}'ClientSecretCredential' object has no attribute 'account_key'

  3. или даже когда я пытаюсь blob_service_client.credential.keys() я получаю {AttributeError}'ClientSecretCredential' object has no attribute 'keys' ошибку

Любой специалист по Azure может мне здесь помочь? Также строки подключения - это еще один способ решения этой проблемы, где я могу использовать:

BlobServiceClient.from_connection_string(connection_string)

для чего мне также необходимо динамически генерировать connection_string, чего я не могу.


person Shreyas Moolya    schedule 12.11.2020    source источник


Ответы (1)


Поскольку вы уже используете секретные учетные данные клиента, вы можете выполнить операцию хранения (в данном случае рассчитать размер контейнера для хранения). Обратите внимание, что ниже в моем коде у меня уже был под рукой идентификатор подписки, поэтому я не использовал клиент подписки. Но вам определенно может понравиться ваш исходный код.

from azure.identity import ClientSecretCredential
from azure.mgmt.storage import StorageManagementClient
from azure.storage.blob import BlobServiceClient, ContainerClient

tenant_id='<tenant id>'
client_id='<client id>'
client_secret='<secret>'
subscription_id='<subscription id>'

credentials = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
storage_client = StorageManagementClient(credential=credentials, subscription_id=subscription_id)
storage_account_list = storage_client.storage_accounts.list()
for storage_account in storage_account_list:
    blob_service_client = BlobServiceClient(account_url=storage_account.primary_endpoints.blob,credential=credentials)
    containers = blob_service_client.list_containers()
    for container in containers:
        container_client = ContainerClient(account_url=storage_account.primary_endpoints.blob,credential=credentials, container_name=container.name)
        blobs = container_client.list_blobs()
        container_size = 0
        for blob in blobs:
            container_size = container_size + blob.size
        print('Storage Account: ' + storage_account.name + ' ; Container: ' + container.name + ' ; Size: ' + str(container_size))
person krishg    schedule 12.11.2020
comment
Спасибо за ответ. Я получил доступ к ключам с помощью storage_client.storage_account.list_keys (resource_group_name, account_name). ключи. Ссылка приведена ниже: github.com/Azure/azure-sdk-for-python/blob/ - person Shreyas Moolya; 13.11.2020
comment
Кроме того, объект учетных данных слишком глючен, я использовал ключ в качестве необходимых учетных данных позиционного аргумента для создания клиентов-контейнеров. Если вы можете изменить значение учетных данных на key1, я могу принять ваш ответ. Или вы можете предоставить альтернативный способ предоставления учетных данных, так как это может помочь другим пользователям. - person Shreyas Moolya; 13.11.2020
comment
Также объект учетных данных слишком глючит - не могли бы вы немного рассказать о проблеме, которую вы заметили? - person krishg; 13.11.2020
comment
Скоро отправлю к нему отдельный вопрос - person Shreyas Moolya; 13.11.2020