【问题标题】:Finding the azure account key with Blob Service Client fails(azure python sdk)使用 Blob 服务客户端查找 azure 帐户密钥失败(azure python sdk)
【发布时间】:2021-02-24 14:02:35
【问题描述】:

我正在使用 名称:天蓝色管理存储 版本:16.0.0 摘要:适用于 Python 的 Microsoft Azure 存储管理客户端库 主页:https://github.com/Azure/azure-sdk-for-python

用于生成报告以查找存储容器大小。 我正在使用的代码的 sn-p 如下

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,但我无法做到。

【问题讨论】:

    标签: python-3.x azure rest azure-storage azure-sdk-python


    【解决方案1】:

    由于您已经在使用客户端机密凭证,您可以进行存储操作(在这种情况下计算存储容器大小)。请注意,在我的代码下面,我已经有了方便的订阅 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))
    

    【讨论】:

    • 感谢您的回答。我可以使用 storage_client.storage_account.list_keys(resource_group_name, account_name) 访问密钥。键。链接如下:github.com/Azure/azure-sdk-for-python/blob/…
    • 还有凭证对象太错误我使用密钥作为创建容器客户端所需的位置参数凭证。如果您可以将凭据的值更改为 key1,那么我可以接受您的回答。或者,您可以提供一种替代方式来提供凭据,因为它可以帮助其他用户。
    • “凭据对象也有太多错误” - 你能具体谈谈你观察到的问题吗?
    • 将很快发布一个单独的问题
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2018-02-24
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多