1

我正在尝试使用 Python 在 Azure 存储容器中下载数据。使用帐户密钥不是一种选择,因此我正在尝试使用 Azure AD,但到目前为止还无法使其正常工作。我主要使用此处的文档作为参考:https ://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-directory-file-acl-python 。

使用 Azure AD 进行连接的代码:

def initialize_storage_account_ad(storage_account_name, client_id, client_secret, tenant_id):
    
    try:  
        global service_client

        credential = ClientSecretCredential(tenant_id, client_id, client_secret)

        service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
            "https", storage_account_name), credential=credential)
    
    except Exception as e:
        print(e)

下载数据的代码:

def download_file_from_directory():
    try:
        file_system_client = service_client.get_file_system_client(file_system="my-file-system")

        directory_client = file_system_client.get_directory_client("my-directory")
        
        local_file = open("C:\\file-to-download.txt",'wb')

        file_client = directory_client.get_file_client("uploaded-file.txt")

        download = file_client.download_file()

        downloaded_bytes = download.readall()

        local_file.write(downloaded_bytes)

        local_file.close()

    except Exception as e:
     print(e)

现在我知道我已经正确设置了下载,因为我可以在使用帐户密钥时获取数据。但不知何故,使用 Azure AD 连接没有成功。我从注册应用程序开始,查找租户 ID/客户端 ID/客户端密码。我还向注册的应用授予了 Azure 存储的权限并启用了隐式授权流(ID 令牌)。我还缺少什么吗?任何帮助表示赞赏。

4

1 回答 1

0

如果您使用 Azure Active Directory (Azure AD) 授权访问,请确保您分配了存储 Blob 数据所有者角色。并在 Azure 门户中使用 RBAC授予对 Azure Blob 数据的访问权限

你必须将以下Azure 基于角色的访问控制 (Azure RBAC) 角色之一分配给你的安全主体。

存储 Blob 数据所有者:帐户中的所有目录和文件。

存储 Blob 数据参与者:仅安全主体拥有的目录和文件。

有关更多详细信息,请参阅此文档

于 2021-09-06T07:53:50.367 回答