使用 Blob 服务客户端查找 azure 帐户密钥失败(azure python sdk)
Finding the azure account key with Blob Service Client fails(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>
blob_service_client.api_version
计算结果为 2020-02-10
.
并且 blob_service_client.credential.account_key
或 blob_service_client.credential.account_key()
的计算结果为 {AttributeError}'ClientSecretCredential' object has no attribute 'account_key'
甚至当我尝试 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))
我正在使用 名称: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>
blob_service_client.api_version
计算结果为2020-02-10
.并且
blob_service_client.credential.account_key
或blob_service_client.credential.account_key()
的计算结果为{AttributeError}'ClientSecretCredential' object has no attribute 'account_key'
甚至当我尝试
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))