Azure QueueClient Python无法使用DefaultAzureCredential

huwehgph  于 2023-05-07  发布在  Python
关注(0)|答案(1)|浏览(121)

我使用 DefaultAzureCredential() from * azure.identity * 来获取凭证并使用它来建立TableServiceClient(azure.data.table)连接。如果我尝试对QueueClient(azure.storage.queue)执行同样的操作,我会得到以下错误。就我对文档的理解,应该可以使用DefaultAzureCredential()来实现。

[2023-05-06T08:40:40.331Z] Response status: 403
Response headers:
    'Content-Length': '279'
    'Content-Type': 'application/xml'
    'Server': 'Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': '30a41a1b-a003-0004-71f6-7f25a6000000'
    'x-ms-client-request-id': 'adedb50b-ebe9-11ed-b983-001a7dda7113'
    'x-ms-version': 'REDACTED'
    'x-ms-error-code': 'REDACTED'
    'Date': 'Sat, 06 May 2023 08:40:39 GMT'

我用下面的方式连接。如果我用存储帐户密钥切换凭据,它就可以工作。

credential = DefaultAzureCredential()
queue_service_client = QueueClient(
  account_url = os.environ["STORAGE_ENDPOINT_QUEUE"],
  credential=credential,
  queue_name  = "smsnotification"
  )

def pushNotifyToQueune(queue_service_client, playerId):
    logging.info(f"Push notify to queune")
    try:
        response = queue_service_client.send_message("m")
        logging.info(f"Print response form queune {response}")
    except:
        logging.info(f"Something goes wrong when pusing notify to queune")
        #TODO use ErrorName

我尝试使用存储帐户密钥,它工作正常。DefaultAzureCredential也适用于TableServiceClient,但不适用于Queue。

brccelvz

brccelvz1#

请确保为您的用户帐户分配了一个与存储队列相关的RBAC角色。必须根据您的要求为您的用户帐户分配一个或多个Storage Queue Data ContributorStorage Queue Data Message ProcessorStorage Queue Data Message SenderStorage Queue Data Reader角色。

相关问题