【问题标题】:Using Azure Identity credentials for Spark access to Blob store使用 Azure Identity 凭据进行 Spark 访问 Blob 存储
【发布时间】:2021-03-04 23:42:41
【问题描述】:

我正在尝试使用 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,并使用返回的凭据来获取访问令牌将其传递给 Spark。我想要这样做的原因是让用户在访问数据时使用他们自己的凭据,而不是让存储密钥/SAS 令牌/等飞来飞去。

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

【问题讨论】:

    标签: apache-spark azure-active-directory


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢...这也是我发现的。它们都没有那么好用。最大的障碍似乎是无法明确指定访问令牌,只能指定存储密钥。而且 CustomTokenProvider 需要相当多的设置。
    • @ashic 我认为客户端凭据可以工作hadoop.apache.org/docs/current/hadoop-azure/…
    • 是的,但问题是我希望对用户使用 RBAC 配置的访问权限。因此,虽然客户端凭据可以工作,但他们需要相关用户有权访问的 AD 应用程序的客户端 ID 和密码。我正在寻找使用 DeviceCodeCredential 或类似的东西,因此对存储的访问直接针对用户的帐户。
    猜你喜欢
    • 2020-10-25
    • 2013-01-28
    • 2013-12-04
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多