Настройка внешнего OAuth для Snowflake
Эта функция в настоящее время доступна только для провайдеров удостоверений Okta и Entra ID.
Тарифные планы Enterprise и Enterprise+ в dbt поддерживают аутентификацию OAuth через внешних провайдеров. Когда включена функция External OAuth, пользователи могут авторизоваться с помощью своих учётных данных, используя единый вход (SSO) через поставщика удостоверений (IdP). External OAuth предоставляет пользователям доступ к нескольким приложениям, включая dbt, без передачи сервису их статических учётных данных. Это упрощает для пользователей процесс аутентификации в средах разработки и обеспечивает дополнительный уровень безопасности вашей учётной записи dbt.
Процесс настройки внешнего OAuth потребует некоторого взаимодействия между вашими учетными записями dbt Cloud, IdP и Snowflake, и открытие их в нескольких вкладках браузера поможет ускорить процесс настройки:
Процесс настройки внешнего OAuth потребует нескольких переключений между вашими учётными записями dbt, IdP и хранилища данных. Чтобы ускорить настройку, откройте их в отдельных вкладках браузера:
- dbt: В основном вы будете работать на странице Account settings —> Integrations. Для настройки интеграции и создания подключений вам потребуются соответствующие разрешения.
Провайдеры идентификации (Identity providers):
- Okta: Вам предстоит работать в нескольких разделах учетной записи Okta, но начать можно с раздела Applications. Потребуются права на создание приложения и authorization server.
- Entra ID: Требуется администратор с правами на создание приложений Entra ID, который также является пользователем в хранилище данных.
Хранилище данных:
- Snowflake: Откройте worksheet в учетной записи, у которой есть права на создание security integration.
Команды Snowflake
Если за администрирование этих продуктов отвечают разные люди, лучше, чтобы они координировали свои действия одновременно — это поможет избежать затруднений.
Убедитесь, что имя пользователя или адрес электронной почты, указанные администратором IdP, совпадают с именем пользователя в учётных данных Snowflake. Если адрес электронной почты, используемый при настройке dbt, отличается от адреса электронной почты в Snowflake, подключение завершится ошибкой или могут возникнуть проблемы.
Конфигурации хранилища данных
Ниже приведён шаблон для создания OAuth‑конфигураций в среде Snowflake:
create security integration your_integration_name
type = external_oauth
enabled = true
external_oauth_type = okta
external_oauth_issuer = ''
external_oauth_jws_keys_url = ''
external_oauth_audience_list = ('')
external_oauth_token_user_mapping_claim = 'sub'
external_oauth_snowflake_user_mapping_attribute = 'email_address'
external_oauth_any_role_mode = 'ENABLE'
external_oauth_token_user_mapping_claim и external_oauth_snowflake_user_mapping_attribute могут быть изменены в зависимости от потребностей вашей организации. Эти значения указывают на утверждение в токене пользователей. В примере Snowflake будет искать пользователя Snowflake, чей email совпадает со значением в утверждении sub.
Примечания:
- Стандартные роли Snowflake
ACCOUNTADMIN,ORGADMINиSECURITYADMINпо умолчанию заблокированы для внешнего OAuth, поэтому аутентификация с ними, скорее всего, завершится неудачей. Подробнее см. в документации Snowflake. - Значение параметра
external_oauth_snowflake_user_mapping_attributeдолжно корректно сопоставляться с именем пользователя Snowflake. Например, если используетсяemail_address, то email в токене от IdP должен в точности совпадать с именем пользователя Snowflake.
Настройка поставщика удостоверений
Выберите поддерживаемого поставщика удостоверений (IdP), чтобы получить инструкции по настройке внешнего OAuth в его среде и завершению интеграции в dbt:
- Okta
- Entra ID
1. Инициализируйте настройки dbt
- В своей учётной записи dbt перейдите в Account settings → Integrations.
- Прокрутите страницу вниз до раздела Custom integrations и нажмите Add integrations
- Оставьте это окно открытым. В поле Integration type можно выбрать Okta. Обратите внимание на Redirect URI в нижней части страницы. Скопируйте этот URI в буфер обмена для использования на следующих шагах.
2. Создание приложения Okta
- Разверните раздел Applications на панели управления Okta и нажмите Applications. Нажмите кнопку Create app integration.
- Выберите OIDC в качестве метода входа и Web applications в качестве типа приложения. Нажмите Next.
- Дайте приложению подходящее имя, например «Внешнее OAuth-приложение для dbt», чтобы его было легко идентифицировать.
- В разделе Grant type включите опцию Refresh token.
- Прокрутите страницу вниз до опции Sign-in redirect URIs. Вставьте URI перенаправления, полученный из dbt на шаге 1.3.
- Сохраните конфигурацию приложения. Вы вернетесь к нему позже, но пока переходите к следующим шагам.
3. Создание API Okta
- Разверните раздел Security и в боковом меню Okta выберите API.
- На экране API нажмите Add authorization server. Задайте имя сервера авторизации (в качестве имени подойдёт псевдоним вашего аккаунта в хранилище данных). В поле Audience скопируйте и вставьте URL для входа в ваше хранилище данных (например,
https://abdc-ef1234.snowflakecomputing.com). Добавьте подходящее описание сервера и нажмите Save.
- На экране конфигурации сервера авторизации откройте Metadata URI в новой вкладке. Вам понадобится информация с этого экрана на следующих шагах.
- Нажмите на вкладку Scopes и Add scope. В поле Name добавьте
session:role-any. (Опционально) Настройте Display phrase и Description и нажмите Create.
- Откройте вкладку Access policies и нажмите Add policy. Дайте политике Name и Description и установите Assign to как The following clients. Начните вводить имя приложения, созданного на шаге 2.3, и вы увидите его автозаполнение. Выберите приложение и нажмите Create Policy.
- На экране access policy нажмите Add rule.
- Дайте правилу описательное имя и прокрутите вниз до token lifetimes. Настройте Access token lifetime is, Refresh token lifetime is, и but will expire if not used every в соответствии с политиками вашей организации. Мы рекомендуем значения по умолчанию: 1 час и 90 дней. Более строгие правила увеличивают вероятность того, что вашим пользователям придется повторно проходить аутентификацию.
- Вернитесь на вкладку Settings и оставьте ее открытой в вашем браузере. Вам понадобится некоторая информация на следующих шагах.
4. Создайте настройки OAuth в хранилище данных
- Откройте SQL-файл Snowflake, скопируйте и вставьте следующий код:
create security integration your_integration_name
type = external_oauth
enabled = true
external_oauth_type = okta
external_oauth_issuer = ''
external_oauth_jws_keys_url = ''
external_oauth_audience_list = ('')
external_oauth_token_user_mapping_claim = 'sub'
external_oauth_snowflake_user_mapping_attribute = 'email_address'
external_oauth_any_role_mode = 'ENABLE'
- Измените
your_integration_nameна что-то подходящее и описательное. Например,dev_OktaAccountNumber_okta. Скопируйтеexternal_oauth_issuerиexternal_oauth_jws_keys_urlиз URI метаданных на шаге 3.3. Используйте тот же URL Snowflake, который вы ввели на шаге 3.2, в качествеexternal_oauth_audience_list.
Настройте остальные параметры в соответствии с конфигурациями вашей организации в Okta и Snowflake.
- Выполните шаги для создания интеграции в Snowflake.
Убедитесь, что имя пользователя (например, адрес электронной почты), указанное в IdP, совпадает с учетными данными Snowflake для всех пользователей. Несоответствие имен пользователей приведет к ошибкам аутентификации.
5. Настройка интеграции в dbt
-
Вернитесь на страницу Account settings —> Integrations в dbt, на которой вы были в начале. Теперь пора заполнить все поля.
Integration name: Задайте интеграции понятное имя, включающее сведения для идентификации среды Okta, чтобы будущим пользователям не приходилось гадать, к какой среде она относится.Client IDиClient secrets: Скопируйте эти значения со страницы приложения в Okta.
- Authorize URL и Token URL: Найдите эти значения в URI метаданных.
-
Сохраните конфигурацию
6. Создайте новое подключение в dbt
- Перейдите в Account settings и выберите Connections в меню. Нажмите New connection.
- Настройте
Account,DatabaseиWarehouseтак же, как вы делаете это обычно, а в полеOAuth methodвыберите внешний OAuth, который вы только что создали.
- Прокрутите страницу вниз до блока External OAuth и выберите конфигурацию из списка.
- Нажмите Save, чтобы сохранить подключение. Настройка External OAuth с Okta завершена!
1. Инициализация настроек dbt
- В своей учетной записи dbt перейдите в Настройки учетной записи —> Интеграции.
- Прокрутите страницу вниз до раздела Пользовательские интеграции и нажмите Добавить интеграции.
- Оставьте это окно открытым. В поле Тип интеграции выберите Entra ID и найдите URI перенаправления внизу страницы. Скопируйте его в буфер обмена для использования на следующих шагах.
2. Создание приложений Entra ID
- Вам потребуется создать два приложения в портале Azure: resource server и client app.
- В портале Azure откройте Entra ID и в левом меню выберите App registrations.
- Для завершения настройки вам понадобятся права Entra ID admin и data warehouse admin. Эти роли не обязательно должны быть у одного и того же человека — при совместной работе все будет функционировать корректно.
- Как правило, администратор Entra ID отвечает за регистрацию приложений и разрешения, а администратор хранилища данных — за роли, grants и интеграции на стороне хранилища.
- Значение поля
value, получаемое на этих шагах, отображается только один раз. Сразу после создания обязательно сохраните его. - Убедитесь, что имя пользователя (например, адрес электронной почты), указанное в IdP, совпадает с учетными данными пользователей в хранилище данных. Несовпадение имен пользователей приведет к ошибкам аутентификации.
3. Создание resource server
- На экране App registrations нажмите New registration.
- Задайте имя приложения.
- Убедитесь, что параметр Supported account types установлен в значение “Accounts in this organizational directory only (
Org name- Single Tenant)”. - Нажмите Register, чтобы перейти к странице обзора приложения.
- На странице обзора приложения в левом меню выберите Expose an API.
- Нажмите Add рядом с Application ID URI. Поле заполнится автоматически. Нажмите Save.
- Сохраните значение поля
valueдля использования на следующем шаге. Оно отображается только один раз. Обязательно запишите его сразу. Microsoft скрывает это поле после ухода со страницы и повторного возврата. - На том же экране нажмите Add scope.
- Укажите имя scope:
session:role-any. - В поле “Who can consent?” выберите Admins and users.
- В поле Admin consent display name укажите
session:role-anyи добавьте описание. - Убедитесь, что параметр State установлен в Enabled.
- Нажмите Add scope.
- Укажите имя scope:
4. Создание client app
- На странице регистрации приложений нажмите New registration.
- Задайте приложению имя, которое однозначно идентифицирует его как клиентское приложение.
- Убедитесь, что для параметра Supported account types выбрано значение «Accounts in this organizational directory only (
Org name- Single Tenant)». - Для параметра Redirect URI выберите Web, затем скопируйте Redirect URI из dbt и вставьте его в поле.
- Нажмите Register.
- На странице обзора приложения выберите API permissions в меню слева и нажмите Add permission.
- В открывшейся панели выберите APIs my organization uses, найдите имя сервера ресурсов из предыдущих шагов и нажмите на него.
- Убедитесь, что в разделе Permissions установлен флажок
session:role-any, и нажмите Add permissions. - Нажмите Grant admin consent, затем в появившемся модальном окне нажмите Yes.
- В меню слева выберите Certificates and secrets и нажмите New client secret. Задайте имя секрета, укажите срок действия и нажмите Add. Примечание: Microsoft не позволяет задавать бессрочный срок действия. Максимальный срок — два года. Обязательно зафиксируйте дату истечения срока действия, чтобы обновить секрет до этой даты и избежать сбоев авторизации пользователей.
- Сразу сохраните
valueдля использования на одном из следующих шагов. Примечание: Entra ID больше не отобразит это значение после того, как вы покинете этот экран.
5. Конфигурация хранилища данных
Вы будете переключаться между сайтом Entra ID и Snowflake. Держите свою учетную запись Entra ID открытой для этого процесса.
Скопируйте и вставьте следующий шаблон в SQL-файл Snowflake:
create or replace security integration <whatever you want to name it>
type = external_oauth
enabled = true
external_oauth_type = azure
external_oauth_issuer = '<AZURE_AD_ISSUER>'
external_oauth_jws_keys_url = '<AZURE_AD_JWS_KEY_ENDPOINT>'
external_oauth_audience_list = ('<SNOWFLAKE_APPLICATION_ID_URI>')
external_oauth_token_user_mapping_claim = 'upn'
external_oauth_any_role_mode = 'ENABLE'
external_oauth_snowflake_user_mapping_attribute = 'login_name';
На сайте Entra ID:
- В приложении Client ID в Entra ID нажмите Endpoints и откройте Federation metadata document в новой вкладке.
- Значение entity ID на этой странице соответствует полю
external_oauth_issuerв конфигурации Snowflake.
- Значение entity ID на этой странице соответствует полю
- Вернувшись к списку endpoints, откройте OpenID Connect metadata document в новой вкладке.
- Поле jwks_uri соответствует полю
external_oauth_jws_keys_urlв Snowflake.
- Поле jwks_uri соответствует полю
- Перейдите к resource server, который настраивался на предыдущих шагах.
- Значение Application ID URI соответствует полю
external_oauth_audience_listв Snowflake.
- Значение Application ID URI соответствует полю
- Примените конфигурации. Для завершения настройки вам понадобятся права администратора Entra ID и администратора хранилища данных. Если это разные люди, им необходимо работать совместно, чтобы завершить конфигурацию.
6. Настройка интеграции в dbt
- Вернитесь на страницу Account settings —> Integrations в dbt, на которой вы были в начале. Теперь пора заполнить все поля. Для этого потребуется переключаться между учетной записью Entra ID и dbt.
Integration name: Укажите понятное имя интеграции, включающее сведения для идентификации среды Entra ID, чтобы будущим пользователям не пришлось гадать, к какой среде она относится.Client secrets: Находится в приложении Client ID на странице Certificates and secrets.Value— этоClient secret. Обратите внимание, что он отображается только при создании; если вы вернетесь позже, Microsoft скроет секрет, и вам придется создать его заново.Client ID: Скопируйте значение «Application (client) ID» со страницы обзора приложения Client ID.Authorization URLиToken URL: В приложении Client ID откройте вкладкуEndpoints. Эти URL соответствуют полямOAuth 2.0 authorization endpoint (v2)иOAuth 2.0 token endpoint (v2). Необходимо использовать v2 дляOAuth 2.0 authorization endpoint. Не используйте V1. ДляOAuth 2.0 token endpointможно использовать любую из двух версий.Application ID URI: Скопируйте значение поляApplication ID URIс экрана Overview сервера ресурсов.














