API каталога позволяет использовать управление доступом на основе ролей (RBAC) для управления доступом к функциям в вашем домене Google Workspace. Вы можете создавать пользовательские роли с привилегиями , которые будут ограничивать доступ администратора более точно, чем стандартные роли Google Workspace. Вы можете назначать роли пользователям или группам безопасности . В этом руководстве объясняется, как выполнять некоторые базовые задачи, связанные с ролями.
Ниже приведен список общих терминов, используемых Directory API в отношении RBAC в Google Workspace:
- Привилегия
- Разрешение, необходимое для выполнения задачи или операции в домене Google Workspace. Представлено ресурсом
Privilege
. С этим ресурсом не связаны постоянные данные. - Роль
- Набор привилегий, предоставляющий сущностям с этой ролью возможность выполнять определённые задачи или операции. Представлен ресурсом
Role
. - Назначение ролей
- Запись о конкретной роли, назначенной пользователю или группе. Представлена ресурсом
RoleAssignment
. - Группа безопасности
- Тип группы Cloud Identity , используемый для управления доступом к ресурсам организации. Группы безопасности могут включать как отдельных пользователей, так и группы.
Роли и ограничения на назначение ролей
Вы можете создать ограниченное количество пользовательских ролей или назначений ролей, поэтому, если вы приближаетесь к лимиту, объедините или удалите их, чтобы не превышать его. Роли и назначения ролей имеют следующие ограничения:
- Вы можете создать до 750 пользовательских ролей для всей вашей организации.
- Вы можете создать до 1000 назначений ролей для каждого организационного подразделения (OU), где корневая организация считается подразделением. Например, вы можете назначить 600 ролей в корневой организации и 700 ролей в другом определенном вами OU, например, в отделе компании. Все встроенные роли администраторов Google Workspace по умолчанию действуют в масштабах всей организации. Узнайте больше об ограничениях на привилегии , которые можно назначать на уровне OU.
Роли и назначение ролей имеют следующие ограничения для групп:
- Вы можете назначить любую роль, кроме Супер-администратора.
- Всего в организационном подразделении и в каждом организационном подразделении можно назначить до 250 ролей группам.
- Группа должна быть группой безопасности в вашей организации.
- Мы рекомендуем ограничить членство в группе только пользователями из вашей организации. Вы можете добавлять пользователей из-за пределов вашей организации, но они могут не получить привилегий этой роли. Подробнее см. в разделе «Ограничение членства в группе» . ### Назначение ролей группам
Если вам нужно назначить более 1000 ролей в организационном подразделении, вы можете добавить нескольких участников в группу безопасности и назначить ей роль. Назначение групповых ролей имеет некоторые дополнительные ограничения — подробную информацию см. в справочном центре администратора .
Сопоставление ролей и привилегий в консоли администратора Google
Чтобы назначить роли пользователям, получающим доступ к своим привилегиям через консоль администратора, может потребоваться предоставление некоторых дополнительных привилегий. Например, чтобы предоставить пользователю возможность создавать других пользователей через консоль администратора, требуется не только привилегия USERS_CREATE
, но также привилегии USERS_UPDATE
и ORGANIZATION_UNITS_RETRIEVE
. В следующей таблице представлены функциональные возможности консоли администратора и необходимые привилегии для управления пользователями и организационными подразделениями.
Функциональность консоли администратора | Необходимые привилегии |
---|---|
Организационные подразделения - Читать | ORGANIZATION_UNITS_RETRIEVE |
Организационные подразделения - Создать | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_CREATE |
Организационные подразделения - Обновление | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_UPDATE |
Организационные подразделения - Удалить | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_DELETE |
Организационные подразделения | ORGANIZATION_UNITS_ALL |
Пользователи - Читать | USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Создать | USERS_CREATE + USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Обновление | USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Перемещение пользователей | USERS_MOVE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Переименование пользователей | USERS_ALIAS + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Сброс пароля | USERS_RESET_PASSWORD + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи — принудительная смена пароля | USERS_FORCE_PASSWORD_CHANGE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи — добавление/удаление псевдонимов | USERS_ADD_NICKNAME + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Пользователи - Приостановить действия пользователей | USERS_SUSPEND + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
ГРУППЫ | GROUPS_ALL |
Безопасность — управление безопасностью пользователей | USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
Примеры использования
Прежде чем начать
Перед запуском примеров из этого руководства настройте аутентификацию и авторизацию .
Получить список привилегий домена
Чтобы получить постраничный список поддерживаемых привилегий в вашем домене, используйте метод privileges.list()
.
Если вы являетесь администратором и получаете привилегии в своем домене, используйте
my_customer
в качестве идентификатора клиента.Если вы являетесь реселлером, получающим привилегии для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией «Извлечь пользователя» .
Запрос
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles/ALL/privileges
Ответ
Успешный ответ возвращает код статуса HTTP 200. Вместе с кодом статуса ответ возвращает привилегии, поддерживаемые в домене:
{
"kind": "admin\#directory\#privileges",
"etag": ...,
"items": [
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "02afmg282jiquyg",
"privilegeName": "APP_ADMIN",
"isOuScopable": false
},
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "04f1mdlm0ki64aw",
"privilegeName": "MANAGE_USER_SETTINGS",
"isOuScopable": true,
"childPrivileges": [
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "04f1mdlm0ki64aw",
"privilegeName": "MANAGE_APPLICATION_SETTINGS",
"isOuScopable": true
}
]
},
...
]
}
Получить существующие роли
Чтобы получить список существующих ролей, используйте следующий запрос GET
и включите авторизацию, описанную в разделе Запросы на авторизацию .
Если вы являетесь администратором и получаете роли в своем домене, используйте
my_customer
в качестве идентификатора клиента.Если вы являетесь реселлером, получающим роли для клиента, используйте идентификатор клиента, полученный с помощью операции «Извлечь пользователя» .
Запрос
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает роли, существующие в домене:
{
"kind": "admin\#directory\#roles",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/DywA6_jaJCYw-f0lFs2-g17UWe8\"",
"items": [
{
"kind": "admin\#directory\#role",
"etag": ... ,
"roleId": "3894208461012993",
"roleName": "_SEED_ADMIN_ROLE",
"roleDescription": "Google Workspace Administrator Seed Role",
"rolePrivileges": [
{
"privilegeName": "SUPER_ADMIN",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "ROOT_APP_ADMIN",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "ADMIN_APIS_ALL",
"serviceId": "00haapch16h1ysv"
},
...
],
"isSystemRole": true,
"isSuperAdminRole": true
},
{
"kind": "admin\#directory\#role",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/bTXiZXfuK1NGr_f4paosCWXuHmw\"",
"roleId": "3894208461012994",
"roleName": "_GROUPS_ADMIN_ROLE",
"roleDescription": "Groups Administrator",
"rolePrivileges": [
{
"privilegeName": "CHANGE_USER_GROUP_MEMBERSHIP",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "USERS_RETRIEVE",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "GROUPS_ALL",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "ADMIN_DASHBOARD",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "ORGANIZATION_UNITS_RETRIEVE",
"serviceId": "00haapch16h1ysv"
}
],
"isSystemRole": true
},
...
]
}
Список всех назначений ролей
Чтобы получить постраничный список всех прямых назначений ролей, используйте метод roleAssignments.list()
. API может возвращать пустые результаты с токеном страницы, если задан параметр userKey
. Продолжайте постраничный просмотр до тех пор, пока не будет возвращён ни один токен страницы.
Если вы являетесь администратором и получаете назначения ролей в своем домене, используйте
my_customer
в качестве идентификатора клиента.Если вы являетесь реселлером, получающим назначения ролей для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией получения пользователя .
Запрос
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает все роли, назначенные в домене:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"user",
"scopeType:"CUSTOMER",
}
Перечислите все косвенные назначения ролей
Чтобы получить постраничный список всех назначений ролей, включая те, которые косвенно назначены пользователю из-за групп, к которым он принадлежит, используйте метод roleAssignments.list()
.
API может возвращать пустые результаты с токеном страницы. Продолжайте пагинацию до тех пор, пока не будет возвращён токен страницы.
Если вы являетесь администратором и получаете назначения ролей в своем домене, используйте
my_customer
в качестве идентификатора клиента.Если вы являетесь реселлером, получающим назначения ролей для одного из своих клиентов, используйте идентификатор клиента, возвращаемый операцией получения пользователя .
Замените
USER_KEY
значением, идентифицирующим пользователя в запросе API. Подробнее см. вusers.get
.
Запрос
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments?userKey=USER_KEY&includeIndirectRoleAssignments=true
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает все роли, назначенные в домене, а также тип assigneeType
: user
или group
:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"group",
"scopeType:"CUSTOMER",
}
Создать роль
Чтобы создать новую роль, используйте следующий запрос POST
и включите авторизацию, описанную в разделе «Авторизация запросов» . Добавьте privilegeName
и serviceId
для каждой привилегии, которая должна быть предоставлена с этой ролью. Свойства запроса и ответа см. в справочнике API .
Запрос
POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles { "roleName": "My New Role", "rolePrivileges": [ { "privilegeName": "USERS_ALL", "serviceId": "00haapch16h1ysv" }, { "privilegeName": "GROUPS_ALL", "serviceId": "00haapch16h1ysv" } ] }
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает свойства новой роли:
{
"kind": "admin\#directory\#role",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/uX9tXw0qyijC9nUKgCs08wo8aEM\"",
"roleId": "3894208461013031",
"roleName": "My New Role",
"rolePrivileges": [
{
"privilegeName": "GROUPS_ALL",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "USERS_ALL",
"serviceId": "00haapch16h1ysv"
}
]
}
Создать назначение роли
Чтобы назначить роль, используйте следующий метод POST
и включите авторизацию, описанную в разделе Запросы на авторизацию .
Чтобы назначить роль пользователю, добавьте тело JSON с
user_id
пользователя, который можно получить изusers.get()
,roleId
(как описано в разделе Получение существующих ролей ) иscope_type
.Чтобы назначить роль учетной записи службы, добавьте тело JSON с
unique_id
учетной записи службы (как определено в Identity and Access Management (IAM) ),roleId
(как описано в Get exist roles ) иscope_type
.Чтобы назначить роль группе, добавьте тело JSON с
group_id
группы, который можно получить изgroups.get()
,roleId
(как описано в разделе Получение существующих ролей ) иscope_type
.
Запрос
POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER" }
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает свойства для нового назначения роли:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId": "3894208461013211",
"roleId": "3894208461012995",
"assignedTo": "100662996240850794412",
"scopeType": "CUSTOMER"
}
Создайте назначение роли с условиями
Вы можете назначать роли для выполнения действий, соответствующих определённым условиям. В настоящее время поддерживаются только два условия:
- Применимо только к группам безопасности
- Не применимо к группам безопасности
Если задано condition
, оно вступит в силу только при соблюдении этого условия. Если condition
пустое, роль ( roleId
) применяется к субъекту ( assignedTo
) в области действия ( scopeType
) без каких-либо условий.
Чтобы назначить роль пользователю, используйте следующий метод POST и включите авторизацию, описанную в разделе Запросы на авторизацию .
Добавьте JSON-код с user_id
пользователя (user_id), который можно получить с помощью метода users.get() , roleId
, как описано в разделе Получение существующих ролей , и condition
). Обе строки условия необходимо использовать дословно, как показано ниже. Они работают только с предварительно созданными ролями администратора «Редактор групп» и «Читатель групп». Эти условия соответствуют синтаксису условий Cloud IAM .
Запрос
Применимо только к группам безопасности
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER", "condition": "api.getAttribute('cloudidentity.googleapis.com/groups.labels', []).hasAny(['groups.security']) && resource.type == 'cloudidentity.googleapis.com/Group'" }
Не применимо к группам безопасности
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER", "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels', []).hasAny(['groups.security']) && resource.type == 'cloudidentity.googleapis.com/Group'" }
Ответ
Успешный ответ возвращает код статуса HTTP 200
Вместе с кодом статуса ответ возвращает свойства для нового назначения роли:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId": "3894208461013211",
"roleId": "3894208461012995",
"assignedTo": "100662996240850794412",
"scopeType": "CUSTOMER",
"condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
[]).hasAny(['groups.security']) && resource.type ==
'cloudidentity.googleapis.com/Group'"
}