# О правах доступа на уровне окружения

Платформа dbt

Разрешения на уровне окружения позволяют администраторам dbt предоставлять группам и сервисным токенам права на запись для определённых [типов окружений](https://docs.getdbt.tech/docs/dbt-platform-environments.md) в рамках проекта. Предоставление доступа к окружению даёт пользователям доступ ко всем действиям и ресурсам уровня окружения, требующим прав на запись и предусмотренным назначенными им ролями. Например, пользователи с ролью Developer могут создавать и запускать задания в окружениях, к которым у них есть доступ. Во всех остальных окружениях эти же пользователи будут иметь доступ только для чтения.

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

Инструкции по настройке приведены на [странице настройки](https://docs.getdbt.tech/docs/platform/manage-access/environment-permissions-setup.md).

## Текущие ограничения

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

* Разрешения на уровне окружения не позволяют создавать пользовательские роли и разрешения для каждого типа ресурсов в dbt.
* Можно выбирать только типы окружений, но нельзя указать конкретное окружение в проекте.
* Нельзя выбирать отдельные ресурсы внутри окружений. Задания и запуски dbt — это ресурсы окружения.
  * Например, нельзя указать, что пользователь имеет доступ только к заданиям, но не к запускам. Доступ к определённому окружению предоставляет пользователю доступ ко всему внутри этого окружения.

## Окружения и роли

В каждом проекте dbt есть четыре типа сред:

* **Production** — Основное окружение развертывания. Только одно уникальное Production окружение на проект.
* **Development** — Окружение для тестирования разработчиками. Только одно уникальное Development окружение на проект.
* **Staging** — Предпродакшн окружение, находящееся между разработкой и продакшном. Только одно уникальное Staging окружение на проект.
* **General** — Окружения общего назначения. Нет ограничений на количество на проект.

### Права на запись в среде (Environment write permissions)

Права на запись в окружении применяются только к перечисленным ниже наборам разрешений. Эти наборы отмечены звёздочкой в [таблице наборов разрешений проекта](https://docs.getdbt.tech/docs/platform/manage-access/enterprise-permissions.md#project-access-for-project-permissions).

Для этих наборов данная настройка предоставляет участникам группы права на создание, редактирование и удаление заданий и запусков в выбранных вами типах окружений. Она не позволяет создавать или удалять сами окружения. Для этих действий требуется набор разрешений с повышенными привилегиями, например Admin или Job admin.

Права на запись в среде могут быть заданы для следующих ролей:

* Analyst
* Database admin
* Developer\*
* Git admin
* Job creator\*\*
* Team admin

\* В таблице [корпоративных разрешений](https://docs.getdbt.tech/docs/platform/manage-access/enterprise-permissions.md) роль `Developer` имеет доступ к настройкам окружения только для чтения, но при добавлении в группу поле **Environment write access** по умолчанию принимает значение `All environments`, что предоставляет более широкие разрешения для окружений, чем указано в таблице. Роли `Analyst`, `Database admin`, `Git admin` и `Team admin` по умолчанию получают **Read-only environment access**, если для этой группы не задан другой уровень доступа в поле **Environment write access**.

\*\* В таблице корпоративных разрешений роль [Job creator](https://docs.getdbt.tech/docs/platform/manage-access/enterprise-permissions.md#job-creator) имеет доступ к окружениям только для чтения. Пользователи могут создавать, редактировать и запускать задания только в тех типах окружений, для которых у группы есть **Environment write access**. См. раздел [Настройка разрешений на уровне окружения](https://docs.getdbt.tech/docs/platform/manage-access/environment-permissions-setup.md).

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

Определите, какие персоны нуждаются в обновленном доступе к окружениям и к каким ролям они должны быть привязаны. Ниже приведены несколько сценариев для прав доступа к окружениям:

* **Developer** — Доступ на запись для создания и запуска jobs в непроизводственных средах
* **Testing/QA** — Доступ на запись к средам staging и development для тестирования
* **Production deployment** — Доступ на запись ко всем средам, включая production, для выполнения развертываний
* **Analyst** — Не требуется доступ на запись к средам, но нужен доступ только на чтение для исследования данных и устранения проблем
* **Other admins** — Этим администраторам может потребоваться доступ на запись для создания и запуска jobs или настройки интеграций в любом количестве сред

## Проекты и окружения

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

### Окружения одного проекта

Если вы работаете с одним проектом, мы рекомендуем ограничить доступ к окружению Production и обеспечить доступ групп к окружениям Development, Staging или General, где они могут безопасно создавать и запускать задания. Пример того, как персоны могут быть сопоставлены с ролями:

* **Разработчик:** Роль разработчика с доступом на запись к окружениям Development и General
* **Тестирование/QA:** Роль разработчика с доступом на запись к окружениям Development, Staging и General
* **Развертывание в продакшн:** Роль разработчика с доступом на запись ко всем окружениям или роль Job Admin, которая имеет доступ ко всем окружениям по умолчанию.
* **Аналитик:** Роль аналитика без доступа на запись и с доступом только для чтения к окружениям.
* **Другие администраторы:** Зависит от потребностей администратора. Например, если они управляют развертыванием в продакшн, предоставьте доступ ко всем окружениям.

### Несколько проектов

Предположим, что в компании Acme есть 12 проектов, из которых 3 принадлежат Финансам, 3 - Маркетингу, 4 - Производству и 2 - Технологиям.

С различным доступом по проектам:

* **Разработчик:** Если у пользователя есть роль Разработчика и доступ к Проектам A, B, C, то ему нужен доступ только к окружениям Dev и General.
* **Тестирование/QA:** Если у них есть роль Разработчика и доступ к Проектам A, B, C, то им нужен доступ только к окружениям Development, Staging и General.
* **Развертывание в продакшн:** Если у пользователя есть роль Администратора *или* Разработчика *и* доступ к Проектам A, B, C, то ему нужен доступ ко всем окружениям.
* **Аналитик:** Если у пользователя есть роль Аналитика, то ему *не* нужен доступ на запись *ни к одному окружению*.
* **Другие администраторы:** Пользователь (не Администратор) может иметь доступ к нескольким проектам в зависимости от требований.

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

## Связанная документация

* [Настройка разрешений на уровне окружения](https://docs.getdbt.tech/docs/platform/manage-access/environment-permissions-setup.md)
