对 Azure Databricks 资源的访问进行身份验证
若要使用 Databricks CLI 或 REST API 访问 Azure Databricks 资源,客户端必须使用具有访问资源所需授权的 Azure Databricks 帐户进行身份验证。 若要安全地运行 Databricks CLI 命令或调用需要授权访问帐户或工作区的 Databricks API 请求,必须基于有效的 Azure Databricks 帐户凭据提供访问令牌。 本文介绍了提供这些凭据并授权访问 Azure Databricks 工作区或帐户的身份验证选项。
下表显示了 Azure Databricks 帐户可用的身份验证方法。
Azure Databricks 身份验证方法
由于 Azure Databricks 工具和 SDK 适用于一个或多个受支持的 Azure Databricks 身份验证方法,因此你可以根据自己的用例选择最佳的身份验证方法。 有关详细信息,请参阅开发人员工具中的工具或 SDK 文档。
方法 | 说明 | 用例 |
---|---|---|
服务主体的 OAuth (OAuth M2M) | 服务主体的短期 OAuth 令牌。 | 无人参与的身份验证应用场景,例如完全自动化的 CI/CD 工作流。 |
用户的 OAuth (OAuth U2M) | 用户的短期 OAuth 令牌。 | 有人参与的身份验证应用场景,在出现提示时使用 Web 浏览器实时对 Azure Databricks 进行身份验证。 |
个人访问令牌 (PAT) | 用户或服务主体的短期或长期令牌。 | 目标工具不支持 OAuth 的应用场景。 |
Azure 托管标识身份验证 | 适用于 Azure 托管标识的 Microsoft Entra ID 令牌 | 仅适用于支持托管标识的 Azure 资源(例如 Azure 虚拟机)。 |
Microsoft Entra ID 服务主体身份验证 | Microsoft Entra ID 服务主体的 Microsoft Entra ID 令牌。 | 仅与支持 Microsoft Entra ID 令牌且不支持托管标识的 Azure 资源(例如 Azure DevOps)一起使用。 |
Azure CLI 身份验证 | 用户或Microsoft Entra ID 服务主体的 Microsoft Entra ID 令牌。 | 用于使用 Azure CLI 对 Azure 资源和 Azure Databricks 的访问进行身份验证。 |
Microsoft Entra ID 用户身份验证 | 用户的 Microsoft Entra ID 令牌。 | 仅适用于只支持 Microsoft Entra ID 令牌的 Azure 资源。 Databricks 不建议为 Azure Databricks 用户手动创建 Microsoft Entra ID 令牌。 |
应该选择哪种身份验证方法?
可以通过两种方式验证 Databricks CLI 命令或 API 调用是否能够访问 Azure Databricks 资源:
- 使用 Azure Databricks 用户帐户(称为“用户到计算机”身份验证 (U2M))。 仅当从本地客户端环境运行 Azure Databricks CLI 命令或从你拥有的代码调用 Azure Databricks API 请求并独占运行时,才选择此选项。
- 使用 Azure Databricks 服务主体(称为“计算机到计算机”身份验证 (M2M))。 如果其他人将运行你的代码(尤其是在应用的情况下),或者你正在构建将调用 Azure Databricks CLI 命令或 API 请求的自动化,请选择此选项。
- 如果使用 Azure Databricks,则还可以使用 MS Entra 服务主体对 Azure Databricks 帐户或工作区的访问进行身份验证。 但是,Databricks 建议使用 Databricks 服务主体与我们提供的 OAuth 身份验证,而不是 MS Entra 服务主体身份验证。 这是因为 Databricks 的身份验证使用 OAuth 访问令牌,它在仅使用 Azure Databricks 进行身份验证时更可靠。
有关使用 MS Entra 服务主体访问 Databricks 资源的更多详细信息,请参阅 MS Entra 服务主体身份验证。
还必须拥有一个链接到将用于调用 Databricks API 的帐户的访问令牌。 此令牌可以是 OAuth 2.0 访问令牌或个人访问令牌 (PAT)。 但是,Azure Databricks 强烈建议使用 OAuth 而不是 PAT 进行授权,因为 OAuth 令牌默认情况下会自动刷新,并且不需要直接管理访问令牌,从而提高了对令牌劫持和不需要访问的安全性。 由于 OAuth 为你创建和管理访问令牌,因此请提供 OAuth 令牌终结点 URL、客户端 ID 和从 Azure Databricks 工作区生成的机密,而不是直接自行提供令牌字符串。 如果不定期审核、轮换或撤销 PAT,或者没有为开发环境安全管理令牌字符串和密码,则 PAT 会面临生存期较长的令牌提供出口机会的风险。
如何使用 OAuth 向 Azure Databricks 进行身份验证?
Azure Databricks 提供统一的客户端身份验证,通过使用一组可设置为特定凭据值的默认环境变量来帮助你进行身份验证。 这可以帮助你更轻松、更安全地工作,因为这些环境变量特定于将运行 Azure Databricks CLI 命令或调用 Azure Databricks API 的环境。
- 对于用户帐户(用户到计算机)身份验证,只要工具和 SDK 实现其标准,就可以使用 Databricks 客户端统一身份验证来处理 Azure Databricks OAuth。 如果没有,则可以手动生成 OAuth 代码验证器和质询对,以便在 Azure Databricks CLI 命令和 API 请求中直接使用。 请参阅步骤 1:生成 OAuth 代码验证器和代码质询对。
- 对于服务主体(计算机到计算机)身份验证,Azure Databricks OAuth 要求调用方提供客户端凭据以及可授权请求的令牌终结点 URL。 (如果使用支持 Databricks 统一客户端身份验证的 Azure Databricks 工具和 SDK,则会为你处理此问题。)凭据包括唯一的客户端 ID 和客户端密码。 客户端(即将运行代码的 Databricks 服务主体)必须分配给 Databricks 工作区。 将服务主体分配给它将访问的工作区后,你将获得客户端 ID 和客户端密码,将使用特定环境变量对其进行设置。
这些环境变量包括:
DATABRICKS_HOST
:此环境变量设置为 Azure Databricks 帐户控制台 (http://accounts.cloud.databricks.com
) 的 URL 或 Azure Databricks 工作区 URL (https://{workspace-id}.cloud.databricks.com
)。 根据将在代码中执行的操作类型选择主机 URL 类型。 具体来说,如果使用 Azure Databricks 帐户级 CLI 命令或 REST API 请求,请将此变量设置为 Azure Databricks 帐户 URL。 如果使用 Azure Databricks 工作区级 CLI 命令或 REST API 请求,请使用 Azure Databricks 工作区 URL。DATABRICKS_ACCOUNT_ID
:用于 Azure Databricks 帐户操作。 这是你的 Azure Databricks 帐户 ID。 若要获取它,请参阅查找帐户 ID。DATABRICKS_CLIENT_ID
:(仅 M2M OAuth)创建服务主体时分配的客户端 ID。DATABRICKS_CLIENT_SECRET
:(仅 M2M OAuth)创建服务主体时生成的客户端密码。
可以直接设置,或者通过使用客户端计算机上的 Databricks 配置文件 (.databrickscfg
) 来设置。
若要使用 OAuth 访问令牌,Azure Databricks 工作区或帐户管理员必须针对代码将访问的帐户和工作区功能授予用户帐户或服务主体 CAN USE
特权。
有关为客户端配置 OAuth 授权以及查看特定于云提供商的授权选项的更多详细信息,请参阅统一客户端身份验证。
第三方服务和工具的身份验证
如果正在编写访问第三方服务、工具或 SDK 的代码,则必须使用第三方提供的身份验证和授权机制。 但是,如果必须授予第三方工具、SDK 或服务对 Azure Databricks 帐户或工作区资源的访问权限,Databricks 提供以下支持:
Databricks Terraform 提供程序:此工具可以使用 Azure Databricks 用户帐户代表你从 Terraform 访问 Azure Databricks API。 有关更多详细信息,请参阅使用 Terraform 预配服务主体。
Git 提供程序(如 GitHub、GitLab 和 Bitbucket)可以使用 Databricks 服务主体来访问 Azure Databricks API。 有关更多详细信息,请参阅 CI/CD 的服务主体。
Jenkins 可使用 Databricks 服务主体访问 Azure Databricks API。 有关更多详细信息,请参阅在 Azure Databricks 上使用 Jenkins 进行 CI/CD。
Azure DevOps 可以使用 MS Entra 服务主体和 ID 来访问 Azure Databricks API。 有关更多详细信息,请参阅在 Databricks 上使用 Azure DevOps 进行身份验证。
Azure Databricks 配置文件
Azure Databricks 配置文件包含 Azure Databricks 在进行身份验证时所需的设置和其他信息。 Azure Databricks 配置文件存储在本地客户端文件中,供工具、SDK、脚本和应用使用。 标准配置文件名为 .databrickscfg
。 有关详细信息,请参阅 Azure Databricks 配置文件。