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

Настройка Snowflake и Azure Private Link

Доступно на определённых уровнях Enterprise

Эта функция доступна на следующих уровнях dbt Enterprise:

  • Enterprise+
  • Virtual Private

Чтобы узнать больше об этих тарифах, свяжитесь с нами по адресу sales@getdbt.com.

Следующие шаги помогут настроить размещенную в Azure конечную точку Snowflake Private Link в мультитенантной среде dbt.

Конечные точки частного подключения не поддерживают соединения между разными облачными провайдерами (AWS, Azure и GCP). Чтобы частное подключение работало, и dbt, и сервер (например, Snowflake) должны быть размещены у одного облачного провайдера. Например, dbt, размещённый в AWS, не может подключаться к сервисам, размещённым в Azure, а dbt, размещённый в Azure, не может подключаться к сервисам, размещённым в GCP.

Snowflake OAuth с Private Link

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

Документация Snowflake:

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

Чтобы настроить экземпляры Snowflake, размещённые в Azure, для использования Private Link:

  1. В вашей учетной записи Snowflake выполните следующие SQL-запросы и скопируйте вывод:

USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$GET_PRIVATELINK_CONFIG();

  1. Добавьте необходимую информацию в следующий шаблон и отправьте запрос в службу поддержки dbt:
 Шаблон письма в службу поддержки
Subject: New Azure Multi-Tenant Private Link Request

- Type: Snowflake
- dbt platform account URL:
- The output from SYSTEM$GET_PRIVATELINK_CONFIG:
- Include the privatelink-pls-id
- Enable Internal Stage Private Link? Y/N (If Y, output must include privatelink-internal-stage)
- dbt Azure multi-tenant environment (US or EMEA):

dbt Labs выполнит настройку приватного подключения от вашего имени. Пожалуйста, заложите 3–5 рабочих дней на завершение этого процесса. Служба поддержки свяжется с вами, когда конечная точка (endpoint) будет доступна.

  1. Служба поддержки dbt предоставит вам private endpoint resource_id нашего private_endpoint, чтобы вы могли завершить настройку PrivateLink, обратившись в службу поддержки Snowflake.

  2. (Опционально) При включении Azure private endpoint для Internal Stage также будет предоставлен resource_id для endpoint’а Internal Stage.

Как администратор Snowflake, вызовите функцию SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS, передав в качестве аргумента значение resource ID. Это авторизует доступ к внутреннему stage Snowflake через private endpoint.


USE ROLE ACCOUNTADMIN;

-- Azure Private Link
SELECT SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS ( 'AZURE_PRIVATE_ENDPOINT_RESOURCE_ID' );

Создание подключения в dbt​

После того как служба поддержки dbt завершит настройку, вы сможете создавать новые подключения с использованием Private Link.

  1. Перейдите в Account Settings → Projects → Create new project.
  2. В разделе Configure your development environment step выберите Add new connection.
  3. Вы перейдёте на страницу Add new connection. Выберите Snowflake.
  4. В разделе Settings выберите PrivateLink Endpoint.
  5. Выберите частную конечную точку из раскрывающегося списка (поле имени хоста/учётной записи заполнится автоматически).
  6. Настройте остальные параметры платформы данных.
  7. Проверьте подключение и сохраните его.

Настройка сетевых политик​

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

Используйте Azure Link ID, чтобы указать частную конечную точку dbt в сетевом правиле.

Snowflake позволяет найти Azure Link ID настроенных конечных точек, выполнив команду SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS. Используйте следующий код, чтобы извлечь значение Link ID и имя связанного ресурса конечной точки:


select
value:linkIdentifier, REGEXP_SUBSTR(value: endpointId, '([^\/]+$)')
from
table(
flatten(
input => parse_json(system$get_privatelink_authorized_endpoints())
)
);

Использование UI​

Откройте UI Snowflake и выполните следующие шаги:

  1. Перейдите на вкладку Security.
  2. Нажмите Network Rules.
  3. Нажмите + Network Rule.
  4. Задайте имя правила.
  5. Выберите базу данных и схему, в которых будет храниться правило. Эти настройки используются для управления правами и организации и не влияют на само правило.
  6. Установите тип Azure Link ID, а режим — Ingress.
  7. В поле identifier введите Azure Link ID, полученный в предыдущем разделе, и нажмите Enter.
  8. Нажмите Create Network Rule.
Создание сетевого правилаСоздание сетевого правила
  1. На вкладке Network Policy отредактируйте политику, в которую хотите добавить правило. Это может быть политика уровня аккаунта или политика для пользователей, подключающихся из dbt.

  2. Добавьте новое правило в список разрешённых и нажмите Update Network Policy.

Обновление Network PolicyОбновление Network Policy
Обновление сетевой политикиОбновление сетевой политики

Для быстрой и автоматизированной настройки сетевых правил через SQL в Snowflake следующие команды позволяют создать и настроить правила доступа для . Эти SQL-примеры демонстрируют, как добавить сетевое правило и обновить Network Policy.

Для быстрой и автоматизированной настройки сетевых правил с помощью SQL в Snowflake следующие команды позволяют создать и настроить правила доступа для dbt. Эти примеры SQL показывают, как добавить сетевое правило и соответствующим образом обновить сетевую политику.

  1. Создайте новое сетевое правило с помощью следующего SQL:

CREATE NETWORK RULE allow_dbt_cloud_access
MODE = INGRESS
TYPE = AZURELINKID
VALUE_LIST = ('<Azure Link ID>'); -- Замените '<Azure Link ID>' на фактический ID, полученный выше

  1. Добавьте правило в Network Policy с помощью следующего SQL:

ALTER NETWORK POLICY <network_policy_name>
ADD ALLOWED_NETWORK_RULE_LIST =('allow_dbt_cloud_access');

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

0
Loading