使用谷歌ID令牌进行身份验证

预览

工作空间级身份验证已经完成公共预览.有一篇公共文章专门针对工作区api进行谷歌ID令牌身份验证。看到使用谷歌ID令牌对工作区api进行身份验证

本文讨论工作区级别和帐户级别的身份验证。帐户级身份验证和帐户API 2.0私人预览.这不是一篇公开文章,仅供预览中的人使用。

要验证到Databricks REST api,您有两个选项:

  • 个人访问令牌.您只能将它们用于工作空间级别的REST api。

  • OpenID连接(OIDC)令牌。您可以将这些用于所有Databricks REST api。

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

重要的

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

本文描述了使用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都适用。

帐户级api和工作空间级api

要理解使用Databricks REST api的身份验证,必须理解REST api的类型及其与Databricks资源层次结构的关系。

您可能有一个或多个数据库账户.一个Databricks帐户包含0个、1个或多个Databricks工作区。您可以使用帐户控制台创建工作空间并管理配置工作空间所必需的云资源(例如凭证、存储和网络)。

一个砖工作空间拥有各种资源,例如作业和笔记本。工作空间管理员(有时仅称为管理员)可以修改在工作空间级别定义的设置,包括管理控制台

由于这种差异,有两种类型的api:

要向Databricks REST API进行身份验证,您需要传递一个带有受众的谷歌ID令牌(澳元),匹配API的基本URL,这在这两种类型的API之间是不同的。要使用不同的基本url调用Databricks REST api,必须使用不同的谷歌ID令牌。

凭证透传

需要一些Databricks REST API方法凭证透传.要调用这些方法,除了谷歌ID外,还必须传递一个谷歌OAuth访问令牌云平台bob体育客户端下载范围。Databricks服务器使用谷歌OAuth访问令牌代表调用方调用谷歌Cloud api。

Databricks不验证或保存访问令牌。

重要的

要确定某个操作是否需要凭据传递,请参考每个API操作的API文档。这些api需要X-Databricks-GCP-SA-Access-Token请求中的HTTP头。

步骤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的电邮地址。

    • 取代<读者>根据您的用例,如下所示:

      • 对于工作空间级api,替换为您的工作区URL的形式https:// <数字>。<数字> .gcp.www.neidfyre.com例如,https://999999999992360.0.gcp.www.neidfyre.com.每个工作区都有一个不同的惟一工作区URL。要在多个工作空间上调用api,需要创建多个谷歌ID令牌,每个令牌具有不同的观众值。

      • 用于帐户级API,替换为https://accounts.gcp.www.neidfyre.com.不同的账户都有相同的账户观众价值。

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

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

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

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

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

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

    它输出的文本类似如下:

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

步骤3:创建谷歌OAuth访问令牌(仅适用于需要凭据传递的api)

..注意:此步骤仅用于调用需要凭据传递的api。要确定某个操作是否需要凭据传递,请参考每个API操作的API文档。

生成访问令牌的请求包括一生字段,该字段定义访问令牌的有效期。如果您只需要令牌激活5分钟,则设置为300年代(300秒)。下面的示例使用3600年代,代表一个小时。

重要的

  • 您必须在限定时间内完成所有剩余步骤。如果时间在您完成后面的步骤(例如调用Databricks api)之前过期,则必须重复此步骤以生成新的谷歌OAuth访问令牌。

  • 默认情况下,一个小时(3600年代的最大持续时间一生字段。若要扩展此限制,请联系谷歌客户支持并请求例外。

  1. 执行如下命令。取代< SA-2-email-address >SA-2的服务帐户电子邮件地址。对于非生产使用或测试,如果使用单个服务帐户或使用用户帐户模拟服务帐户,请将替换为服务帐户的电子邮件地址。

    Gcloud auth print-access-token—impersonate-service-account< SA-2-email-address >
  2. 将输出末尾的长行保存到一个名为访问令牌- sa 2. - txt

    它输出的文本类似如下:

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

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

您可以使用谷歌ID令牌调用Databricks帐户级api,例如帐户API工作空间层api.根据用例的不同,指令也不同。请注意,您不能使用一个谷歌ID令牌来访问这两种类型的api,因为观众场的时候创建谷歌ID令牌

工作区api

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

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

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

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

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

帐户级别api

要使用谷歌ID令牌对帐户级API(例如帐户API)进行身份验证,请使用帐户控制台将您的主要服务帐户(SA-2)添加为帐户admin。使用服务帐户的电子邮件地址添加服务帐户,就像添加用户一样。

  1. 作为帐户所有者或帐户管理员,转到帐户控制台中的Users选项卡

  2. 点击添加用户

    请注意

    不要点击添加服务主体.不能使用服务帐户创建数据服务负责人

  3. 电子邮件地址字段,输入您的主要服务帐户(SA-2)电子邮件地址。

  4. 设置姓和名的必需字段,以反映服务帐户的用途。

  5. 点击发送邀请.由于您使用的是服务帐户而不是真正的用户电子邮件,因此没有人收到邀请电子邮件。服务帐户立即被授权为帐户admin,无需额外确认。

步骤5:调用Databricks API

在REST API身份验证期间需要提供的令牌根据您计划的使用情况而有所不同账户API工作空间层api.请注意,您不能使用一个谷歌ID令牌来访问这两种类型的api,因为观众场的时候创建谷歌ID令牌

下面的HTTP头用于谷歌id的Databricks身份验证。

HTTP报头名称

描述

哪些类型的api需要它?

授权

谷歌SA-2作为不记名令牌的ID令牌。语法是身份验证:持票人<标记>

所有的api

X-Databricks-GCP-SA-Access-Token

谷歌SA-2的OAuth访问令牌。

仅帐户级api

示例工作空间级API请求

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

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

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

  • 您访问的工作区必须与您在创建令牌时提供的工作区URL匹配。看到步骤2:创建谷歌ID令牌

  • 被模拟的服务帐户(SA-2)必须是工作区的用户。看到工作区api

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

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

  • 替换为基本工作区URL,其形式类似于https://1234567890123456.7.gcp.www.neidfyre.com

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

示例帐户级API请求,用于不使用凭据传递的API

下面的示例调用Account API来获得一个工作区列表。

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

  • 取代<帐户id >您的帐户ID。要查找您的帐户ID:

    1. 作为帐户admin,转到Databricks帐户控制台

    2. 在左侧菜单的底部(您可能需要滚动),单击User按钮(人员图标)。

    3. 在出现的弹出窗口中,通过单击ID右侧的图标复制帐户ID。

    找到您的帐户ID。
旋度- x得到——头'授权:持有者'https://accounts.gcp.www.neidfyre.com/api/2.0/example/ <帐户id > /操作名称

带有凭据传递的帐户级API请求示例

下面的示例调用Account API来获得一个工作区列表。

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

  • 取代< access-token-sa-2 >使用您保存在文件中的SA-2访问令牌访问令牌- sa 2. - txt

  • 取代<帐户id >您的帐户ID。要查找您的帐户ID:

    1. 作为帐户admin,转到Databricks帐户控制台

    2. 在左侧菜单的底部(您可能需要滚动),单击User按钮(人员图标)。

    3. 在出现的弹出窗口中,通过单击ID右侧的图标复制帐户ID。

    找到您的帐户ID。
旋度- x删除——头'授权:持有者'——头“X-Databricks-GCP-SA-Access-Token: < access-token-sa-2 >”https://accounts.gcp.www.neidfyre.com/api/2.0/accounts/ <帐户id > /工作区/ < workspace-id >