apache-spark - 使用 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 实例的自定义令牌提供程序,但我想知道是否有一种不那么核心的方法。
解决方案
如果您想使用用户凭据进行身份验证,受支持的身份验证方式中最接近的方式是OAuth 2.0: Username and Password
,但本质上它使用Azure AD ROPC 流进行身份验证,它有一些限制,例如它不适用于用户帐户,即启用 MFA。
其实,对于本地开发,我最想推荐的方式是使用服务主体来认证 ie OAuth 2.0 Client Credentials
,因为 MSI(托管标识)本质上是 azure 管理的服务主体,如果你使用 MSI 进行生产,过渡环境会更流畅,azure 中的权限内容在某些情况下会是用户帐户和服务主体之间的一些差异(可能不是这种情况)。当然,Custom Token Provider也是一种可行的方式,都靠自己。
推荐阅读
- system-verilog - 对解压数组的赋值必须是聚合表达式
- ruby-on-rails - 如何使用 rails 的 Active Storage 从
- api - RESTFULL网络服务葡萄文件rails 4中没有巫术方法
- jenkins - 无法使用 Jenkins 多分支管道、Bitbucket Server 和 Webhook 自动发现 Git 标签到 Jenkins for Bitbucket Server
- php - 不要在页面加载时运行警报
- angular - 键入“可观察<{} | IProduct[]>' 不可分配给类型 'Observable
' - java - 如何让 Graal SDK 包在没有 Maven 的情况下工作?
- charts - Google Charts 更改时间轴 X 轴字体的颜色
- react-apollo - 如何使用 Apollo 的 MockedProvider 设置 Storybook 的 storyshots 插件
- sql - 根据子记录的条件过滤掉父记录