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

Платформа dbt | Enterprise+

Доступно на определённых уровнях 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](https://docs.getdbt.tech/docs/platform/manage-access/set-up-snowflake-oauth.md) через соединение Azure Private Link из dbt, также необходим доступ к конечной точке Private Link с локальной рабочей станции. По возможности используйте [Snowflake External OAuth](https://docs.getdbt.tech/docs/platform/manage-access/snowflake-external-oauth.md), чтобы обойти это ограничение.

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

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

* [Snowflake SSO with Private Connectivity](https://docs.snowflake.com/en/user-guide/admin-security-fed-auth-overview#label-sso-private-connectivity)

## Настройка Azure Private Link

Чтобы настроить экземпляры Snowflake, размещённые в Azure, для использования [Private Link](https://learn.microsoft.com/en-us/azure/private-link/private-link-overview):

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

```sql

USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$GET_PRIVATELINK_CONFIG();
```

2. Добавьте необходимую информацию в следующий шаблон и отправьте запрос в [службу поддержки dbt](mailto:support@getdbt.com):

 Шаблон письма в службу поддержки

```text
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) будет доступна.

3. Служба поддержки dbt предоставит вам `private endpoint resource_id` нашего `private_endpoint`, чтобы вы могли завершить [настройку PrivateLink](https://community.snowflake.com/s/article/HowtosetupPrivatelinktoSnowflakefromCloudServiceVendors), обратившись в службу поддержки Snowflake.

4. (Опционально) При включении [Azure private endpoint для Internal Stage](https://docs.snowflake.com/en/user-guide/private-internal-stages-azure) также будет предоставлен `resource_id` для endpoint’а Internal Stage.

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

```sql

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](https://docs.snowflake.com/en/user-guide/network-policies) для ограничения доступа к вашей учетной записи Snowflake, необходимо добавить сетевое правило для dbt.

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

### Поиск Azure Link ID endpoint’а

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

```sql

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**.

[![Создание сетевого правила](/img/docs/dbt-platform/snowflakeprivatelink2.png?v=2 "Создание сетевого правила")](#)Создание сетевого правила

9. На вкладке **Network Policy** отредактируйте политику, в которую хотите добавить правило. Это может быть политика уровня аккаунта или политика для пользователей, подключающихся из dbt.

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

[![Обновление Network Policy](/img/docs/dbt-cloud/snowflakeprivatelink3.png?v=2 "Обновление Network Policy")](#)Обновление Network Policy

[![Обновление сетевой политики](/img/docs/dbt-platform/snowflakeprivatelink3.png?v=2 "Обновление сетевой политики")](#)Обновление сетевой политики

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

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

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

```sql

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

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

```sql

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