【问题标题】:Synapse Pipeline - How do I specify identity for Pipeline Run? (SP/UAMI etc)Synapse Pipeline - 如何指定 Pipeline Run 的标识? (SP/UAMI 等)
【发布时间】:2023-02-02 20:55:28
【问题描述】:

我在受控的企业环境中使用 Synpase Spark Pools。我查询 AAD 的权限有限,但我可以创建 UAMI 并将它们分配给资源。

当我访问我的 Synpase 工作区时,我可以创建一个 Spark 作业定义来从 ADLS 读取一些数据。查看 Monitor 选项卡下的 Apache Spark Applications 列表,我可以看到这些作业使用我的身份 (tim.davies@work.com) 作为“提交者”,并且由于我已经为自己授予了对数据存储的 rx 访问权限,所以这些工作成功了。

现在,如果我创建一个管道,并将其配置为运行我的 Spark 作业定义,它会因授权错误而失败。回到 Monitor 下的 Apache Spark Applications 列表,我看到我的 Pipeline 有一个不同的 Identity 用作 Submitter,这可以解释为什么它没有被授权访问数据。

首先,我不确定现在使用哪个身份作为提交者,我无法将 UUID 识别为我的 Synapse Workspace SAMI 或 UAMI(但我无法查询 AAD 以获取更多信息)。

但是总的来说,我突然想到我可能希望能够为我的管道分配明确的 UAMI 以在其下运行。这可能吗?或者是否有不同的管理模型?

【问题讨论】:

    标签: azure azure-active-directory azure-data-factory azure-synapse


    【解决方案1】:

    据我了解,这里的问题是了解如何从 Spark 作业中读取来自 ADLS 的数据。由于您可以访问 ADLS,因此工作正常。我认为您必须在 ADLS 上设置 Synapse Workspace 的权限,它应该可以正常工作。

    【讨论】:

    • 不是真的,问题是在不同场景下运行 Spark 作业时使用哪个身份,例如。在工作区与管道中。我在这方面取得了一些进展,但想在发布答案之前解决几个问题。
    【解决方案2】:

    对此的更新速度稍慢,但我已经在理解方面找到了一些答案,如果不是一个解决方案的话。对于关注或研究相同问题的任何人,在此处分享将很有用。

    首先,当通过门户/UI 访问 Synapse 工作区时,笔记本或独立“Apache Spark 作业定义”使用的可操作身份是登录用户的身份(通过“AAD Passthrough” ).这对用户体验非常有用,尤其是在 Notebooks 中,您只需要确保您作为个人对您使用的任何数据源都有个人访问权限。在某些情况下,如果您的用户身份没有此访问权限,您可以使用工作区关联服务相反,但并非总是如此! (继续阅读)

    但是,一旦您切换到使用 Pipelines,所使用的身份是 System Assigned Managed Identity (SAMI) of the workspace,它是在资源创建时创建和分配的。这没关系,但了解粒度很重要,即。有权访问资源的是工作区,而不是单个管道。因此,如果您想运行具有不同访问级别的管道,您将需要将它们部署到隔离的 Synapse 工作区(具有不同的 SAMI)。

    除了这一点之外,还有“提交者' 我在最初的问题中提到过,它在所有 Apache Spark 应用程序的 Synapse 工作区的监视器选项卡下可见。当以用户(例如 Notebooks)身份运行时,此提交者 ID 是我的 AAD 用户名,这很简单。但是,当作为管道运行时,提交者 ID 为 'ee20d9e7-6295-4240-ba3f-c3784616c565',我的意思是字面意思是相同的 UUID每个人.原来这是ADF作为企业应用的id。例如,与将 Workspace SAMI 放在这里相比,这不是很有用,但这就是万一其他人掉进那个兔子洞的情况!

    您可以创建一个额外的用户分配托管身份 (UAMI) 并将其分配给工作区,但这不会被执行管道使用。 UAMI 可由 Workspace 链接服务使用,但它有一些自身的限制(如下所述)。另外我的经验是,在创建工作区时分配的 UAMI 将无法正确“关联”到工作区,直到我在门户中手动创建第二个 UAMI。我没有深入研究这个问题,因为 UAMI 对我没有好处,但似乎是一个简单的错误。

    现在我的具体用例是在 Synapse Pipelines 中运行 Apache Spark 应用程序,完成这项工作的直接方法是确保 Workspace SAMI 可以访问所需的资源,并且您可以开始了。如果你只是想让它工作,那么这样做并停在这里,但如果你想看得更深一点,请继续......

    Microsoft documentation 中的一些建议是您应该能够在 Spark 应用程序中使用工作区链接服务以访问资源。但这不起作用,我一直在与 Microsoft 讨论相同的问题,他们已经确认并正在调查。所以在这一点上值得注意的是日期(02/02/2023- 对美国读者来说毫不含糊 ;-)),因为这个问题以后可能会得到解决。但是现在您在 Spark 代码中的唯一选择是退回到用户/工作区身份。

    只是想一想为什么这很重要,它并不是真正的隔离,因为工作区中运行的任何资源都可以访问任何链接服务。这实际上更像是身份和资源管理的问题,即。最好将正在使用和分配给资源以供访问的身份与资源本身分开。在大多数情况下,我们宁愿对具有个人身份的组执行此操作,如果管理过程冗长(我的),那么我宁愿不必在每次创建资源时都重复它们。

    无论如何,现在就足够了,如果在我仍在关注的情况下发生变化,将会更新...

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 2017-11-23
      • 2021-05-02
      • 2021-05-05
      • 2021-11-27
      • 2021-12-14
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      相关资源
      最近更新 更多