如何使用Java SDK在Azure Data Lake Gen1中创建资源及403报错排查
错误根本原因及解决方案
1. 代码中授权请求的资源标识错误(首要原因)
你当前代码中调用acquireToken获取令牌时,传入的资源URI是https://management.core.windows.net/,该范围仅适用于Azure资源管理层操作,比如创建、删除ADLS Gen1账户,不支持ADLS Gen1文件系统的数据平面操作,包括创建目录、读写文件等。
你需要将获取令牌的代码修改为:
Future<AuthenticationResult> result = context.acquireToken("https://datalake.azure.net/", new ClientCredential(clientId, clientSecret), null);
2. 服务主体缺少文件系统ACL权限
你在Azure控制台操作时使用的是个人用户身份,已经默认拥有对应ADLS账户的操作权限,但代码中使用的是服务主体(clientId对应的Azure AD应用)身份,该身份需要单独配置文件系统访问权限:
- 进入Azure Portal的对应ADLS Gen1账户页面,打开「数据资源管理器」
- 选中根目录
/,点击「访问」选项 - 添加你的服务主体,分配「读取、写入、执行」权限,权限生效范围选择「此文件夹和所有子文件夹」即可
3. 其他排查项
- 确认代码中配置的
clientId、clientSecret、tenantId参数和Azure AD中注册的应用配置完全一致 - 确认ADLS Gen1账户的防火墙规则没有拦截你运行代码的主机IP地址
内容的提问来源于stack exchange,提问作者kpgenes
相关产品推荐
相关产品推荐

