Организации и группы
Сервер Chef Infra использует управление доступом на основе ролей (RBAC) для ограничения доступа к объектам — узлам, средам, ролям, пакетам данных, кулинарным книгам и так далее. Это гарантирует, что только авторизованные пользователи и/или клиенты Chef Infra Client могут получить доступ к серверу Chef Infra. Доступ к объектам на сервере Chef Infra является точным, позволяя определять доступ по типу объекта, объекту, группе, пользователю и организации. Сервер Chef Infra использует разрешения для определения того, как пользователь может взаимодействовать с объектом после авторизации.
Сервер Chef Infra использует организации, группы и пользователей для определения управления доступом на основе ролей:
| Функция | Описание |
|---|---|
Организация является главным объектом для управления доступом на основе ролей в сервере Chef Infra. Каждая организация содержит стандартные группы (admins, clients, и users, а также billing_admins для размещённого сервера Chef Infra), как минимум одного пользователя и как минимум один узел (на котором установлен Chef Infra Client). Сервер Chef Infra поддерживает множество организаций. Сервер Chef Infra включает в себя одну стандартную организацию, определённую во время настройки. Дополнительные организации могут быть созданы после первоначальной настройки и конфигурации сервера Chef Infra. |
|
|
Группа используется для определения доступа к типам объектов и объектам на сервере Chef Infra, а также для назначения разрешений, определяющих типы задач, доступные членам группы, авторизованным для их выполнения. Группы настраиваются на уровне организации. Индивидуальные пользователи, являющиеся членами группы, наследуют разрешения, назначенные группе. Сервер Chef Infra включает в себя следующие стандартные группы: |
|
Пользователь — это любой неадминистратор, который будет управлять данными, загружаемыми на сервер Chef Infra со стационарного компьютера или который войдёт в веб-интерфейс консоли управления Chef. Сервер Chef Infra включает в себя одного стандартного пользователя, определённого при настройке, и автоматически назначенного в группу admins. |
|
| Клиент — это субъект, имеющий разрешение на доступ к серверу Chef Infra. Клиентом чаще всего является узел (на котором работает Chef Infra Client), но также может быть рабочая станция (на которой работает knife) или другое устройство, настроенное для использования API сервера Chef Infra. Каждый запрос к серверу Chef Infra, отправленный клиентом, использует закрытый ключ для аутентификации, который должен быть авторизован открытым ключом на сервере Chef Infra. |
Когда пользователь отправляет запрос на сервер Chef Infra с использованием API сервера Chef Infra, разрешение на выполнение этого действия определяется следующим процессом:
- Проверка разрешения пользователя на тип объекта.
- Если нет, рекурсивное проверка, является ли пользователь членом группы безопасности, имеющей разрешение на этот объект.
- Если да, разрешение на выполнение действия пользователю.
Разрешения управляются с помощью дополнения консоли управления Chef в веб-интерфейсе сервера Chef Infra.
Организации
Один экземпляр сервера Chef Infra может поддерживать множество организаций. Каждая организация имеет уникальный набор групп и пользователей. Каждая организация управляет уникальным набором узлов, на которых установлен и настроен клиент Chef Infra для взаимодействия с одной организацией на сервере Chef Infra.
Пользователь может принадлежать к нескольким организациям при следующих условиях:
- Управление доступом на основе ролей настроено на уровне организации.
- Для взаимодействия одного пользователя с сервером Chef Infra с помощью knife из того же chef-repo, этому пользователю может потребоваться изменить файл config.rb перед этим взаимодействием.
Использование нескольких организаций в сервере Chef Infra гарантирует, что один и тот же набор инструментов, шаблоны кодирования и практики, физическое оборудование и поддержка продукта применяются ко всей компании, даже когда:
- Необходимо поддерживать несколько продуктовых групп — каждая продуктовая группа может иметь свои требования к безопасности, график и цели.
- Обновления происходят по разным графикам — узлы в одной организации управляются полностью независимо от узлов в другой.
- У отдельных команд есть противоречивые потребности в объектах и типах объектов — пакеты данных, среды, роли и кулинарные книги уникальны для каждой организации, даже если они имеют одинаковое имя.
Разрешения
Разрешения используются в сервере Chef Infra для определения того, как пользователи и группы могут взаимодействовать с объектами на сервере. Разрешения настраиваются на уровне организации.
Разрешения на объекты
Сервер Chef Infra включает следующие разрешения на объекты:
| Разрешение | Описание |
|---|---|
| Удалить | Используйте разрешение Удалить для определения, какие пользователи и группы могут удалять объект. Это разрешение необходимо для любого пользователя, который использует аргумент knife [object] delete [object_name] для взаимодействия с объектами на сервере Chef Infra. |
| Предоставить | Используйте разрешение Предоставить для определения, какие пользователи и группы могут настраивать разрешения на объект. Это разрешение необходимо для любого пользователя, который настраивает разрешения с помощью вкладки Администрирование в консоли управления Chef. |
| Читать | Используйте разрешение Читать для определения, какие пользователи и группы могут просматривать подробности объекта. Это разрешение необходимо для любого пользователя, который использует аргумент knife [object] show [object_name] для взаимодействия с объектами на сервере Chef Infra. |
| Обновить | Используйте разрешение Обновить для определения, какие пользователи и группы могут редактировать подробности объекта. Это разрешение необходимо для любого пользователя, который использует аргумент knife [object] edit [object_name] для взаимодействия с объектами на сервере Chef Infra, и для любого клиента Chef Infra для сохранения данных узла на сервере Chef Infra по завершении работы клиента Chef Infra. |
Глобальные разрешения
Сервер Chef Infra включает следующие глобальные разрешения:
| Разрешение | Описание |
|---|---|
| Создать | Используйте глобальное разрешение Создать для определения, какие пользователи и группы могут создавать следующие типы объектов сервера: кулинарные книги, пакеты данных, среды, узлы, роли и метки. Это разрешение необходимо для любого пользователя, который использует аргумент knife [object] create для взаимодействия с объектами на сервере Chef Infra. |
| Список | Используйте глобальное разрешение Список для определения, какие пользователи и группы могут просматривать следующие типы объектов сервера: кулинарные книги, пакеты данных, среды, узлы, роли и метки. Это разрешение необходимо для любого пользователя, который использует аргумент knife [object] list для взаимодействия с объектами на сервере Chef Infra. |
Эти разрешения устанавливают стандартные разрешения для следующих типов объектов сервера Chef Infra: клиенты, кулинарные книги, пакеты данных, среды, группы, узлы, роли и песочницы.
Разрешения ключей клиентов
Примечание
Ключи должны иметь разрешения DELETE, GRANT, READ и UPDATE.
Используйте следующий код для установки правильных разрешений:
#!/usr/bin/env ruby
require 'chef/knife'
#previously knife.rb
Chef::Config.from_file(File.join(Chef::Knife.chef_config_dir, 'knife.rb'))
rest = Chef::ServerAPI.new(Chef::Config[:chef_server_url])
Chef::Node.list.each do |node|
%w(read update delete grant).each do |perm|
ace = rest.get("nodes/#{node[0]}/_acl")[perm]
ace['actors'] << node[0] unless ace['actors'].include?(node[0])
rest.put("nodes/#{node[0]}/_acl/#{perm}", perm => ace)
puts "Client \"#{node[0]}\" granted \"#{perm}\" access on node \"#{node[0]}\""
end
end
Сохраните его как скрипт Ruby — chef_server_permissions.rb, например, — в директории .chef/scripts в chef-repo, а затем выполните команду knife, аналогичную:
knife exec chef_server_permissions.rb
Knife ACL
Плагин knife knife-acl обеспечивает поэтапный подход к изменению разрешений путём обертывания вызовов API к точке _acl и упрощает управление такими изменениями разрешений.
Предупреждение
Chef Manage устарел и больше не развивается. Он поддерживается на установках Chef Automate до версии 1.8 и заменён на Chef Automate 2.0. Обратитесь к своему представителю по счёту Chef для получения информации об обновлении вашей системы. См. нашу документацию по Automate, чтобы узнать больше о Chef Automate 2.
Этот документ больше не поддерживается.
knife-acl и интерфейс браузера Chef Manage несовместимы. После использования knife-acl вам необходимо прекратить использование интерфейса браузера Chef Manage, из-за возможных несовместимостей.
Группы
Сервер Chef Infra включает следующие стандартные группы:
| Группа | Описание |
|---|---|
admins |
Группа admins определяет список пользователей, имеющих административные права на все объекты и типы объектов для одной организации. |
billing_admins |
Группа billing_admins определяет список пользователей, имеющих разрешение на управление информацией о платёжных данных. Это разрешение существует только для хостируемого сервера Chef Infra. |
clients |
Группа clients определяет список узлов, на которых установлен и находится под управлением Chef клиент Chef Infra Client. В общем случае, это разрешение можно рассматривать как «все нечеловеческие актеры — в подавляющем большинстве случаев клиент Chef Infra Client — получающие данные с сервера Chef и/или загружающие данные на сервер Chef». Новые экземпляры клиента Chef Infra Client автоматически добавляются в эту группу. |
public_key_read_access |
Группа public_key_read_access определяет, какие пользователи и клиенты имеют права чтения для связанных с ключами конечных точек в API сервера Chef Infra. |
users |
Группа users определяет список пользователей, использующих knife и консоль управления Chef для взаимодействия с объектами и типами объектов. В общем случае, это разрешение можно рассматривать как «все неадминистративные человеческие актеры, работающие с данными, загружаемыми на сервер Chef и/или загружаемыми с сервера Chef». |
Пример стандартных разрешений
В следующих разделах показаны стандартные разрешения, назначенные сервером Chef Infra для групп admins, billing_admins, clients, и users.
Примечание
create, delete, grant, read, и update для этого объекта.admins
Группе admins назначены следующие разрешения:
| Группа | Создать | Удалить | Предоставить | Читать | Изменить |
|---|---|---|---|---|---|
| admins | да | да | да | да | да |
| clients | да | да | да | да | да |
| users | да | да | да | да | да |
billing_admins
Группе billing_admins назначены следующие разрешения:
billing_admins
Группе billing_admins назначены следующие разрешения:
| Группа | Создать | Удалить | Читать | Изменить |
|---|---|---|---|---|
| billing_admins | нет | нет | да | да |
clients
Группе clients назначены следующие разрешения:
| Объект | Создать | Удалить | Читать | Изменить |
|---|---|---|---|---|
| clients | нет | нет | нет | нет |
| cookbooks | нет | нет | да | нет |
| cookbook_artifacts | нет | нет | да | нет |
| data | нет | нет | да | нет |
| environments | нет | нет | да | нет |
| nodes | да | нет | да | нет |
| organization | нет | нет | да | нет |
| policies | нет | нет | да | нет |
| policy_groups | нет | нет | да | нет |
| roles | нет | нет | да | нет |
| sandboxes | нет | нет | нет | нет |
Доступ к публичным ключам
Группа public_key_read_access контролирует, какие пользователи и клиенты имеют права на чтение для следующих конечных точек:
- GET /clients/CLIENT/keys
- GET /clients/CLIENT/keys/KEY
- GET /users/USER/keys
- GET /users/USER/keys/
По умолчанию, группа public_key_read_access предоставляет разрешения на чтение этих конечных точек всем членам групп users и clients:
| Группа | Создать | Удалить | Предоставить | Читать | Изменить |
|---|---|---|---|---|---|
| admins | нет | нет | нет | нет | нет |
| clients | да | да | да | да | да |
| users | да | да | да | да | да |
users
Группе users назначены следующие разрешения:
users
Группе users назначены следующие разрешения:
| Объект | Создать | Удалить | Читать | Изменить |
|---|---|---|---|---|
| clients | нет | да | да | нет |
| cookbooks | да | да | да | да |
| cookbook_artifacts | да | да | да | да |
| data | да | да | да | да |
| environments | да | да | да | да |
| nodes | да | да | да | да |
| organization | нет | нет | да | нет |
| policies | да | да | да | да |
| policy_groups | да | да | да | да |
| roles | да | да | да | да |
| sandboxes | да | нет | нет | нет |
chef-validator
Каждый запрос, отправляемый клиентом Chef Infra Client на сервер Chef Infra Server, должен быть аутентифицированным запросом, использующим API сервера Chef Infra Server и закрытый ключ. При отправке запроса клиентом Chef Infra Client на сервер Chef Infra Server, каждый запрос аутентифицируется клиентом Chef Infra Client с помощью закрытого ключа, расположенного в /etc/chef/client.pem.
После регистрации клиента Chef Infra Client на сервере Chef Infra Server, этот клиент добавляется в группу clients.
| Объект | Создать | Удалить | Читать | Изменить |
|---|---|---|---|---|
| clients | да | нет | нет | нет |
Группы задач Chef Push Jobs
Chef Push Jobs — это расширение сервера Chef Infra Server, которое позволяет запускать задачи на узлах независимо от выполнения клиента Chef Infra Client. Задача — это действие или команда, которая должна быть выполнена на подмножестве узлов; узлы, на которых выполняется задача, определяются результатами запроса поиска на сервере Chef Infra Server.
Chef Push Jobs использует API сервера Chef Infra Server и Ruby-клиент для инициирования всех подключений к серверу Chef Infra Server. Подключения используют ту же модель аутентификации и авторизации, что и любой другой запрос, направленный на сервер Chef Infra Server. Плагин knife используется для инициирования создания задач и отслеживания их выполнения.
Возможно запуск задач из клиента Chef Infra Client, например, изнутри рецепта, основанного на действии, которое должно быть определено по мере выполнения рецепта. Для того, чтобы клиент Chef Infra Client мог создавать, запускать или читать задачи, клиент Chef Infra Client, на котором настроен Chef Push Jobs, должен принадлежать к одной (или обеим) из следующих групп:
| Группа | Описание |
|---|---|
pushy_job_readers |
Используется для просмотра статуса задач. |
pushy_job_writers |
Используется для создания и запуска задач. |
Эти группы не существуют по умолчанию, даже после установки Chef Push Jobs на сервере Chef Infra Server. Если эти группы не созданы, только члены группы безопасности admin смогут создавать, запускать и просматривать задачи.
Администраторы сервера
Группа server-admins — это глобальная группа, которая предоставляет своим членам разрешение на создание, чтение, обновление и удаление учётных записей пользователей, за исключением суперпользователей. Группа server-admins полезна для пользователей, ответственных за ежедневное администрирование сервера Chef Infra Server, особенно для управления пользователями с помощью подкоманды knife user. Прежде чем добавить членов в группу server-admins , у них должна быть учётная запись пользователя на сервере Chef Infra Server.
Сценарий
На сервере Chef Infra Server существуют следующие учётные записи пользователей: pivotal (суперпользователь), alice, bob, carol, и dan. Выполните следующую команду для просмотра списка пользователей на сервере Chef Infra Server:
chef-server-ctl user-list
и она вернёт тот же список пользователей:
pivotal
alice
bob
carol
dan
Алиса — член команды ИТ, чьи обязанности включают ежедневное администрирование сервера Chef Infra Server, в частности, управление учётными записями пользователей сервера Chef Infra Server, используемыми остальной организацией. Из рабочей станции Алиса выполняет следующую команду:
knife user list -c ~/.chef/alice.rb
и получает следующую ошибку:
ERROR: You authenticated successfully to <chef_server_url> as alice
but you are not authorized for this action
Response: Missing read permission
Алиса не является суперпользователем и не имеет разрешений на других пользователей, так как учетные записи пользователей глобальны для организаций в Chef Infra Server. Добавим Алису в группу server-admins:
chef-server-ctl grant-server-admin-permissions alice
и получим следующий ответ:
User alice was added to server-admins.
Теперь Алиса может создавать, читать, обновлять и удалять учетные записи пользователей на Chef Infra Server, даже для организаций, членами которых она не является. С рабочей станции Алиса повторно выполняет следующую команду:
knife user list -c ~/.chef/alice.rb
которая теперь возвращает:
pivotal
alice
bob
carol
dan
Теперь Алиса является администратором сервера и может использовать следующие подкоманды knife для управления пользователями на Chef Infra Server:
knife user-createknife user-deleteknife user-editknife user-listknife user-show
Например, Алиса выполняет следующую команду:
knife user edit carol -c ~/.chef/alice.rb
и $EDITOR откроется, где Алиса внесёт изменения и сохранит их.
Суперпользовательские учётные записи
Суперпользовательские учётные записи могут не управляться пользователями, принадлежащими к группе server-admins. Например, Алиса пытается удалить суперпользовательскую учётную запись pivotal:
knife user delete pivotal -c ~/.chef/alice.rb
и возвращается следующая ошибка:
ERROR: You authenticated successfully to <chef_server_url> as user1
but you are not authorized for this action
Response: Missing read permission
Действие Алисы не авторизовано, даже при членстве в группе server-admins.
Управление группой server-admins
Членство в группе server-admins управляется набором подкоманд chef-server-ctl:
chef-server-ctl grant-server-admin-permissionschef-server-ctl list-server-adminschef-server-ctl remove-server-admin-permissions
Добавление членов
Подкоманда grant-server-admin-permissions используется для добавления пользователя в группу server-admins. Выполните команду один раз на каждого добавляемого пользователя.
У этой подкоманды следующий синтаксис:
chef-server-ctl grant-server-admin-permissions USER_NAME
где USER_NAME — пользователь, который будет добавлен в список администраторов сервера.
Например:
chef-server-ctl grant-server-admin-permissions bob
возвращает:
User bob was added to server-admins. This user can now list,
read, and create users (even for orgs they are not members of)
for this Chef Infra Server.
Удаление членов
Подкоманда remove-server-admin-permissions используется для удаления пользователя из группы server-admins. Выполните команду один раз на каждого удаляемого пользователя.
У этой подкоманды следующий синтаксис:
chef-server-ctl remove-server-admin-permissions USER_NAME
где USER_NAME — пользователь, который будет удален из списка администраторов сервера.
Например:
chef-server-ctl remove-server-admin-permissions bob
возвращает:
User bob was removed from server-admins. This user can no longer
list, read, and create users for this Chef Infra Server except for where
they have default permissions (such as within an org).
Список членства
Подкоманда list-server-admins используется для возврата списка пользователей, являющихся членами группы server-admins.
У этой подкоманды следующий синтаксис:
chef-server-ctl list-server-admins
и вернёт список пользователей, похожий на:
pivotal
alice
bob
carol
dan
Управление организациями
Используйте команды org-create, org-delete, org-list, org-show, org-user-add и org-user-remove для управления организациями.
org-create
Подкоманда org-create используется для создания организации. (Ключ валидации для организации возвращается в STDOUT при создании организации с помощью этой команды.)
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" (options)
где:
- Имя должно начинаться с маленькой буквы или цифры, содержать только маленькие буквы, цифры, дефисы и символы подчеркивания и иметь длину от 1 до 255 символов. Например:
chef. - Полное имя должно начинаться с символа, отличного от пробела, и иметь длину от 1 до 1023 символов. Например:
"Chef Software, Inc.".
Опции
У этой подкоманды следующие опции:
-
-a USER_NAME,--association_user USER_NAME Связывает пользователя с организацией и добавляет его в группы безопасности
adminsиbilling_admins.-
-f FILE_NAME,--filename FILE_NAME Записывает ORGANIZATION-validator.pem в
FILE_NAMEвместо вывода вSTDOUT.
org-delete
Подкоманда org-delete используется для удаления организации.
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-delete ORG_NAME
org-list
Подкоманда org-list используется для отображения всех организаций, присутствующих на Chef Infra Server.
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-list (options)
Опции
У этой подкоманды следующие опции:
-
-a,--all-orgs Отобразить все организации.
-
-w,--with-uri Отобразить соответствующие URI.
org-show
Подкоманда org-show используется для отображения подробностей организации.
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-show ORG_NAME
org-user-add
Подкоманда org-user-add используется для добавления пользователя в организацию.
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-user-add ORG_NAME USER_NAME (options)
Опции
У этой подкоманды следующие опции:
--adminДобавить пользователя в группу
admins.
org-user-remove
Подкоманда org-user-remove используется для удаления пользователя из организации.
Синтаксис
У этой подкоманды следующий синтаксис:
chef-server-ctl org-user-remove ORG_NAME USER_NAME (options)
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/server_orgs/