使用服务主体从 DevOps 管道调用 Databricks API
Call Databricks API from DevOps Pipeline using Service principal
我希望能够从 DevOps 管道调用 Databricks API。我可以为我的帐户使用个人访问令牌来执行此操作,但是我想使 API 调用独立于用户,因此我想使用服务主体(应用程序注册)。我按照本教程 https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token 为服务主体创建了访问令牌,但是我遇到了 2 个问题:
- 这样生成的令牌将在 1 小时后过期 - 有什么优雅的方法可以自动刷新它吗?
- 即使在使用此令牌调用 ADB API 时,我也会收到 403 unauthorized - 我还应该做些什么吗?应用程序注册具有 ADB 服务的贡献者角色。
编辑:添加 API AzureDatabricks 在应用程序注册中的权限并授予管理员同意,但仍然没有成功。
- such generated token expires in 1 hour - is there any elegant was to
automatically refresh it?
没有,client credentials flow doesn't support refresh token. You can try to get a new token, please refer to this 。
- even when calling the ADB API using this token I get 403 unauthorized - is there anything else I should do? The app
registration has User role for the ADB service.
确保为您的服务主体分配了贡献者角色。
在不同的情况下有两种资源。
API 访问作为 Azure Databricks 工作区用户和管理员的服务主体
resource=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
API 对非工作区用户的服务主体的访问权限
resource=https://management.core.windows.net/
最后我找到了 3 种可能的解决方案。
- 为服务主体生成访问令牌,为服务主体生成管理服务令牌并使用这两者来访问 Databricks API - reference
- 使用访问令牌和管理令牌为使用 Databricks 令牌的服务主体生成 Databricks 个人访问令牌 API,然后您可以将其用于 Databricks CLI - reference
- 使用 AAD 令牌通过 CLI 向 Databricks 进行身份验证(reference 和 Databricks CLI 帮助):
az login --service-principal -u <app-id> -p <app-password> --tenant <tenant-id>
token_response=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d)
export DATABRICKS_AAD_TOKEN=$(jq .accessToken -r <<< "$token_response")
databricks configure --host https://<adb-url> --aad-token
我希望能够从 DevOps 管道调用 Databricks API。我可以为我的帐户使用个人访问令牌来执行此操作,但是我想使 API 调用独立于用户,因此我想使用服务主体(应用程序注册)。我按照本教程 https://docs.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/aad/service-prin-aad-token 为服务主体创建了访问令牌,但是我遇到了 2 个问题:
- 这样生成的令牌将在 1 小时后过期 - 有什么优雅的方法可以自动刷新它吗?
- 即使在使用此令牌调用 ADB API 时,我也会收到 403 unauthorized - 我还应该做些什么吗?应用程序注册具有 ADB 服务的贡献者角色。
编辑:添加 API AzureDatabricks 在应用程序注册中的权限并授予管理员同意,但仍然没有成功。
- such generated token expires in 1 hour - is there any elegant was to automatically refresh it?
没有,client credentials flow doesn't support refresh token. You can try to get a new token, please refer to this
- even when calling the ADB API using this token I get 403 unauthorized - is there anything else I should do? The app registration has User role for the ADB service.
确保为您的服务主体分配了贡献者角色。
在不同的情况下有两种资源。
API 访问作为 Azure Databricks 工作区用户和管理员的服务主体
resource=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
API 对非工作区用户的服务主体的访问权限
resource=https://management.core.windows.net/
最后我找到了 3 种可能的解决方案。
- 为服务主体生成访问令牌,为服务主体生成管理服务令牌并使用这两者来访问 Databricks API - reference
- 使用访问令牌和管理令牌为使用 Databricks 令牌的服务主体生成 Databricks 个人访问令牌 API,然后您可以将其用于 Databricks CLI - reference
- 使用 AAD 令牌通过 CLI 向 Databricks 进行身份验证(reference 和 Databricks CLI 帮助):
az login --service-principal -u <app-id> -p <app-password> --tenant <tenant-id>
token_response=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d)
export DATABRICKS_AAD_TOKEN=$(jq .accessToken -r <<< "$token_response")
databricks configure --host https://<adb-url> --aad-token