使用谷歌ID令牌对工作区api进行身份验证

预览

此功能已在公共预览

Databricks提供工作空间级REST api。要验证API请求,您有两个选项:

  • 个人访问令牌

  • 开放ID连接(OIDC)令牌。此功能以公共预览的形式提供。

OpenID连接(OIDC)令牌是支持身份验证的开放标准。OIDC 1.0是OAuth 2.0协议之上的一个简单的身份层。它允许应用程序基于OAuth授权服务器执行的身份验证来验证用户的身份。应用程序还可以从OIDC令牌获得用户的基本概要信息。OIDC令牌默认在一小时后过期。

重要的

Databricks REST api只支持Google发布的OIDC令牌,这些令牌通常称为谷歌ID令牌。为了减少混淆,本文其余部分使用该术语谷歌ID令牌OIDC令牌

本文描述了使用谷歌ID令牌和谷歌OAuth访问令牌向Databricks REST api进行身份验证的步骤,以及如何创建所需的谷歌云服务帐户并为这些帐户生成令牌。单个谷歌ID令牌可以用于帐户级api或工作空间级api,但不能同时用于这两个目的。为工作空间级和帐户级api设置令牌的步骤对于大多数步骤都是相同的,重要的区别在说明中指出。

对于生产环境,Databricks建议您使用两个服务帐户来使用Databricks REST api。

  • 创建一个服务帐户(SA-1)来运行您的工作负载。

  • 创建另一个服务帐户(SA-2)以拥有您的数据库和谷歌云资源的权限。

  • 授予SA-1权限模仿SA-2调用Databricks REST api。

使用此模拟模型,一个团队可以管理工作负载安全性,而另一个团队可以管理资源安全性。因为您只在需要时授予模拟权限,所以这种方法为您的组织提供了安全性和灵活性。

本文详细描述了如何在生产环境中执行这些步骤。您可以使用以下策略之一调整这些说明用于非生产使用和测试:

  • 用你的谷歌用户帐号来模拟SA-2。用户帐号必须具有该角色角色/ iam.serviceAccountTokenCreator

  • 使用一个谷歌云服务帐号SA-1和SA-2都适用。

步骤1:创建两个服务帐户

  1. 创建两个新的谷歌云服务帐户。按照谷歌文章中的说明操作创建服务帐户.若要使用谷歌云控制台,请转到服务帐户页面并选择一个谷歌Cloud项目来创建它。您在其中创建这些服务帐户的谷歌Cloud项目不需要与用于Databricks工作空间的项目相匹配,新的服务帐户也不需要彼此使用相同的谷歌Cloud项目。

    • 令牌创建服务帐户(SA-1):该服务帐户自动为主服务帐户创建令牌。这些令牌将用于调用Databricks REST api。谷歌文档调用它SA-1

    • Databricks REST APIs (SA-2)服务主帐户:此服务帐户充当Databricks REST api和自动化工作流的主体(自动化用户)。谷歌文档调用它- 2

    保存两个服务帐户的电子邮件地址,以便在后面的步骤中使用。

  2. 创建一个服务帐号密钥您的令牌创建服务帐户(SA-1),并将其保存到名为SA-1-key.json

    1. 从谷歌云控制台服务帐户页,单击SA-1的电子邮件地址。

    2. 单击选项卡。

    3. 点击添加关键

    4. 确保JSON(默认值)被选中。

    5. 点击创建

    6. 该网页将密钥文件下载到您的浏览器。将该文件移动到您的本地工作目录并重命名它SA-1-key.json

    有关其他说明,请参阅谷歌文章创建服务帐户密钥

  3. 在您的主服务帐户(SA-2)上授予您的令牌创建服务帐户(SA-1)服务帐户令牌创建者角色。按照谷歌文章中的说明操作直接请求权限

    1. 从谷歌云控制台服务帐户页,单击SA-2的电子邮件地址。

    重要的

    在谷歌Cloud Console中,请确保编辑您的主SA (SA-2),而不是您的令牌创建SA (SA-1):

    1. 点击权限

    2. 点击授权访问

    3. 新校长字段,粘贴您的令牌创建SA (SA-1)的电子邮件地址。

    4. 角色字段中,选择服务帐户令牌创建者角色

    5. 点击保存

步骤2:创建谷歌ID令牌

Databricks推荐使用谷歌Cloud CLI (gcloud)生成ID令牌,以调用Databricks REST api。

重要的

生成的ID令牌将在1小时内过期。你必须在规定时间内完成所有剩余步骤。如果令牌在完成后面的步骤(例如调用Databricks api)之前过期,则必须重复此步骤以生成新的谷歌ID令牌。

  1. 在您的计算机上安装谷歌Cloud CLI。看到谷歌关于安装gcloud工具的文章

  2. 运行以下命令为您的主服务帐户生成ID令牌。

    • 取代< SA-1-key-json >以JSON格式显示SA-1密钥文件的路径。

    • 取代< SA-2-email >SA-2的电邮地址。

    • 取代< workspace-url >您的工作区URL的形式https:// <数字>。<数字> .gcp.www.neidfyre.com例如,https://999999999992360.0.gcp.www.neidfyre.com

    运行以下命令用于生产系统:

    Gcloud认证登录——credit -file gcloud auth print-identity-token——impersonat -service-account“< SA-2-email-address >”(包括电子邮件)观众“< workspace-url >”

    对于非生产用途,如果使用用户帐户模拟SA-2,请使用以下命令:

    Gcloud auth登录Gcloud auth print-identity-token—impersonate-service-account< SA-2-email-address >——观众“< workspace-url >”——包括电子邮件

    对于非生产用途,如果您为SA-1和SA-2同时使用一个服务帐户,请对服务帐户的密钥JSON文件使用以下命令:

    Gcloud认证登录——credit -file gcloud auth print-identity-token——audience“< workspace-url >”
  3. 将输出末尾的长行保存到一个名为谷歌- id标记- sa - 2. - txt

    它输出的文本类似如下:

    警告:此命令正在使用服务帐户模拟。所有API调用都将以[]的方式执行。eyJhba7s86dfa9s8f6a99das7fa68s7d6…N8s67f6saa78sa8s7dfiLlA

步骤3:将服务帐户添加为工作区用户

要使用谷歌ID令牌对工作区api进行身份验证,请使用工作区管理控制台添加您的主服务帐户(SA-2),就像它是用户电子邮件地址一样。

  1. 作为工作空间管理员,转到管理控制台

  2. 请按照向工作区添加用户并使用您的主服务帐户的电子邮件地址时,提示提供它在管理控制台中。

  3. 根据计划调用的Databricks REST api和想要使用的数据对象,可选地添加新服务帐户可能需要的组成员关系。看到管理组

  4. 可选地为该用户添加Databricks访问控制设置。看到启用访问控制

步骤4:调用Databricks API

要为工作空间调用Databricks REST API,在授权HTTP头,语法如下:

授权持票人<谷歌-id-令牌>

您提供的令牌必须具有以下属性:

下面的示例调用工作空间级API集群列表

  • 取代< google-id-token >使用您保存在文件中的谷歌ID令牌谷歌- id标记- sa - 2. - txt

  • 取代< workspace-URL >使用基本工作区URL,其表单类似于https://1234567890123456.7.gcp.www.neidfyre.com

旋度- x得到——头'授权:持有者'< workspace-URL > / api / 2.0 /集群/列表