Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure AD RBAC的Python Blob存储读取失败-无属性';签名会话';_Python_Azure_Azure Active Directory_Azure Storage Blobs - Fatal编程技术网

Azure AD RBAC的Python Blob存储读取失败-无属性';签名会话';

Azure AD RBAC的Python Blob存储读取失败-无属性';签名会话';,python,azure,azure-active-directory,azure-storage-blobs,Python,Azure,Azure Active Directory,Azure Storage Blobs,问题摘要:使用Azure SDK for Python从Blob存储区读取Python在BlockBlobService.get_Blob_to_path上失败,错误是在我向Azure AD进行身份验证后,我使用的RBAC客户端没有名为“signed session”的属性 详情如下: 我已经(作为第三方)获得了对Azure Blob存储帐户的读取访问权-使用Azure Active Directory RBAC(基于角色的访问控制)。Blob存储区的所有者授予我存储Blob数据读取器的角色 我

问题摘要:使用Azure SDK for Python从Blob存储区读取Python在BlockBlobService.get_Blob_to_path上失败,错误是在我向Azure AD进行身份验证后,我使用的RBAC客户端没有名为“signed session”的属性

详情如下:

我已经(作为第三方)获得了对Azure Blob存储帐户的读取访问权-使用Azure Active Directory RBAC(基于角色的访问控制)。Blob存储区的所有者授予我存储Blob数据读取器的角色

我在网上找到的从Python连接到Blob存储读取的详细示例使用account_名称和account_键参数,但我没有这些凭据,因为我不拥有存储本身

因此,我发现了如何使用RBAC连接到Azure——然而读取操作本身似乎失败了——尽管我认为我的问题实际上是在创建BlockBlobService的步骤中

我已经创建了一个简化的脚本,根据我知道需要下载的文件,从商店中提取文件样本。我似乎能够连接到Azure Active Directory(断开internet连接确认失败),但一旦执行读取,经过一段时间(~30秒),就会生成一个错误,如下所示

自然-编辑的部分在我的代码中具有正确的凭据/详细信息:


    from azure.storage.blob import BlockBlobService
    from azure.storage.blob import ContainerPermissions
    from azure.graphrbac import GraphRbacManagementClient
    from azure.common.credentials import UserPassCredentials

    print('Connecting to Azure Active Directory')
    credentials = UserPassCredentials(
                'myname@email.com',      # Your user
                'zzzzz',          # Your password
                resource="https://graph.windows.net"
        )

    tenant_id = "zzzz"

    graphrbac_client = GraphRbacManagementClient(
        credentials,
        tenant_id
    )

    AccountName = "account_name"
    imagesContainer = "container_name"

    ## Connect to the Azure Block Blob service using the GraphRBAC
    print('Connecting to Azure Block Blob Service')
    block_blob_service = BlockBlobService(account_name=AccountName, token_credential=graphrbac_client)

以上所有操作似乎都正常运行,没有任何错误或异常。但是,只要我运行下面的代码,就会出现下面的错误:


    block_blob_service.get_blob_to_path(imagesContainer, AzureFilename, newFileName)

如果有人能帮我指出我应该做什么,我将不胜感激


谢谢大家!

您可以按照以下步骤验证应用程序以访问存储blob

一,。在Azure门户中

单击您刚刚注册的应用程序。 单击设置->单击关键点->输入关键点的说明->单击保存。密钥的值是客户端机密

二,

3.访问存储资源

import adal
from azure.storage.blob import (
    BlockBlobService,
    ContainerPermissions,
)
from azure.storage.common import (
    TokenCredential
)

RESOURCE = "https://storage.azure.com/"
clientId = "***"
clientSecret = "***="
tenantId = "***"
authority_url = "https://login.microsoftonline.com/" + tenantId

print(authority_url)
context = adal.AuthenticationContext(authority_url)

token = context.acquire_token_with_client_credentials(
    RESOURCE,
    clientId,
    clientSecret)
print(token)

tokenCre = TokenCredential(token["accessToken"])

blobService = BlockBlobService(account_name="***", token_credential=tokenCre)

非常感谢您的回复,Tony-不幸的是,我没有权限添加应用程序或在存储容器中授予权限-但我已要求所有者这样做,所以希望会很快。。。我会在测试后发回@布莱恩,不客气。如果您需要进一步的帮助,请告诉我。@Brian嗨Brian,现在进展如何?嗨-管理员刚刚添加了应用程序,但我没有任何乐趣。我发现使用应用程序ID时,ADAL确实连接到了存储,但是客户机机密对我来说似乎是个谜——我尝试了ObjectID,但是我一直得到ADAL错误“AADSTS7000215:提供的客户端密码无效。我已经在我自己的Azure上创建了一个测试应用程序,但看不到客户端机密来自何处。在上面的代码中,clientSecret指的是什么?我在哪里可以找到它?非常感谢@布莱恩:我已经更新了答案,你可以检查一下。

    block_blob_service = BlockBlobService(account_name=AccountName, token_credential=graphrbac_client)

import adal
from azure.storage.blob import (
    BlockBlobService,
    ContainerPermissions,
)
from azure.storage.common import (
    TokenCredential
)

RESOURCE = "https://storage.azure.com/"
clientId = "***"
clientSecret = "***="
tenantId = "***"
authority_url = "https://login.microsoftonline.com/" + tenantId

print(authority_url)
context = adal.AuthenticationContext(authority_url)

token = context.acquire_token_with_client_credentials(
    RESOURCE,
    clientId,
    clientSecret)
print(token)

tokenCre = TokenCredential(token["accessToken"])

blobService = BlockBlobService(account_name="***", token_credential=tokenCre)