API каталога позволяет использовать управление доступом на основе ролей (RBAC) для управления доступом к функциям в вашем домене Google Workspace. Вы можете создавать пользовательские роли с привилегиями , чтобы более точно ограничивать доступ администратора, чем это предусмотрено в готовых ролях Google Workspace. Вы можете назначать роли пользователям или группам безопасности . В этом руководстве объясняется, как выполнять некоторые основные задачи, связанные с ролями.
Ниже приведён список распространённых терминов, используемых API каталога в отношении управления доступом на основе ролей (RBAC) в Google Workspace:
- Привилегия
- Разрешение, необходимое для выполнения задачи или операции в домене Google Workspace. Представлено ресурсом
Privilege. С этим ресурсом не связаны никакие постоянные данные. - Роль
- Набор привилегий, предоставляющих сущностям с данной ролью возможность выполнять определенные задачи или операции. Представлен ресурсом
Role. - Назначение ролей
- Запись о конкретной роли, присвоенной пользователю или группе. Представлена ресурсом
RoleAssignment. - Группа безопасности
- Тип группы облачной идентификации , используемый для управления доступом к ресурсам организации. Группы безопасности могут содержать как отдельных пользователей, так и группы.
Ограничения на роли и назначение ролей
Вы можете создать лишь ограниченное количество пользовательских ролей или назначений ролей, поэтому, если вы приближаетесь к лимиту, объедините или удалите их, чтобы остаться в пределах допустимого количества. Для ролей и назначений ролей действуют следующие ограничения:
- Вы можете создать до 750 пользовательских ролей для всей вашей организации.
- Вы можете создать до 1000 назначений ролей для каждой организационной единицы (OU), где корневая организация считается единицей. Например, вы можете назначить 600 ролей в корневой организации и 700 ролей в другой определенной вами организационной единице, например, в отделе компании. Все предварительно созданные роли администратора Google Workspace по умолчанию имеют область действия, охватывающую всю организацию. Узнайте больше об ограничениях на привилегии , которые можно назначить на уровне организационной единицы.
Для групп действуют следующие ограничения на роли и их назначение:
- Вы можете назначить любую роль, кроме роли суперадминистратора.
- В рамках всего организационного подразделения и в каждом отдельном подразделении можно назначить до 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учетной записи службы (как определено в разделе «Управление идентификацией и доступом (IAM)» ),roleId(как описано в разделе «Получение существующих ролей ») и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 пользователя, который можно получить с помощью 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'"
}