首页 > 解决方案 > 使用 Azure Identity 凭据进行 Spark 访问 Blob 存储

问题描述

我正在尝试使用 Azure RBAC 来保护对存储 blob 的访问,并使用 Azure Identity 从 Apache Spark 访问这些 blob。我看到最新版本的 Hadoop-Azure 支持 abfs,它支持一些令牌提供程序:https ://hadoop.apache.org/docs/current/hadoop-azure/abfs.html#Azure_Managed_Identity 。对于生产用途,我可以将服务主体与 AD 应用程序以及关联的客户端 ID、机密和端点一起使用。或者我什至可以使用托管身份。

在本地开发时,最好能够使用 DeviceCodeCredential 或 InteractiveBrowserCredential 之类的东西做同样的事情,即让用户使用浏览器登录到 Azure,并使用返回的凭据来获取访问令牌作为传递它到火花。我想要这样做的原因是让用户在访问数据时使用他们自己的凭据,而不是让存储密钥/SAS 令牌/等飞来飞去。

这样的事情可能吗?我可以实现一个包装 Azure Identity 实例的自定义令牌提供程序,但我想知道是否有一种不那么核心的方法。

标签: apache-sparkazure-active-directory

解决方案


如果您想使用用户凭据进行身份验证,受支持的身份验证方式中最接近的方式OAuth 2.0: Username and Password,但本质上它使用Azure AD ROPC 流进行身份验证,它有一些限制,例如它不适用于用户帐户,即启用 MFA。

其实,对于本地开发,我最想推荐的方式是使用服务主体来认证 ie OAuth 2.0 Client Credentials,因为 MSI(托管标识)本质上是 azure 管理的服务主体,如果你使用 MSI 进行生产,过渡环境会更流畅,azure 中的权限内容在某些情况下会是用户帐户和服务主体之间的一些差异(可能不是这种情况)。当然,Custom Token Provider也是一种可行的方式,都靠自己。


推荐阅读