# Настройка AWS PrivateLink для сервиса в вашей инфраструктуре

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

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

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

* Enterprise+
* Virtual Private

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

AWS PrivateLink обеспечивает безопасное частное соединение между dbt и сервисами в вашей инфраструктуре. Это могут быть системы контроля версий (VCS), хранилища данных или любые другие приложения, которыми вы управляете. С PrivateLink вам не нужно открывать доступ к сервису из общедоступного интернета. Весь обмен данными происходит по частной сети, что существенно повышает безопасность. Подробнее см. в [документации AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/).

## Что рассматривается в этом руководстве

Это руководство посвящено не конкретному сервису или архитектуре серверной части, а [сервису конечной точки (Endpoint Service)](#terminology), который соединяет dbt с сервисом в вашей инфраструктуре. Этот процесс должен быть стандартным для большинства сценариев использования.

[![Область охвата этого руководства](/img/docs/dbt-platform/aws-self-hosted-privatelink/scope-of-guide.png?v=2 "Область охвата этого руководства")](#)Область охвата этого руководства

За рамками руководства

В этом руководстве не рассматриваются настройка и устранение неполадок сервиса в вашей инфраструктуре, балансировщика нагрузки или состояния целевой группы, поскольку такие среды допускают практически неограниченное число вариантов конфигурации. Служба поддержки dbt может по возможности помочь с такими проблемами, однако для ускорения их решения рекомендуем обращаться в [службу поддержки AWS](https://aws.amazon.com/support/).

## Для кого предназначено руководство

Это руководство предназначено для администраторов облачных сетей или инженеров, отвечающих за настройку и поддержание безопасного сетевого обмена данными в среде AWS вашей организации.

## Терминология

В этом руководстве используется несколько важных терминов, связанных с AWS PrivateLink. Понимание этих определений поможет успешно выполнить настройку. Более подробное объяснение этих понятий см. в [документации AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html).

* **Потребитель (Consumer):** В этом контексте потребитель — это dbt, который создает конечную точку VPC для подключения к вашему сервису конечной точки.
* **Поставщик сервиса (Service provider):** Ваша организация, которая владеет сервисом за балансировщиком Network Load Balancer, управляет им и создает сервис конечной точки.
* **Сервис конечной точки (Endpoint Service):** Ресурс AWS, предоставляющий потребителям доступ к вашему сервису и позволяющий им создавать конечные точки VPC для доступа к нему. Он связан с балансировщиком Network Load Balancer.
* **Имя сервиса (Service Name):** Глобально уникальный идентификатор вашего сервиса конечной точки (формат: `com.amazonaws.vpce.region.vpce-svc-xxx`). Вы передаете его службе поддержки dbt для установления соединения.
* **Network Load Balancer (NLB):** Обязательный тип балансировщика нагрузки — внутренний (internal). Он размещается перед вашим сервисом. Для использования PrivateLink ваше приложение должно работать за NLB.
* **Целевая группа (Target Group):** Направляет трафик от NLB к экземплярам вашего сервиса (EC2, IP-адресам или ALB).

## Предварительные требования

Перед началом работы ознакомьтесь со следующими требованиями:

1. **Поддерживаемые типы балансировщиков нагрузки**

   dbt официально проверил работу PrivateLink со следующим типом балансировщика нагрузки:

   * Network Load Balancer (Internal)

   > Хотя другие конфигурации могут быть совместимы с AWS PrivateLink, в этом руководстве предполагается, что ваш сервис настроен за внутренним балансировщиком Network Load Balancer. Подробнее см. в [документации AWS Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html).

2. **Работоспособность сервиса**

   * Прежде чем продолжить, убедитесь, что ваш сервис или приложение работает за выбранным балансировщиком нагрузки и проходит проверки работоспособности.

3. **ARN роли AWS IAM для dbt**

   * Обратитесь в [службу поддержки dbt](mailto:support@getdbt.com), чтобы получить ARN роли AWS IAM для dbt. Он понадобится, чтобы разрешить dbt подключаться к вашему сервису конечной точки.

## Дополнительная настройка NLB

Следующие настройки необязательны, но рекомендуются при настройке Network Load Balancer для соединения с dbt через PrivateLink.

### Межзонная балансировка нагрузки

Включите [межзонную балансировку нагрузки](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#cross-zone-load-balancing) на вашем NLB, чтобы избежать несовпадения зон доступности вашего сервиса и конечной точки VPC dbt. Это обеспечит равномерное распределение трафика между всеми работоспособными целевыми ресурсами независимо от того, из какой зоны доступности поступает запрос.

### Настройка группы безопасности

Если с вашим NLB связана [группа безопасности](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-security-groups.html), необходимо убедиться, что трафик PrivateLink от dbt разрешен. По умолчанию, когда с NLB связана группа безопасности, правила входящего трафика применяются ко всему трафику, включая трафик PrivateLink.

У вас есть два варианта:

| Вариант                                                     | Описание                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Отключить применение правил** (рекомендуется)             | Отключите применение правил группы безопасности к трафику PrivateLink. Это самый простой подход, не требующий знания внутренних диапазонов CIDR dbt. В консоли AWS: NLB → Security → Edit → снимите флажок **Enforce inbound rules on PrivateLink traffic**.                             |
| **Добавить диапазоны CIDR dbt в правила входящего трафика** | Если ваш сценарий использования требует применения правил группы безопасности к трафику PrivateLink, [обратитесь в службу поддержки dbt](mailto:support@getdbt.com), чтобы получить внутренние диапазоны CIDR для добавления в правила входящего трафика группы безопасности вашего NLB. |

Подробнее см. в разделе [Обновление групп безопасности для Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-security-groups.html).

## Инструкции

1. Войдите в [консоль AWS](https://console.aws.amazon.com).
2. Перейдите в аккаунт AWS и регион, в которых расположен сервис в вашей инфраструктуре.

### Создание сервиса конечной точки VPC

3. В консоли AWS перейдите в **VPC** → **Endpoint Services** → **Create Endpoint Service**

4. На странице Create endpoint service:

   a. **Load balancer type:** Выберите **Network**

   b. **Available load balancers:** Выберите NLB, размещенный перед вашим сервисом

   c. **Acceptance required:** Включите этот параметр (рекомендуется), чтобы вручную подтверждать запросы на подключение

   d. Нажмите **Create**

### Предоставление dbt доступа к сервису конечной точки

5. После создания сервиса конечной точки выберите его и перейдите на вкладку **Allow principals**

6. Нажмите **Allow principals** и добавьте ARN роли AWS IAM для dbt, полученный от службы поддержки:

   * Principal: `arn:aws:iam::<dbt-account-id>:role/MTPL_Admin`

### Получение имени сервиса конечной точки

7. На странице сведений о сервисе конечной точки скопируйте значение **Service name** (формат: `com.amazonaws.vpce.region.vpce-svc-xxx`)

[![Скопируйте имя сервиса конечной точки](/img/docs/dbt-platform/aws-self-hosted-privatelink/obtain-endpoint-svc-name.png?v=2 "Скопируйте имя сервиса конечной точки")](#)Скопируйте имя сервиса конечной точки

### Передача сведений о соединении службе поддержки dbt

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

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

```text
Subject: New AWS Self-hosted PrivateLink Request

- Type: Self-hosted PrivateLink
- Platform/Service (for example, Postgres, Starburst, Spark, GitLab, etc.):
- **dbt platform account URL:**
- VPC Endpoint Service Name:
- Custom DNS (if HTTPS/TLS):
  - DNS record:
- Service Region (for example, us-east-1, eu-west-2):
- dbt AWS environment (US, EMEA, AU, JP):
```

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

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

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

### Контрольный список настроек

1. **Группа безопасности NLB**

   Сетевой балансировщик нагрузки (NLB), связанный с сервисом конечной точки VPC, должен либо не иметь связанной группы безопасности, либо иметь группу безопасности с правилом, разрешающим запросы из частных диапазонов CIDR dbt. Подробнее см. в разделе [Настройка группы безопасности](#security-group-configuration).

   Совет по проверке

   Чтобы проверить, в этом ли причина проблемы, временно добавьте разрешающее правило для `10.0.0.0/8`: это должно обеспечить соединение до тех пор, пока правило не будет уточнено с использованием диапазона CIDR, предоставленного dbt.

2. **Прослушиватель NLB и целевая группа**

   Убедитесь, что к NLB подключен прослушиватель (Listener), соответствующий порту, к которому пытается подключиться dbt. Для этого прослушивателя должно быть настроено действие перенаправления в целевую группу (Target Group), целевые ресурсы которой указывают на ваш сервис. Хотя бы один из этих ресурсов (а желательно все) должен иметь состояние **Healthy**. Неработоспособные целевые ресурсы могут указывать на то, что сервис не работает или защищен группой безопасности, не разрешающей запросы от NLB.

3. **Межзонная балансировка нагрузки**

   Убедитесь, что для вашего NLB включена межзонная балансировка нагрузки (проверьте вкладку **Attributes** у NLB в консоли AWS). Если она отключена, а зоны, к которым подключен dbt, не совпадают с зонами, где работает сервис, запросы могут маршрутизироваться некорректно. Подробнее см. в разделе [Межзонная балансировка нагрузки](#cross-zone-load-balancing).

4. **Таблицы маршрутизации и списки ACL**

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

   Совет по проверке

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

### Мониторинг

Чтобы локализовать проблемы соединения через PrivateLink из dbt, можно использовать несколько источников мониторинга для проверки активности запросов. Чтобы в мониторинге появились данные, сначала необходимо отправить запросы на конечную точку. [Обратитесь в службу поддержки dbt](mailto:support@getdbt.com), чтобы узнать, когда выполнялось тестирование соединения, или запросить новые попытки подключения. Используйте эти временные отметки для сопоставления с активностью в следующих источниках мониторинга.

#### Мониторинг сервиса конечной точки VPC

В консоли AWS перейдите в **VPC** → **Endpoint Services**. Выберите проверяемый сервис конечной точки и откройте вкладку **Monitoring**. Измените временной диапазон так, чтобы он включал время тестовых попыток подключения. Если на графиках *New connections* и *Bytes processed* есть активность, значит, сервис конечной точки получил запросы, что указывает на корректную маршрутизацию от конечной точки dbt.

#### Мониторинг NLB

В консоли AWS перейдите в **EC2** → **Load Balancers**. Выберите проверяемый балансировщик Network Load Balancer (NLB) и откройте вкладку **Monitoring**. Измените временной диапазон так, чтобы он включал время тестовых попыток подключения. Если на графиках *New flow count* и *Processed bytes* есть активность, значит, NLB получил запросы от сервиса конечной точки, что указывает на корректную настройку прослушивателя NLB, целевой группы и группы безопасности.

#### Журналы потоков VPC (VPC Flow Logs)

Журналы потоков VPC могут предоставить различную полезную информацию о запросах, маршрутизируемых через ваши VPC, хотя иногда их бывает сложно найти и интерпретировать. Журналы потоков могут записываться в S3 или CloudWatch Logs, поэтому определите, доступны ли эти журналы для вашей VPC, и выполняйте запросы к соответствующему источнику. Журналы потоков содержат идентификатор эластичного сетевого интерфейса (ENI), IP-адреса и порты источника и назначения, а также сведения о том, был ли запрос разрешен или отклонен группой безопасности и/или сетевым списком ACL. Это помогает понять, поступил ли запрос на определенный сетевой интерфейс и был ли он разрешен, что может выявить чрезмерно строгие правила. Подробнее о доступе к журналам потоков VPC и их интерпретации см. в [документации AWS](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html).
