我尝试使用azurerbac来保护对存储blob的访问,并使用azureidentity从apachespark访问这些blob。我看到最近版本的hadoop azure支持abfs,并且它支持一些令牌提供者:https://hadoop.apache.org/docs/current/hadoop-azure/abfs.html#azure_managed_identity . 对于生产使用,我可以将服务主体与ad应用程序以及关联的客户端id、机密和端点一起使用。或者我甚至可以使用托管身份。
在本地开发时,最好能使用devicecodecredential或interactivebrowsercredential之类的工具,即使用浏览器登录到azure,并使用返回的凭据获取访问令牌并将其传递给spark。我希望这样做的原因是让用户在访问数据时使用自己的凭据,而不是让存储密钥/sas令牌/etc到处乱飞。
这样的事情可能吗?我可以实现一个定制的令牌提供程序来 Package 一个azure身份示例,但是我想知道是否有一个不那么核心的方法。
1条答案
按热度按时间nnvyjq4y1#
如果要使用用户凭据进行身份验证,则支持的身份验证方式中最接近的方式是
OAuth 2.0: Username and Password
,但本质上它使用azure ad ropc流进行身份验证,它有一些限制,例如,它不会与启用mfa的用户帐户一起工作。实际上,对于本地开发,我最想推荐的方法是使用服务主体进行身份验证。
OAuth 2.0 Client Credentials
,因为msi(托管标识)本质上是由azure管理的服务主体,如果您将msi用于生产,环境的转换将更加平滑,azure中的权限内容将在某些情况下(在这种情况下可能不是这样)用户帐户和服务主体之间存在一些差异。当然,自定义令牌提供者也是一种可行的方法,它们都取决于您自己。