Перейти к основному содержимому

Настройка OAuth для Snowflake

Миграция на статические поддомены

Мы переводим мультитенантные аккаунты по всему миру в dbt platform на статические поддомены. После миграции вы будете автоматически перенаправлены с исходного URL (например, cloud.getdbt.com) на новый URL со статическим поддоменом (например, abc123.us1.dbt.com), который можно найти в настройках аккаунта. Если ваша организация использует список разрешённых сетевых адресов, добавьте в него домен us1.dbt.com.

Миграция может потребовать дополнительных действий в вашем аккаунте Snowflake. Подробнее см. в разделе миграция поддоменов.

dbt Enterprise и Enterprise+ поддерживают аутентификацию OAuth в Snowflake. Когда Snowflake OAuth включён, пользователи могут авторизовать свои учётные данные с помощью единого входа (SSO) через Snowflake вместо того, чтобы передавать имя пользователя и пароль в dbt. Если в Snowflake настроен SSO через стороннего поставщика удостоверений, разработчики могут использовать этот способ для входа в Snowflake и авторизации учётных данных пользователя dbt без дополнительной настройки.

Snowflake OAuth с PrivateLink

Пользователям, подключающимся к Snowflake с помощью Snowflake OAuth через соединение AWS PrivateLink из dbt, также потребуется доступ к конечной точке PrivateLink с локальной рабочей станции. По возможности используйте Snowflake External OAuth, чтобы обойти это ограничение.

Из документации Snowflake:

В настоящее время для каждой учетной записи Snowflake SSO может работать только с одним URL учетной записи одновременно: либо с публичным URL учетной записи, либо с URL, связанным с сервисом приватной сетевой связности.

Для настройки Snowflake OAuth в dbt необходимо участие администраторов обеих систем, которые должны выполнить следующие шаги:

  1. Найти значение URI перенаправления в dbt.
  2. Создать интеграцию безопасности в Snowflake.
  3. Настроить подключение в dbt.

Чтобы использовать Snowflake в Studio IDE, каждый разработчик должен пройти аутентификацию в Snowflake в разделе учетных данных своего профиля.

Найдите значение перенаправления URI​

Для начала скопируйте URI перенаправления подключения из dbt:

  1. Перейдите в Account settings.
  2. Выберите Projects и укажите проект из списка.
  3. Нажмите на поле Development connection, чтобы просмотреть сведения о подключении, и установите для OAuth method значение "Snowflake SSO".
  4. Скопируйте Redirect URI для использования на последующих шагах.
Поля OAuth method и Redirect URI для подключения Snowflake в dbt.Где найти URI перенаправления Snowflake OAuth

Создайте интеграцию безопасности​

В Snowflake выполните запрос для создания интеграции безопасности. Полную документацию по созданию интеграции безопасности для пользовательских клиентов можно найти здесь.

В следующем примере запроса CREATE OR REPLACE SECURITY INTEGRATION замените значение <REDIRECT_URI> на Redirect URI (также называемый URL-адресом доступа), скопированный в dbt. Чтобы найти Redirect URI, обратитесь к предыдущему разделу Поиск значения Redirect URI.

Важно: если вы используете secondary roles, необходимо включить OAUTH_USE_SECONDARY_ROLES = 'IMPLICIT'; в этом выражении.

CREATE OR REPLACE SECURITY INTEGRATION DBT_CLOUD
TYPE = OAUTH
ENABLED = TRUE
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = '<REDIRECT_URI>'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
OAUTH_USE_SECONDARY_ROLES = 'IMPLICIT'; -- Required for secondary roles
Разрешения

Примечание: Только администраторы аккаунта Snowflake (пользователи с ролью ACCOUNTADMIN) или роль с глобальной привилегией CREATE INTEGRATION могут выполнять эту SQL-команду.

ПолеОписание
TYPEОбязательно
ENABLEDОбязательно
OAUTH_CLIENTОбязательно
OAUTH_CLIENT_TYPEОбязательно
OAUTH_REDIRECT_URIОбязательно. Используйте значение из настроек учетной записи dbt.
OAUTH_ISSUE_REFRESH_TOKENSОбязательно
OAUTH_REFRESH_TOKEN_VALIDITYОбязательно. Этот параметр задает срок действия токена обновления в секундах. Используйте меньшее значение, чтобы пользователям приходилось чаще проходить повторную аутентификацию в Snowflake.

Дополнительные параметры конфигурации могут быть указаны для интеграции безопасности по мере необходимости.

Настройка подключения в dbt​

Администратор базы данных отвечает за создание подключения к Snowflake в dbt. Это подключение настраивается с использованием идентификатора клиента (Client ID) и секрета клиента (Client Secret) Snowflake. Эти значения можно получить, выполнив следующий запрос в Snowflake:

with

integration_secrets as (
select parse_json(system$show_oauth_client_secrets('DBT_CLOUD')) as secrets
)

select
secrets:"OAUTH_CLIENT_ID"::string as client_id,
secrets:"OAUTH_CLIENT_SECRET"::string as client_secret
from
integration_secrets;

Чтобы завершить создание подключения в dbt:

  1. Перейдите в Account Settings, нажмите Connections и выберите подключение.
  2. Отредактируйте подключение и введите Client ID и Client Secret.
  3. Нажмите Save.
Настройка учетных данных Snowflake OAuth в dbtНастройка учетных данных Snowflake OAuth в dbt
Настройка учетных данных Snowflake OAuth в dbtНастройка учетных данных Snowflake OAuth в dbt

После включения SSO для Snowflake пользователи проекта смогут настроить свои учетные данные в своих профилях. При нажатии кнопки «Connect to Snowflake Account» пользователи будут перенаправлены в Snowflake для авторизации через настроенного провайдера SSO, а затем обратно в dbt для завершения настройки. После этого пользователи смогут получить доступ к Studio IDE со своими учетными данными.

После включения Snowflake SSO пользователи проекта смогут настроить свои учетные данные в своих профилях. Нажав кнопку "Connect to Snowflake Account", пользователи будут перенаправлены в Snowflake для авторизации через настроенного SSO‑провайдера, а затем обратно в для завершения процесса настройки. После этого пользователи смогут использовать со своими учетными данными для разработки.

Схема процесса SSO OAuthСхема процесса SSO OAuth

После того как пользователь авторизует dbt для доступа к Snowflake через своего поставщика удостоверений, Snowflake вернёт приложению dbt токен обновления (Refresh Token). Затем dbt сможет обменять этот токен обновления на токен доступа (Access Token), который можно использовать для открытия соединения со Snowflake и выполнения запросов в Studio IDE от имени пользователя.

ПРИМЕЧАНИЕ: Срок действия токена обновления определяется параметром OAUTH_REFRESH_TOKEN_VALIDITY, указанным в SQL-инструкции «create security integration». Когда срок действия токена обновления пользователя истечёт, пользователю потребуется повторно пройти авторизацию в Snowflake, чтобы продолжить разработку в dbt.

Настройка нескольких проектов dbt с использованием Snowflake 0Auth​

Если вы планируете подключить одну и ту же учётную запись Snowflake к разным проектам dbt, вы можете использовать одну и ту же интеграцию безопасности для всех проектов.

Настройка нескольких проектов dbt с Snowflake OAuth​

Если вы планируете использовать один и тот же аккаунт Snowflake для нескольких проектов , вы можете применять одну и ту же security integration для всех проектов.

Миграция на статический поддомен​

Если ваша учетная запись использует статический поддомен для миграции URL доступа, вам может потребоваться обновить интеграции безопасности Snowflake, совместно используемые несколькими проектами или подключениями, чтобы предотвратить перебои в работе.

Для подключений, созданных после миграции, требуется дополнительный URI перенаправления OAuth. Найдите этот URI перенаправления в разделе сведений об OAuth для подключения или в разделе URL доступа к API, а затем добавьте его в существующую интеграцию безопасности Snowflake.

ALTER SECURITY INTEGRATION IF EXISTS <INTEGRATION_NAME>
SET OAUTH_ALTERNATE_REDIRECT_URIS = ('<ACCESS_URL>/complete/snowflake')

Значения OAUTH_REDIRECT_URI и OAUTH_ALTERNATE_REDIRECT_URIS взаимозаменяемы.

После добавления нового URI перенаправления обязательно обновите существующее подключение в dbt platform, чтобы оно использовало этот URI. Дополнительные сведения см. в разделе Обновление URI перенаправления в dbt platform.

  • Настроить дополнительную security integration: В вашем аккаунте Snowflake будет одна integration с исходным URL (например, cloud.getdbt.com/complete/snowflake) в качестве redirect URI, и вторая — с новым статическим поддоменом. Полный список исходных доменов для вашего региона (помечены как “multi-tenant” в таблице) см. на странице Regions & IP addresses.
  • Использовать одну security integration: Создайте одну integration с новым статическим поддоменом в качестве redirect URI. В этом случае вам потребуется заново создать все ваши существующие подключения.

Устранение неполадок​

 Запрошенный scope недопустим

При нажатии на кнопку Connect Snowflake Account для подключения к аккаунту Snowflake вы можете получить ошибку The requested scope is invalid, даже если редирект на страницу входа Snowflake прошёл успешно.

Эта ошибка может быть связана с проблемой конфигурации OAuth-потока Snowflake, при которой параметр role в конфигурации профиля является обязательным для каждого пользователя и не наследуется со страницы подключения проекта. Это означает, что каждый пользователь должен указать информацию о своей роли, независимо от того, задана ли она на странице подключения проекта.

  • В OAuth-потоке Snowflake параметр role в конфигурации профиля не является опциональным, так как он не наследуется из конфигурации подключения проекта. Поэтому каждый пользователь должен указывать свою роль, даже если она задана в настройках подключения проекта.
 Ошибка сервера 500

Если при перенаправлении из Snowflake в dbt возникает ошибка сервера 500, убедитесь, что на уровне аккаунта Snowflake в список разрешённых добавлены IP-адреса dbt или VPC Endpoint ID (для подключений через PrivateLink).

Корпоративные клиенты, у которых есть развертывания с одним арендатором, будут иметь другой диапазон IP-адресов (диапазоны сетевых CIDR) для добавления в белый список.

В зависимости от настроек сетевых политик Snowflake или списка разрешённых IP-адресов вам может потребоваться явно добавить сетевую политику, включающую разрешённые IP-адреса dbt, в только что созданную интеграцию безопасности.

ALTER SECURITY INTEGRATION <security_integration_name>
SET NETWORK_POLICY = <network_policy_name> ;
 Вторичная роль не работает. Ошибка: USE ROLE not allowed

Если вы хотите использовать вторичные роли, но при настройке Snowflake OAuth сталкиваетесь с ошибкой Current sessions is restricted. USE ROLE not allowed, проверьте, что вы добавили следующее выражение в запрос:

OAUTH_USE_SECONDARY_ROLES = 'IMPLICIT';

Полный пример запроса см. в разделе Create a security integration.

Узнать больше​

Нашли ошибку?

0
Loading