0

我正在尝试使用此示例从 .Net 客户端应用程序访问数据湖

我已经在 AAD 租户中注册了客户端应用程序,并从那里使用了客户端 ID 和客户端密码(因为我认为这是服务到服务身份验证。)

数据湖在不同的订阅中,但属于同一个租户/AAD

该应用程序在数据湖中的特定文件夹(根文件夹下的两个层次结构)的“所有者”和“分配的权限”下具有读/写/执行权限。直到根目录的父文件夹具有此处提到的执行权限。应用程序的“访问控制 (IAM)”中的总体访问级别为“读者”

我收到以下错误,我认为这意味着我能够进行身份验证但没有足够的权限来读取/写入:

Microsoft.Azure.DataLake.Store.AdlsException: Error opening a Read Stream for file something/something/something.txt
Operation: GETFILESTATUS failed with HttpStatus:Forbidden RemoteException: AccessControlException GETFILESTATUS failed with 
error 0x83090aa2 (Forbidden. ACL verification failed. Either the resource does not exist or the user is not authorized to 
perform the requested operation.).
[***][***] JavaClassName: org.apache.hadoop.security.AccessControlException.
Last encountered exception thrown after 1 tries. [Forbidden: AccessControlException]
[ServerRequestId:***]

我不明白缺少哪些其他权限?我必须在这里使用服务主体吗?如果是这样,我如何检查我的应用程序服务主体在此数据湖上的访问权限。谢谢。

4

2 回答 2

0

答案是 - 是的,您必须使用服务主体。

有关应用程序与服务主体的更多信息,请参阅此处

基本上 Azure 在后台使用 Service Principle ID 来授权 Data Lake 中的数据访问。如果您使用应用程序 ID,您将在 Data Lake 文件夹的“访问”刀片上看到与您的应用程序相同的“显示名称”,并错误地认为您具有访问权限。

因此,请确保使用服务主体 ID 而不是应用程序 ID 来授予 ACL 访问权限。

于 2019-01-08T22:00:59.903 回答
0

最简单的测试方法,授予您的应用程序所有者对数据湖 (Access Control IAM) 的权限,等待 15 分钟并进行测试。如果可以解决它>>这意味着您在某处搞砸了权限。

无法判断您在权限分配中哪里出错了。作为一般规则,您需要 read\execute 来读取文件(这有点令人惊讶)。

于 2019-01-05T18:48:19.693 回答