使用英语阅读

通过


使用 Azure CLI 获取 Microsoft Entra ID 服务主体的 Microsoft Entra ID 令牌

重要

本文介绍如何使用 Azure CLI 为 Microsoft Entra ID 服务主体手动创建 Microsoft Entra 令牌。

Azure Databricks 托管服务主体直接在 Azure Databricks 中进行管理。 Microsoft Entra ID 托管服务主体在 Microsoft Entra ID 中进行管理,这需要其他权限。 Databricks 建议在大多数用例中使用 Azure Databricks 托管服务主体。 但是,Databricks 建议在必须同时向 Azure Databricks 和其他 Azure 资源进行身份验证的情况下使用 Microsoft Entra ID 托管服务主体。

若要创建 Azure Databricks 托管服务主体,而不是 Microsoft Entra ID 托管服务主体,请参阅管理服务主体

Databricks 不建议手动为 Microsoft Entra ID 服务主体创建 Microsoft Entra ID 令牌。 这是因为每个 Microsoft Entra ID 令牌的生存期很短,通常在一小时内就会过期。 在此时间之后,必须手动生成替换 Microsoft Entra ID 令牌。 请改用实现 Databricks 客户端统一身份验证标准的参与工具或 SDK 之一。 这些工具和 SDK 可以利用以下 Databricks 身份验证类型,自动生成并替换过期的 Microsoft Entra ID 令牌:

可以使用 Azure CLI 为 Microsoft Entra ID 服务主体获取 Microsoft Entra ID 访问令牌。

  1. 收集以下信息:

    参数 说明
    Tenant ID 在 Microsoft Entra ID 中注册的相关应用程序的 Directory (tenant) ID
    Client ID 在 Microsoft Entra ID 中注册的相关应用程序的 Application (client) ID
    Client secret 在 Microsoft Entra ID 中注册的相关应用程序的客户端密码的 Value
  2. 请通过执行以下操作之一获取 Microsoft Entra ID 服务主体的正确 Azure 订阅 ID(如果你尚不知道此 ID):

    • 在 Azure Databricks 工作区的顶部导航栏中,单击你的用户名,然后单击“Azure 门户”。 在显示的 Azure Databricks 工作区资源页上,单击边栏中的“概述”。 然后查找“订阅 ID”字段,其中包含订阅 ID。

    • 使用 Azure CLI 运行 az databricks workspace list 命令,使用 --query-o--output 选项缩小结果范围。 将 adb-0000000000000000.0.azuredatabricks.net 替换为你的工作区实例的名称,不包括 https://。 在此示例中,输出中 /subscriptions/ 后的 00000000-0000-0000-0000-000000000000 是订阅 ID。

      az databricks workspace list --query "[?workspaceUrl==\`adb-0000000000000000.0.azuredatabricks.net\`].{id:id}" -o tsv
      
      # /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.Databricks/workspaces/my-ws
      

      如果显示了以下消息,则表示登录到了错误的租户:The subscription of '<subscription-id>' doesn't exist in cloud 'AzureCloud'.若要登录到正确的租户,必须再次运行 az login 命令,使用 -t--tenant 选项指定正确的租户 ID。

      可以通过运行命令 curl -v <per-workspace-URL>/aad/auth 并查看输出 < location: https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000 来获取 Azure Databricks 工作区的租户 ID,其中的 00000000-0000-0000-0000-000000000000 是租户 ID。 另请参阅在 Azure 门户中获取订阅和租户 ID

      az login -t <tenant-id>
      
  3. 获得 Microsoft Entra ID 服务主体的正确 Azure 租户 ID、客户端 ID、客户端密码和订阅 ID 后,请使用 Azure CLI 运行 az login 命令来登录到 Azure。 使用 --service-principal 选项,同时为在 Microsoft Entra ID 中注册的相关应用程序指定 Tenant ID (Directory (tenant) ID)、Client ID (Application (client) ID) 和 Client secret (Value) 参数的值。

    az login \
    --service-principal \
    -t <Tenant-ID> \
    -u <Client-ID> \
    -p <Client-secret>
    
  4. 确认你已登录到已登录 Microsoft Entra ID 服务主体的正确订阅。 为此,请运行 az account set 命令,使用 -s--subscription 选项来指定正确的订阅 ID。

    az account set -s <subscription-id>
    
  5. 通过运行 az account get-access-token 命令为已登录的 Microsoft Entra ID 服务主体生成 Microsoft Entra ID 访问令牌。 使用 --resource 选项指定 Azure Databricks 服务的唯一资源 ID,即 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d。 可以使用 --query-o--output 选项在命令的输出中仅显示 Microsoft Entra ID 令牌的值。

    az account get-access-token \
    --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d \
    --query "accessToken" \
    -o tsv
    

备注

基于 MSAL 的 Azure CLI 使用 Microsoft 身份验证库 (MSAL) 作为基础身份验证库。 如果无法成功使用 Azure CLI 生成的 Microsoft Entra ID 访问令牌,作为替代方法,你可以尝试直接使用 MSAL 为 Microsoft Entra ID 服务主体获取 Microsoft Entra ID 访问令牌。 请参阅获取服务主体的 Microsoft Entra ID 令牌