【问题标题】:Call Databricks API from DevOps Pipeline using Service principal使用服务主体从 DevOps 管道调用 Databricks API
【发布时间】:2021-12-02 23:56:46
【问题描述】:

我希望能够从 DevOps 管道调用 Databricks API。我可以为我的帐户使用个人访问令牌,但是我想让 API 调用用户独立,所以我想使用服务主体(应用程序注册)。我按照本教程 https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token 为服务主体创建访问令牌,但是我有 2 个问题:

  1. 这样生成的令牌会在 1 小时后过期 - 有什么优雅的方法可以自动刷新它吗?
  2. 即使在使用此令牌调用 ADB API 时,我得到 403 未授权 - 我还应该做些什么吗?应用注册具有 ADB 服务的贡献者角色。

编辑:在应用注册中添加了 AzureDatabricks 的 API 权限并获得管理员同意,但仍然没有运气。

【问题讨论】:

    标签: azure azure-devops azure-pipelines databricks azure-databricks


    【解决方案1】:
    1. 这样生成的令牌将在 1 小时后过期 - 有什么优雅的方法吗? 自动刷新?

    不,client credentials flow 不支持刷新令牌。你可以尝试获取一个新的token,请参考这个issue

    1. 即使在使用此令牌调用 ADB API 时,我得到 403 未授权 - 还有什么我应该做的吗?该应用程序 注册具有 ADB 服务的用户角色。

    确保您的服务主体已分配参与者角色。

    在不同的情况下有两种资源。

    1. 作为 Azure Databricks 工作区用户和管理员的服务主体的 API 访问权限

      resource=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d

    2. 非工作区用户的服务主体的 API 访问权限

      resource=https://management.core.windows.net/

    【讨论】:

    • 感谢您的回复。当我使用resource=2ff.. 时,我得到Error 403 User not authorized. 与ADB API 一起使用。当我使用resource=https:.. 时,我得到Error 400 io.jsonwebtoken.IncorrectClaimException: Expected aud claim to be: 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d。我还检查了 IAM 的 ADB 服务,并且服务主体具有贡献者角色。知道为什么吗?
    • 您是否在“API 权限”中添加了 Azure Databricks 权限?请导航至 API 权限 -> 添加权限 -> 我的组织使用的 API -> 搜索“AzureDatabricks”并添加它。然后点击授予管理员同意。
    • 还是 403 未授权 :(
    • 您能告诉我您调用的具体 API 吗?
    • 已尝试列出集群 2.0/clusters/list 和作业现在运行。他们都没有工作。
    【解决方案2】:

    所以最后我找到了 3 种可能的解决方案。

    1. 为服务主体生成访问令牌,为服务主体生成管理服务令牌并使用这两者来访问 Databricks API - reference
    2. 使用访问令牌和管理令牌使用 Databricks 令牌 API 为服务主体生成 Databricks 个人访问令牌,然后您可以将其用于 Databricks CLI - reference
    3. 使用 AAD 令牌通过 CLI 对 Databricks 进行身份验证(reference 和 Databricks CLI 帮助):
      1. az login --service-principal -u <app-id> -p <app-password> --tenant <tenant-id>
      2. token_response=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d)
      3. export DATABRICKS_AAD_TOKEN=$(jq .accessToken -r <<< "$token_response")
      4. databricks configure --host https://<adb-url> --aad-token

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2020-10-24
      • 2023-03-08
      • 2022-11-23
      • 2019-11-23
      • 2020-02-18
      • 2022-10-16
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多