使用谷歌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:创建两个服务帐户
创建两个新的谷歌云服务帐户。按照谷歌文章中的说明操作创建服务帐户.若要使用谷歌云控制台,请转到服务帐户页面并选择一个谷歌Cloud项目来创建它。您在其中创建这些服务帐户的谷歌Cloud项目不需要与用于Databricks工作空间的项目相匹配,新的服务帐户也不需要彼此使用相同的谷歌Cloud项目。
令牌创建服务帐户(SA-1):该服务帐户自动为主服务帐户创建令牌。这些令牌将用于调用Databricks REST api。谷歌文档调用它SA-1.
Databricks REST APIs (SA-2)服务主帐户:此服务帐户充当Databricks REST api和自动化工作流的主体(自动化用户)。谷歌文档调用它- 2.
保存两个服务帐户的电子邮件地址,以便在后面的步骤中使用。
创建一个服务帐号密钥您的令牌创建服务帐户(SA-1),并将其保存到名为
SA-1-key.json
.从谷歌云控制台服务帐户页,单击SA-1的电子邮件地址。
单击键选项卡。
点击添加关键.
确保JSON(默认值)被选中。
点击创建.
该网页将密钥文件下载到您的浏览器。将该文件移动到您的本地工作目录并重命名它
SA-1-key.json
.
有关其他说明,请参阅谷歌文章创建服务帐户密钥.
在您的主服务帐户(SA-2)上授予您的令牌创建服务帐户(SA-1)服务帐户令牌创建者角色。按照谷歌文章中的说明操作直接请求权限.
从谷歌云控制台服务帐户页,单击SA-2的电子邮件地址。
重要的
在谷歌Cloud Console中,请确保编辑您的主SA (SA-2),而不是您的令牌创建SA (SA-1):
点击权限.
点击授权访问.
在新校长字段,粘贴您的令牌创建SA (SA-1)的电子邮件地址。
在角色字段中,选择服务帐户令牌创建者角色.
点击保存.
步骤2:创建谷歌ID令牌
Databricks推荐使用谷歌Cloud CLI (gcloud
)生成ID令牌,以调用Databricks REST api。
重要的
生成的ID令牌将在1小时内过期。你必须在规定时间内完成所有剩余步骤。如果令牌在完成后面的步骤(例如调用Databricks api)之前过期,则必须重复此步骤以生成新的谷歌ID令牌。
在您的计算机上安装谷歌Cloud CLI。看到谷歌关于安装gcloud工具的文章.
运行以下命令为您的主服务帐户生成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 >” 将输出末尾的长行保存到一个名为
谷歌- id标记- sa - 2. - txt
.它输出的文本类似如下:
警告:此命令正在使用服务帐户模拟。所有API调用都将以[
]的方式执行。eyJhba7s86dfa9s8f6a99das7fa68s7d6…N8s67f6saa78sa8s7dfiLlA
步骤4:调用Databricks API
要为工作空间调用Databricks REST API,在授权
HTTP头,语法如下:
授权:持票人<谷歌-id-令牌>
您提供的令牌必须具有以下属性:
您访问的工作区必须与您在创建令牌时提供的工作区URL匹配。参见上一步步骤2:创建谷歌ID令牌.
被模拟的服务帐户(SA-2)必须是工作区的用户。参见上一步步骤3:将服务帐户添加为工作区用户.
下面的示例调用工作空间级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 /集群/列表