Настройка 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 с помощью Snowflake OAuth через соединение AWS PrivateLink из dbt, также потребуется доступ к конечной точке PrivateLink с локальной рабочей станции. По возможности используйте Snowflake External OAuth, чтобы обойти это ограничение.
Из документации Snowflake:
В настоящее время для каждой учетной записи Snowflake SSO может работать только с одним URL учетной записи одновременно: либо с публичным URL учетной записи, либо с URL, связанным с сервисом приватной сетевой связности.
Для настройки Snowflake OAuth в dbt необходимо участие администраторов обеих систем, которые должны выполнить следующие шаги:
- Найти значение URI перенаправления в dbt.
- Создать интеграцию безопасности в Snowflake.
- Настроить подключение в dbt.
Чтобы использовать Snowflake в Studio IDE, каждый разработчик должен пройти аутентификацию в Snowflake в разделе учетных данных своего профиля.
Найдите значение перенаправления URI
Для начала скопируйте URI перенаправления подключения из dbt:
- Перейдите в Account settings.
- Выберите Projects и укажите проект из списка.
- Нажмите на поле Development connection, чтобы просмотреть сведения о подключении, и установите для OAuth method значение "Snowflake SSO".
- Скопируйте Redirect URI для использования на последующих шагах.
Создайте интеграцию безопасности
В 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:
- Перейдите в Account Settings, нажмите Connections и выберите подключение.
- Отредактируйте подключение и введите Client ID и Client Secret.
- Нажмите Save.
После включения SSO для Snowflake пользователи проекта смогут настроить свои учетные данные в своих профилях. При нажатии кнопки «Connect to Snowflake Account» пользователи будут перенаправлены в Snowflake для авторизации через настроенного провайдера SSO, а затем обратно в dbt для завершения настройки. После этого пользователи смогут получить доступ к Studio IDE со своими учетными данными.
После включения Snowflake SSO пользователи проекта смогут настроить свои учетные данные в своих профилях. Нажав кнопку "Connect to Snowflake Account", пользователи будут перенаправлены в Snowflake для авторизации через настроенного SSO‑провайдера, а затем обратно в для завершения процесса настройки. После этого пользователи смогут использовать со своими учетными данными для разработки.
После того как пользователь авторизует 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. В этом случае вам потребуется заново создать все ваши существующие подключения.



