微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Blob Service Client查找Azure帐户密钥失败azure python sdk

如何解决使用Blob Service Client查找Azure帐户密钥失败azure python sdk

我正在使用 名称:azure-mgmt-storage 版本:16.0.0 摘要:适用于Python的Microsoft Azure存储管理客户端库 主页: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_keyblob_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,但我无法生成该字符串。

解决方法

由于您已经在使用客户端密钥凭证,因此可以执行存储操作(在这种情况下,请计算存储容器的大小)。请注意,在我的代码下面,我已经有了订阅ID,所以我没有使用订阅客户端。但是您绝对可以喜欢您的原始代码。

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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。