Ошибка поиска ключа учетной записи Azure с помощью клиента службы больших двоичных объектов (Azure python sdk)

#python-3.x #azure #rest #azure-storage #azure-sdk-python

#python-3.x #azure #остальное #azure-хранилище #azure-sdk-python

Вопрос:

Я использую имя: 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, чего я не могу.

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

Комментарии:

1. Спасибо за ответ. Я получил доступ к ключам с помощью storage_client.storage_account.list_keys(имя_группы_ресурсов, имя_учета). ключи. Ссылка приведена ниже: github.com/Azure/azure-sdk-for-python/blob /…

2. Кроме того, объект учетных данных слишком глючный, я использовал ключ в качестве требуемого позиционного аргумента учетных данных для создания контейнерных клиентов. Если вы можете изменить значение учетных данных на key1, я могу принять ваш ответ. Или вы можете предоставить альтернативный способ предоставления учетных данных, поскольку это может помочь другим пользователям.

3. «Также объект учетных данных слишком глючит» — можете ли вы уточнить проблему, которую вы наблюдали?

4. Скоро к нему будет задан отдельный вопрос