Объяснение управления доступом на основе ролей (RBAC) «Снежинка»
Создайте роли в Snowflake и предоставьте им привилегии.
Контроль доступа является одной из важнейших концепций во всех средах баз данных. В этой статье мы узнаем об управлении доступом на основе ролей Snowflake (RBAC), а также о том, как создавать собственные роли и предоставлять доступ к ролям из Snowflake WebUI и с помощью клиента SnowSQL CLI.
1. Что такое управление доступом на основе ролей (RBAC)?
Snowflake предоставляет управление доступом на основе ролей (RBAC) в качестве механизма предоставления или запрещения доступа к различным объектам базы данных и действиям участников безопасности (пользователей, служб и т. д.).
2. Что такое роль?
Роли — это сущности, которые могут предоставлять и отзывать права на защищаемые объекты. Пользователям назначаются роли, позволяющие им выполнять действия, необходимые для бизнес-функций их организации.
Пользователю может быть назначено несколько ролей. Пользователи могут менять роли для выполнения разных задач с разными наборами прав.
Роли также могут быть назначены другим ролям, что приводит к иерархии ролей. Пользовательские роли могут создавать пользователи с соответствующим доступом. Любые роли выше этой позиции в иерархии наследуют привилегии, связанные с этой ролью.
В учетной записи Snowflake будут встроены некоторые системные роли. Роли, определенные системой, нельзя удалить, а привилегии, назначенные этим ролям, нельзя отозвать.
Существует пять ролей, определяемых системой, и Snowflake определяет, какую «роль» должна выполнять каждая системная роль, которой должны следовать пользователи.
- ACCOUNTADMIN: Должность ACCOUNTADMIN объединяет обязанности SYSADMIN и SECURITYADMIN в одну.
- ОРГАДМИН. На организационном уровне это роль, которая управляет работой.
- Администратор безопасности. Эта должность отвечает за мониторинг и управление пользователями и ролями.
- USERADMIN: Эта должность отвечает за создание ролей и пользователей.
- СИСАДМИН. В учетной записи эта роль имеет возможность создавать хранилища, базы данных и другие объекты. Предполагается, что SYSADMIN объединяет все пользовательские роли.
- ПУБЛИЧНЫЙ. Эта роль автоматически назначается всем пользователям и ролям в вашей учетной записи.
Помимо этих ролей, определяемых системой, можно создавать роли в соответствии с требованиями и назначать привилегии этой роли. Это называется Пользовательские роли.
3. Иерархия ролей и наследование привилегий
На следующей диаграмме показано, как иерархически организованы роли, определенные системой, и как пользовательские роли могут быть связаны с ролями, определенными системой.
ORGADMIN — это отдельная системная роль, которая контролирует операции в масштабе всей организации. Иерархия системных ролей не содержит этой роли.
Иерархия ролей и наследование привилегий
Пример иерархии ролей и наследования привилегий:
Пример — иерархия ролей и наследование привилегий
В приведенном выше примере
- Роль 2 наследует привилегию «Выбрать».
- Роль 1 наследует привилегии «Выбрать» и «Создать».
- Пользователю 1 назначена роль 1, что означает все три привилегии.
- Пользователю 2 назначена роль 2, что означает привилегии «Выбрать» и «Создать».
Примечание. Ролям будут предоставлены привилегии, а пользователям будут предоставлены роли для определения действий/операций, которые пользователи могут выполнять с объектами в системе.
4. Как создавать собственные роли
Здесь мы собираемся создать пользовательские роли, о которых мы говорили ранее. Мы можем создавать правила из веб-интерфейса Snowflake или с помощью клиента SnowSQL CLI. Сначала мы увидим графический способ.
4.1. Создание ролей из Snowflake WebUI
Вы можете просмотреть роли, определенные системой, в пользовательском интерфейсе Snowflake. Перейти к Snowflake-UI ? Счет ? Роли.
Просмотр ролей
Создайте новую роль с именем 'dev_ostechnix'. Для этого перейдите в Snowflake-UI ? Счет ? Роли? Создать.
Создать роль
Заполните имя роли, выберите родительскую роль и прокомментируйте эту роль.
Определить свойства роли
Новая роль «dev_ostechnix» будет создана, как только вы нажмете кнопку «Готово».
Мы создали эту пользовательскую роль с определенной системой ролью 'ACCOUNTADMIN'. В настоящее время ни одному пользователю не предоставлена эта роль. Поскольку родительской ролью является SYSADMIN, роль «dev_ostechnix» предоставляется SYSADMIN.
Новая роль создана
4.2. Создание ролей из командной строки с помощью SnowSQL
Подключите Snowflake к SnowSQL с помощью команды ниже:
snowsql -a uz64318.southeast-asia.azure -u OSTECHNIX
Введите пароль вашей учетной записи:
Password:
* SnowSQL * v1.2.21
Type SQL statements or !help
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>
Подключите Snowflake к SnowSQL
ACCOUNT ADMIN — это роль с суперпривилегиями, мы вошли в систему с этой ролью. Теперь мы собираемся создать пользовательскую роль с ролью ACCOUNT ADMIN.
Вы можете проверить текущую роль, используя команду ниже:
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>select current_role();
+----------------+
| CURRENT_ROLE() |
|----------------|
| ACCOUNTADMIN |
+----------------+
1 Row(s) produced. Time Elapsed: 0.133s
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>
Проверить текущую роль
Создайте роль 'TEST_OSTECHNIX' с комментарием 'tester role', используя приведенную ниже команду.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>CREATE ROLE "TEST_OSTECHNIX" COMMENT = 'tester role';
Пример вывода:
+-------------------------------------------+
| status |
|-------------------------------------------|
| Role TEST_OSTECHNIX successfully created. |
+-------------------------------------------+
1 Row(s) produced. Time Elapsed: 0.753s
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>
Создать новую роль из командной строки
Вы можете просмотреть роли, используя команду ниже.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>show ROLES;
Показать все роли
На данный момент роли TEST_OSTECHNIX не предоставлены никакие привилегии.
Проверьте гранты, используя команду ниже.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>show grants to role TEST_OSTECHNIX;
Проверьте права предоставления прав
5. Предоставление привилегий роли
Каждая категория объектов будет иметь свой собственный набор привилегий. Например, «Виртуальный склад» будет иметь указанные ниже права.
- ИЗМЕНИТЬ: Позволяет изменить свойства Склада.
- МОНИТОР: позволяет отслеживать запросы, выполняемые в Хранилище, и статистику использования Хранилища.
- РАБОТА: Позволяет изменять состояние Хранилища, например «Остановить», «Запустить», «Приостановить» и «Возобновить». Также позволяет просматривать прошлые и настоящие запросы в Хранилище и прерывать запросы.
- ИСПОЛЬЗОВАНИЕ: Позволяет использовать Хранилище, т. е. позволяет выполнять запросы в Хранилище.
- ВЛАДЕНИЕ: Позволяет полный контроль над Складом. Одновременно только одна роль может иметь эту привилегию для объекта.
- ВСЕ: предоставляет все привилегии, кроме ВЛАДЕНИЯ.
Здесь мы предоставляем привилегии объекта 'Виртуальный склад' роли, которую мы создали выше.
5.1. Предоставление привилегий роли из Snowflake WebUI
Вы можете переключить роль, если роль была предоставлена роли. Поскольку мы используем роль АДМИНИСТРАТОРА АККАУНТА, он будет иметь суперконтроль. Измените роль, выбрав параметры в разделе Аккаунт в правом верхнем углу.
Теперь мы находимся в роли «АДМИН АККАУНТА». Он будет иметь все привилегии на складах в системе.
Посмотреть виртуальный склад
Как только мы переключим роль, мы увидим, что роль «DEV_OSTECHNIX» не может просматривать какие-либо склады в системе. Роль «DEV_OSTECHNIX» не имеет никаких привилегий.
Проверка привилегий
Чтобы предоставить привилегии, пользователь должен переключиться на роль, у которой есть привилегии для предоставления этой роли. Поскольку мы используем ACCOUNT_ADMIN, мы переключаемся на него и предоставляем привилегии роли DEV_OSTECHNIX.
Выберите строку Склада, которому вы хотите предоставить привилегии, справа вы увидите всплывающее окно с правами предоставления.
Предоставление привилегий
Никаких привилегий сейчас не предоставляется. Нажмите «Предоставить привилегии», чтобы предоставить привилегии роли.
Предоставление привилегий роли
Выберите, какую привилегию вы хотите предоставить, и выберите роль, которой вы хотите предоставить эту привилегию. Вы можете нажать символ + в правом верхнем углу, чтобы добавить предоставляемые права.
Здесь мы предоставляем привилегии MODIFY и OPERATE роли DEV_OSTECHNIX.
Привилегии, предоставленные роли
Вы можете проверить права, переключив роль на DEV_OSTECHNIX.
Просмотр привилегий
5.2. Предоставьте привилегии роли с помощью клиента SnowSQL CLI.
Убедитесь, что вы находитесь в роли, которой должны быть предоставлены привилегии. В этой демонстрации мы используем ACCOUNT_ADMIN.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>select current_role();
+----------------+
| CURRENT_ROLE() |
|----------------|
| ACCOUNTADMIN |
+----------------+
1 Row(s) produced. Time Elapsed: 0.133s
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>
Переключиться на роль ACCOUNT_ADMIN
Просмотрите склады, доступные в системе, с помощью приведенной ниже команды «показать».
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>show WAREHOUSES;
Показать СКЛАДЫ
Переключите роль на TEST_OSTECHNIX.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>use role TEST_OSTECHNIX;
Сменить роль
Проверьте права доступа к Складам, просто просмотрев Склады.
Проверьте привилегии из командной строки
На данный момент роли TEST_OSTECHNIX не предоставлены никакие привилегии.
Чтобы предоставить привилегии, вернитесь к роли ACCOUNT_ADMIN.
OSTECHNIX#(no warehouse)@(no database).(no schema)>use role ACCOUNTADMIN;
Предоставьте права доступа к Хранилищу OSTECH_DEMO_3 роли TEST_OSTECHNIX.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>grant MODIFY, OPERATE on warehouse OSTECH_DEMO_3 to role TEST_OSTECHNIX;
Предоставление привилегий из командной строки
Проверьте права, переключившись на роль TEST_OSTECHNIX.
OSTECHNIX#COMPUTE_WH@(no database).(no schema)>use role TEST_OSTECHNIX;
OSTECHNIX#(no warehouse)@(no database).(no schema)>show WAREHOUSES;
Показать СКЛАДЫ из командной строки
Теперь вы можете гарантировать, что роль TEST_OSTECHNIX может просматривать хранилище OSTECH_DEMO_3 и оно находится в состоянии Приостановлено.
Запустите Хранилище, используя приведенную ниже команду.
OSTECHNIX#(no warehouse)@(no database).(no schema)>alter WAREHOUSE OSTECH_DEMO_3 RESUME;
Запустить склад из командной строки
Проверьте статус с помощью команды «показать».
Показать статус склада из командной строки
Теперь мы можем гарантировать, что роль TEST_OSTECHNIX имеет предоставленные права доступа к хранилищу OSTECH_DEMO_3.
Примечание. Какие бы запросы мы ни использовали в CLI SnowSQL, их можно использовать и в листе Snowflake, доступном в WebUI.
Рабочий лист «Снежинка»
Заключение
В этой статье мы рассмотрели управление доступом на основе ролей (RBAC) в Snowflake. Мы продемонстрировали, что RBAC просто создает роли и предоставляет им привилегии для объекта «Виртуальный склад».
Аналогичным образом мы можем предоставить доступ к другим объектам, таким как базы данных, таблицы и т. д. Подробное представление об управлении пользователями и предоставлении доступа пользователям мы получим в следующей статье.
Ресурс:
- https://docs.snowflake.com/en/user-guide/security-access-control.html