Включение федерации удостоверений рабочей нагрузки для CI/CD GitLab

Федерация токенов OAuth Databricks, также известная как OpenID Connect (OIDC), позволяет автоматизированным рабочим процессам, выполняющимся за пределами Databricks, безопасно обращаться к Databricks без необходимости хранения секретов Databricks. См. сведения о проверке подлинности доступа к Azure Databricks с помощью федерации токенов OAuth.

Чтобы включить федерацию идентичности рабочей нагрузки для GitLab CI/CD:

  1. Создание политики федерации
  2. Настройка GitLab YAML-файла

После включения федерации удостоверений рабочей нагрузки SDK Databricks и интерфейс командной строки Databricks автоматически извлекают токены идентификации рабочей нагрузки из GitLab CI/CD и обменивают их на токены OAuth Databricks.

Создание политики федерации

Сначала создайте политику федерации удостоверений рабочей нагрузки. Инструкции см. в разделе "Настройка политики федерации субъекта-службы". Для GitLab CI/CD задайте следующие значения:

  • Группа: Имя группы GitLab. Например, если URL-адрес проекта имеетсяhttps://gitlab.com/databricks-inc/data-platform, то группа .databricks-inc
  • Проект: Имя одного проекта GitLab, который требуется разрешить, например data-platform.
  • Тип ссылки: Тип ссылки на Git, представленный в sub утверждении (субъект) маркера. Это может быть запрос Branch, Tag или Merge.
  • URL-адрес издателя: URL-адрес экземпляра GitLab, который выдает маркер OIDC.
  • Тема: Объединение значений, взятых из контекста задания.
  • Аудитории: Ожидаемое aud значение в токене OIDC. Настройте это в блоке id_tokens: задания. Databricks рекомендует задать его для идентификатора учетной записи Azure Databricks.
  • Утверждение субъекта: (необязательно) Утверждение JWT, содержащее значение удостоверения рабочей нагрузки (sub) из токена OIDC. Для GitLab оставьте поле как subкодирование проекта, ветви, тега или запроса слияния, активировавшего конвейер.

Например, следующая команда Cli Databricks создает политику федерации для числового идентификатора 5581763342009999субъекта-службы Databricks:

databricks account service-principal-federation-policy create 5581763342009999 --json '{
  "oidc_policy": {
	"issuer": "https://gitlab.com/example-group",
	"audiences": [
  	  "a2222dd9-33f6-455z-8888-999fbbd77900"
	],
	"subject": "project_path:my-group/my-project:..."
  }
}'

Настройка GitLab YAML-файла

Затем измените файл конфигурации GitLab. Перейдите <databricks-account-id> к идентификатору учетной записи Azure Databricks.

Помимо настройки следующих переменных среды рабочей области, сохраните маркер в переменной DATABRICKS_OIDC_TOKEN среды Azure Databricks. Кроме того, используйте пользовательскую переменную среды и задайте значение DATABRICKS_OIDC_TOKEN_ENV.

  • DATABRICKS_AUTH_TYPE: env-oidc
  • DATABRICKS_HOST: URL-адрес рабочей области Databricks
  • DATABRICKS_CLIENT_ID: идентификатор субъекта-службы (приложения)
spec:
  inputs:
    # Specify your Databricks account ID, workspace hostname, and service principal OAuth client ID.
    databricks-account-id:
    databricks-host:
    databricks-client-id:
    # See https://docs.gitlab.com/ci/inputs/#define-input-parameters-with-specinputs for more on pipeline input variables.
---
stages:
  - my_script_using_wif

variables:
  DATABRICKS_AUTH_TYPE: env-oidc
  DATABRICKS_HOST: $[[ inputs.databricks-host ]]
  DATABRICKS_CLIENT_ID: $[[ inputs.databricks-client-id ]]

my_script_using_wif:
  id_tokens:
    DATABRICKS_OIDC_TOKEN:
      aud: $[[ inputs.databricks-account-id ]]
  stage: my_script_using_wif
  image: ubuntu:latest
  before_script:
    - apt-get update -y
    - apt-get install -y curl unzip
    - curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
  script:
    - databricks current-user me